본문 바로가기
  • "Backtest, backtest, backtest." - Martin Schwartz
[시스템개발] 트레이딩뷰, 웹, 앱

Prophet 모델 튜닝의 최적 방법 - 시계열 데이터 예측의 정확성 향상하기

by Eirene 2023. 3. 28.
반응형

Prophet 모델 튜닝의 최적 방법 - 시계열 데이터 예측의 정확성 향상하기
Prophet 모델 튜닝의 최적 방법 - 시계열 데이터 예측의 정확성 향상하기

Prophet 모델을 튜닝하는 최적의 방법을 알아보고 쉽게 정확한 예측을 수행하세요.

 

요즘 데이터 과학가와 분석가들 사이에서 시계열 데이터 예측의 정확성으로 인해 Prophet 모델이 점점 더 인기를 얻고 있습니다. 하지만 모델의 성공은 어떻게 조정되느냐에 따라 달려 있습니다. 이 글에서는 정확한 예측을 보장하기 위해 Prophet 모델을 조정하는 최적의 방법에 대해 전문가의 시각으로 알아보도록 합시다.

 

Prophet 모델 이해하기 Prophet 모델을 조정하기 전에, 그것이 무엇인지와 어떻게 작동하는지에 대한 기본적인 이해가 필요합니다. Prophet 모델은 Facebook의 Core Data Science 팀에서 개발한 시계열 예측 모델입니다. 시계열 데이터를 추세, 계절성 및 휴일 3가지 요소로 분해하고, 베이지안 접근법을 사용하여 데이터를 적합시킵니다. 이를 통해 모델은 결측값 및 이상치를 효과적으로 처리할 수 있습니다.

Prophet 모델 튜닝의 최적의 방법

적절한 계절성 선택하기

계절성은 Prophet 모델에서 중요한 구성 요소이며, 올바른 유형의 계절성 선택은 모델의 정확성을 크게 향상시킬 수 있습니다. 모델은 가법 계절성과 곱셈 계절성 두 가지 유형의 계절성을 제공합니다. 가법 계절성은 계절 효과의 크기가 시간이 지나면서 일정한 경우 시계열 데이터에 적합합니다. 반면에 곱셈 계절성은 계절 효과가 시간에 따라 변하는 경우 데이터에 적합합니다.

아래는 코드 예제 입니다.

import pandas as pd
from fbprophet import Prophet

# Load data
df = pd.read_csv('example_data.csv')

# Convert the 'date' column to a datetime object
df['date'] = pd.to_datetime(df['date'])

# Create a Prophet model with additive seasonality
model_additive = Prophet(seasonality_mode='additive', 
                         seasonality_prior_scale=0.1, 
                         changepoint_prior_scale=0.5)

# Create a Prophet model with multiplicative seasonality
model_multiplicative = Prophet(seasonality_mode='multiplicative', 
                               seasonality_prior_scale=0.1, 
                               changepoint_prior_scale=0.5)

# Fit the models
model_additive.fit(df[['ds', 'y']])
model_multiplicative.fit(df[['ds', 'y']]])

# Create a forecast for a future time period
future = model_additive.make_future_dataframe(periods=365)
forecast_additive = model_additive.predict(future)
forecast_multiplicative = model_multiplicative.predict(future)
이 예제에서는 날짜 열이 포함된 데이터셋을 로드하고, 가법 계절성과 곱셈 계절성을 갖는 두 개의 Prophet 모델을 생성합니다. 데이터로 모델을 학습시키고 미래의 시간 기간에 대한 예측을 생성합니다.
Prophet 모델에서 올바른 계절성 모드를 선택하면 데이터의 계절 패턴을 보다 정확하게 캡처하여 모델의 정확성을 향상시킬 수 있습니다. Prophet 모델은 가법 계절성과 곱셈 계절성 두 가지 유형의 계절성을 제공합니다.
가법 계절성은 계절 효과의 크기가 시간에 따라 일정한 데이터에 적합하며, 곱셈 계절성은 계절 효과가 시간에 따라 변화하는 데이터에 적합합니다. 다양한 계절성 모드를 실험하여 데이터에 가장 적합한 모드를 선택하는 것이 중요합니다.
예를 들어, 데이터의 계절 효과가 추세에 비례하여 증가하거나 감소하는 경우, 곱셈 계절성이 더 적합할 수 있습니다. 반면, 데이터의 계절 효과가 추세와 관계없이 일정한 경우, 가법 계절성이 더 적합할 수 있습니다.

 

