IT지식/빅데이터

토이프로젝트 - (10) 다변량 선형 확률과정 - 4단계

매 석 2023. 7. 1. 16:42
반응형

- 과거 내용

 

토이프로젝트 - (9) 다변량 선형 확률과정 - 3단계

과거내용 공적분 검정 비정상 시계열의 차분 횟수가 d라고 할 때, 이를 적분 차수라고 부른다. 시계열의 적...

blog.naver.com

 

 

- 다변량 시계열 모델

 

1. ARCH

오차항의 분산의 현재값이 이전 오차항의 제곱값들에 의존할 것이라는 가정에서 시작한다.

이는 제곱을 하기에 방향에 따른 영향력을 반영하지 못하며, 모수가 많아져 모순이 발생하는 등의

다양한 문제가 발생할 확률이 있다.

+ GARCH : ARCH보다 시계열 의존성을 표현하는 데 있어 모수의 수를 줄일 수 있다.

하지만 근본적으로 오차항의 분포가 비정규성인 것 등의 다양한 한계점이 존재한다.

2. VAR(벡터자기회귀)

자기회귀식을 벡터로 쌓음으로써 2개 이상의 시계열을 동시에 모형화할 수 있다.

각 시계열이 안정성 조건을 만족하지 않아도 사용할 수 있지만,

차분을 하거나 변수간 장기적 관계에 대하여 정보를 상싱할 수 있는 단점이 존재한다.

3. VECM(오차수정모형)

공적분 관계의 존재 여부에 따라 VAR과 VECM을 선택할 수 있다.

공적분 관계에 있는 시계열은 차분 없이 원 데이터를 써서 모형에 적합시킬 수 있다.

즉 장기적인 정보를 포함한 상태에서 모형을 만들 수 있다는 것이다.

이렇게 다변량 시계열 모델을 알아본 결과

지금까지 학습한 내용 중 공적분 검정을 통해

코스피와 다우지수가 공적분 관계라는 것을 증명했다.

그렇기에 VECM과 VAR 모두 사용할 수 있다.

이번 포스팅에서는 VAR을 다루려고 한다.

 

 

- VAR 모형

 VAR 기본 코드

def var(df):
    from statsmodels.tsa.api import VAR
    model = VAR(df)
    print(model.select_order(maxlags=30).summary())

 

 

이번에도 statsmodels를 사용해서 VAR를 구현했다.

기본적으로 데이터는 로그 변환 및 1회 차분한 데이터를 집어넣었다.

(해당 내용은 이전 포스팅에서 찾아볼 수 있다.)

이렇게 되면 데이터가 정상성을 만족하는 상태로 VAR 모형에 학습시킬 수 있다.

- 코드 결과

 

==================================================
       AIC         BIC         FPE         HQIC
--------------------------------------------------
0       -18.27      -18.27   1.161e-08      -18.27
1       -18.29      -18.28   1.138e-08      -18.29
2       -18.30      -18.28   1.124e-08      -18.30
3       -18.31      -18.28   1.119e-08      -18.30
4       -18.32      -18.28   1.105e-08      -18.31
5       -18.32      -18.27   1.101e-08      -18.31
6       -18.34      -18.28   1.088e-08      -18.31
7       -18.36     -18.29*   1.067e-08      -18.33
8       -18.36      -18.28   1.064e-08      -18.33
9       -18.37      -18.28   1.055e-08      -18.34
10      -18.37      -18.27   1.052e-08      -18.34
11      -18.37      -18.26   1.053e-08      -18.33
12      -18.37      -18.26   1.047e-08      -18.33
13      -18.38      -18.25   1.045e-08      -18.33
14      -18.39      -18.26   1.034e-08     -18.34*
15      -18.39      -18.25   1.032e-08      -18.34
16      -18.39      -18.24   1.034e-08      -18.33
17      -18.39      -18.24   1.026e-08      -18.34
18      -18.39      -18.22   1.029e-08      -18.33
19      -18.40      -18.22   1.019e-08      -18.34
20      -18.40      -18.22   1.019e-08      -18.33
21      -18.40      -18.21   1.016e-08      -18.33
22      -18.41      -18.20   1.012e-08      -18.33
23      -18.41      -18.19   1.014e-08      -18.33
24      -18.41      -18.18   1.015e-08      -18.32
25      -18.40      -18.17   1.017e-08      -18.32
26     -18.41*      -18.17  1.012e-08*      -18.32
27      -18.41      -18.16   1.012e-08      -18.32
28      -18.41      -18.15   1.013e-08      -18.31
29      -18.41      -18.14   1.016e-08      -18.31
30      -18.41      -18.13   1.012e-08      -18.31

 

AIC가 모두 2 이하로 일반적으로 모델이 타당하다고 판단할 수 있다.

이후 모델의 시차를 7로 적용해준다.

model.fit(7) -> print(model.resid.corr())

 

 

          KS        DW
KS  1.000000  0.006811
DW  0.006811  1.000000

 

 

그 결과 이렇게 상관계수가 나온다.

이 값들을 바로 해석하는 것이 어려우니 더빈 왓슨(durbin-watson) 검정을 실시한다.

- 더빈 왓슨 검정

기본적으로 오차항에 자기상관이 존재하는지 확인할 때 사용한다.

회귀식에서는 자기상관이 존재하지 않아야 한다.

def var(df):
    from statsmodels.tsa.api import VAR
    from statsmodels.stats.stattools import durbin_watson
    model = VAR(df)
    model = model.fit(100)
    durbin = pd.DataFrame([model.resid.columns, 
                           [round(x,2) for x in durbin_watson(model.resid)]]).T
    durbin = durbin.set_index([0])
    print(durbin)

결과
      1
0
KS  2.0
DW  1.98

 

양의 관계는 0에 수렴

음의 관계는 4에 수렴

관계 없는 경우 2에 수렴한다.

즉 자기상관이 존재하지 않는다는 것을 알 수 있다.

그 결과 해당 모델은 충분한 예측 설명력을 갖고 있다고 볼 수 있다.