Table of Contents
Facebook의 Prophet은 시계열 데이터를 예측하기 위해 개발된 모델로, 특히 계절성을 갖는 데이터에 대한 예측에 강점을 보입니다. Prophet은 비교적 이해하기 쉽고 사용하기 편리하며, 자동화된 추세 및 계절성 구성 요소의 조정을 통해 높은 성능의 예측을 제공합니다. 이 모델은 특히 비선형 추세가 시간에 따라 변하는 시계열 데이터에 적합하도록 설계되었습니다.
Prophet 모델의 주요 구성 요소
- 추세(Trend) 모델링:
- Prophet은 시계열 데이터의 추세를 모델링하기 위해 두 가지 방법을 제공합니다: 비선형 로지스틱 성장 모델과 선형 성장 모델.
- 사용자는 성장의 한계나 포화 최대점을 설정할 수 있으며, 이는 주로 시장 포화 상태나 상한/하한이 예측되는 경우에 유용합니다.
- 계절성(Seasonality) 모델링:
- Prophet은 연간(annual), 주간(weekly), 일간(daily) 계절성을 포함하여 데이터의 계절적 변동을 자동으로 감지하고 모델링합니다.
- 이 계절성은 푸리에 급수(Fourier series)를 사용하여 유연하게 모델링되며, 사용자는 계절성 구성 요소의 복잡성을 조정할 수 있는 파라미터를 설정할 수 있습니다.
- 휴일 및 이벤트 모델링:
- Prophet은 특정 날짜에 발생하는 휴일이나 이벤트가 시계열 데이터에 미치는 영향을 모델링할 수 있습니다.
- 사용자는 특정 날짜를 모델에 입력하여 특별 이벤트의 영향을 추정하도록 할 수 있습니다.
- 오차 항(Additive or Multiplicative Errors):
- 모델은 데이터의 변동성을 설명하기 위해 부가적(additive) 또는 곱적(multiplicative) 오차 항을 사용할 수 있습니다.
- 일반적으로 변동 폭이 시간에 따라 일정하면 부가적 모델을, 변동 폭이 시간에 따라 증가하거나 감소하는 패턴을 보이면 곱적 모델을 사용합니다.
모델 공식
Prophet의 시계열 예측 모델은 다음과 같이 표현될 수 있습니다:
[ y(t) = g(t) + s(t) + h(t) + \epsilon_t ]
여기서 ( y(t) )는 예측하고자 하는 값, ( g(t) )는 추세 함수, ( s(t) )는 계절성 함수, ( h(t) )는 휴일 및 특별 이벤트 함수, ( \epsilon_t )는 오차 항입니다.
활용 및 구현
- Prophet은 Python과 R 양쪽에서 사용할 수 있으며, Facebook에서 제공하는 설명서와 커뮤니티를 통해 쉽게 접근하고 활용할 수 있습니다.
- 간단한 API와 자동화된 내부 처리로 인해 사용자가 복잡한 시계열 모델링 지식이 없어도 효과적으로 활용할 수 있는 것이 큰 장점입니다.
Prophet은 특히 시계열 데이터가 명확한 계절성과 추세를 보이며, 휴일이나 특별 이벤트의 영향을 받는 경우 매우 유용합니다. 사용자 친화적인 특성과 유연성 덕분에 다양한 분야에서 널리 사용되고 있습니다.
예시 코드: Prophet 모델 구현: 부가적(additive) 오차 모델, 곱적(multiplicative) 오차 모델
Prophet 모델에서 오차 항은 데이터의 불규칙성을 처리하는 데 사용됩니다. 오차 항은 기본적으로 모델이 예측하는 값과 실제 관측된 값 사이의 차이를 나타내며, 이는 불가피한 데이터의 노이즈나 미처 모델링되지 않은 정보를 포함할 수 있습니다. Prophet에서는 오차 항을 additive
(부가적) 또는 multiplicative
(곱적)로 설정할 수 있습니다.
- 부가적(additive) 오차 모델: 데이터의 변동 폭이 시간에 따라 상대적으로 일정할 때 사용합니다.
- 곱적(multiplicative) 오차 모델: 데이터의 변동 폭이 시간이나 예측 값의 크기에 따라 증가하거나 감소할 때 사용합니다.
다음은 Python을 사용하여 Prophet 모델을 구성하고, 부가적과 곱적 오차 항을 설정하는 방법을 보여주는 예시 코드입니다.
# 필요한 라이브러리 설치
!pip install pystan==2.19.1.1
!pip install fbprophet
# 라이브러리 불러오기
from fbprophet import Prophet
import pandas as pd
from matplotlib import pyplot as plt
# 데이터 프레임 생성
df = pd.DataFrame({
'ds': pd.date_range(start='2020-01-01', periods=100),
'y': (abs(pd.Series(range(100)) * 0.5)) + 10 # 간단한 추세 데이터 생성
})
# Prophet 모델 인스턴스화
model_additive = Prophet(seasonality_mode='additive') # 부가적 오차 모델
model_multiplicative = Prophet(seasonality_mode='multiplicative') # 곱적 오차 모델
# 모델 학습
model_additive.fit(df)
model_multiplicative.fit(df)
# 미래 데이터프레임 생성
future = model_additive.make_future_dataframe(periods=30)
# 예측 수행
forecast_additive = model_additive.predict(future)
forecast_multiplicative = model_multiplicative.predict(future)
# 결과 시각화
fig, ax = plt.subplots(2, 1, figsize=(10, 8))
model_additive.plot(forecast_additive, ax=ax[0])
ax[0].set_title('Additive Error Model Forecast')
model_multiplicative.plot(forecast_multiplicative, ax=ax[1])
ax[1].set_title('Multiplicative Error Model Forecast')
plt.tight_layout()
plt.show()
이 코드에서는 다음과 같은 작업을 수행합니다:
- 데이터 준비: 시계열 데이터를 만듭니다. 여기서는 단순한 추세를 포함하는 데이터를 생성합니다.
- 모델 생성 및 설정:
Prophet
인스턴스를 만들 때seasonality_mode
를 지정하여 오차 모델을 선택합니다. - 모델 학습: 데이터를 모델에 적합시킵니다.
- 미래 데이터 예측: 미래 데이터에 대한 예측을 수행합니다.
- 결과 시각화: 두 모델의 예측 결과를 그래프로 표시합니다.
이 예제를 통해 부가적과 곱적 오차 모델이 시계열 데이터에 어떤 영향을 미치는지 비교해 볼 수 있습니다.
'ML' 카테고리의 다른 글
모델 예측을 높이는 방법 (0) | 2024.07.14 |
---|---|
prophet 모델 예측 이후 성능 높이는 방법 (0) | 2024.07.03 |
머신러닝 함수 정의의 수학적 표현 (0) | 2024.07.02 |
data leakage 데이터 누수, overfitting 과적합 (0) | 2024.06.11 |
Why does GluonTS perform well? (1) | 2024.06.09 |
- Total
- Today
- Yesterday
- Python
- Github
- Numpy
- #패스트캠퍼스 #패스트캠퍼스AI부트캠프 #업스테이지패스트캠퍼스 #UpstageAILab#국비지원 #패스트캠퍼스업스테이지에이아이랩#패스트캠퍼스업스테이지부트캠프
- 오블완
- RAG
- Lora
- Array
- 티스토리챌린지
- Transformer
- PEFT
- recursion #재귀 #자료구조 # 알고리즘
- #패스트캠퍼스 #패스트캠퍼스ai부트캠프 #업스테이지패스트캠퍼스 #upstageailab#국비지원 #패스트캠퍼스업스테이지에이아이랩#패스트캠퍼스업스테이지부트캠프
- t5
- clustering
- 파이썬
- LIST
- nlp
- classification
- 해시
- English
- cnn
- 리스트
- LLM
- git
- Hugging Face
- speaking
- 손실함수
- 코딩테스트
- #패스트캠퍼스 #UpstageAILab #Upstage #부트캠프 #AI #데이터분석 #데이터사이언스 #무료교육 #국비지원 #국비지원취업 #데이터분석취업 등
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |