데이터분석과 개발

[시계열분석] 시계열 분해(1) - 시계열 성분과 분해방법 본문

AI(시계열)/시계열분석

[시계열분석] 시계열 분해(1) - 시계열 성분과 분해방법

긍정적인마인드 2023. 1. 14. 23:58

* 공부한 것을 정리한 글이므로 틀린 내용이 있을 수 있습니다.

* 더 좋은 방법 또는 틀린부분이 발견될 시 계속 수정하며 업데이트 할 예정입니다.

 

 

안녕하세요

오늘은 statsmodel을 사용해서 시계열 분해를 정리해보려 합니다.

시계열 분해는 시계열 데이터를 추세(trend), 계절성(seasonality), 잔차(residual)로 나눠주는 분석 방법입니다.

 

그렇다면 왜 시계열 분해법을 사용할까요??

 

기본적으로 시계열 데이터는 AR(AutoRegressive), 즉 자신의 과거데이터에 영향을 받는 자기상관성을 전제로 분석을 합니다. 그렇다면 현재 데이터가 자신의 어떤 과거데이터에 영향을 받는지 알아보는 것이 가장 중요한 일이 됩니다.

하지만 날 것 그대로의 데이터를 보고 분석을 하기는 쉽지 않으니 시계열 분해를 통해 추세를 제거하는 방식 등을 사용하여 분석에 용이하도록 합니다.

 

오늘 사용해볼 데이터는 darts모듈에 있는 3개월 단위 맥주판매량 데이터입니다. 데이터를 사용해서 시계열 데이터의 구성성분을 정리해보도록 하겠습니다!

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from darts.datasets import AusBeerDataset
plt.style.use('default')

df = AusBeerDataset().load().pd_dataframe()
df.plot(figsize=(10,5))

 

 

1. 시계열 성분

 

* 추세

 

데이터가 장기적으로 증가하거나 감소할 때  추세가 있다고 합니다. 데이터 전체적인 방향성을 이야기한다고 할 수 있습니다.  위의 예시데이터에서 추세를 살펴보면 1959년부터 1975년(1969년~ 1979년 사이)  동안 증가하는 추세를 보이고 그 이후에는 추세가 없다가 감소하는 경향을 보이고 있습니다. 

 

* 계절성(trend)

 

계절성(trend)란 데이터의 주기 혹은 패턴을 뜻합니다.

예를 들어 아이스크림 판매량이 여름(7,8월)에 증가하고 겨울(12,1월)에 감소한다면 1년의 계절성을 가진다고 할 수 있습니다.

 

위의 예시데이터의 앞부분만 자세히 확대해보았습니다. (3개월 단위 데이터입니다)

데이터를 보시면, 3개월 3개월 3개월 3개월 마다 하락, 조금 상승, 많이 상승의 규칙으로 매년 판매량이 기록되어 있는 것을 볼 수 있습니다.

시각화로 계절성 확인해보기

 

* 잔차(residual) 

 

잔차(residual)은 원래 데이터에서 추세와 계절성 값을 빼준 나머지 값입니다. 

최종적으로 시계열 분해를 하게 되면 이런식으로 결과가 나오게 됩니다.

 

 

 

2. 시계열 분해 방법

 

그렇다면 위의 그래프는 어떻게 그려진 것일까요??

추세, 계절성, 잔차 순서로 일반적으로 구하는 방법을 정리해보려 합니다. 


(1) 추세를 먼저 구합니다.

(2) 원래데이터에서 추세를 제거한 값에서 기간별 데이터의 평균을 통해 계절성 값을 구합니다.

기간별 데이터의 평균이란 날짜별,월별,연별이 있고

날짜별 데이터라고 생각한다면

2000년도의 1월1일, 2001년도의 1월1일, 2002년도의 1월1일...의 값들의 평균

2000년도 1월2일, 2001년도의 1월2일, 2002년도의 1월2일...의 값들의 평균을 의미합니다. 

따라서 1월1일 평균값, 1월2일 평균값... 12월 31일 평균값들이 계절성 데이터가 됩니다.

마찬가지로 월별 데이터라고 생각한다면 1월의 평균값,2월의 평균값...12월 평균값들이 계절성 데이터가 됩니다.

 


(3) 잔차값이란 원래데이터에서 추세와 계절성을 제거하여 구합니다.

 

평균값이다 보니 원래값과 차이가 생길 수 밖에 없습니다.

예를 들어보면 1,3,5,7,9 의 평균을 구하면 5가 되고 잔차값은 -4, -2, 0 , 2, 4 로 계산할 수 있습니다.
따라서 정리하자면 잔차값이란 원래데이터 - 추세 - 계절성 값으로 구할 수 있습니다.

(mulitplicative 라면 (원래데이터/ 추세) / 계절성)


방법을 살펴보면 계절성값과 잔차값은 추세를 구할 수 있으면 자연스럽게 구할 수 있는 값들입니다.

따라서 "추세"를 구하는 방법에 따라 시계열 분해 방법이 달라진다고 합니다.

 

다음 포스팅에서는 추세를 구하는 방법에 대해 정리해보겠습니다.

 

감사합니다.