Learning Hub · 개념 배움터

단위근부터 베이지언 VARX까지 — 개념 배움터

이 배움터는 우리가 푸는 문제(69개 산업 시나리오 전망)의 다운사이즈 버전입니다. 3개 신산업(반도체·이차전지·신재생)만으로, 핵심 개념을 그림과 짧은 코드로 하나씩 익힙니다. 아래 미니 실습팩을 내려받아 python learn.py로 직접 확인할 수 있습니다.

미니 실습팩 (데이터 + 프로그램)
mini_va.csv · mini_exog.csv · learn.py — 단위근·공적분·VAR·VARX·미네소타·MH를 numpy+pandas만으로. CSV는 UTF-8(BOM).
⬇ learn-lab.zip
시계열 기초
단위근 · Unit Root

계속 떠도는 계열 vs 제자리로 돌아오는 계열

직관: φ=1이면 충격이 영원히 남아 값이 표류한다(단위근·비정상). φ<1이면 평균으로 되돌아온다(정상).

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())  # 차분: 크게 음수    → 정상
공적분 · Cointegration

둘 다 떠돌지만, 나란히 떠돈다면?

직관: 각각은 비정상인데 둘의 차이(잔차)가 정상이면, 장기적으로 붙어 다닌다 = 공적분.

산업 부가가치와 총량GDP가 장기균형을 이루면, 그 이탈(오차수정항 ECT)이 다음 기 성장을 되돌린다. 이것이 VECM의 근거다.

산업GDP둘의 간격(ECT)이 일정 → 공적분
# Engle–Granger 2단계
resid = logVA_i - (b0 + b1*logGDP)
adf_t(resid)   # 정상이면 공적분 → ECT 사용(VECM)
ECT

오차수정항

직관: 장기균형에서 벗어난 만큼, 다음 기에 되돌아온다.

ECTt-1 = logVAi,t-1 − logGDPt-1. VECM은 성장식에 이 항을 넣어 "장기균형으로의 복귀"를 반영한다. 우리 검정에서는 차분·VARX가 더 안정적이었지만, 공적분이 강한 경우 VECM이 유용하다.

Δy_t = c + A·Δy_{t-1} + γ·ECT_{t-1} + e_t
#            γ<0 : 균형 이탈을 되돌림
다변량 모형
VAR

서로의 과거로 서로를 설명

직관: 반도체·이차전지·신재생이 서로의 지난 분기에 영향을 준다.

각 산업 성장을 모든 산업의 과거 성장으로 회귀한다(자기+교차). 산업 간 파급을 담지만, 계수가 많아 과적합에 약하다 → 사전분포로 수축한다.

반도체이차전지신재생
Yt = c + A1·Y_{t-1} + ... + e_t   # Y=[반도체,이차전지,신재생] 성장
VARX

바깥 조건(외생)을 함께

직관: 유가·세계수요·실질금리·실질환율·고용·우리경기을 밖에서 넣어야 시나리오 전망이 된다.

VAR에 외생변수 X를 더한다. BOKDPM이 만든 S1~S5 외생경로를 넣으면 산업별 시나리오 전망이 나온다. 외생이 없는 순수 VAR로는 시나리오 조건화가 불가능하다 — 그래서 우리는 VARX를 채택했다.

Yt = c + A·Y_{t-1} + B·X_t + e_t   # X=외생 6종(유가·세계수요·실질금리·실질환율·고용·우리경기)
VECM

차분 + 균형 복귀

직관: 성장(차분)을 모형화하되, 장기균형 이탈(ECT)도 되돌린다.

공적분이 있으면 차분만으로는 장기정보를 버리게 된다. VECM은 ECT를 넣어 이를 살린다. 외생을 더하면 VECMX. 우리 12옵션 격자에 함께 넣어 비교했다.

