TimeSeries with Python _ 예측값 평가 및 Stationary & Non_Stationary Process
이번 시간에서 다룰 주제는 우선 두가지다.
첫번째: 지난 포스팅에서 예측한 값들을 평가하는 방법(즉, 얼마나 잘 예측했나)들을 소개한다.
(Mean-Absolute-Error, Mean-Squared-Error, RMSE)
두번째: Stationary Process & Non - Stationary Process
세가지 주제 다 시계열에서 다루는 가장 기초적인 주제이지만, 앞으로도 계속 활용될 것이며 이것들을 명확히 알아야 앞으로의 모델링에서 어떠한 목표를 가지고 설계하는지 명확히 알 수 있기 때문에 포스팅을 한다.
첫번쨰. 예측값을 평가하는 방법
예측값을 평가하는 방법은 크게 3가지 이고, 첫번째는 예측한 모델의 값과 실제 값의 차이의 절대값의 합을 나타낸 MAE(Mean Absolute Error)인다. 우리가 train data를 이용해 모형의 파라미터를 구했고, 구한 파라미터들이 미래에서 적용된다고 가정했을때 X값인 시간만을 바꿔서 모델의 예측값을 구했다. 때문에 이러한 예측값과 실제 해당 X값에서 의 실제 값인 Test Data의 차이를 이용해 얼마나 크게 벗어났는지를 알아볼 수 있고, 이 값이 가장 작을수록 모델의 예측력은 뛰어나다고 볼 수 있겠다.
두번쨰 방법은 MSE(Mean Squared Error)로 첫번쨰 방법처럼 모델의 값과 실제값의 차이를 제곱 후의 합을 의미하며, RMSE의 경우 MSE에 루트를 취한 값을 의미한다. MAE와 의미는 비슷하며 RMSE를 사용할 경우는 해석하는 단위를 맞추기 위해서다. 즉 Error(모델값-실제값)의 경우 단위가 '원화'라면 원화^2은 해석할 수 없기 때문에, 이러한 단위를 통일시켜 주기 위해 다시 제곱근을 취해주는 거다.
파이썬으로 이들을 구하는 것은 매우 간단하며 sklearn.mertics에서 모듈을 불러와 적용할 수 있다.
#%% Evaluation Metrics
from sklearn.metrics import mean_squared_error, mean_absolute_error
mean_absolute_error(test_data, test_predictions) #여기서 test_predictions의 값은 모델 값
mean_squared_error(test_data, test_predictions)
np.sqrt(mean_squared_error(test_data, test_predictions))
두번쨰. Stationary Process & Non-Stationary Process
시계열에서 어찌보면 가장 중요한 개념이라고 할 수 있겠다. 시계열 학문(Time Series)에서 시계열을 분석할 떄 시계열은 3가지 성분으로 구성되어 있다고 가정한다. 첫번째가 추세(Trend) 두번째가 계절성(Seasonal) 그리고 마지막으로 추세와 계절성으로 설명할 수 없는 Error들이라고 가정한다.
결국 저 두가지 성분으로 해석하지 못한 값들은 평균으로 회귀하며, 어떠한 모델을 이용해서 평균으로 회귀하는지를 분석하는 것이 결국 시계열의 모델링이라고 할 수 있다.
때문에 추세와 계절성을 제거한 데이터가 평균으로 회귀하지 못한다면 우리는 그것을 Non-Stationary Process라고 할 것이며 이러한 데이터는 분석하기가 힘들기에 또 다른 조취를 취하게 된다.
따라서 모델링을 하기 전에 가장 우선이 되는 절차는 직접 데이터를 그려보고 데이터가 어떻게 흘러가는지를 파악하는 것이 우선이겠다.
위의 그림을 잘 살펴보면 평균 55를 기준으로 데이터가 왔다갔다 하며 시간이 지나도 평균으로 회귀하는 모습을 보인다
반면, 위의 그림은 평균으로 회귀하기 보다는 시간이 지남에 따라 점차 증가하는 추세를 가지고 있는 모습이다. 이러한 데이터를 분석할 때는 추세를 제거하고 다시 분석하는 것이 우선이며, 추세를 제가하는 방법 중 하나인 '차분(Differencing)'의 대해서는 다음 포스팅에서 다루겠다.