R을 사용한 시계열 분석 – ARIMA 모형을 통한 미래 추세 예측

데이터 분석 담당자가 자주 하는 분석의 종류로 시계열 분석이 있습니다. 보통 분기/반기/년간 단위로 다음 지표를 예측한다거나, 주간/월간 단위로 지표를 리뷰하며 트렌드에 이상치는 없는 지 모니터링 하는 데 사용되는 분석 기법입니다.

시계열 분석은 주가 전망, 수요 예측 등에도 사용되기 때문에 그 기법이 매우 다양하게 발전되어 있습니다. 이번 포스트에서는 그나마 그 중에서 가장 쉽게 사용할 수 있는 ARIMA 모형을 사용해서 시계열 분석을 해보려고 합니다.

시계열 분석

ARIMA (Auto-regressive Integrated Moving Average) 모형이란?

ARIMA 모델은 시계열 분석 기법의 한 종류로, 과거의 관측값과 오차를 사용해서 현재의 시계열 값을 설명하는 ARMA 모델을 일반화 한 것입니다.  이는 ARMA 모델이 안정적 시계열(Stationary Series)에만 적용 가능한 것에 비해, 분석 대상이 약간은 비안정적  시계열(Non Stationary Series)의 특징을 보여도 적용이 가능하다는 의미입니다.
(물론 안정화 과정이 필요하긴 합니다만, 자세한 설명은 아래에서 차근히 해 보겠습니다.)

♠ 안정적 시계열이란 뭔가요? 그게 왜 중요하죠?

안정적 시계열이란 아래 3가지 특징을 가진 시계열을 말합니다.

1.  시간의 추이와 관계 없이 평균이 불변

안정적 시계열 vs 비안정적 시계열
출처: Analyticsvidhya

2. 시간의 추이와 관계 없이 분산이 불변

ARIMA in R
출처: Analyticsvidhya

3. 두 시점 간의 공분산이 기준시점과 무관

안정적 시계열 vs 불안정적 시계열
출처: Analyticsvidhya

시계열이 안정된 시계열인지 여부가 중요한 이유는 일반적인 시계열 분석에서는 시계열이 안정적 시계열이어야 하기 때문입니다. 시계열이 안정적이지 않을 때는 로그를 이용하거나 차분을 통해 시계열을 안정적으로 변환한 뒤에 분석을 진행해야 하죠.

R에서 ARIMA 분석하기

R에서 ARIMA를 분석하는 순서는 아래와 같습니다.

1단계. 시계열 자료를 시각화 해서 안정적 시계열인지를 확인한다.

2단계. 시계열 자료를 안정적 시계열로 변환한다.

3단계. ACF/PACF차트나 auto.arima 함수를 사용하여 최적화된 파라미터를 찾는다.

4단계. ARIMA 모형을 만든다.

5단계. (필요한 경우) 미래 추이에 대해 예측한다.

 

그럼, 위의 순서에 따라 실습을 해 보도록 하겠습니다. R에 내장되어 있는 Airpassengers 데이터 셋을 사용하려고 합니다. 1949년부터 1960년간 매월 항공기 탑승 승객 수를 담고 있습니다.

시계열 분석을 위해서는 Time-Series 객체가 필요합니다. Airpassengers 데이터셋은 이미 자료 유형이 Time-Series로 되어 있네요. 숫자를 담고 있는 벡터를 Time-Series 객체로 전환하려면 ts (대상 벡터) 함수를 사용하면 됩니다.

그럼, ARIMA 분석을 시작해 보도록 할까요?

1단계. 시계열 자료를 시각화 해서 안정적 시계열인지를 확인한다.

시계열 데이터셋은 plot 명령을 통해 쉽게 시각화 할 수 있습니다.

Airpassengers 그래프

 

시각화를 해서 확인한 결과 Airpassengers 데이터 셋은 안정적 시계열이 아닌 것 같네요. 왜냐하면,

A. 시간의 흐름에 따라 증가하는 Trend 존재

B. 시간의 흐름에 따라 분산이 증가

