전 블로그 글에서 수요 예측 등의 목적으로 많이 사용되는 Time Series Model (시계열 모델) 을 사용하기 위한 전체적인 과정을 소개 했다. 이번 글은 구체적으로 시계열 모델을 사용하기 위해 사전에 점검해야하는 사항들을 정리했다: ARIMA/SARIMA 모델을 사용하기 위해서 데이터는 어떤 조건을 갖춰야하는지, 계절적 영향을 많이 받는 상품의 수요예측을 위해서는 어떤 사전 작업이 필요하고 그 사전 작업들을 수행하기 위해 알아두면 좋은 도구들을 소개하고자 한다.
[Time Series Model (시계열 모델) 을 활용하기 전 확인 사항]
- Time Index와 일반 데이터 ETL 사항 (e.g. missing value, outliers 등)
이전 포스팅에서 명시했듯 가정 먼저 확인할 부분은 데이터의 index 가 시간으로 설정되어 있는지와 일반적인 data quality (Missing/duplicate values etc) 확인이다. 특히 python이나 R을 활용해 시계열 분석을 한다면 사용하는 패키지마다 요구하는 index 형태가 있다는 것을 유념하자.
- Trend
시간이 지남에 따라 데이터에 뚜렷한 상하 추세가 있는지 확인해야한다. 위에 제공된 이미지처럼 Random한 움직임 안에도 상승하는 추세가 있을 수 있다. 트렌드 존재 유무에 따라 사용할 수 있는 모델이 달라지기 때문이다. 대부분의 모델의 경우 De-trending (트렌트 만을 예측해서 현재 데이터에서 제외하는 방법) 이나 differencing (데이터를 $Y_t – Y_{t-1}$ 형식으로 재정의해 트렌드를 제외하는 방법)을 통해 트렌드를 제외하고 모델링을 시작한다.
- Seasonality
Trend 와 달리 주기에 따라 특정 움직임이 있을 때를 말한다. 예를 들면, 여름이 될 때마다 아이스크림 수요가 늘어나는 것, 연말정산 시기가 될때마다 늘어나는 수요가 있다. 데이터내에 이런 계절적/주기적인 추세가 존재하다면, 이런 추세를 감안할 수 있는 Time Series Model 을 활용해야 한다.
- Causality
Multivariate Time Series Model 을 활용할 때만 적용되는 사항이다. 한 변수의 시계열 데이터를 활용해 다른 변수의 시계열 데이터를 예측하고자 할 때는 과연 그 두변수간의 상관관계가 존재하는지 확인하는 것이 중요하다. 그 뿐만 아니라, 독립변수(independent variable)가 여러개 존재하는 경우에는 독립변수간의 상관관계 역시 중요하다. 이 부분은 Multivariate Time Series 관련 포스팅에서 자세히 다루도록 하겠다.
[Time Series Analysis 핵심 도구]
이 부분에서는 위 사항들을 확인하기 위해 일반적으로 사용되는 방법/도구를 간략히 소개하고자 한다 (구체적인 이론은 링크를 통해 더 연구할 수 있다). 여기 명시된 방법들 이외에 여러 방법이 있다는 것도 유념하자.
- Data Visualization
위에서 명시한 Trend와 Seasonality는 데이터를 시각화했을 때 존재여부를 쉽게 확인할 수 있다. X축을 시간으로 하고 Y축을 예측변수로 설정한 그래프를 보면 과연 시간에 지남에 따라 뚜렷한 상하 움직임이 있는지, 아니면 일정한 주기에 따라 데이터가 움직이는지 확인할 수 있다. 다량의 데이터를 보유하고 있다면, 특정 주기 (e.g. 1년치 데이터)만 확대해서 확인하는 것이 Seasonality 포착하는데 더 효과적이다.
- ACF/PACF Plot
![ACF PACF](https://i0.wp.com/smalldataguru.com/wp-content/uploads/2019/03/ACFPACF.png?resize=736%2C491&ssl=1)
때로는 트렌드나 Seasonality가 존재하는지 육안으로 확인하기 힘든 경우가 있다. 그럴 경우 자주 사용되는 것이 Auto Correlation Function(ACF)와 Partial Auto Correlation Function(PACF) 그래프다. ACF를 쉽게 설명하자면 보통 변수 X와 Y의 상관계수를 구하는 방식을 $Y_t$ 와 $Y_{t-n}$ 과의 상관계수를 구하는데 적용하면 된다. 실제로 ACF plot을 보면 X축에 나오는 lag라는 것이 결국 현재 시점 기준으로 몇 번째 뒤에 있는 변수와의 상관계수인지 나타내는 것이다 ($Y_{t-n}$ 에서 n 과 동일하다). PACF는 한발 더 나아가 현재 변수 $Y_t$ 와 $Y_{t-n}$의 correlation을 고려할 때 이전 lag들의 영향을 제외한다. 자세한 내용은 이 링크에서 확인 가능하다.
이 두 가지 그래프를 사용해 현재 시계열 데이터 (time series data)가 stationary 한지 확인할 수 있다. ACF나 PACF plot에서 significant한 상관관계가 단 하나라도 존재한다면 이 데이터는 non-stationary하다고 볼수 있다. 다르게 말하자면 trend 나 seasonal effect가 여전히 존재한다는 것을 의미한다. 이럴 경우 대부분 시계열 모델이 stationarity를 전제로 하기 때문에 추가적으로 데이터를 변형해야한다.
- Dickey Fuller Test
ACF/ACF 그래프와 마찬가지로 시계열 데이터의 stationarity을 확인하기 위해 사용되는 가설 검정이다. Null hypothesis 가 “데이터는 stationary 하지 않다” 이며 일반적으로 사용되는 t-test와 마찬가지로 p-value에 의해서 귀무 가설을 받아들일지 아니면 거부할지 결정한다. Dickey Fuller Test 를 간단히 설명하자면, $Y_t – Y_{t-n}$ 을 특정 계수 * $Y_{t-n}$ 과 random 한 에러로 이루어진 선형 모델로 나타낼 수 있는지 확인하는 것이다. Augmented Dickey Fuller Test는 업그레이드 버전으로 autocorrelation 을 제외하고 똑같은 선형 모델로 나타낼 수 있는지 확인하는 가설검정이다. 자세한 내용은 이 링크에서 확인 가능하다.
- Periodogram
주기도를 통해 데이터 상에 Seasonality를 확인할 수 있다. 주기도는 데이터를 시간을 축으로 나타내느 것이 이난 주기(frequency)를 축으로 나타낸 그래프다. 에를 들면, X축을 다음과 같이 표현하는 것이다. $X_t=Acos(2πωt+ϕ)$ (여기서 t는 시간, ω가 frequency를 의미한다) 주기도를 통해 어느 frequency에서 가장 큰 변화가 있는지 파악하여 그 데이터내 seasonality effect의 주기를 정의할 수 있다. 자세한 내용은 이 링크에서 확인 가능하다.
- De-compostion
![STL](https://i0.wp.com/smalldataguru.com/wp-content/uploads/2019/03/STL.png?resize=451%2C296&ssl=1)
마지막으로 trend와 seasonality를 각각 모델링하는 것이다. 이 것을 영어로 decomposing seasonal effects and trend이라고 하는데, 수식으로 표한하자면 $Y_t=Seasonal_t+Trend_t+Remainder_t$ 와 같다.
Decomposition을 할 수 있는 방법은 무궁무진하다. Trend가 linear 하다고 생각한다면 선형 회귀모형을 이용해 모델을 하고 seasonality 역시 별도의 cos, sin 함수로 모델하여 기존 모델에서 제외할 수 있다.
감사하게도 빡센 수학이라면 진절머리가 나는 필자 같은 문송이들을 위해 쉽게 사용할 수 있는 STL (Seasonality, Trend decomposition using LOESS) 패키지가 python과 R에 존재한다. 자세한 이론과 사용방법은 이 링크를 참조하길 바란다.
[Time Series Analysis는 케바케(case by case)]
Time Series Model 을 활용하기 전 확인할 사항과 자주 사용 되는 도구들을 알아보았다. 앞서 얘기 했듯 이번 포스팅은 도구들의 존재와 기능을 소개하는 것이 목적이었다. 차후 포스팅을 통해 주요 도구들의 이론적인 배경과 사용 예시를 제공할 예정이다.
글을 마무리 하며 한가지 강조하고 싶은 부분은, 다른 데이터 모델링과 같이 시계열 모델링시에도 기계적인 메뉴얼은 존재하지 않는다는 점이다. 각 데이터마다 사용했을 때 효과적인 도구와 모델이 모두 다르기 때문에 이 글에 소개된 도구들을 모두 다 써야한다는 생각보다 데이터의 특징에 맞게 골라 쓰는 것을 목표로 하는 것을 추천한다.