프로젝트 / / 2022. 10. 22. 09:35

Python - Prophet 주식 예측- 3 하이퍼 파라미터 튜닝

파라미터 튜닝을 할때에 값을 여러 옵션을 먼저 지정하지 않고, 최소한의 옵션으로 코드가 잘 수행 되는지 확인 

을 한후, 옵션을 추가해서 파라미터튜닝을 하는게 좋다. 

 

'''파라미터 튜닝 해보자구 ! '''
#귀찮으니까 싹다 임포트

import xgboost as xgb
from xgboost import XGBClassifier

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from fbprophet.diagnostics import cross_validation
from fbprophet.diagnostics import performance_metrics
from fbprophet.plot import plot_cross_validation_metric
import itertools

def create_param_combinations(**param_dict):
    param_iter = itertools.product(*param_dict.values())
    params =[]
    for param in param_iter:
        params.append(param)
    params_df = pd.DataFrame(params, columns=list(param_dict.keys()))
    return params_df

def single_cv_run(history_df, metrics, param_dict):
    m = Prophet(**param_dict)
    # m.add_country_holidays(country_name='국가') // 주가 데이터는 어차피 휴일은 포함되지 않기때문에 제외 했다. 
    m.fit(history_df)
    df_cv = cross_validation(m, initial='365 days', period='90 days', horizon = '180 days')
    df_p = performance_metrics(df_cv).mean().to_frame().T
    df_p['params'] = str(param_dict)
    df_p = df_p.loc[:, metrics]
    return df_p
 
 
metrics = ['horizon', 'rmse', 'mape', 'params']

results = []
 
#최소한의 파라미터 
parameters = {  
    'changepoint_prior_scale': [0.1,0.3],
    'seasonality_prior_scale': [0.1, 0.3],
    'changepoint_range': [0.1,0.3],
}
 
 
params_df = create_param_combinations(**parameters)
for param in params_df.values:
    param_dict = dict(zip(params_df.keys(), param))
    cv_df = single_cv_run(stockinfo,  metrics, param_dict)
    results.append(cv_df)
results_df = pd.concat(results).reset_index(drop=True)
best_param = results_df.loc[results_df['mape'] == min(results_df['mape']), ['params']]
print(f'\n 파라미터 베스트 조합 {best_param.values[0][0]}')
results_df

 

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유