def generate_dataset_ARIMA(pun, first_day, meteo, varn): vector_date = np.array(pun[pun.columns[0]]) vector_ore = np.array(pun[pun.columns[1]]) target = np.array(pun[varn]) global_dates = temp.dates(pd.Series(vector_date)) vac_glob = temp.add_holidays(global_dates) all_days = temp.generate_days(vector_ore, first_day) MD = replicate_meteo_variables(meteo, global_dates) aad = np.array([temp.convert_day_to_angle(v) for v in all_days]) aore = np.sin(vector_ore*np.pi/24) all_dict = {'holiday' : vac_glob, 'day' : aad, 'ora' : aore} all_dict.update(MD) FDF = pd.DataFrame(all_dict) return FDF, target
arma_y = statsmodels.tsa.arima_model.ARIMA(endog=ardata["PUN"], order=[4, 1, 2]).fit(trend='c', method='mle', maxiter=100) arma_y.resid RMSE = np.sqrt(np.mean(arma_y.resid**2)) arma_y.forecast(steps=24) ### provo modello PUN, ORA, GIORNO, HOLIDAY vac = temp.add_holidays(dates) ## <- ad = temp.associate_days(data[data.columns[1]], 'ven') yd = temp.generate_days(data[data.columns[1]], 'ven') anglesd = np.array([temp.convert_day_to_angle(v) for v in yd]) ## <- ora = np.sin(np.array(data[data.columns[1]]) * np.pi / 24) ## <- arg = {'holiday': vac, 'day': anglesd, 'ora': ora} arg = pd.DataFrame(arg) arfit = statsmodels.tsa.arima_model.ARIMA(endog=ardata["PUN"], order=[4, 1, 2], exog=arg.as_matrix()).fit( trend='c', method='mle', maxiter=100) rmse_fit = Functions_for_TSP.RMSE(arfit.resid) ## 7.7520042757584031 trainset = list(range(8016)) testset = list(range(8016, 8760))
#### ARMA-like methods require only the time series (the lags are computed internally) #### the DataFrame from create_dataset has to be used only in NN-like methods arma_y = statsmodels.tsa.arima_model.ARIMA(endog=ardata["PUN"], order=[4,1,2]).fit(trend = 'c', method = 'mle', maxiter = 100) arma_y.resid RMSE = np.sqrt(np.mean(arma_y.resid**2)) arma_y.forecast(steps=24) ### provo modello PUN, ORA, GIORNO, HOLIDAY vac = temp.add_holidays(dates) ## <- ad = temp.associate_days(data[data.columns[1]], 'ven') yd = temp.generate_days(data[data.columns[1]], 'ven') anglesd = np.array([temp.convert_day_to_angle(v) for v in yd]) ## <- ora = np.sin(np.array(data[data.columns[1]])*np.pi/24) ## <- arg = {'holiday' : vac, 'day' : anglesd, 'ora' : ora} arg = pd.DataFrame(arg) arfit = statsmodels.tsa.arima_model.ARIMA(endog=ardata["PUN"], order=[4,1,2],exog = arg.as_matrix()).fit(trend = 'c', method = 'mle', maxiter = 100) rmse_fit = Functions_for_TSP.RMSE(arfit.resid) ## 7.7520042757584031 trainset = list(range(8016)) testset = list(range(8016,8760)) artfit = statsmodels.tsa.arima_model.ARIMA(endog=ardata["PUN"].ix[trainset], order=[4,1,2],exog = arg.ix[trainset].as_matrix()).fit(trend = 'c', method = 'mle', maxiter = 100) art_forecast = artfit.forecast(steps = 744, exog = arg.ix[testset].as_matrix())