Neural Prophet 삼성전자 주가 예측

기존 Prophet의 문제점

기존의 Prophet은 데이터의 비선형적인 요소 및 연속함수의 특징들을 반영하거나

시계열 데이터의 패턴 변동성이 큰 부분을 반영하기엔 부족한 패키지였다.

 

그래서 메타는 기존 Prophet 모델에 신경망을 추가하여 시계열 분석을 할 수 있도록 만든 것이 Neural Prophet이다.

 

Prophet은 시계열 예측 성능보다는 손쉬운 사용 예측 결과에 해석에 초점을 맞춘 알고리즘이다.

추세, 주기성, 공휴일 효과 등을 분리해서 제공해주기 때문에, 수요예측과 같은 비즈니스적인 시사점이 필요할 때 유용하게 활용될 수 있다.

 

Prophet은 주로 전체 데이터의 글로벌 패턴에 초점을 맞추는 알고리즘으로 설계되었다.

그래서 단기 시점(Local Context) 예측에 한계를 가지고 있다.

 

예를 들어, 최근 프로모션으로 인해 상품의 판매량이 급격히 증가했더라도 Prophet은 이를 데이터의 장기적인 패턴에서 벗어난 요소로 간주하고 무시할 가능성이 높다. 데이터 전체를 모델링하는 방식으로 설계되어, 단기적인 국소적(local) 특성을 반영할 수 있는 메커니즘이 부족하다.

 

Prophet은 Stan이라는 확률적 프로그래밍 언어를 기반으로 개발되었다.

이로 인해 발생되는 여러 문제점들이 있는데,  Stan은 통계적 모델링과 베이지안 분석에 강점을 가진 언어로, 효율적인 샘플링을 제공한다.

그러나 상대적으로 유연성이 낮고 확장성이 제한된다.

특히, Prophet에 새 기능을 추가하거나 사용자 정의된 모델을 통합하는 것이 쉽지 않다. 또한 대규모 데이터에서의 성능 문제가 있다.

Stan 기반의 MCMC(Markov Chain Monte Carlo) 샘플링은 고속 샘플링 알고리즘에 비해 대규모 데이터에서 속도와 메모리 사용 측면에서 비효율적이다.

 

개선된 Neural Prophet

Neural Prophet은 자기 회귀 및 공변량 Local Context 문제를 해결하고, Pytorch를 기반으로 

개발되어 개발자들이 쉽게 소스코드에 접근할 수 있다.

Prophet의 우수한 해석력을 유지하면서 예측 성능을 개선(55~92%)했다는 점에서 공헌점이 있다.

 

Neural Prophet의 핵심적인 개념은 바로 모듈식 구성이 가능하다는 점이다.

모듈식 구성은 각 기능(컴포넌트)을 독립적으로 설계하여, 필요에 따라 추가하거나 제거할 수 있는 구조를 의미한다.

사용자는 모델링 과정에서 다양한 구성 요소를 조합하여 자신의 데이터 및 예측 목적에 맞는 맞춤형 모델을 생성할 수 있다.

 

Neural Prophet의 주요 모듈은 다음과 같다.

 

- 추세 모듈(Trend)

> 시계열 데이터의 장기적인 추세를 모델링하는 기능

> 기본 Prophet 추세 모델링을 계승하지만, 더 유연하게 조정 가능

> Piecewise Linear Trend와 Logistic Trend를 지원하며, 복잡한 데이터에서도 다양한 추세를 잘 포착할 수 있도록 설계

 

- 계절성 모듈(Seasonality)

> 데이터의 주기적 변동(예: 주간, 월간, 연간 패턴)을 캡쳐

> 사용자는 기존의 Prophet과 달리 사용자 정의 주기(custom seasonality)를 쉽게 추가

 

- 공휴일/이벤트 효과(Holiday/Event Effects)

> 특정 날짜의 영향력을 모델에 반영

> Prophet과 마찬가지로 공휴일 데이터셋을 통합할 수 있지만, 이벤트에 따른 비선형 효과까지 반영할 수 있도록 확장

 

- Auto-Regressive 모듈(AR)

> 과거 데이터(시계열의 자기회귀 효과)를 모델링하여 단기 예측이 개선

> AR 모델링을 기존 추세와 계절성 모델링과 결합하여 더 정확한 예측을 지원

 

- Neural Network 기반 확장