변화점 사전 스케일 조정하기

변화점 사전 스케일은 모델이 추세의 변화를 감지하는 데 유연성을 제어합니다. 더 높은 사전 스케일은 더 많은 변화점과 더 유연한 추세를 생성합니다. 그러나 낮은 사전 스케일은 더 적은 변화점과 더 부드러운 추세를 만듭니다. 이 매개변수를 신중하게 조정하여 데이터의 과적합이나 과소적합을 피해야 합니다.

아래는 코드 예제 입니다.

import pandas as pd
from fbprophet import Prophet

# Load data
df = pd.read_csv('example_data.csv')

# Convert the 'date' column to a datetime object
df['date'] = pd.to_datetime(df['date'])

# Create a Prophet model with a changepoint prior scale of 0.05
model_005 = Prophet(changepoint_prior_scale=0.05)

# Create a Prophet model with a changepoint prior scale of 0.5
model_050 = Prophet(changepoint_prior_scale=0.5)

# Create a Prophet model with a changepoint prior scale of 1.0
model_100 = Prophet(changepoint_prior_scale=1.0)

# Fit the models
model_005.fit(df[['ds', 'y']])
model_050.fit(df[['ds', 'y']])
model_100.fit(df[['ds', 'y']]])

# Create a forecast for a future time period
future = model_005.make_future_dataframe(periods=365)
forecast_005 = model_005.predict(future)
forecast_050 = model_050.predict(future)
forecast_100 = model_100.predict(future)
이 예제에서는 날짜 열이 포함된 데이터셋을 로드하고, 0.05, 0.5 및 1.0과 같은 다른 changepoint prior scale을 갖는 세 개의 Prophet 모델을 생성합니다. 데이터로 모델을 학습시키고 미래의 시간 기간에 대한 예측을 생성합니다.
Prophet 모델에서 changepoint prior scale을 조정하면 추세 변화를 더 정확하게 감지하여 모델의 정확성을 향상시킬 수 있습니다. changepoint prior scale은 추세의 유연성을 결정하며, 작은 값은 더 유연한 추세를, 큰 값은 덜 유연한 추세를 생성합니다.
다양한 changepoint prior scale 값으로 실험하고 데이터에 가장 적합한 값을 선택하는 것이 중요합니다. 예를 들어, 추세가 더 빈번하고 급격하게 변하는 데이터에는 작은 changepoint prior scale이 적합할 수 있으며, 추세가 더 점진적으로 변하는 데이터에는 큰 changepoint prior scale이 적합할 수 있습니다.

 

계절성 사전 스케일 튜닝하기

계절성 사전 스케일은 모델의 계절성 구성 요소의강도를 제어합니다. 높은 사전 스케일은 더 강한 계절성 효과를 생성하며, 낮은 사전 스케일은 더 약한 계절성 효과를 생성합니다. 이 매개변수를 신중하게 조정하여 계절성 효과가 지나치게 강조되거나 과소평가되지 않도록 해야 합니다.

아래는 코드 예제 입니다.

import pandas as pd
from fbprophet import Prophet

# Load data
df = pd.read_csv('example_data.csv')

# Convert the 'date' column to a datetime object
df['date'] = pd.to_datetime(df['date'])

# Create a Prophet model with a seasonality prior scale of 0.01
model_001 = Prophet(seasonality_prior_scale=0.01)

# Create a Prophet model with a seasonality prior scale of 0.1
model_010 = Prophet(seasonality_prior_scale=0.1)

# Create a Prophet model with a seasonality prior scale of 1.0
model_100 = Prophet(seasonality_prior_scale=1.0)

# Fit the models
model_001.fit(df[['ds', 'y']])
model_010.fit(df[['ds', 'y']])
model_100.fit(df[['ds', 'y']]])

