TECHNOLOGY/Textmining & Spatial Analysis 2022. 2. 16. Time Series Forecasting (2) 파이썬을 이용한 시계열 예측 모델링 - ARIMA (Auto regressive-integrated-moving average), Auto ARIMAARIMA 모델은 지나고보니... 가장 traditional하고 오래된만큼 여러 분야의 시계열 연구에 많이 쓰이고, 오래됐음에도 정확도가 나쁘지 않은 편인 것 같다. 공부하는 입장에서 이 모델의 최대 장점은 많이 쓰인만큼 자료가 많다는거다. 땡큐 슨배님들 계속해서 많은 자료를 남겨줘,,, 그럼에도 역시나 한국어 자료는 비교적 적다. 내가 1년에 몇개 안되지만 생각날때마다 개발 포스팅을 남기는 이유! 1. 데이터 계절성 체크하기. ARIMA 모델을 공부하기 전에 제발 내가 미리 알았더라면 좋았을 건. 이 모델은 가지고 있는 시계열 데이터가 정산성을 보일 때, 즉 데이터가 stationary할 때 최대로 유용하다는 점이다. 이게 무슨 개소리냐고 생각할 수 있다. 그거슨 매우 정상 - stationarity란 계절성을 말하는데, 데이터가 계절에 따라 비슷하거나 다른 점이 있을 때, 계절이 아니더라도 어떤 주기를 가지고 움직일 때 stationary 하지 않다고 한다. 계절성이 없을 때, 즉 주기가 없을 때 stationary하다고 표현한다. 시계열 분석할 때 데이터가 계절성을 띄는지 안띄는지 분석하고 모델링을 해야 헛짓거리를 줄일 수 있다. 그러므로 아직 안했다면 아래 포스팅을 통해 미리 데이터가 Stationary한지 체크하고 오자. 2022.01.21 - [COMPUTER SCIENCE/Textmining & Spatial Analysis] - 시계열 분석 데이터 Stationarity check - 파이썬으로 데이터의 계절성/주기성 파악하기 (1) ACF, PACF 플롯 그리고 해석하기 시계열 분석 데이터 Stationarity check - 파이썬으로 데이터의 계절성/주기성 파악하기 (1) ACF, PACF 플 맨땅에 헤딩하듯 시계열예측 모델을 공부하다 보니 알게된 매우 중요한 팁. 예측 모델은 가지고 있는 시계열 데이터의 통계적 특성을 확인하는 것에서 시작해야 한다는 점이다. 현재의 값이 과 happy-chipmunk.tistory.com 2. ARIMA 모델 이해 ARIMA 모델은 AR-I-MA 를 합친 용어다. 아뤼마라니 모델 이름치고 참으로 우아함. LSTM 같은 이름보다 아주 보드랍고 간지럽단 말이징 아무튼 아래 표를 위에서 아래로 차례차례 이해하면 ARIMA가 뭔지 조금이라도 쉽게 알아들을 수 있다. 왼쪽이 모델명이고 오른쪽이 모델에 대한 설명이다. 시계열 데이터가 있다고 치면, 예측하려는 값으로부터 >>
즉 ARIMA 모델에서 변수 p,d,q 의 의미는 p: the number of lag observations in the model; also known as the lag order (AR) --> p개 전 값부터 주르륵 과거 값을 이용함 (p개의 과거 값들을 이용해 예측) --> d 만큼
차분함 --> q개 전 값부터 주르륵 오차 값을 이용함 예측컨대 아마도 데이터를 d회 차분한다는 부분에서부터 이게 무슨 소리지 했을 것.. 아니면 말고.. differencing은 데이터를 stationary 하게 만들기 위한 과정이다. a,b,c,d,e,f,...z 라는 시계열테이터가 있다고 치면 1회 차분하면 b-a, c-b, ..., z-y 가 된다. 이 데이터를 가지고 다시 한번 stationarity 를 검사한다. 아직도 계절성이 있으면 다시 한번 차분한다. 데이터가 계절성이 없어지면 그 상태에서 AR과 MA 모델을 돌린 후, 다시 차분한 d횟수 만큼 과거값을 더해주면서 돌아온다. 이 차분 과정을 통해 AR, MA 모델을 계절성없는 데이터로 돌려서 효율을 높이는 것이다. 3. Python으로 ARIMA 모델 돌리기 예시로, 뉴욕시의 2020년 2월 16일부터 2020년 12월 27일까지 매주 일요일 집계된 코로나로 인한 사망률 데이터를 이용해서 마지막 4주간의 사망률을 예측해보겠다. 먼저 필요한 package들을 import 한다.
그 후 Pandas DataFrame 타입의 인풋 데이터를 준비한다. 아래와 같이 datetime 타입의 'date' 라는 열과 float 타입의 'death_rate'라는 열을 만들었다. 이 인풋데이터를 forecast_data 라고 저장했다고 가정하자. 그 후, 이 데이터를 training 데이터와 validation 데이터로 나눈다. training 데이터를 이용해서 모델을 훈련하고, validation 데이터를 이용해서 모델의 성능을 확인할 것이다. 2020년 12월 12일까지의 데이터를 이용해서 훈련, 12월 6일 이후의 값을 예측한 후, 실제 12월 6일 이후의 값과 비교해서 성능을 확인한다.
시계열 데이터의 시간을 담당하는 부분은 꼭 datetime 타입으로 전환해서 사용해야 된다.
결과값:
본격 모델 돌리기.. order= 뒤에 (p,d,q)의 값을 정해 넣어주면 된다.
결과값:
이제 예측된 값을 시각화해보자.
결과값:
최적의 (p,d,q)값을 찾기 위해선 어떻게 해야할까? 우선 첫번째 방법은 가능한 모든 (p,d,q)값을 돌려보고 가장 높은 정확도를 주는 쌍을 고르는 것이다. for문을 통해서 p,d,q 가 각각 0부터 4까지의 값일 때 AIC (Akaike information criterion) 가 얼마정도 되는지 프린트 한다. 프린트된 결과를 보고, 가장 낮은 값을 가진 p,d,q 쌍을 고르면 된다.
결과값 예시: 이 예시에서는 (1,0,4) 쌍이 제일 AIC가 낮다. 4. Auto-ARIMA 모델 두번째는 Auto-ARIMA 모델을 이용하는 것이다. 앞에서는 직접 iteration을 돌려보고 최적의 p,d,q 값을 정해야했지만, Auto-ARIMA 모델을 이용하면 모델이 알아서 최적의 값을 정해준다. 하지만 결과를 보면 알 수 있듯이, 직접 최적 값을 찾을 때와 값이 다른 것을 알 수 있다. Auto-ARIMA 모델은 AIC 만 보는 것이 아니라 복합적인 척도가 있기 때문이라고 한다.
결과값:
짜잔. 아리마에 대한 공부는 유튜브를 통해 제일 많이했다. 여기서 가장 많이 참고한 영상은 요것이다. Reference: https://www.youtube.com/watch?v=axjgEgBgIY0 무료이미지다음에 기회가 되면 Vector AR 모델 (VAR), 페이스북에서 만든 Facebook Prophet 모델을 알아보겠다. |