NeuralProphet은 쉽게 이야기 하면 Neural Network(AR-Net)과 Prophet의 결합이다.
\(\hat{y_t}\)는 Trend, Seasonality, Event & Holiday, Regression for known future variable, Auto-regression, Regression for lagged observation of variables 각각 6개의 식으로 구성이 되어 있다.
Trend
Trend는 신호의 전체 Variation 중 가장 많은 부분을 차지하고 있다.
Neural Prophet은 Training을 통해서 가장 명확하게 Variation이 발생하는 지점, Change Point를 찾는다. 그리고 Change Point간의 Trend는 Linear하다고 가정을 하고, Linear Regression을 추정한다.
당연한 것이겠지만 이 Regression의 Loss는 Model Loss에 모두 더해지고 Gradient Descent Method를 통해서 Loss를 Minimize하는 방향으로 Regression을 개선해나간다. 이 때 Regression의 Paraemeter를 여기서는 Growth Value라고도 부른다.
이 때 L1 Regularization 을 이용해서 Change Point 중 불필요한 것들은 제외를 해나가는데 임의로 Change Point를 넣어줄 수도 있다. 스타트업의 경우 대규모 투자 또는 프로모션 집행 시점과 같이 Domain Knowledge에 기반한 시점을 임의로 넣어주면 정확도를 높여줄 수도 있다.
Seasonality
Seasonality는 신호의 주기적인 움직임, 패턴이라고 볼 수 있다. 이러한 부분을 모델링하기 위해서는 Neural Prophet은 Targetd을 주기적으로 반복되는 Fourier Series 형태의 연속형 함수로 가정을 한다. 구체적으로는 다음과 같은 형태를 취하고 있다.
이 식에서 $\epsilon$은 White Noise로 Random이고 평균이 0이면서 분산이 1인 정규 분포를 따라야 한다.
다만 Auto Regression으로는 \(t+h,h=1\)시점에 대해서 예측이 가능하기 때문에 결국 \(h>1\)인 경우 Model의 갯수는 \(h\)개 필요하게 되는데 Neural Prophet은 이 부분에 대해서 AR Net으로 접근한다. 식으로 보면 다음과 같다.
이 때 중요한 부분 중 하나가 \(p\)이다. AR-Net의 Input으로 넣어야 하는 Time-Series의 Length인데, 비 부분은 Domain Knowledge를 바탕으로 과거 데이터를 보면서 조절해야할 필요가 있다. 정확하지는 않지만 경험상 Seasonality등을 Detect하고 반영하기 위해서는 두 번 이상의 Period가 반복된 데이터가 상대적으로 정확도에서 우수하게 나왔다.
Lagged Regressors
Neural Prophet의 Core idea인 AR-Net이 적용되기 위해서는 필수적으로 필요한 부분이다.(라고 하지만 사실 다른 시계열 모델에서 Lagged Data는 매우 중요하다.)
Future Regressors
Target Value를 예측하기 위한 다른 변수들의 미래 수치값이다. Controllable Variable이면 추가할 여지가 있겠으나, 없어도 모델은 돌아간다.
Event & Holiday
마지막 Module은 주기적으로 반복되지 안는 이벤트(월드컵, 지방선거 등)나 휴일에 대한 부분을 처리하는 부분이다.
국가의 공휴일을 미국이었던가, 몇몇 국가는 라이브러리에 내장되어 있으나, 한국은 그렇지 않아서 임의로 넣어주면 좋다. 특히 추석이나 설날은 음력을 양력으로 매해 변화해서 쇠고 있기 때문에 필수이다.
Prophet vs Neural Prophet
Prophet vs. NeuralProphet 이라는 글에서 가볍게 실험한 결과를 공개했는데, 데이터 사이즈가 작을 때는 Neural Prophet이 데이터가 커지면 Prophet이 앞선다고 한다. RMSE, MAPE로 비교했는데 약간 Case by Case일 것 같기는 하다.
Member discussion