> 딥러닝 기반 요소를 추가하여 복잡한 패턴(비선형성, 비정형 데이터 등)을 학습

> 예를 들어, 특정 시간 구간에서 복잡한 상호작용 효과를 학습하도록 설계된 Feed-Forward Neural Networks를 통합

 

- 외부 리그레서(External Regressors)

> 사용자는 날씨, 주식 시장 지수 등 외부 요인(변수)을 예측에 포함

 

 

실제 적용 사례

a. 전력 수요 예측

> 추세 : 전력 사용량의 연간 증가 추세

> 계절성 : 계절별 전력 사용량 패턴(예: 여름철 에어컨 사용 증가)

> AR : 최근 날씨 변화와 사용량 패턴의 상관성 반영

> 외부 리그레서 : 날씨(온도, 습도), 공휴일 등 외부 요인을 추가

 

b. 제품 판매량 예측

- 이벤트 효과 : 블랙프라이데이, 크리스마스

- 계절성 : 특정 시즌(여름, 겨울) 패턴 포함

- AR : 최근 몇 주간의 판매량 데이터 반영

 

 

추세 변동

 

계절성

 

공휴일

 

실습

동일한 조건으로 Prophet vs Neural Prophet

삼성전자 5년치 데이터로 주가예측 결과 비교

주가 데이터만 가지고 사용("ma5", "ma20", "ma60", "rsi", "macd")

 

1. Prophet

예측 성능
MAE: 3595.19
RMSE: 3661.04
MAPE: 4.95

 

 

2. Neural Prophet

예측 성능
MAE: 2182.23
RMSE: 2443.05
MAPE: 3.02

 

MAE (Mean Absolute Error)

  • 정의: 예측값과 실제값의 차이를 절대값으로 계산한 뒤, 전체 데이터에 대해 평균을 구한 값입니다.
  • 특징:
    • 에러 크기를 절대값으로 계산하므로, 음수와 양수의 오차가 서로 상쇄되지 않습니다.
    • 해석이 직관적이며, 실제 데이터 단위와 동일한 단위를 가집니다.
    • 값의 의미: 예측값이 실제값에서 평균적으로 약 2182.23 정도 차이가 난다는 것을 의미합니다.

RMSE (Root Mean Squared Error)

  • 정의: 예측값과 실제값의 차이를 제곱한 뒤 평균을 구하고, 그 값을 다시 제곱근으로 나타낸 값입니다.
  • 특징:
    • 큰 오차에 대해 더 민감합니다. (오차를 제곱하기 때문에 큰 에러가 더 크게 반영됨)
    • 해석은 MAE와 비슷하며, 데이터 단위와 동일합니다.
    • 값의 의미: 예측값이 실제값에서 평균적으로 약 2443.05 정도 차이가 난다는 것을 나타내지만, 큰 오차가 상대적으로 더 큰 영향을 줍니다.
    • 비교: MAE와 RMSE가 큰 차이를 보이면, 예측에서 큰 오차가 많다는 뜻입니다.

MAPE (Mean Absolute Percentage Error)

  • 정의: 예측값과 실제값의 절대 오차를 실제값으로 나눈 뒤, 백분율로 나타내 평균을 구한 값입니다.
  • 특징:
    • 오차를 비율로 표현하므로, 데이터 값의 크기에 무관하게 상대적인 에러를 평가할 수 있습니다.
    • 값이 0%에 가까울수록 예측이 정확함을 나타냅니다.
    • 값의 의미: 예측값과 실제값 사이의 평균 오차가 약 3.02% 정도라는 뜻입니다.

 

  Neural Prophet Prophet 상대적 차이 평가
MAE 2182.23 3595.19 -39% Neural Prophet이 절대 오차에서 더 우수.
RMSE 2443.05 3661.04 -33% Neural Prophet이 큰 오차를 줄이는 데 더 효과적.
MAPE 3.02% 4.95% -39% Neural Prophet이 상대적 예측 정확도가 더 높음.

 

뭘 다르게 한게 없는데 Prophet은 전혀 예측을 못한다.

 

 

 

 

 

코드는 github에 게시

https://github.com/SonAIengine/neural-prophet/tree/main

 

GitHub - SonAIengine/neural-prophet

Contribute to SonAIengine/neural-prophet development by creating an account on GitHub.

github.com

 

 

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유