# Create a forecast for a future time period
future = model_001.make_future_dataframe(periods=365)
forecast_001 = model_001.predict(future)
forecast_010 = model_010.predict(future)
forecast_100 = model_100.predict(future)
이 예제에서는 날짜 열이 포함된 데이터셋을 로드하고, 0.01, 0.1 및 1.0과 같은 다른 seasonality prior scale을 갖는 세 개의 Prophet 모델을 생성합니다. 데이터로 모델을 학습시키고 미래의 시간 기간에 대한 예측을 생성합니다.
Prophet 모델에서 seasonality prior scale을 조정하면 데이터의 계절 패턴을 보다 정확하게 캡처하여 모델의 정확성을 향상시킬 수 있습니다. seasonality prior scale은 계절성 효과의 강도를 결정하며, 큰 값은 더 강한 계절성 효과를, 작은 값은 더 약한 계절성 효과를 생성합니다.
다양한 seasonality prior scale 값으로 실험하고 데이터에 가장 적합한 값을 선택하는 것이 중요합니다. 예를 들어, 계절 패턴이 더 약한 데이터에는 작은 seasonality prior scale이 적합할 수 있으며, 계절 패턴이 더 강한 데이터에는 큰 seasonality prior scale이 적합할 수 있습니다.

 

휴일과 이벤트 고려하기

Prophet 모델은 휴일과 이벤트를 예측 과정에 통합할 수 있습니다. 휴일과 이벤트는 시계열 데이터에 중요한 영향을 미칠 수 있으며, 이를 모델에 포함시키면 모델의 정확성을 크게 향상시킬 수 있습니다. 모든 관련된 휴일과 이벤트를 고려하여 모델에 포함시키는 것이 중요합니다.

아래는 코드 예제 입니다.

import pandas as pd
from fbprophet import Prophet

# Load data
df = pd.read_csv('example_data.csv')

# Convert the 'date' column to a datetime object
df['date'] = pd.to_datetime(df['date'])

# Load holiday data
holidays = pd.read_csv('holiday_data.csv')

# Create a Prophet model with holiday data
model = Prophet(holidays=holidays)

# Fit the model
model.fit(df[['ds', 'y']])

# Create a forecast for a future time period
future = model.make_future_dataframe(periods=365)
forecast = model.predict(future)
이 예제에서는 날짜 열이 포함된 데이터셋을 로드하고, Prophet 모델에 휴일 데이터를 포함합니다. 데이터로 모델을 학습하고 미래 시간 기간에 대한 예측을 생성합니다.
Prophet 모델에서 휴일 및 이벤트를 고려하는 것은 휴일 및 이벤트가 데이터에 미치는 영향을 반영하여 모델의 정확성을 향상시키는 데 도움이 될 수 있습니다. Prophet 모델은 휴일 날짜와 휴일 이름을 나타내는 열을 포함하는 데이터프레임을 제공하여 사용자 지정 휴일 데이터를 포함할 수 있습니다.
데이터에 휴일 및 이벤트가 중요한 영향을 미친다면 Prophet 모델에서 이를 고려하고 포함시키는 것이 중요합니다. 예를 들어, 판매 데이터는 크리스마스나 추수감사절과 같은 휴일에 영향을 받을 수 있으며, 날씨 데이터는 허리케인이나 폭염과 같은 이벤트에 영향을 받을 수 있습니다. 휴일 및 이벤트 데이터를 모델에 포함시킴으로써 모델의 정확성을 향상시키고 보다 정확한 예측을 할 수 있습니다.

 

교차 검증 사용하기

교차 검증은 Prophet 모델의 성능을 평가하고 과적합을 피하기 위한 강력한 기술입니다. 이 기술은 데이터를 학습 및 테스트 세트로 분할하고 테스트 세트에서 모델의 성능을 평가함으로써 보다 정확한 모델 평가를 가능하게 합니다. 이를 통해 모델의 성능을 보다 정확하게 평가하고 잠재적인 문제점을 식별할 수 있습니다.

아래는 코드 예제 입니다.

import pandas as pd
from fbprophet import Prophet
from fbprophet.diagnostics import cross_validation

# Load data
df = pd.read_csv('example_data.csv')

# Convert the 'date' column to a datetime object
df['date'] = pd.to_datetime(df['date'])

# Create a Prophet model
model = Prophet()

# Perform cross-validation
df_cv = cross_validation(model, initial='730 days', period='180 days', horizon='365 days')

# Calculate performance metrics
df_p = performance_metrics(df_cv)

# Print the performance metrics
print(df_p.head())
이 예시에서는 날짜 열이 포함된 데이터셋을 로드하고 Prophet 모델을 생성합니다. 그 후에는 fbprophet.diagnostics 모듈의 cross_validation 함수를 사용하여 모델에 대한 교차 검증을 수행합니다. 이때 initial, period 및 horizon 값을 지정합니다.
Prophet 모델에서 교차 검증을 수행하면 검증 데이터셋에서 모델의 성능을 평가하여 정확성을 향상시킬 수 있습니다. 교차 검증은 일부 데이터로 모델을 학습하고 나머지 데이터로 성능을 평가하는 것을 의미합니다. 이를 통해 모델에서 발생 가능한 문제를 식별하고 필요한 조정을 수행할 수 있습니다.
Prophet 모델에서 교차 검증을 수행하고 적절한 학습 및 검증 기간을 선택하는 것이 중요합니다. initial, period 및 horizon 인수는 특정 데이터셋 및 모델에 맞게 조정할 수 있습니다. 또한 성능 지표를 사용하여 모델의 정확성을 평가하고 필요한 조정을 수행할 수 있습니다.

 

모델 규제하기

규제는 과적합을 피하고 모델의 성능을 향상시키는 중요한 기술입니다. Prophet 모델은 L1 규제 및 L2 규제 두 가지 유형의 규제를 제공합니다. L1 규제는 모델에서 희소성을 촉진하는 데 사용할 수 있으며, L2 규제는 모델이 너무 복잡해지는 것을 방지하는 데 사용할 수 있습니다.

아래는 코드 예제 입니다.

import pandas as pd
from fbprophet import Prophet

# Load data
df = pd.read_csv('example_data.csv')

# Convert the 'date' column to a datetime object
df['date'] = pd.to_datetime(df['date'])

# Create a Prophet model with L1 regularization
model_l1 = Prophet(regularization='L1', regularization_strength=0.1)

# Create a Prophet model with L2 regularization
model_l2 = Prophet(regularization='L2', regularization_strength=0.1)

# Fit the models
model_l1.fit(df[['ds', 'y']])
model_l2.fit(df[['ds', 'y']]])

# Create a forecast for a future time period
future = model_l1.make_future_dataframe(periods=365)
forecast_l1 = model_l1.predict(future)
forecast_l2 = model_l2.predict(future)
이 예제에서는 날짜 열이 있는 데이터셋을 로드하고, L1 정규화와 L2 정규화를 사용하는 두 개의 Prophet 모델을 만듭니다. 데이터를 사용하여 모델을 적합시키고, 미래 시간 대에 대한 예측을 생성합니다.
Prophet 모델 정규화는 오버피팅을 방지하고 일반화 성능을 향상시켜 모델의 정확성을 향상시키는 데 도움이 됩니다. Prophet 모델은 L1 정규화와 L2 정규화 두 가지 유형의 정규화를 제공합니다.
L1 정규화는 결과에 별다른 영향을 미치지 않는 많은 수의 특성이 있는 경우에 적합합니다. L2 정규화는 결과에 약한 영향을 미치는 많은 수의 특성이 있는 경우에 적합합니다.
서로 다른 유형과 강도의 정규화를 실험하고 데이터에 가장 적합한 방법을 선택하는 것이 중요합니다. 예를 들어, 특성이 적은 데이터의 경우 더 낮은 정규화 강도가 적합할 수 있으며, 특성이 많은 데이터의 경우 더 높은 정규화 강도가 적합할 수 있습니다.

 

추가적인 팁

Prophet 모델을 튜닝하기 위한 추가적인 팁들이 있습니다. 이전에 소개한 best practices 외에도 다음과 같은 팁들이 있습니다.

여러 개의 시간 단위

사용 여러 개의 시간 단위를 사용하면 Prophet 모델이 데이터에서 더 복잡한 패턴을 잡을 수 있습니다. 예를 들어, 시간 단위가 시간 단위인 경우, 일 단위 및 주 단위 요소를 추가하여 해당 수준에서 계절적인 추세를 캡처 할 수 있습니다.

import pandas as pd
from fbprophet import Prophet

# Load data
df = pd.read_csv('example_data.csv')

# Convert the 'date' column to a datetime object
df['date'] = pd.to_datetime(df['date'])

# Create a new column with daily time granularity
df['ds_daily'] = df['date']

# Create a new column with weekly time granularity
df['ds_weekly'] = df['date'].dt.floor('7d')

