기본 콘텐츠로 건너뛰기

4월, 2022의 게시물 표시

[ML] 결정트리(Decision Tree) 모델

[python] str과 repr

str과 repr 내용 str(), repr() __str__, __repr__ str(), repr() 파이썬 내장함수 str()과 repr() 함수는 문자열을 반환합니다. a='python' str(a) 'python' repr(a) "'python'" 위와 같이 두 함수의 결과는 같지만 repr(a)는 결과는 따옴표 내에 포함된 형태입니다. 이것은 결과를 재사용할 수 있는 객체임을 나타냅니다. 결과를 평가하기 위한 내장함수인 eval()을 사용하여 위 두 함수의 차이를 명확히 해 봅니다. b=str(a) eval(b) NameError: name 'python' is not defined" print(b) python str()의 결과는 평가되지 않은 상태입니다. 그러나 print() 에 의한 출력은 가능합니다. 다시말하면 이 함수에 의한 결과는 객체가 아닌 단순히 결과의 출력입니다. 이에 반해 유사한 결과를 나타내는 repr()은 평가된 결과를 반환합니다. c=repr(a) eval(c) 'python' 내장함수 repr()에 의한 결과는 평가 가능한 객체로서 다시 재사용이 가능합니다. 이 내장함수들은 내장 메소드(매직 메소드)인 __str__과 __repr__로 클래스에 적용할 수 있습니다. __str__, __repr__ 다음 클래스 Book1에는 초기값을 전달하는 매직메서드 __init__ 만을 포함하고 있습니다. 이 경우는 클래스 인스턴스 자체는 평가되지 않은 상태로서 다음과 같이 속성을 호출할 경우만 결과를 반환합니다. class Book1: def __init__(self, kind, vol): self.kind=kind self.vol=vol book1=Book1('소설', 300) book1 <__main__.Book1 at

[python] 데코레이터(Decorator, 장식자)

장식자(Decorator) 함수는 일급 객체 이므로 다른 함수에 인수로 전달될 수 있습니다. 이 방식으로 인수로 전달된 함수의 결과는 더 자세한 정보를 첨가시키는 등의 수정을 일으킬 수 있습니다. 다음 함수 dol2won 은 달러를 원화로 전환하는 것으로 달러와 환율을 인수로 받습니다. 다음의 결과와 같이 결과는 단순히 숫자로 반화됩니다. def dol2won(dol, wpd): return dol*wpd dol2won(3, 1200) 3600 다음 deco() 는 중첩함수 를 포함하는 함수로 클로저(closure) 입니다. 이 함수의 인수는 다른 함수이며 중첩함수는 인수로 전달된 함수를 사용합니다. def deco(fn): def wrapper(*args, **kwargs): result=fn(*args, **kwargs) return f'{result} 원' return wrapper 그림 1은 함수 deco() 의 실행 순서를 나타낸 것입니다. 함수 deco() 실행과 동시에 중첩함수를 호출합니다. 이 함수의 인수는 내부에 정의되지 않으므로 외부에서 전달해야 합니다. 즉, 클로저 입니다. 실행된 중첩함수는 인수로 전달된 함수를 적용하여 결과를 반환합니다. 그림 1. 함수 deco()의 실행 순서. dwon=deco(dol2won) dwon(3, 1200) '3600 원' 위 결과는 함수 dol2won() 함수의 결과와 같지만 단위를 표시하는 것으로 수정되었습니다. 파이썬에서는 다음과 같이 코딩하여 같은 결과를 반환할 수 있습니다. @deco def dol2won(dol, wpd): return dol*wpd dol2won(1000, 1200) '1200000 원' 위 코딩은 함수 위에 @함수 를 첨가합니다. 이것은 함수가 @함수 의 인수로 전달된다는 것을 의미합니다. @ 과 함께 첨가된 함수

[python] 클로저(Closure)

클로저(Closure) 다음 코드의 함수 first() 는 중첩함수 인 increse() 를 포함하는 외곽함수입니다. def first(x):     #(1) def increase(y):  #(3) return (x+y)   #(4) return increase(x) #(2) first(1) 2 위 코드에서 두 개의 변수 x 와 y 는 각각 비지역변수 그리고 지역변수가 됩니다. 이 함수의 동작과정은 다음과 같습니다. first 함수에 인수 x 값 전달 본문에서 중첩함수를 사용할 동인이 없으므로 바로 return() 함수를 실행 인수 x 에 1을 전달하면서 중첩함수 increase() 호출 중첩함수에 전달된 인수 x 는 지역변수 y값이 됩니다. 그러므로 x 와 y 모두 1이 됩니다. increase() 함수 실행으로 비지역변수( x )와 지역변수( y )의 합을 실행 사실 위 함수는 x 의 선언에 의해 y 가 결정되는 구조로 다음과 같이 간단히 작성할 수 있습니다. def first0(x): return (x+x) first0(1) 2 위와 같이 지역변수가 비지역변수에 의해 결정되는 구조에서는 중첩함수에 인수를 독립적으로 전달 또는 변경할 수 없습니다. 이것은 중첩함수의 인수가 외부함수 내부에서 선언되고 그 인수가 외부함수의 인수에 좌우되기 때문입니다. 대신에 비지역과 지역 변수가 외부함수의 호출과 함께 동시에 전달된다면 이 두 변수 값들은 독립적으로 사용될 수 있습니다. 그러나 함수 first()에 전달할 인수가 1개이므로 first()함수 구조로 중첩함수 increase() 내의 인수를 독립적으로 적용할 수 없습니다. 대신에 다음에 정의한 first1() 함수의 경우 중첩함수의 인수를 독립적으로 사용할 수 있습니다. def first1(x): def increase(y): return (x+y) return increase

람다함수(Lambda Function)

함수 관련내용 함수(Function): 함수의 정의 전역변수와 지역변수 함수: 인수의 전달 가변인수 발생자(generator) 주요한 내장함수들 재귀함수(Recursive Function) 람다함수(Lambda Function) Python의 함수는 1급(First Class)객체 1급 객체와 변수의 영역 클로저(Closure) 데코레이터(Decorator, 장식자) 람다함수(Lambda function) 함수를 작성하기 위해 키워드 def 를 사용할 경우 반드시 함수의 이름을 선언해야 합니다. 이에 반해 특정한 이름의 선언 없이 함수를 작성할 수 있습니다. 이러한 함수를 익명함수(anonymous functions) 라고 하며 키워드 lambda 를 사용하여 식 1과 같이 정의할 수 있습니다. 예를 들어, 다음은 덧셈을 수행하는 간단한 람다 함수를 정의하는 방법입니다. lambda 인자: 표현식 (식 1)  • lambda: 익명함수 작성을 위한 키워드  • 인수: 변수  • 표현식: 결과를 반환하는 식 add=lambda x, y:x+y add(5, 4) 9 위 코드에서 lambda 함수를 add 라는 이름 객체에 할당한 것으로 괄호 연산자를 사용하여 각 인수에 값을 전달하였습니다. 물론 다음 코드와 같이 객체 이름을 사용하는 대신 함수자체에 인수를 전달할 수 있습니다. (lambda x, y:x+y)(5, 4) 9 위 익명함수를 def 를 사용하여 작성하면 다음과 같습니다. def add1(x, y): return x+y add1(5, 4) 9 def 를 사용하여 정의하는 함수는 결과를 출력하기 위해 return(), print() 함수를 사용합니다. 그러나 람다함수의 본문은 표현식(expression) 으로 구성되어 있으므로 결과의 반환이나 출력을 위한 별도의 도구가 필요하지 않습니다. 이

[python] 중첩함수(Nested function)와 비지역변수

중첩함수(Nested function)와 비지역변수 함수는 일급객체(First Class Object) 이므로 다음과 같이 사용되는 다른 함수에 인수로 전달 할 수 있습니다. def expNum(x, y): return(x**y) def addExp(func, x, y): return(func(x, y)+x+y) x, y= 2, 3 addExp(expNum, x, y) 13 위 코드의 addExp() 는 다른 함수를 인수로 사용하는 함수입니다. 다음 코드에서 작성한 함수 addExp1() 은 위에서 인수로 전달받는 함수를 함수 내부에 포함하는 방식으로 작성한 것으로 같은 결과를 나타냅니다. def addExp1(x, y): re=expNum(x, y) return(re+x+y) addExp1(x, y) 13 위 코드에서 함수 addExp1() 와 같이 함수 내부에 포함된 함수를 중첩함수(nested function) 라고 합니다. 변수는 선언되는 위치에 따라 전역변수(global variable)와 지역변수(local variable) 로 구분합니다. 이러한 구분은 각 변수의 작동영역이 제한되기 때문입니다. 중첩함수 내부에 선언된 변수는 그 내부에서만 작동합니다. 이 경우 이 변수가 지역변수가 되지만 그 외 부분에서 선언된 변수는 모두 전역변수가 될수는 없습니다. 이렇게 중접함수를 포함하는 계층적 구조를 가지는 함수의 경우 그림 1과 같이 구분합니다. 즉, 가장 내부에 포함된 함수의 변수는 지역변수가 되며 그 변수의 영역의 바깥 부분에 존재하는 변수는 비지역변수(nonlocal variable) 가 됩니다. 또한 블럭에 상관없이 모든 부분에서 사용가능한 변수를 전역변수라고 할 수 있습니다. 그러므로 비지역변수는 지역변수와 전역변수 사이에 위치하는 모든 변수를 통칭합니다. 그림 1. greeting() 함수에서 선언된 변수들의 범위. 다음 코드에서 함수 greeting() 는 중첩 함수인

[python] 밑줄과 내장메소드(Underscores & Built-in method)

밑줄과 내장 메소드(Underscores & Built-in method) 내요 밑줄의 유형 단일 선행 밑줄(Single leading underscore) 이중 선행 밑줄(double leading underscore) 이중 선행 및 후행 밑줄(Double leading and trailing underscore), 내장메서드 단일 밑줄(single underscore) 밑줄의 유형 단일 및 이중 밑줄(" _, __ ")은 일부는 단지 관례적으로 사용되지만 클래스를 초기화시키기 위해 적용되는 내장 메서드인 생성자 __init__() 와 같이 일부는 파이썬 변수 및 메서드에 첨가하여 특정한 의미를 부여합니다. 대략적으로 다음과 같이 분류할 수 있습니다. 단일 선행 밑줄: _var 변수 또는 메서드가 내부 사용을 위한 것임을 나타내는 규칙 단일 선행밑줄의 객체를 와일드카드(*)로 호출할 경우를 제외하고 실행상 차이는 없음 단일 후행 밑줄: var_ 후행 밑줄(접미사)은 규칙에 따라 파이썬 키워드와의 이름 충돌을 피하기 위해 사용됩니다. 이중 선행 밑줄: __var 작동영역을 한정시킴 이중 선행 및 후행 밑줄: __var__ 파이썬 클래스에 공통적으로 사용되는 내장 메소드(매직 메소드)를 나타내기 위한 명명 규칙 단일 밑줄:_ 임시 또는 중요하지 않은 변수를 나타낼 경우 사용되는 명명규칙 단일 선행 밑줄(Single leading underscore) 변수 및 메서드 이름과 관련하여 단일 밑줄 접두사는 관례적으로 사용하는 것으로 프로그램의 동작에는 영향을 미치지 않습니다. 다시 말해 단일 밑줄로 시작하는 변수 또는 메서드는 내부 사용을 위한 것임을 암시하기 위해 사용합니다. 파이썬은 Java와 같이 "개인" 변수와 "공용" 변수를 크게 구분하지 않기 때문에 실행 상 어떤 변화를 나타내지 않습니다. class test:

with 문과 컨텍스트 관리자(Context managers)

context managers와 with statement Python의 with 문은 깨끗하고 읽기 쉬운 Python 코드를 작성하는 데 도움이 될 수 있는 구문입니다. 특성(변수)을 추상화하고 팩토링하여 재사용할 수 있도록 하여 일부 일반적인 리소스(resource) 관리 패턴을 단순화하는 데 도움이 됩니다. 이 구문으로 기본 구조는 식 1과 같습니다. with 객체 as 별칭: 내 용 (식 1) 위 with 문 은 객체에 대한 하위코드(들)를 내용으로 포함하는 블럭을 형성하며 하위코드에서 객체의 이름을 대신할 별칭(alias)을 키워드 as 를 사용하여 정의할 수 있습니다. 이것은 그 객체의 동작과 변화들을 그룹화하기 때문에 객체의 관리를 단순화 하는 데 유리하며 코드의 가독성의 개선에 도움이 됩니다. 다음 코드는 파이썬 인터프리터에서 파일을 호출하고 작성하는 메소드들을 사용합니다( 파일 운용(File Operation) 참조 ). 다음 코드는 텍스트 파일을 호출하고 내용을 작성하기 위해 with 문 과 파일을 여는 내장함수인 open(파일, 'w') 을 사용한 것입니다. with open('test.txt', 'w') as f: f.write('Hello, World!') with문을 사용하지 않을 경우 동일한 결과를 위한 코드는 다음과 같습니다. f=open('test.txt','w') f.write('Hellow, World!') f.close() 위 코드는 f.write() 함수에 예외가 발생할 경우 f.close()함수는 실행되지 않습니다. 즉 파일이 열린 상태에서 더 이상의 명령은 작동되지 않습니다. 이를 예방하기 위해 try문 을 적용할 수 있습니다. f=open('test.txt', 'w') try: f.write('Hellow, World!')

[python] 객체(Object)와 참조(Reference)

객체(Object)와 참조(Reference) 객체(Object) 다음 코드 ①은 단순히 숫자를 입력한 것입니다. 3  # ① 3 그러나 코드 ①로 생성된 3은 실행 후에 다시 호출할 수 없습니다. 반면에 다음 코드 ②는 할당 연산자 ' = '를 사용하여 왼쪽의 이름에 오른쪽의 값을 할당한 것으로 3을 호출할 수 있는 이름이 존재합니다. 즉, x를 사용하여 3을 호출할 수 있습니다. 특정한 동작을 일으키는 기호를 연산자(operator)라고 하며 등호(=)의 경우 오른쪽의 값을 왼쪽에 할당한다는 의미로 할당연산자(assignment operator) 라고 합니다. x=3 #② x 3 코드 ③은 코드 ②값과 다른 값의 합의 결과를 y에 할당한 것입니다. y=x+7 #③ y 10 위 코드 ①과 ②의 차이는 코드 ③에서와 같이 재사용 여부에 있습니다. 즉, '3'이라는 숫자에 이름을 부여하여 재사용 할 수 있습니다. 이와 같이 파이썬 코드에 의해 생성되어 저장된 상태로 재사용이 가능한 대상을 객체(object) 라고 합니다. 즉, 다음 그림 1과 같이 객체는 저장된 데이터를 가리키는 이름과 연결된 상태(참조상태)입니다. 위 코드 ②의 할당 과정은 메모리에 저장된 3이라는 숫자에 이름 x를 부여한 것이라고 할 수 있습니다. 자세히 소개하면 x와 3의 저장 위치는 다르며 x는 값 3의 저장 위치값을 가지고 있습니다. 그러므로 연산자 "="는 왼쪽과 오른쪽이 같다는 의미가 아니고 오른쪽 값을 왼쪽에 할당한다것을 의미합니다. 단순하게 생각하면 파이썬은 메모리를 두 종류로 구분하여 사용합니다. 하나는 실제 데이터들이 저장되는 공간이고 다른 하나는 코드 ②와 ③같이 부여된 이름들을 저장하는 이름공간(namespace) 입니다. 그림 1과 같이 코드 ②의 이름 x는 이름공간에 위치하며 데이터 공간의 값 3과 연결(binding)되는 것으로 이 관계를 참조(reference) 라고 표시 합니다. 결과적으

자동미분(Autograd)

내용 torch.autograd requires_grad 설정 변화도(Gradient) 계산하기 변화도 추적 멈추기 자동미분(Autograd) torch.autograd 신경망은 설정한 층들을 통과하면서 feature와 label의 관계를 적합하게 설명하는 모델을 구축합니다. 이 과정을 학습(train)이라고 하며 이 학습은 다음과 같이 두 단계로 구성됩니다. $$X \rightarrow \left(\begin{aligned}\color{blue}{W\cdot x+b \rightarrow \hat{y}(\text{forward})}\\\uparrow \qquad\qquad \qquad \downarrow\\\color{red}{\frac{dw}{dx}, \frac{db}{dx}(\text{backward})}\end{aligned} \right)\rightarrow \hat{Y}$$ 위 식에서 W, b는 각각 가중치와 편향입니다. 위의 역전파(backward) 단계서는 순전파(forward)에서 생성된 가중치와 편향에 의한 추정치 $\hat{y}$와 실제값인 label(Y)와의 오차(error)를 계산하고 그 값에 대한 가중치와 편향을 평가(변화도, 미분)하여 그 매개변수(W, b)를 조절합니다. 이 조절을 매개변수의 업데이트(update)라고 하며 그 차이가 최소 또한 변화가 없을 수준까지 이 과정은 반복합니다. 이 과정은 최적화(optimization)라고 하며 그 결과가 최종의 모델이 됩니다. pytorch에서 torch.autograd 는 역전파시 실행되는 미분과정을 담당하는 자동미분엔진입니다. autograd는 데이터(텐서)의 실행된 모든 연산들(연산 결과가 새로운 텐서인 경우도 포함하여)의 기록을 Function 객체로 구성된 방향성 비순환 그래프(DAG; Directed Acyclic Graph)에 저장(keep)합니다. 그림 1과 같이 방향성 비순환 그래프

참고할만한 지수들

내용 발틱운임지수(BDI: Baltic Dry Index) 이마트 지수 참고할만한 지수들 발틱운임지수(BDI: Baltic Dry Index) 석탄, 철광석, 시멘트, 곡물 등 원자재를 싣고 26개 주요해상운송경로를 지나는 선적량 15천 톤 이상 선박의 화물운임과 용선료등을 종합하여 산정하는 지수로, 배들이 원자재를 '얼마나 자주' 돌아다니는 지를 알려주는 지표 운반하는 품목들이 생산의 기초 원재료이므로 이 배들이 활발히 움직인다는것은 원자재에 대한 수요가 높아지고 있다는 것으로 생산이 활발하게 이루어지고 있다는 의미가 된다. 그러므로BDI는 경기선행지표의 역활을 합니다. 원재료 수요가 증가하면 교역량이 증가하고 선박의 운송비용이 올라 BDI가 높아지는데, 그만큼의 물류를 운반할 배가 많이 필요하다는 것으로 해운업과 조선업의 주가는 뛰게 됩니다. 1985년 1월 4일을 기준(1000)으로 그 움직임을 관찰하는데BDI가 높으면 경제가 활발하게 움직이고 낮아지면 반대로 해석이 가능합니다. BDI는 한국관세물류협회(https://www.kcla.kr/web/inc/html/4-1_5.asp)에서 HTML 겁사기로 부터 파싱한 것입니다. import numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt import matplotlib.dates as mdates import matplotlib.cbook as cbook mpl.rcParams["font.family"]="nanumgothic" mpl.rcParams["font.weight"]="bold" mpl.rcParams["font.size"]=11 data=pd.read_excel("---.xlsx", sheet_name=&qu

심리지수

심리지수 소비자 심리지수(Consumer Sentiment Index) 한국은행에서 실시하는 소비동향조사를 기초로 현재생활형편CSI, 생활형편전망CSI, 가계수입전망CSI, 소비지출전망CSI, 현재경기판단 CSI, 향후경기판단 CSI 등 6개 주요개별지수의 평균값과 표준편차를 이용하여 합성해 만든 종합지수로서 소비자들이 경기상황을 어떻게 받아들이는지를 종합적으로 나타내줍니다. 소비자심리지수는 지수자체의 증감 뿐만 아니라 기준치(100)을 대한 변동이 중요합니다. 100이상이면 앞을 생활형편이나 경기, 수입 등이 좋아질 것으로 보는 사람들이 많다는 의미이고, 미만이면 그 반대를 나타냅니다. 제조업업황실적BSI 경기동향에 대한 기업가들의 판단 및 예측과 계획의 변화 추이를 관찰하여 지수화한 지표로 기업들의 응답결고들에 대한 평균값을 0(매우악화)~200(매우호조)의 범위로 환산. 100이면 전분기 대비 변화없음, 100이상이면 전분기 대비 호전, 작으면 악화를 의미 가계는 소득이 올라가면 소비를 늘릴 것이고 이는 기업실적을 올리는 역할을 할 것입니다. 또한 기업은 실적의 상승은 고용을 증가시킬 것이고 따라서 가계의 소득은 더욱 늘어날 것이다. 바로 경제의 선순환과정이 일어나는 모습입니다. 다음 자료는 한국은행경제통계시스템 에서 취합한 것입니다. import numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt mpl.rcParams["font.family"]="nanumgothic" mpl.rcParams["font.weight"]="bold" mpl.rcParams["font.size"]=11 data=pd.read_excel("경기지수.xlsx", sheet_name="data"

경기종합지수

내용 경기선행지수 동행종합지수 후행종합지수 전년동월비 동행지수 순환변동치 경기종합지수 경기:살림살이의 상태, 즉 경제상황을 의미 전반적인 경기 동향을 쉽게 파악, 예측하고자 주요 경제지표 움직임을 종합해서 지수로 나타낸 것임. CI(Composite index)라고 함 생산·투자·소비·고용·금융·무역 등 결제의 각 부문 지표 중 민감하게 경기에 반영하는 주요 경제지표를 선정하고 이후 이 지표들의 전월 대비 증감률을 가중평균하여 작성함 전월대비 상승은 경기상승, 감소의 경우는 경기하락 지수 값은 기준시점 2005년의 숫자를 100으로 지정하여 환산 1983년 3월 부터 통계청에서 매달 발표 경기선행지수, 경기동행지수, 경기후행지수로 구분 일반적으로 경기선행지수가 상승하면 3~10개월 정도 후에 경기동행지수가 상승하고 실제 경기도 상승 경기선행지수 일반적으로 3~4 달간의 선행지수가 꾸준히 상승한 경우 몇달 후에 경기 상승 예측 가능 구성요소: 재고순환지표(%p), 경제심리지수, 기계류내수출하자수(선박제외), 건설수주액, 수출입물가비율, 코스피, 장단기 금리파 재고순환지표: 기업은 경기의 좋고 나쁨에 효율적으로 대응하고자 재고를 비축하거나 처분하는 과정에서 생산을 조정하기 떄문에 재고수준의 변동은 단기적인 경기 순환을 나타내는 중요한 기표로 인식됩니다. 출하(판매)증가율에서 재고증가율을 뺀 것으로 경기호황일 때는 출하증가율 > 재고증가율, 반대인 경우는 경기불황 경제심리지수: 기업과 소비자 모두를 포함한 민간의 결제상황에 대한 심리를 종합적으로 파악하고 결기판단을 위한 유용한 경제정보로 활용하는 것을 목적으로 합니다. 기업경기실사지수(BSI)와 소비자동향지수(CSI)를 합성하여 작성. 장기평균 100을 중심으로 표준편차가 10이 되도록 작성, 100이상이면 경제심리가 과거보다 좋은 쪽, 반대이

금융의 역활과 금융지표

내용 경제의 순환과 금융 국민경제의 순환 경제의 순환과 금융 금융의 기능 주요 금융지표 금리 환율 주가 금융의 역활과 주요 금융지표 경제의 순환과 금융 국민경제의 순환 경제활동: 경제 주체들이 재화와 서비스를 생산하고 분배하고 지출하는 활동 경제주체 가계, 기업, 정부 등 재화 의복, 식료품, 주택 등 물질적 형태를 가진 상품 서비스 교육, 문화, 관광 등 형태가 없는 사람의 노력과 도소매, 운수, 통신, 공무 등 비물질 생산에 기여하는 행위 기업 재화와 서비스를 생산하는 주된 주체 노동력, 자본 등의 생산요소가 필요 가계 생산을 통해 벌어들인 소득을 가계에 배분, 근로자에게는 임금, 급여 등의 형태, 자본자에게는 이자, 배당금, 임대료 등의 형태 재화와 서비스를 소비하기 위한 지출 정부 소득과 부에 대해 소득세, 재산세, 법인세 등의 형태로 정부에 납부 납부된 자금 중 일부는 정부보조금, 수혜금의 형태로 가계에 이전 세금을 이용하여 행정, 국방 등의 서비스를 제공하거나 도로, 항만, 공항, 철도 등 공공인프라 건설 및 유지에 지출 국민경제활동은 기업, 가계, 정부가 개별적이 아닌 유기적으로 구성됩니다. 즉, 생산에서 분배로, 분배에서 지출로, 지출에서 생사으로 이어지면 순환을 하게 됩니다. 기업이 상품 생산을 위해서는 충분한 수요가 존재해야 하며 가계와 정부가 상품등을 수요하기 우히ㅐ서는 지출을 위한 충분한 소득이 있어야 합니다. 생산, 분배, 지출은 국내 뿐 아니라 해외 부문에서도 이루어지며 특히 우리나라와 같은 개방경제에서는 해외부문의 역할이 큽니다. 경기순환 경기는 확장국면과 수축국면의 거치면서 순환을 하게