자기상관, 부분자기상관

jh_k·2023년 2월 28일
0

시계열분석

목록 보기
3/4

자기상관함수(ACF; AutoCorrelation Function)

  • 자기상관은 다른 시점의 관측값 간 상호연관성을 나타내므로 이는 시차를 적용한 시계열 데이터 간의 상관관계를 의미
  • 자기상관 AC 는 원래의 시계열 데이터(y_t)와 k시차가 고려된 즉 k기간 뒤로 이동한 시계열 데이터(y_t-k)간의 상관관계로 정의
  • 시차에 따른 일련의 자기상관 {AC_1,AC_2 .... AC_K}를 자기상관함수라고함
  • ACF는 시차에 따른 관측값 간의 연관 정도를 보여주며, 시차가 커질수록ACF는 점차 0에 가까워지게됨
  • ACF는 시계열의 정상성을 평가할 때 유용

편자기상관함수

  • 편자기상관은 시차가 다른 두 시계열 데이터간의 순수한 상호 연관성
  • 편자기상관PAC는 원래의 시계열데이터(y_k)와 시차k시계열데이터(y_t-k)간의 순수한 상관관계로서 두 시점 사이에 포함된 모든 시계열 데이터의 영향은 제거됨
  • 시차에 따른 일련의 편자기상관{PAC1,PAC2...PACk}를 편자기상관함수라고 함

ACF도표와 PACF도표

  • 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) 로 변환

profile
Just Enjoy Yourself

0개의 댓글