bo3_ensemble = model_predictions[model] * pesos2[i] + bo3_ensemble bo3_mean = model_predictions[model] / len(score) + bo3_mean # compute score m = info_dataset.Frequency[freq[0] + '1'] mase_all.append(np.vstack([ mase_m4(train, test, models_des_predictions[0], m=m), mase_m4(train, test, ensemble_pred, m=m), mase_m4(train, test, mean_pred, m=m), mase_m4(train, test, groe_ensemble, m=m), mase_m4(train, test, bo3_ensemble, m=m), mase_m4(train, test, bo3_mean, m=m), ])) smape_all.append(np.vstack([ smape_m4(test, models_des_predictions[0]), smape_m4(test, ensemble_pred), smape_m4(test, mean_pred), smape_m4(test, groe_ensemble), smape_m4(test, bo3_ensemble), smape_m4(test, bo3_mean), ])) pkl.dump(mase_all, open("ensembling_mase_"+freq+".pkl", "wb")) pkl.dump(smape_all, open("ensembling_smape_"+freq+".pkl", "wb")) print("MASE; Naive2: {:.3f}, Linear Regression: {:.3f}, Mean ensembling: {:.3f}, GROE ensembling: {:.3f}, " "BO3 ensembling: {:.3f}, BO3 Mean: {:.3f}".format(*tuple(np.nanmean(np.stack(mase_all), axis=(0, 2))))) print("sMAPE; Naive2: {:.3f}, Linear Regression: {:.3f}, Mean ensembling: {:.3f}, GROE ensembling: {:.3f}, " "BO3 ensembling: {:.3f}, BO3 Mean: {:.3f}".format(*tuple(np.nanmean(np.stack(smape_all), axis=(0, 2))))) print("OWA: ", owa_m4(freq, np.nanmean(np.stack(smape_all), axis=(0, 2)), np.nanmean(np.stack(mase_all), axis=(0, 2))))
mase_m4(train, test, forecast_naive2, m=m), mase_m4(train, test, forecast_ses, m=m), mase_m4(train, test, forecast_holt, m=m), mase_m4(train, test, forecast_damp, m=m), mase_m4(train, test, forecast_comb, m=m), ])) smape_all.append( np.vstack([ smape_m4(test, forecast_naiveSeason), smape_m4(test, forecast_naive), smape_m4(test, forecast_naive2), smape_m4(test, forecast_ses), smape_m4(test, forecast_holt), smape_m4(test, forecast_damp), smape_m4(test, forecast_comb), ])) pkl.dump(mase_all, open("baseline_mase_" + cat + ".pkl", "wb")) pkl.dump(smape_all, open("baseline_smape_" + cat + ".pkl", "wb")) print( "MASE; sNaive: {:.3f}, sNaive+Drift: {:.3f}, Naive2: {:.3f}, SES: {:.3f}, Holt: {:.3f}, " "Damped: {:.3f}, Comb: {:.3f}".format( *tuple(np.nanmean(np.stack(mase_all), axis=(0, 2))))) print( "sMAPE; sNaive: {:.3f}, sNaive+Drift: {:.3f}, Naive2: {:.3f}, SES: {:.3f}, Holt: {:.3f}, " "Damped: {:.3f}, Comb: {:.3f}".format( *tuple(np.nanmean(np.stack(smape_all), axis=(0, 2))))) print( "OWA: ", owa_m4(cat, np.nanmean(np.stack(smape_all), axis=(0, 2)), np.nanmean(np.stack(mase_all), axis=(0, 2))))
groe_owa(train, ets_model, m, max(5, len(train) - len(test)), int(np.floor(len(test) / 6)), 6)] if not np.all(np.array(criterion) > 0): fallback(mase_all, smape_all, train, test, m) continue Score = 1 / np.array(criterion) pesos = Score / Score.sum() groe_ensemble = 0 for prediction, weight in zip(model_predictions, pesos): groe_ensemble = prediction * weight + groe_ensemble if (groe_ensemble.univariate_values() < 0).any(): indices = test.time_index[groe_ensemble.univariate_values() < 0] groe_ensemble = groe_ensemble.update(indices, np.zeros(len(indices))) mase_all.append(np.vstack([ mase_m4(train, test, groe_ensemble, m=m), ])) smape_all.append(np.vstack([ smape_m4(test, groe_ensemble), ])) print("MASE GROE: {:.3f}".format(np.nanmean(np.stack(mase_all), axis=(0, 2)))) print("sMAPE GROE: {:.3f}".format(np.nanmean(np.stack(smape_all), axis=(0, 2)))) print("OWA GROE: {:.3f}".format(owa_m4(freq, np.nanmean(np.stack(smape_all), axis=(0, 2)), np.nanmean(np.stack(mase_all), axis=(0, 2))))) pickle.dump(mase_all, open("groeR_mase_" + freq + ".pkl", "wb")) pickle.dump(smape_all, open("groeR_smape_" + freq + ".pkl", "wb"))