INDEX
1. 정상성이란?
2. 정상성을 만족하는 데이터 시각화
3. 정상성 만족 여부 판별하기
4. AR? MR? ACF? PACF?
먼저 정상성에는 강한 정상성과 약한 정상성이 존재하는데 일반적으로 약한 정상성만 만족해도 된다고 보기때문에 앞으로 말하는 정상성을 약한정상성으로 보면된다.
정상성이란 시간의 흐름에 따라 평균과 분산이 일정한것(변하지않는것)을 말한다.
시계열 데이터를 예측을 하는데 있어서 데이터의 분산이 모두 제각각이고, 계절성과 추세가 있다고 가정했을때 우리는 이러한 데이터를 학습시켰을때 정확도는 매우 높게 나올 수 있다. 왜냐하면 overfitting이 되기 쉽기때문이다.
사실상 시계열데이터는 매우높은 정확도를 가지기 힘들기 때문에 너무 높은 수치가 나온다면 이러한것을 의심해 볼 수 있다.
그렇다면 어떻게해야 하는것일까??
시간의 흐름에 따라 일정한 분산과 일정한 평균을 가지고 있으면(데이터가 정상성을 가지고 있다), 평균과 분산이 안정화되어 있기때문에 분석하기 쉬울것이다.
만약에 시계열이 안정적이지 않다면 현재의 패턴이 미래에 똑같이 재현되지 않기때문에, 그대로 예측기법을 적용해서는 안된다.
따라서 정상성(안정성, stationary)는 시계열 분석에 있어서 중요하고, 나중에 소개할 ARIMA모델의 경우 이 정상성을 만족함을 가정으로 한다.
그렇다면, 자연스럽게 정상성을 만족하는 데이터와 그렇지 않은 데이터를 살펴보자
왼쪽 도표의 경우 추세가 있으며(시간이 지남에 따른 상승추세), 계절성이 있어보입니다. 즉, 정상성을 만족하지 않습니다.
반면, 오른쪽 도표의 경우 평균이0정도이며 분산 역시 위아래로 비슷한 모습입니다. 즉 오른쪽 도표가 정상성을 만족하는 데이터입니다.
그렇다면, 눈으로 확인하는 것보다 확실한 방법으로 정상성을 만족하는지 여부를 확인해 보겠습니다.
1. "Dickey Fuller Test"
2. ACF 도표, PACF 도표
귀무가설 : 원계열은 안정적이지 않다.(p-value > 0.05)
대립가설 : 원계열은 안정적이다.(p-value < 0.05)
( 귀무가설, 대립가설, p-value설명은 오른쪽 단어클릭 -> 귀무가설 이란? , p-value 란?)
< 실습해보기 >
# 환율데이터 불러오기
df = pd.read_csv(****,parse_dates = ['DATE'], index_col = 'DATE')
# 일단위 데이터 -> 월단위 데이터로 변경
df = df.resample('M').last()
# 시각화
df.plot(figsize = (12, 5)
먼저 시계열 환율 데이터를 불러와서 확인해보니, 눈으로 대충 보아도 정상성이 있어 보이지 않습니다.
그렇다면 실제로 정상성 테스트를 진행해보겠습니다.
# stats모델의 adfuller 불러오기
from statsmodels.tsa.stattools import adfuller
# Test( KOUS : 환율 수치를 담고있는 컬럼명)
adfuller(df['KOUS'])
>>>
(-2.6235188039221238,
0.08823317575724848,
0,
1305,
{'1%': -3.4353708501743654,
'10%': -2.56795049999266,
'5%': -2.8637572934525286},
8358.34690710183)
간단하게 ADF Test 를 진행하게되면 출력 결과가 나오는데 여기서 두번째 것을 확인하면 된다.
두번째 원소에는 0.08823...이 나오는데 이것이 바로 p-value가 0.088이 나온것이다.
즉, 귀무가설이 채택될 가능성이 높다는것이다. 따라서 안정성을 뛰고있지 않을가능성이 매우높다는 결론이 나온것이다.
from statsmodels.tsa.stattools import acf, pacf
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
# 시각화
# subplot생성
fig, ax = plt.subplots(1,2 , figsize = (12,4))
# acf plot
plot_acf(df, ax = ax[0])
# pacf plot
plot_pacf(df, ax= ax[1])
plt.show()
ACF 도표를 보면 매우천천히 correlation이 내려가고 신뢰구간 안에 들어가지도 못하는 모습입니다. 즉, 안정적이지 않음을 보여주고 있습니다.
또한 PACF 역시 시차 차이가 1인 것까지 correlation이 높은것 을 볼수있습니다.
이렇게 두가지 방법을 통해서 정상성 여부를 파악할 수 있습니다.
지금까지의 이해와 앞으로의 내용의 이해를 위해 위 제목의 단어들을 정리해보겠습니다.
차분이란, 현시점 데이터에서 d시점 이전에 데이터를 뺀것으로서 정상성을 만족하지 않을때 만족하게 바꾸기 위한 방법중 하나이다. 이해가 잘 안된다면 정상성데이터를 만드는 방법에서 다룰때 보면 이해에 도움이 될것같다.
자료 출처: https://velog.io/@euisuk-chung/머신러닝시계열-AR-MA-ARMA-ARIMA의-모든-것-개념편
먼저 ACF, PACF를 들어가기전 자기상관(Auto Correlation)을 이해하고 가면 좋다.
자기 상관은 자기자신의 다른시점과의 상관관계를 말하는 것으로 시차를 적용한 상관관계를 의미한다. 즉, t시점(2000년도)의 데이터와 t-1시점(1999년도)시점의 데이터의 상관관계를 의미한다.
즉, 시차가 커지면 당연히 상관관계가 떨어질수 밖에없는데 위에서 ACF도표를 통해 정상성을 평가할때 시차가 계속 멀어져도 상관관계가 높은것으로 보여서 정상성이 없는것으로 평가할 수 있었던것이다.
시계열 데이터의 정상성평가는 정상성 만족여부 판별하기에서 사용한것을 생각하면된다.
또다른 하나인 ARIMA모델의 파라미터 결정 및 모델의 적합도 평가가 있다. 이는 나중에 다룰것이다.
다음 포스팅에서는 지금까지 올린 시계열 데이터 포스팅을 기초로 정말 간단한 인사이트를 얻어보겠습니다.