# Create a new column with monthly time granularity
df['ds_monthly'] = df['date'].dt.floor('30d')

# Create a Prophet model with daily, weekly, and monthly seasonality
model = Prophet(seasonality_mode='multiplicative', 
                daily_seasonality=True, 
                weekly_seasonality=True, 
                monthly_seasonality=True)

# Fit the model using the daily time granularity
model.fit(df[['ds_daily', 'y']])

# Create a forecast with the daily time granularity
future_daily = model.make_future_dataframe(periods=365, freq='D')

# Fit the model using the weekly time granularity
model.fit(df[['ds_weekly', 'y']])

# Create a forecast with the weekly time granularity
future_weekly = model.make_future_dataframe(periods=52, freq='W')

# Fit the model using the monthly time granularity
model.fit(df[['ds_monthly', 'y']])

# Create a forecast with the monthly time granularity
future_monthly = model.make_future_dataframe(periods=12, freq='M')
이 예시에서, 우리는 날짜 열을 가진 데이터셋을 로드하고, 일일, 주간, 월간 시간 단위로 새로운 열을 생성합니다. 그리고 우리는 Prophet 모델을 일일, 주간, 월간 계절성을 가진 모델로 생성하고 일일 시간 단위로 모델을 학습합니다. 그리고 우리는 일일 시간 단위로 예측을 생성한 후, 주간 시간 단위로 모델을 학습하고 주간 시간 단위로 예측을 생성합니다. 마지막으로 우리는 월간 시간 단위로 모델을 학습하고 월간 시간 단위로 예측을 생성합니다.
다양한 시간 단위를 사용함으로써, 우리는 더 복잡한 데이터 패턴을 포착하고 더 정확한 예측을 할 수 있습니다.

 

Growth Parameter 조정

Growth Parameter는 데이터에 맞는 추세를 피팅하는 데 사용됩니다. Prophet 모델은 기본적으로 선형 증가 추세를 사용하지만 로지스틱 증가 추세 또는 평평한 추세를 사용할 수도 있습니다. 이 매개 변수를 조정하면 모델이 추세를 더 정확하게 피팅 할 수 있습니다.

import pandas as pd
from fbprophet import Prophet

# Load data
df = pd.read_csv('example_data.csv')

# Convert the 'date' column to a datetime object
df['date'] = pd.to_datetime(df['date'])

# Create a Prophet model with a logistic growth trend
model = Prophet(growth='logistic')

# Fit the model
model.fit(df[['ds', 'y']])

# Create a forecast
future = model.make_future_dataframe(periods=365)

# Predict the values for the future time period
forecast = model.predict(future)
이 예제에서는 날짜 열을 가진 데이터셋을 불러와 Prophet 모델을 생성하며, growth 파라미터를 'logistic'으로 설정하여 로지스틱 성장 트렌드를 적용합니다. 데이터를 학습시키고 미래 시간 대를 예측합니다.
growth 파라미터를 조정함으로써 Prophet 모델의 정확도를 향상시킬 수 있습니다. Prophet 모델은 기본적으로 선형적인 성장 트렌드를 사용하지만, growth 파라미터를 'logistic'이나 'flat'으로 설정하는 것이 특정한 경우에 유용할 수 있습니다.
예를 들어, 성장이 점점 둔화되는 데이터의 경우 로지스틱 성장 트렌드가 적합할 수 있으며, 트렌드가 없는 데이터의 경우 평평한 트렌드가 적합할 수 있습니다. 서로 다른 growth 파라미터를 실험하고 데이터에 가장 적합한 것을 선택하는 것이 중요합니다.

 

Bayesian Optimization 사용

Bayesian Optimization은 Prophet 모델을 효율적으로 튜닝하는 데 도움이되는 강력한 기술입니다. 이 기술은 하이퍼파라미터의 최적 세트를 찾기 위해 반복적으로 모델 성능을 다른 하이퍼파라미터로 평가하는 방법입니다.

import pandas as pd
from fbprophet import Prophet
from bayes_opt import BayesianOptimization

# Load data
df = pd.read_csv('example_data.csv')

# Convert the 'date' column to a datetime object
df['date'] = pd.to_datetime(df['date'])

