VAR·VECM·GARCH·칼만 필터로 시계열 특성에 맞는 모델 고르기

VAR, VECM, GARCH, 상태공간 모형과 칼만 필터의 선택 기준, 진단 방법, 운영 파이프라인을 정리합니다.

2026-08-14 · 최초 발행 2025-10-14

데이터 특성이 모델 선택을 결정한다

다변량 상호작용, 비정상성, 조건부 이분산성, 잠재 상태는 서로 다른 시계열 문제다. VAR, VECM, GARCH, 상태공간 모형, 칼만 필터는 이 특성을 구분해 다루기 위한 도구 집합이다.

VAR(Vector Autoregression)는 여러 시계열이 서로에게 미치는 영향을 자기회귀 형태로 추정한다. 정상성을 가정하며, p차 시차까지의 선형 종속성을 반영한다.

VECM(Vector Error Correction Model)은 공적분 관계가 있는 비정상 시계열을 위한 VAR의 재표현이다. 차분항과 오차수정항, 즉 공적분 벡터를 함께 사용해 장기 균형과 단기 변화를 설명한다.

GARCH(Generalized Autoregressive Conditional Heteroskedasticity)는 시간에 따라 조건부 분산이 달라지는 변동성 모형이다. EGARCH, GJR, DCC처럼 비대칭성이나 다변량 상관 구조를 반영하는 확장도 있다.

상태공간 모형은 관측식과 상태전이식으로 확률 동역학 시스템을 표현한다. 선형-가우시안 조건에서는 칼만 필터로 최적 필터링과 스무딩을 수행할 수 있고, 비선형 문제에는 EKF나 UKF를 적용한다. 칼만 필터는 예측과 갱신을 반복하는 재귀 알고리즘으로, 실시간 추정과 결측·센서 잡음 처리에 활용되며 파라미터는 MLE나 EM으로 추정한다.

정상성·공적분·이분산을 먼저 진단한다

VAR은 정상성과 특성근 안정성을 만족해야 한다. 모든 근이 단위원 외부에 있어야 하며, 시차 차수는 AIC, BIC, SC를 기준으로 고른다. 변수와 시차가 늘면서 과적합 위험이 커질 때는 라쏘나 릿지 정규화를 고려할 수 있다.

공적분 여부는 Johansen 검정으로 랭크를 추정한 뒤 판단한다. 공적분이 확인되면 VECM을 사용하고, 확인되지 않으면 차분 VAR 또는 수준 VAR(구조 VAR 포함)을 선택한다.

조건부 이분산은 ARCH LM 검정으로 확인한다. 수익률의 꼬리두꺼움을 다루려면 t-분포나 GED 혁신을 채택할 수 있다. 레버리지 효과에는 EGARCH나 GJR을, 다자산 상관의 변화에는 DCC-GARCH를 적용한다. 리스크 모델은 VaR·ES 백테스트로 검증한다.

상태공간 모형은 상태 (x_t), 관측 (y_t)를 다음과 같이 둔다.

(y_t = Hx_t + e_t), (x_t = Fx_{t-1} + w_t)

필터링은 실시간 추정, 스무딩은 후향 추정, 예측은 다기 예측에 해당한다. 파라미터가 미지인 경우 EM 알고리즘으로 Q, R, F, H를 함께 추정할 수 있다. 비정상성이나 구조 변화가 있는 환경에서는 TVP(시간가변 파라미터) 설정으로 적응성을 확보한다.

검증 결과가 배포 기준이 된다

잔차에서는 자기상관(Portmanteau/LM), 정규성(Jarque–Bera), 이분산(ARCH LM)을 점검한다. VAR은 특성근을, GARCH는 양의 분산 제약을, 상태공간 모형은 Q와 R의 양정부호성을 확인한다.

성능 검증은 롤링 또는 확장 윈도우로 수행하고, RMSE·MASE·QLIKE·CRPS 같은 다계층 지표를 사용한다. CUSUM과 SupF로 구조 변화를 감지해 재학습 트리거를 설정할 수 있다.

운영 파이프라인은 결측·이상치 처리에서 시작해 정규화·변환, 단위근·공적분·ARCH 진단, 모형 분기, 추정·검증, 배치로 이어진다. 배포 뒤에는 에러율과 드리프트를 모니터링하고, 재학습 스케줄, 모델·데이터 버전 관리, 감사 로그, 롤백 전략을 갖춘다.

서로 다른 문제에서의 적용 방식

거시지표 동시 예측에서는 CPI, 실업률, 금리 사이의 상호작용을 VAR이나 VECM으로 통합 예측할 수 있다. 정책 시나리오에 대한 충격반응(IRF) 분석도 의사결정에 활용된다.

포트폴리오 리스크 관리에서는 개별 종목 수익률에 GARCH/E(G)ARCH를 적용하고, 다변량 상관은 DCC로 추정한다. VaR·ES 계산과 백테스트는 규제 적합성 검증에 쓰인다.

IoT와 자율주행의 센서 융합·트래킹에서는 상태공간 모형과 칼만 필터로 위치와 속도를 실시간 추정한다. 결측, 지연, 잡음이 있어도 안정적인 필터링을 구현할 수 있다.

