벡터 자기회귀 모델(VAR, Vector Autoregressive Model)은 여러 변수 간의 상호작용을 모델링하는 강력한 통계적 접근법으로 데이터 사이언스 분야에서, 경제학, 재무학, 사회과학, 그리고 기타 여러 분야에서 다변량 시계열 데이터의 복잡한 상호작용을 분석하는 데 널리 사용된다. 이 모델의 주된 강점은 여러 변수들 사이의 동적 관계를 포착하고 분석하는 능력에 있다.
한 국가의 GDP, 실업률, 인플레이션율과 같은 여러 경제 지표들이 서로 어떻게 상호작용하는지 분석할 때 VAR 모델이 매우 유용하다.
VAR 모델의 특징 중 하나는 각 변수가 자신의 과거 값 뿐만 아니라 다른 모든 변수의 과거 값에 의존한다는 점이다. 이는 모델이 각 변수의 시간에 따른 변화를 단순한 단변량 분석보다 훨씬 더 포괄적으로 파악할 수 있게 한다. 또한, 이러한 다변량 접근 방식은 변수 간의 원인과 결과 관계를 더 명확하게 이해할 수 있게 도와준다.
VAR 모델의 기본 개념
VAR 모델은 다변량 시계열 데이터를 분석하기 위해 사용되는 통계적 모델이며, 각 변수가 자신의 과거 값뿐만 아니라 다른 변수들의 과거 값에도 의존하는 구조를 가진다. 즉, VAR 모델은 여러 시계열 데이터가 서로 어떻게 영향을 주고받는지를 분석한다.
수학적 표현
여기서, 는 모든 변수의 벡터,
는 계수 행렬,
는 모델의 차수(지연), 그리고
는 오차 항을 나타낸다.
모델의 특징
- 다변량 분석: VAR 모델은 여러 시계열 변수를 동시에 분석할 수 있어 경제학, 재무학 등에서 특히 유용하다.
- 상호 의존성: 이 모델은 변수 간 상호 의존성을 포착하여, 한 변수의 변화가 다른 변수에 어떤 영향을 미치는지 분석한다.
- 동적 분석: 시간에 따른 데이터의 동적 변화를 분석할 수 있어 예측 모델링에 매우 적합하다.
VAR 모델의 적용
VAR 모델은 경제 지표 예측, 주식 시장 분석, 정책 분석 등에 널리 활용된다.
금리, GDP, 인플레이션 등 여러 경제 지표들이 서로 어떻게 상호작용하는지 분석할 때 VAR 모델이 사용된다.
모델의 한계
- 변수 선택의 중요성: 올바른 변수를 선택하지 않으면 모델의 예측력이 떨어질 수 있다.
- 계산 복잡성: 많은 변수와 높은 차수를 가질수록 모델은 복잡해지고 계산량이 많아진다.
Python 구현 예제
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.api import VAR
from sklearn.metrics import mean_squared_error
# 가상의 시계열 데이터 생성
t = np.arange(100)
data1 = np.sin(t / 2) + np.random.normal(scale=0.5, size=100)
data2 = np.cos(t / 3) + np.random.normal(scale=0.5, size=100)
data3 = data1 + data2 + np.random.normal(scale=0.5, size=100)
# 데이터프레임으로 변환
df = pd.DataFrame({'Data1': data1, 'Data2': data2, 'Data3': data3})
# 데이터를 학습 데이터와 테스트 데이터로 분리
train_df, test_df = df[0:80], df[80:]
# VAR 모델 피팅
model = VAR(train_df)
model_fitted = model.fit(5)
# 예측
lag_order = model_fitted.k_ar
predictions = model_fitted.forecast(train_df.values[-lag_order:], steps=len(test_df))
# 예측 결과를 데이터프레임으로 변환
predicted_df = pd.DataFrame(predictions, index=test_df.index, columns=test_df.columns)
# 테스트 데이터와 예측 결과를 시각화
plt.figure(figsize=(12, 6))
for col in df.columns:
plt.plot(train_df.index, train_df[col], label=f'Train {col}')
plt.plot(test_df.index, test_df[col], label=f'Test {col}', color='gray')
plt.plot(predicted_df.index, predicted_df[col], label=f'Predicted {col}', linestyle='--')
plt.title('VAR Model')
plt.legend()
plt.show()
# 모델의 성능 평가
mse_values = {}
for col in df.columns:
mse = mean_squared_error(test_df[col], predicted_df[col])
mse_values[col] = mse
mse_values
![](https://blog.deeplink.kr/wp-content/uploads/2024/01/image-31.png)
![](https://blog.deeplink.kr/wp-content/uploads/2024/01/image-32.png)
VAR(train_df)에서 VAR은 벡터 자기회귀(Vector Autoregressive) 모델을 나타낸다.
model.fit(5)는 생성된 VAR 모델 객체에 대해 fit 메서드를 호출하여 모델을 학습시키는 부분이다. 여기서 ‘5’는 모델의 최대 시차(lag)를 나타내며, 이는 과거 데이터 중 얼마나 멀리 있는 데이터까지 모델이 고려할 것인지를 결정한다. 즉, 5로 설정할 경우, 모델은 각 변수에 대해 최대 5개의 과거 시점 데이터를 사용하여 현재 값을 예측한다.
모델의 최대 시차를 설정하는 것은 중요한 단계이며, 최대 시차가 너무 길면 모델이 과적합(overfitting)될 수 있고, 너무 짧으면 모델이 중요한 정보를 놓칠 수 있다. 따라서 적절한 최대 시차의 선택은 데이터의 특성과 분석 목적에 따라 다를 수 있다.
최종적으로, model.fit(5) 호출은 주어진 학습 데이터에 기반하여 모델 파라미터를 추정하고, 이를 통해 다변량 시계열 데이터의 상호관계를 포착하게 되며, 이렇게 학습된 모델은 이후 데이터의 예측에 사용될 수 있다.