# Define the Prophet model
def prophet_model(changepoint_prior_scale, seasonality_prior_scale):
    model = Prophet(changepoint_prior_scale=changepoint_prior_scale, 
                    seasonality_prior_scale=seasonality_prior_scale)
    model.fit(df[['ds', 'y']])
    future = model.make_future_dataframe(periods=365)
    forecast = model.predict(future)
    return forecast['yhat'].values

# Define the hyperparameter space
pbounds = {'changepoint_prior_scale': (0.001, 0.5),
           'seasonality_prior_scale': (0.001, 0.5)}

# Create the BayesianOptimization object
optimizer = BayesianOptimization(f=prophet_model, pbounds=pbounds, random_state=1)

# Run the optimization for 50 iterations
optimizer.maximize(n_iter=50)

# Get the best hyperparameters
best_params = optimizer.max['params']
changepoint_prior_scale = best_params['changepoint_prior_scale']
seasonality_prior_scale = best_params['seasonality_prior_scale']

# Create the Prophet model with the best hyperparameters
model = Prophet(changepoint_prior_scale=changepoint_prior_scale, 
                seasonality_prior_scale=seasonality_prior_scale)

# Fit the model
model.fit(df[['ds', 'y']])

# Create a forecast
future = model.make_future_dataframe(periods=365)
forecast = model.predict(future)
이 예시에서는 날짜 열이 포함된 데이터셋을 불러오고, changepoint_prior_scale과 seasonality_prior_scale이라는 하이퍼파라미터를 정의한 Prophet 모델을 정의합니다. 이후, 이 하이퍼파라미터를 입력으로 받아서 미래 시간 범위에 대한 예측값을 반환하는 prophet_model 함수를 정의합니다.
pbounds를 사용하여 하이퍼파라미터 공간을 정의하고, BayesianOptimization 객체를 생성하고 최적의 하이퍼파라미터를 찾기 위해 50번의 반복을 실행합니다.
최적의 하이퍼파라미터를 얻은 후, 해당 하이퍼파라미터로 Prophet 모델을 생성하고 데이터를 학습한 다음 미래 시간 범위에 대한 예측을 생성합니다.
Bayesian Optimization을 사용하면 Prophet 모델의 하이퍼파라미터를 보다 효율적으로 튜닝하고 정확도를 향상시킬 수 있습니다. 다양한 하이퍼파라미터를 실험하고 데이터에 가장 적합한 하이퍼파라미터를 선택하는 것이 중요합니다.

 

다른 Prior 분포 실험

Prophet 모델은 여러 가지 Prior 분포를 제공합니다. 다른 Prior 분포를 실험하여 데이터에 가장 적합한 분포를 찾고 모델의 성능을 개선할 수 있습니다.

Prophet 모델에서 Prior 분포는 모델의 파라미터 값에 대한 불확실성을 표현하는 분포를 말합니다. Prophet 모델에서는 다양한 하이퍼파라미터를 사용하는데, 예를 들어 changepoint_prior_scale, seasonality_prior_scale 등이 있습니다. 이러한 하이퍼파라미터는 모델의 예측 성능에 영향을 미치며, 이러한 파라미터 값을 결정하는 것은 데이터 과학자나 엔지니어의 역량이 매우 중요합니다.
Prior 분포는 모델을 학습하기 전에 정해지는데, 이 분포를 설정하는 방법에 따라 모델의 성능이 크게 달라질 수 있습니다. Prophet 모델에서는 다양한 종류의 Prior 분포를 제공합니다. 예를 들어, changepoint_prior_scale의 Prior 분포로는 uniform 분포, Laplace 분포, Gaussian 분포 등이 있습니다.
Prior 분포를 선택할 때는 데이터의 특성과 모델의 목적을 고려하여 적절한 분포를 선택해야 합니다. 이를 통해 모델의 예측 성능을 높일 수 있으며, 실제 데이터와의 일치도를 높일 수 있습니다.
import pandas as pd
from fbprophet import Prophet

# Load data
df = pd.read_csv('example_data.csv')

# Convert the 'date' column to a datetime object
df['date'] = pd.to_datetime(df['date'])

# Define the Prophet model with different prior distributions
model_uniform = Prophet(seasonality_mode='multiplicative', 
                        seasonality_prior_scale=0.1, 
                        changepoint_prior_scale=0.5,
                        holidays_prior_scale=0.5)