ΔYt = c + Γ·ΔY_{t-1} + α·(β'·Y_{t-1}) + e_t
12옵션 격자

무엇을 고를까 — 실측으로 비교

직관: 3×2×2 = 12개 조합을 train/valid/test로 실제 견줘 고른다.

(차분/수준/VECM) × (미네소타/산업연관표) × (VARX/VAR). 세 산업단위 모두 차분·산업연관표·VARX가 valid에서 가장 안정적이었다.

for 명세 in [차분,수준,VECM]:
  for 사전 in [minnesota,io]:
    for 외생 in [varx,var]:
       RMSE(train, valid, test)
수축 사전분포 (과적합을 막는 규제)
미네소타 사전 · Minnesota

자기 시차는 살리고, 교차·먼 시차는 0으로

직관: "각 산업은 대체로 자기 자신의 어제를 닮는다"는 믿음을 사전으로 넣는다.

계수 사전분산을 자기 1차 시차는 크게, 교차·먼 시차는 작게(→0으로 수축) 둔다. 데이터가 강하게 말하면 그 방향으로, 아니면 0 근처에 머문다. 릿지 회귀와 통한다.

자기1차(느슨)교차(수축)먼시차(강수축)진할수록자유롭게 추정
V(자기1차)=λ²/l²           # 느슨
V(교차)   =(λ²/l²)(σi²/σj²) # 더 수축  (l=시차, λ=전체수축)
산업연관표 사전 · IO Prior

연관이 강한 산업끼리만 느슨하게

직관: 산업연관표에서 실제로 서로 많이 주고받는 산업쌍의 교차계수만 살린다.

미네소타는 모든 교차를 똑같이 수축한다. IO 사전은 생산유발계수(레온티에프 역행렬)로 연관 강도를 재서, 강하면 느슨·약하면 0으로 차등 수축한다. 반도체↔전자, 이차전지↔전기장비처럼 실제 연결을 반영한다.

V(교차) *= (연관강도_ij + 0.05)   # 강한 쌍만 느슨, 약하면 0
베이지언 추론
베이지언 · Bayesian

사전 × 우도 = 사후

직관: 미리 아는 믿음(사전)을 데이터(우도)로 갱신해 결론(사후)을 얻는다.

모수 θ에 대해 사후 ∝ 우도 × 사전. 데이터가 많고 강하면 사후는 데이터 쪽으로, 적으면 사전 쪽으로 기운다. 미네소타·IO 사전이 바로 이 "사전 믿음"이고, VARX 계수는 그 사전을 데이터로 갱신한 사후다.

사전우도(데이터)사후
posterior(θ) ∝ likelihood(data | θ) × prior(θ)
MCMC

사후를 직접 못 풀 때, 표본으로

직관: 사후분포를 수식으로 못 구하면, 그 분포에서 표본을 뽑아 평균·구간을 근사한다.

마르코프 연쇄(직전 값에만 의존)를 사후분포가 정상분포가 되도록 설계해 오래 돌리면, 그 표본이 사후분포를 대표한다. 표본평균 ≈ 사후평균.

chain=[]; θ=시작값
for i in range(N):
    θ = 다음_표본(θ)      # 사후를 정상분포로 갖는 전이
    chain.append(θ)
posterior_mean ≈ mean(chain[burnin:])
메트로폴리스–헤이스팅스 · MH

제안하고, 좋으면 받고 나쁘면 가끔 받기

직관: 후보를 하나 제안해, 사후가 커지면 받아들이고 작아지면 확률적으로만 받아들인다.

수용확률 min(1, 사후(후보)/사후(현재)). 이 간단한 규칙만으로 표본이 사후분포로 수렴한다. 아래에서 반도체 성장률 평균 μ의 사후를 MH로 추정해 보라 — 해석적 값과 일치한다.

MH 사후평균 μ ≈ · 해석적 ≈
cand = θ + 정규난수(0, step)
if log(rand()) < logpost(cand) - logpost(θ):
    θ = cand            # 수용 (아니면 현재값 유지)
이 배움터의 모든 예제는 learn-lab.ziplearn.py로 재현됩니다(numpy·pandas만 필요). · 더 나아가기: VAR·VARX 모형 · 논문 3(69산업) · 시나리오 대시보드