示例#1
0
def holt_winters_ci():
    N, t, m = 100, 80, 4
    realisations = pd.Series(list(sample_seasonal_random_walk(N,m)), range(N))
    mod = ExponentialSmoothing(realisations[:t+1], trend=True, seasonal=m, initialization_method='estimated').fit(disp=False)
    print(mod.summary())
    forecasts = mod.get_forecast(N-(t+1))
    forecasts_ci = forecasts.conf_int(alpha=0.05)
    plot_ci(realisations, pd.Series(np.nan, range(t+1)).append(forecasts.predicted_mean), forecasts_ci)
    py.show()
示例#2
0
def holtwinter_model(target_variable, n_test, account_id, plot, save):

    from statsmodels.tsa.api import ExponentialSmoothing
    from sklearn.metrics import mean_squared_error
    from math import sqrt
    import numpy as np
    from save_forecast import save_forecast

    #Split target variable into training/test set
    train, test = train_test_split(target_variable, n_test)

    y_hat_avg = test.copy()
    #Fit the model
    fit1 = ExponentialSmoothing(
        np.asarray(train[train.columns[0]]),
        seasonal_periods=7,
        trend='add',
        seasonal='add',
    ).fit()

    #Create forecast and save to dataframe
    y_hat_avg['Holt_Winter'] = fit1.forecast(len(test))

    #Calculate RMS
    rms = sqrt(mean_squared_error(test[test.columns[0]],
                                  y_hat_avg.Holt_Winter))

    #Plot results
    if plot is True:
        import matplotlib.pyplot as plt
        plt.figure(figsize=(16, 8))
        #plt.plot(train[train.columns[0]], label='dod_model.Train')
        plt.plot(test[test.columns[0]], label='Test')
        plt.plot(y_hat_avg['Holt_Winter'], label='Holt_Winter')
        plt.legend(loc='best')
        plt.show()

    #save forecast
    if save is True:
        save_forecast(y_hat_avg["Holt_Winter"], target_variable.columns[0],
                      "holtwinter", account_id)

    return {"rms": rms, "summary": fit1.summary()}
示例#3
0
                           seasonal = 'add',
                           trend = 'add').fit(smoothing_level=0.01,
                                        smoothing_slope=0.1,
                                        smoothing_seasonal=0.3)
Forecast = TES.forecast(12).rename('Forecast')
Actual_Forecast_Df = pd.concat([Fullraw3, Forecast], axis =1)

sns.lineplot(data = Actual_Forecast_Df)

Validation_Df =Actual_Forecast_Df[-12:].copy()
np.mean(abs(Validation_Df['Open'] -Validation_Df['Forecast'])/Validation_Df['Open'])*100  #MAPE################
np.sqrt(np.mean((Validation_Df['Open']- Validation_Df['Forecast'])**2))


TES2 = ExponentialSmoothing(Train,
                           seasonal_periods = 12,
                           seasonal = 'add',
                           trend = 'add').fit()

                            
TES2.summary()

Forecast_2 = TES2.forecast(12).rename('Forecast_2')
Actual_Forecast_Df = pd.concat([Fullraw3, Forecast_2], axis =1)

sns.lineplot(data = Actual_Forecast_Df)

Validation_Df =Actual_Forecast_Df[-12:].copy()
np.mean(abs(Validation_Df['Sales'] -Validation_Df['Forecast_2'])/Validation_Df['Open'])*100  #MAPE################
np.sqrt(np.mean((Validation_Df['Open']- Validation_Df['Forecast_2'])**2))
示例#4
0
# Récupérer Estimateurs
hw_aic   = round(hw.aic, 2)
hw_bic   = round(hw.bic, 2)
dfhw = hw.params_formatted
float(dfhw[dfhw.name == 'alpha']['param'].values)
hw_α = float(dfhw[dfhw.name == 'alpha']['param'].values)
hw_β = float(dfhw[dfhw.name == 'beta']['param'].values)
hw_γ = float(dfhw[dfhw.name == 'gamma']['param'].values)

print("Paramètres Holt-Winters :  α = ", hw_α, "  |  β = ",hw_β, "  |  γ = ",hw_γ)


# In[25]:


hw.summary().tables[1]


# #### Test des Résidus "holt-winters" prédits avec Shapiro

# In[26]:


from scipy.stats import shapiro
print("TEST Shapiro P-value = ", shapiro(hw.resid)[1])


# Ici, l'hypothèse de normalité n'est pas remise en cause (p-value = 0.46 > 0.05).

# In[27]: