수요 예측 기법 시계열 모델 (Time Series Model) 소개

by ThePupil
시계열 모델

시계열 모델 (Time Series Model) 은 많은 회사들이 비용 관리를 위해 보편적으로 활용하는 수요 예측 모델 중 하나다. 수요 예측 모델은 제품을 얼마만큼 생산하고 각 매장에 비치해야하는지 결정할 떄 뿐만 아니라, 제품 생산에 필요한 원료와 노동력을 결정/협상할 때도 회사에게 중요한 정보를 제공한다. 데이터의 성격에 따라 그리고 수요 예측을 통해 이루고자 하는 목적에 따라 활용해야하는 모델에 차이가 있지만, 이번 글에서는 시계열 모델 (Time Series Model) 개요 및 활용 방법에 대해 간략하게 소개하고자 한다. 구체적인 모델 및 테스트에 대한 설명은 별도의 블로그를 통해 소개할 예정이다.

[시간을 Index로 활용하는 모델]

Time Series 라는 이름에서도 알 수 있듯이 시계열 모델의 핵심은 데이터의 index 가 시간으로 설정되어 있다는 것이다. 또한, 데이터index 사이간의 시간 간격이 일정한 것도 중요한 필수 조건이다. 예를 들면, 월별 재료 공급현황, 일별 전화 통화량, 연별 매출액 등이다. 이 조건들이 중요한 이유는 시계열 분석에서 시간의 흐름을 dependent variable 에 영향을 주는 변수로 취급하기 때문이다. 우리가 흔히 시간을 고려하지 않는 machine learning model 에서의 독립변수 (independent variable) 비슷한 역할을 한다고 생각하면 된다. 고로 시간이 데이터에 존재 하지 않는다면 Time Series Model 역시 존재하지 않는다.

[Time Series Model 활용 과정]

시계열 모델 (Time Series Model) 제작과정은 대부분 다음과 같다.

  1. Data ETL (Extract, Transform, Load)
    1. 데이터 시간 index 확인 및 format 설정
    1. Data Quality 확인 (Missing Values, Duplicate Values etc)
    1. 도표 통해 기초 통계 정보 분석 (Trend, Seasonality etc)
  2. 시계열 모델 제작 (Fit Model)
    1. 모델 가정 확인
      1. Stationarity Test (Augmented Dickey-Fuller test, ACF/PACF 표 확인)
      1. Seasonality 확인
    1. 적합한 모델 종류 선택
    1. 여러 parameter 비교 및 선택 (AIC, BIC)
  3. 수요 에측 (Forecast Demand)

[시계열 분석을 위해 데이터 준비하기]

“Garbage in garbage out” 흔히 모델을 만드는데 좋지 않은 데이터를 활용하면 그 모델의 추측값 역시 정확하지 않을 것이라는 의미를 담은 구절이다. Time Series Model 역시 마찬가지다. 정확한 수요 예측을 위해서는 데이터를 바르게 준비하는 것이 중요하다.

시계열 분석 데이터 준비에 중요한 가장 중요한 것은 시간 index 유무 및 formatting이다. 단순이 시간값이 있는 것뿐만 아니라 이 시간값이 일관성 있게 기록 되어 있는지 (e.g. 같은 월별 데이터여도 어떤 데이터는 숫자로 201902 어던 데이터는 문자 값으로 되어 있을수 있다 Feb 2019), 이 시간값간의 간격이 일정한지, 충분한 기간의 데이터가 있는지도 확인해야한다. 또한, 사용하는 프로그램 패키지에 따라 특정 날짜 포맷을 요구할 떄도 있기 때문에 Time Series 관련 패키지 사용 전 날짜 정의 방식을 반드시 확인 해야한다.

위 부분을 마치고 나면 일반 데이터와 같이 data quality 에 대한 부분을 검수해야한다. Missing value 는 있는지, 있다면 어떻게 처리 할 것인지, 숫자가 들어가야할 부분에 글자가 있지는 않은지 등 각 데이터 특성에 맞춰서 검수를 완료해야한다.

마지막으로 정리가 완료된 데이터를 시각화해 특징을 파악해야 한다. 이때 특히 눈여겨 봐야 할 부분은 전체적인 트렌드가 있는지와 계절적 움직임 (seasonal trend) 가 존재 하는지 여부다. 이 두 가지 존재 여부에 따라 적용해야 할 기법이 다르기 때문이다. 또한, 그래프 전체적으로 constant variance가 유지되는지 역시 확인해야할ㅡ 중요한 항목이다 (통계에서는 일정하지 않은 분산을 heteroscedasticity 라고 부른다)