하기 때문이죠. 그럼 2단계로 넘어가서 자료를 안정적 시계열로 변경해 주는 작업이 필요하겠네요.

참고로, 데이터셋을 Seasonality, Trend, random 요소로 분해해서 그래프를 그릴 수도 있습니다.

R 시계열 분석

2단계. 시계열 자료를 안정적 시계열로 변환한다.

주어진 시계열 데이터를 안정적 시계열로 바꾸는 방법에는 두가지가 있습니다. “차분” (diff)과 “로그함수”(log)가 바로 그것입니다. 로그 후 차분한 다음 tseries 패키지에 내장되어 있는 adf.test 함수로 시계열이 안정적 시계열인지 여부를 확인하면 됩니다.

Airpassengers 데이터 셋에 로그를 취한 후 차분해 준 데이터 셋은 안정적 시계열이네요. 안정적 시계열을 얻었으니 다음 단계로 가 볼까요?

3단계. ACF/PACF차트나 auto.arima 함수를 사용하여 최적화된 파라미터를 찾는다.

ARIMA는 AR 모형과 MA 모형을 결합한 것(I) 이라고 말씀드렸죠? 그래서 ARIMA 모델에서는 세가지 모형을 위한 세가지 파라미터 (p, d, q)가 필요합니다.

파라미터를 구하기 위해서는 AR(p)모형의 p차수 MA(q)의 q차수 그리고 트랜드를 제거하여 안정시계열로 만들기 위한 I(d)의 차분 차수 d를 결정하기 위해 KPSS test4 , ACF, PACF를 그려보아야 합니다.

하지만 R에서는 auto.arima를 사용해 자동으로 p, d, q를 결정할 수가 있습니다.

Rplot06

위 그림은 auto.arima 함수를 사용해서 구한 파라미터가 모형의 가정을 만족하는 지를 보여주는 그림입니다. 세가지 그래프 모두 뚜렷한 패턴(점점 증가한다거나, 줄어든다거나 하는)이 없는 것으로 보아 대체로 가정을 만족한다고 볼 수 있겠네요.

4단계. ARIMA 모형을 만든다.

auto.arima에서 구한 파라미터로 ARIMA 모형을 만들어 보겠습니다. 아래 코드를 사용하면 ARIMA 모형을 만들고, 다음 단계에서 항후 10년간의 추이에 대해 예측해 보도록 하죠.

5단계. (필요한 경우) 미래 추이에 대해 예측한다.

모델을 사용한 예측에는 predict 함수를 사용합니다. fit 모델을 사용해서 향후 10년간 (12개월 * 10년)을 예측한 객체를 pred라고 지정해 보겠습니다. 미래 추이는 해당 객체의 $pred 항목에 저장되어 있습니다. 한번 그래프로 미래 예상 추이를 확인해 볼까요?

Rplot07

점선으로 된 부분이 예측치입니다. 계절성과 추세가 잘 반영된 예측 결과로 보이네요.

 

지금까지 시계열 분석의 다양한 기법 중 가장 일반적으로 사용되는 ARIMA 모형에 대해 알아보았습니다. 이제 시계열 분석에 대한 감이 좀 잡히셨나요?

보다 정확한 이해를 위해서는 직접 R에서 코드를 단계별로 실행해 보시기를 권합니다. 눈으로 읽기만 하는 것 보다 실제로 해 보는 것이 분석 기술을 내것으로 만들 수 있는 방법이니까요.

다음 포스팅에서는 신용카드 연체자, 정기 구독 서비스 탈퇴자 예측 등에 자주 쓰이는 의사결정나무 기법에 대해 알아보겠습니다.

 

참고 자료

1) A little Book of R Time series

2) Wikipedia, Time series 

3) A. Ian McLeod, Hao Yu, Esam Mahdi, Time Series Analysis with R

4) 전희원,  R을 이용한 부동산 케이스 스터디

5) Analyticsvidhya, A Complete Tutorial on Time Series Modeling in R

6) 김영주, 계절 ARIMA 모형을 활용한 저가항공 수요예측