model_laplace = Prophet(seasonality_mode='multiplicative', 
                        seasonality_prior_scale=0.1, 
                        changepoint_prior_scale=0.5,
                        holidays_prior_scale=0.5,
                        holidays_prior_mode='laplace')
model_gaussian = Prophet(seasonality_mode='multiplicative', 
                         seasonality_prior_scale=0.1, 
                         changepoint_prior_scale=0.5,
                         holidays_prior_scale=0.5,
                         holidays_prior_mode='gaussian')

# Fit the models
model_uniform.fit(df[['ds', 'y']])
model_laplace.fit(df[['ds', 'y']])
model_gaussian.fit(df[['ds', 'y']])

# Create a forecast for a future time period
future = model_uniform.make_future_dataframe(periods=365)
forecast_uniform = model_uniform.predict(future)
forecast_laplace = model_laplace.predict(future)
forecast_gaussian = model_gaussian.predict(future)
이 예제에서는 날짜 열이 포함된 데이터 집합을 로드하고, 균등 분포, 라플라스 분포, 가우시안 분포를 사용한 세 가지 Prophet 모델을 정의합니다. 이들 모델을 데이터에 맞추고, 미래 시간 대에 대한 예측을 생성합니다.
다양한 사전 분포를 실험하여 Prophet 모델의 정확도를 향상시킬 수 있습니다. Prophet 모델은 하이퍼파라미터에 대해 다양한 사전 분포를 제공하며, 다양한 사전 분포를 실험하고 데이터에 가장 적합한 분포를 선택하는 것이 중요합니다.
예를 들어, 넓은 범위의 값이 가능한 하이퍼파라미터에 대해서는 균등 분포가 적합할 수 있으며, 특정 값을 중심으로 하는 값이 더 가능성이 높은 경우 라플라스 또는 가우시안 분포가 적합할 수 있습니다.

 

모델의 성능 시각화

Prophet 모델의 성능을 시각화하여 모델의 잠재적인 문제점을 식별하고 정확도를 개선할 수 있습니다. Cross-validation plots, residuals plots 및 prediction intervals과 같은 도구를 사용하여 모델의 성능을 시각화할 수 있습니다.

위의 추가적인 팁들을 따르면 Prophet 모델의 성능을 더욱 최적화하고 더욱 정확한 예측을 할 수 있습니다.

import pandas as pd
from fbprophet import Prophet
import matplotlib.pyplot as plt

# Load data
df = pd.read_csv('example_data.csv')

# Convert the 'date' column to a datetime object
df['date'] = pd.to_datetime(df['date'])

# Create a Prophet model
model = Prophet()

# Fit the model
model.fit(df[['ds', 'y']])

# Create a forecast for a future time period
future = model.make_future_dataframe(periods=365)
forecast = model.predict(future)

# Plot the forecast and actual values
fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(df['ds'], df['y'], label='Actual')
ax.plot(forecast['ds'], forecast['yhat'], label='Forecast')
ax.fill_between(forecast['ds'], 
                forecast['yhat_lower'], 
                forecast['yhat_upper'], 
                alpha=0.2)
ax.set_xlabel('Date')
ax.set_ylabel('Value')
ax.legend()
plt.show()
이 예시에서는 날짜 열을 포함한 데이터셋을 불러와 Prophet 모델을 생성합니다. 데이터를 사용하여 모델을 피팅하고 미래 시간 대에 대한 예측을 생성합니다. 이후 matplotlib를 사용하여 예측값과 실제값을 시각화합니다. 실제값은 파란색으로, 예측값은 주황색으로 나타내며, 예측값의 상한선과 하한선 사이의 영역을 반투명 회색으로 채웁니다.
Prophet 모델의 성능을 시각화하여 모델의 정확성을 평가하고 잠재적인 문제점을 식별할 수 있습니다. 실제값과 예측값을 비교함으로써 모델이 데이터를 어떻게 잘 맞추고 있는지 파악하고 필요한 조정을 수행할 수 있습니다.

 

 

Prophet 모델은 시계열 데이터 예측에 강력한 도구이지만, 그 정확성은 모델 조정에 달려 있습니다. 이 글에서 제시한 최적의 방법을 따르면 Prophet 모델의 정확성을 향상시키고 보다 정확한 예측을 할 수 있습니다.
728x90
반응형

댓글