[Time Series Model 만들기]

데이터 검수 과정을 마치고 나면 본격적으로 어떤 시계열 모델에서 사용해야하는지 결정해야한다. Polynomial Linear 모델, AR/MA/ARIMA/SARIMA/SARIMAX 모델, Exponential Smoothing 모델 등 데이터의 셩격에 따라 맞는 모델을 골라야 정확한 수요예측이 가능하다. 그렇다면 적절한 모델을 선택하기 위해서는 무엇을 파악해야하는가?

가장 먼저 확인 해야할 것은 Stationarity이다. Stationarity란 어느 데이터의 mean, variance, autocorrelation이 시간에 걸쳐 일정하다는 가정이다. 대부분의 시계열 분석 모델은 stationarity 를 기본 가정으로 삼고 있는데, 현실적으로는 지키기 힘든 가정이다. 매달 전기료를 예를 들어보자. 미국에서는 난로를 많이 떼우는 겨울에 전기료가 많이 나오는 경향이 있는데, 이는 이번달 전기료가 지난달 전기료와 상관관계가 있다는 것을 의미한다. 고로 autocorrelation 이 존재하지 않는다는  stationarity 가정을 위반해 time series 모델을 활용하기 힘들다는 결론에 도달한다.

이를 극복하기 위해 실제로 stationary 하지 못한 데이터를 가정을 충족시킬수 있도록 변형해야한다. 대표적인 방법으로 de-trending, differencing, transforming 이 있다. De-trending 이란 시계열 데이터에서 trend부분만을 파악해서 제외하는 방법이다. Differencing 은 시간 t 의 값과 시간 t-1값의 차이를 이용해 모델을 만드는 방법이다. 마지막으로 transforming 은 예측하고자 하는 변수를 log 등의 형태로 변형하는 방법이다. 데이터마다 stationarity 를 이루어낼 수 있는 적합한 방법은 다르기 떄문에 여러 방법을 시도해볼 것을 권장한다.

이런 방법들을 적용 후에 stationarity 가정이 충족되었는지 확인하기 위해서는 크게 두 가지 방법이 있다. 한 가지는Augmented Dickey-Fuller Test 를 활용하는 것이고, 다른 한 가지는 ACF/PACF 표를 확인하는 것이다. (자세한 내용은 별도의 블로그 포스팅을 통해 소개하도록 하겠다)

다음으로 확인해야할 부분은 계절 변화에 따른 추세가 존재하는지다. 가장 쉬운 방법은 데이터를 선 그래프화 해 시각적으로 확인하는 것이지만, 때로는 계절효과와 기타 트렌드가 겹쳐 분명하게 구분하기 어려울 때가 있다. 이럴 경우에는 트렌드를 제거한 데이터를 이용한 periodogram plot 를 사용해야 한다. 구체적인 방법은 별도에 블로그 포스팅을 통해 소개할 예정이지만 이 링크를 참고할 것을 추천한다.

확인한 내용들을 바탕으로 어떤 모델을 활용할 수 있는지 결정해야한다. 계절의 영향을 심하게 받는 데이터라면 SARIMA, Exponential Smoothing 이 조금더 적합한 모델이고, multivariate 데이터라면 Vector ARIMA Model을 활용해야 한다. 이렇듯 대략적인 가이드 라인은 존재하지만, 데이터라는 변수가 크게 작용하기 때문에 Time Series 모델을 만드는데 절대적인 법칙은 존재하지 않는다. Machine Learning 모델과 흡사하게, “이것 저것 만들어 보고 제일 좋은 것을 고른다”가 결국 답이다. 다른 점이 있다면 Time Series Model은 대부분 Linear Model을 근본으로 하기 때문에 모델간 비교에 AIC/BIC를 활용할 수 있다는 점이다.

마지막으로 선택한 모델을 통해 미래 수요를 예측하면 시계열 분석(Time Series Forecasting) 과정이 완료가 된다. 여기서 한가지 알아둬야할 점은 데이터가 더 미래에 나갈수록 오차 범위가 커진다는 것이다.

[마무리 하며]

이번 글의 목적은 시계열 모델 (Time Series Model) 에 대한 완전 분석이라기 보다는, 데이터 준비부터 모델 만들기/활용 까지의 과정을 간략하게 소개하는 것이다. 이후 블로그 포스팅에서 이번 블로그의 구조를 근간으로 각 부분을 심도 있게 다룰 예정이다.

You may also like