수요·재고 예측에서는 시즌과 프로모션 효과를 상태공간 구조의 레벨·트렌드·시즌으로 분해한다. 매장·상품 단위의 대규모 다변량 수요에는 VAR을 혼합 적용할 수 있다.

예측 정밀도 측면에서는 다변량 상호작용을 활용해 단변량 대비 RMSE 520% 감소, 고변동 구간에서 QLIKE 1030% 개선을 기대할 수 있다. 칼만 필터 기반 온라인 추정은 지연을 50~90% 단축하고 데이터 결손 상황의 서비스 연속성을 지원한다. 충격반응과 분해 결과는 비즈니스 해석과 정책·투자 커뮤니케이션에도 사용된다.

모델별 운용상 차이

모델 적합·예측 특성 확장성 추정 안정성 수렴·견고성 운영 특성
VAR 상호작용을 반영해 중~고 변수·시차 증가 시 급증 단위근·특성근 조건에 민감 과적합·불안정 가능 구현·해석이 용이
VECM 장·단기를 함께 설명해 고 공적분 랭크 증가 시 복잡 공적분 오판 시 성능 저하 장기 안정성 우수 데이터 전처리 부담
GARCH 변동성 예측에 고 단변량 우수, 다변량 난이도 높음 분산 제약·초기값에 민감 비정상 구간에 민감 리스크 실무에 적합
상태공간 체계적 분해·유연성에 고 대규모 시계열 배치 가능 Q, R 추정 품질에 의존 잡음·결측에 견고 온라인·배치 모두 적합
칼만 필터 실시간 추정에 고 O(n) 재귀로 효율적 선형·가우시안 가정에 의존 관측 이상치에 강건 스트리밍에 최적화

진단에서 모니터링까지 연결하기

오류/예외 처리단위근, 공적분 있음단위근, 공적분 없음조건부 이분산잠재상태 필요아니오입력: 다변량 시계열전처리: 결측/이상치/스케일링진단: 단위근/공적분/ARCHVECM 경로: Johansen랭크→MLEVAR/차분 VAR: 차수선택AIC/BICGARCH 계열:(E)GARCH/DCC상태공간+Kalman: F,H,Q,R추정(EM)진단: 잔차 LM/Portmanteau,안정성리스크 백테스트: VaR/ES,QLIKE필터링/스무딩/예측성능 기준 충족?배포: API/배치 파이프라인재설계:차수조정/정규화/모형교체모니터링: 드리프트/알람/롤백결측 과다→시계열 제외/보간대체공적분 랭크 불일치→모형재추정분산 음수/수렴실패→제약/초기값 재설정Q,R 비양정부호→정규화/제약최적화

최소 실행 코드로 보는 모형 분기

전제조건: Python 3.10+, numpy/pandas, statsmodels>=0.13, arch>=5.6

# pip install numpy pandas statsmodels arch
import pandas as pd
import numpy as np
from statsmodels.tsa.api import VAR
from statsmodels.tsa.vector_ar.vecm import coint_johansen, VECM
from arch import arch_model
from statsmodels.tsa.statespace.structural import UnobservedComponents

# 예시 데이터
np.random.seed(42)
n = 1000
e = np.random.normal(size=(n, 2))
# 공적분 구조 생성
x = np.cumsum(e[:,0]) + 0.1*np.arange(n)
y = x + np.random.normal(scale=0.5, size=n)
df = pd.DataFrame({'x': x, 'y': y})

# 1) VAR (정상성 전제 시)
var_mod = VAR(df.diff().dropna())
var_res = var_mod.fit(maxlags=4, ic='aic')

# 2) VECM (공적분 존재 시)
jres = coint_johansen(df, det_order=0, k_ar_diff=2)
rank = (jres.lr1 > jres.cvt[:,1]).sum()  # 5% 기준
vecm = VECM(df, k_ar_diff=2, coint_rank=rank, deterministic='n').fit()

# 3) GARCH (단변량 수익률)
ret = pd.Series(np.random.standard_t(df=6, size=n))*0.01
garch = arch_model(ret, vol='GARCH', p=1, q=1, dist='t').fit(disp='off')

# 4) 상태공간 + 칼만 필터 (수준/추세)
ucm = UnobservedComponents(ret, level='llevel', trend=True)
ucm_res = ucm.fit(disp=False)

print(var_res.aic, vecm.llf, garch.params.head(), ucm_res.summary())

백테스트는 롤링 윈도우(예: 36/12)에서 재적합과 예측을 반복해 데이터 누수를 막는다. 단변량 ARIMA·ETS, 단순 이동평균을 기준선으로 두고 채택 임계를 정한다. 고차원 VAR은 VAR-LASSO나 대각 DCC로 희소화하고 분산 학습을 도입하는 방안도 있다.

초기에는 단순한 구성을 빠르게 도입하고, 성능 병목이 확인된 구간만 단계적으로 고도화한다. 중요한 것은 모델 이름이 아니라 단위근, 공적분, 이분산, 잠재 상태라는 데이터 조건에 맞춰 분기하는 운영 기준이다.

시계열 분석VARGARCH칼만 필터상태공간 모형