파라미터 튜닝을 할때에 값을 여러 옵션을 먼저 지정하지 않고, 최소한의 옵션으로 코드가 잘 수행 되는지 확인
을 한후, 옵션을 추가해서 파라미터튜닝을 하는게 좋다.
'''파라미터 튜닝 해보자구 ! '''
#귀찮으니까 싹다 임포트
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
'프로젝트' 카테고리의 다른 글
Prophet 주식 예측-4 - 텔레그램 봇 (0) | 2022.10.23 |
---|---|
Python - Prophet 주가예측 -2 그래프 검증 (0) | 2022.10.21 |
Python - fbprophet을 이용한 한국주식 예측 하기 (0) | 2022.10.04 |