Learning Hub · 개념 배움터
이 배움터는 우리가 푸는 문제(69개 산업 시나리오 전망)의 다운사이즈 버전입니다. 3개 신산업(반도체·이차전지·신재생)만으로, 핵심 개념을 그림과 짧은 코드로 하나씩 익힙니다. 아래 미니 실습팩을 내려받아 python learn.py로 직접 확인할 수 있습니다.
AR(1): yt = φ·yt-1 + et. 산업 실질부가가치의 로그 수준은 대개 단위근(계속 성장·표류)이라, 우리는 로그 차분(성장률)으로 모형을 세운다. 차분하면 정상이 되기 때문이다. 아래 슬라이더로 φ를 바꿔 보라.
def adf_t(y, p=4): # Δy_t = a + ρ·y_{t-1} + ΣγΔy_{t-i} + e
# ρ의 t-통계량이 -2.9보다 더 음수면 "정상"(단위근 아님)
...
adf_t(logVA) # 수준: 0에 가까움 → 단위근(비정상)
adf_t(logVA.diff()) # 차분: 크게 음수 → 정상
산업 부가가치와 총량GDP가 장기균형을 이루면, 그 이탈(오차수정항 ECT)이 다음 기 성장을 되돌린다. 이것이 VECM의 근거다.
# Engle–Granger 2단계 resid = logVA_i - (b0 + b1*logGDP) adf_t(resid) # 정상이면 공적분 → ECT 사용(VECM)
ECTt-1 = logVAi,t-1 − logGDPt-1. VECM은 성장식에 이 항을 넣어 "장기균형으로의 복귀"를 반영한다. 우리 검정에서는 차분·VARX가 더 안정적이었지만, 공적분이 강한 경우 VECM이 유용하다.
Δy_t = c + A·Δy_{t-1} + γ·ECT_{t-1} + e_t
# γ<0 : 균형 이탈을 되돌림
각 산업 성장을 모든 산업의 과거 성장으로 회귀한다(자기+교차). 산업 간 파급을 담지만, 계수가 많아 과적합에 약하다 → 사전분포로 수축한다.
Yt = c + A1·Y_{t-1} + ... + e_t # Y=[반도체,이차전지,신재생] 성장
VAR에 외생변수 X를 더한다. BOKDPM이 만든 S1~S5 외생경로를 넣으면 산업별 시나리오 전망이 나온다. 외생이 없는 순수 VAR로는 시나리오 조건화가 불가능하다 — 그래서 우리는 VARX를 채택했다.
Yt = c + A·Y_{t-1} + B·X_t + e_t # X=외생 6종(유가·세계수요·실질금리·실질환율·고용·우리경기)
공적분이 있으면 차분만으로는 장기정보를 버리게 된다. VECM은 ECT를 넣어 이를 살린다. 외생을 더하면 VECMX. 우리 12옵션 격자에 함께 넣어 비교했다.
ΔYt = c + Γ·ΔY_{t-1} + α·(β'·Y_{t-1}) + e_t
(차분/수준/VECM) × (미네소타/산업연관표) × (VARX/VAR). 세 산업단위 모두 차분·산업연관표·VARX가 valid에서 가장 안정적이었다.
for 명세 in [차분,수준,VECM]:
for 사전 in [minnesota,io]:
for 외생 in [varx,var]:
RMSE(train, valid, test)
계수 사전분산을 자기 1차 시차는 크게, 교차·먼 시차는 작게(→0으로 수축) 둔다. 데이터가 강하게 말하면 그 방향으로, 아니면 0 근처에 머문다. 릿지 회귀와 통한다.
V(자기1차)=λ²/l² # 느슨 V(교차) =(λ²/l²)(σi²/σj²) # 더 수축 (l=시차, λ=전체수축)
미네소타는 모든 교차를 똑같이 수축한다. IO 사전은 생산유발계수(레온티에프 역행렬)로 연관 강도를 재서, 강하면 느슨·약하면 0으로 차등 수축한다. 반도체↔전자, 이차전지↔전기장비처럼 실제 연결을 반영한다.
V(교차) *= (연관강도_ij + 0.05) # 강한 쌍만 느슨, 약하면 0
모수 θ에 대해 사후 ∝ 우도 × 사전. 데이터가 많고 강하면 사후는 데이터 쪽으로, 적으면 사전 쪽으로 기운다. 미네소타·IO 사전이 바로 이 "사전 믿음"이고, VARX 계수는 그 사전을 데이터로 갱신한 사후다.
posterior(θ) ∝ likelihood(data | θ) × prior(θ)
마르코프 연쇄(직전 값에만 의존)를 사후분포가 정상분포가 되도록 설계해 오래 돌리면, 그 표본이 사후분포를 대표한다. 표본평균 ≈ 사후평균.
chain=[]; θ=시작값
for i in range(N):
θ = 다음_표본(θ) # 사후를 정상분포로 갖는 전이
chain.append(θ)
posterior_mean ≈ mean(chain[burnin:])
수용확률 min(1, 사후(후보)/사후(현재)). 이 간단한 규칙만으로 표본이 사후분포로 수렴한다. 아래에서 반도체 성장률 평균 μ의 사후를 MH로 추정해 보라 — 해석적 값과 일치한다.
cand = θ + 정규난수(0, step)
if log(rand()) < logpost(cand) - logpost(θ):
θ = cand # 수용 (아니면 현재값 유지)
learn.py로 재현됩니다(numpy·pandas만 필요). ·
더 나아가기: VAR·VARX 모형 · 논문 3(69산업) · 시나리오 대시보드