티스토리 뷰

반응형

자기 상관 함수(ACF)에 대해 수학적 이해를 제외하고, 딱 데이터 분석에 사용할 수 있을 만큼, 핵심만 적어 보자 한다. 

 

 

자기 상관 함수(Autocorrelation Function)

만약 ACF에 대한 검색을 하고 있었다면, 회귀분석을 하고 있었을 것이다. 왜냐하면 ACF는 회귀분석에 사용되기 때문이다. 회귀분석이란, t개의 값을 가지는 독립변수 X와 이에 대응하는 종속변수 Y 간의 상관관계를 정량적으로 찾는 알고리즘이다. 회귀분석의 성능을 높이기 위해서는 여러 가지 가정이 만족해야 하는데, 그 가정 중에 잔차들이 서로 독립적이어야 한다는 가정이 있다. 이러한 관점에서 잔차들이 시간의 흐름에서 독립적인지를 확인하기 위해서 자기상관 분석을 한다. 확인하는 방법은 Autocorrelation Fuction(ACF)의 결과로 Autocorrelation=0에 가까운지를 확인하면 된다. 0이라면 독립적이라고 할 수 있다. 

 

 

보통은 종속변수(Y)의 정상화를 위해 통계적 분석을 진행을 하게 된다. 정상화를 위해서는 ADF, KPSS, ACF와 같은 검증 지표를 사용하는데, ACF는 보통 시계열에서 과거의 종속변수(Y)와의 비교를 통해 계절성 판단을 주로 한다. 

 

 

 

 

Autocorrelation analysis

보통 시계열 분석에서 많이 사용이 되며, 현재의 Y값과 과거의 Y값의 상관성을 비교한다. 왜냐하면, 각각의 Y값이 독립적이어야 결과 분석이 더 잘되기 때문이다.(Y를 정상화시키면 분석이 더 잘된다는 개념과 같다.) 

 

import statsmodels.api as sm
sm.graphics.tsa.plot_acf(result, lags=50, use_vlines=True)

 

  • result부분에는 종속변수(Y)인 데이터프레임의 columns를 넣어준다.
  • plot_acf가 autocorrelation의 그림을 그려준다.
  • lags=50 이란 lags 50개를 다 그림을 그려서 수치를 알려달라는 내용이다. lag란 데이터상 과거의 몇 번째 뒤로 간 데이터를 의미한다. 만약 lag=1이고 시간 설정을 월로 했다면, 한 달 전 데이터와의 현재 데이터를 비교하는 것이다.
  • use_vlines=True는 아래의 그림에서 파란 부분의 범위를 표현해 준다. 디폴트 값이라 지워도 나타난다.

 

 

아래와 같은 결괏값이 나왔다고 해보자.

 

 

  • x축은 lag이고 y축은 correlation이다.
  • 0일 때는 당연히 1이다. 왜냐하면 자기 자신과의 관계기 때문에 당연히 1이 나온다.
  • x축 부분을 보면 파란색 범위가 보인다. 저 범위를 벗어나 있으면 Autocorrelation이 있다고 판단하고(use_vlines=True) 내부에 있다면 Autocorrelation이 없다고 판단한다)
  • 즉, 위 처럼 나온다면, ACF는 정상이고 문제가 없다고 할 수 있다.

 

 

 

만약 결과값이 너무 않좋다면 아래와 같은 방식을 사용해 보자.

sm.graphics.tsa.plot_acf(pd.Series(data).diff(1).dropna(), lags=50, use_vlines=True)

 

pd.Series는 data를 plot_acf에 넣기 위해 시리즈 형태로 변환을 한것이다.

diff(1)은 데이터의 정상화를 위한 차분을 나타낸다. diff의 인자가 1이므로 한 시점이전의 값과의 차이를 넣는다.

dropna()는 diff를 통해 생긴 데이터 공백을 지워준다.

 

 

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함