Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
1.0 kB
6
Indexable
def exp_smoothing_cross_validation(y,folds=12,pred_window=6):

    err_contatiner = pd.DataFrame(columns=['MAPE', 'RMSE', 'ME', 'MAE', 'MSE', 'SSE', 'SMAPE',"AIC"])
    
    for i in range(len(y)-pred_window - folds+1,len(y)-pred_window+1):
        # splitting the data into train and test
        train = y.iloc[:i]
        test = y.iloc[i:i+pred_window]
        #model fitting
        model = ExponentialSmoothing(train, trend='add',freq="6M")
        model_fit = model.fit(smoothing_level=0.05)
        # forecasting
        fold_forecast = model_fit.forecast(pred_window)

        ## calculating errors and AIC of each fold
        fold_errors = utility.forecast_perf_metrics(test,fold_forecast)
        fold_errors = pd.DataFrame.from_dict(fold_errors,orient="index").T
        fold_errors["AIC"] = model_fit.aic
        err_contatiner = pd.concat([err_contatiner,fold_errors],axis=0,ignore_index=True)

    return err_contatiner.mean() 

err = exp_smoothing_cross_validation(otc_ppt_df["SEVERITY_ARC"].dropna())
err