ACP도표와 PACF도표 시각화
활용 시계열 데이터의 정상성 평가
ARIMA모델의 파라미터 결정 및 모델의 적합도 평가
▪ 정상성
• 정태성이라고도 하며, 일정하여 늘 한결같은 성질을 뜻한다.
• 시계열에서 정상성이 있다는 것은 추세나 동향이 없는 상태로, 시계열의 평균이
시간 축에 평행하다는 의미다.
• 시계형 자료가 시계열 모형으로 적합시키기 위한 전제 조건에 해당한다. 즉, 추세
와 동향이 있는 상태로는 모형을 만들 수 없다.(다루기가 어렵다)
▪ 차분
• 차분은 현시점 자료에서 전 시점 자료를 빼는 것을 말한다.
• 일반차분(regular difference)는 바로 전 시점의 자료를 빼는 것이고, 계절차분
(seasonal difference)는 여러 시점 전의 자료를 빼는 것이다.
import numpy as no
import pandas as pd
import matplotlib.pyplot as plt
# getting drug sales dataset
file_path = 'https://raw.githubusercontent.com/selva86/datasets/master/a10.csv'
df = pd.read_csv(file_path , parse_dates = ['date'],index_col = 'date')
## 비정상성을 확인 추세와 계절성 을 제거할 필요가 있어보임
df.plot(figsize=[12, 8])
plt.title('Non-Stationary Process: Increasing Variance + Trend + Seasonality',
fontsize=16)
plt.show()
## variance Stabilizing Transformation(VST) by Taking Logarithm
df_vst = np.log(df.value)
## plotting
df_vst.plot(figsize=(12,8))
plt.title("Variance Stabilizing Transformation by taking Logarithm", fontsize=16)
plt.show()
추세가 있는 경우 차분을 통한 추세 제거 (de-trend by differencing)
차분(differencing)은 현재의 시계열 값에서 시차 t 만큼의 이전 값을 빼주는 것이다.
1차 차분 = Delta1_Z(t) = Z(t) - Z(t-1)
2차 차분 = Delta2_Z(t) = Z(t) - Z(t-1) - (Z(t-1) - Z(t-2)) = Z(t) - 2Z(t-1) + Z(t-2)
Python의 diff() 메소드를 사용해서 차분을 해줄 수 있다.
이때 차분의 차수 만큼 결측값이 생기는 데요, dropna() 메소드를 사용해서 결측값은 제거
## De-trend by Differencing
df_vst_diff1 = df_vst.diff(1).dropna()
df_vst_diff1
plt.figure(figsize=(12,8))
df_vst_diff1.plot()
plt.title("De-trend by 1st order Differencing", fontsize=16)
plt.show()
• 계절성이 있는 경우 계절 차분을 통한 계절성 제거 (de-seasonality by seaanl differencing)
• 아직 남아있는 계절성(seasonality)을 계절 차분(seasonal differencing)을 사용해서 제거.
• 1년 12개월 주기의 계절성을 띠고 있으므로 diff(12) 함수로 계절 차분을 실시하고, 12개의 결측값이 생기는데요 dropna() 로 결측값은 제거
비정상 시계열(non-stationary process)이었던 원래 데이터
(1) log transformation을 통한 분산 안정화
(2) 차분(differencing)을 통한 추세 제거
(3) 계절 차분(seasonal differencing)을 통한 계절성 제거를 모두 마쳐서 정상 시계열(stationary process) 로 변환