Exemplo n.º 1
0
    def forecast_demands(self,verbose=False):
        """ See :meth:`StatisticalForecast.forecast_demands`."""

        logger.debug("forecasting demands with double seasonal HW..")
        cached = StatisticalForecast.read_from_cache(self)

        if cached != None:
            return cached
        demand = self.demands[0] #dshw demands only contains one dataset
        sph = self.samples_per_hour
        fc = self.output_weeks * 24 * 7 * self.samples_per_hour #forecast_length

        (alpha, beta, gamma, delta, autocorr) = (None for i in range(5))
        t = time.time()
        forecast_values, (alpha, beta, gamma, delta, autocorrelation),in_sample = double_seasonal(demand, m=int(24*sph), m2=int(24*7*sph),
                                                                           forecast=int(fc), alpha=alpha, beta=beta, gamma=gamma, delta=delta,
                                                                           autocorrelation=autocorr)
                                                                            

        if verbose:
            mse = ((in_sample - forecast_values) ** 2).mean(axis=None)
            calculated_parameters = {
                "alpha": alpha, "beta": beta, "gamma": gamma, "delta":delta, 
                "autocorrelation":autocorrelation, "mse": mse}
            print "use auto HW ",calculated_parameters
        
        logger.debug("doubleseasonal completed in:" + str(time.time()-t) + " s")
        
        return forecast_values
Exemplo n.º 2
0
 def update_hw(val):
     alpha = alpha_slider.val
     autocorr = autocorr_slider.val
     beta = 0.0
     gamma = gamma_slider.val
     delta = delta_slider.val
     
     
     forecast_values, params, insample = double_seasonal(trainingdata, m,m2,fc, alpha, beta, gamma,delta,autocorr)
     values ={ 'forecasting':forecast_values, 'measured':testdata}
     
     forecast_plot.set_ydata(forecast_values)
     sim_plot.set_ydata(testdata)
     fig.canvas.draw_idle()
     
     print alpha, autocorr, gamma, MSE(testdata, forecast_values)
Exemplo n.º 3
0
    def forecast_demands(self, verbose=False):
        """ See :meth:`StatisticalForecast.forecast_demands`."""

        logger.debug("forecasting demands with double seasonal HW..")
        cached = StatisticalForecast.read_from_cache(self)

        if cached != None:
            return cached
        demand = self.demands[0]  #dshw demands only contains one dataset
        sph = self.samples_per_hour
        fc = self.output_weeks * 24 * 7 * self.samples_per_hour  #forecast_length

        (alpha, beta, gamma, delta, autocorr) = (None for i in range(5))
        t = time.time()
        forecast_values, (alpha, beta, gamma, delta,
                          autocorrelation), in_sample = double_seasonal(
                              demand,
                              m=int(24 * sph),
                              m2=int(24 * 7 * sph),
                              forecast=int(fc),
                              alpha=alpha,
                              beta=beta,
                              gamma=gamma,
                              delta=delta,
                              autocorrelation=autocorr)

        if verbose:
            mse = ((in_sample - forecast_values)**2).mean(axis=None)
            calculated_parameters = {
                "alpha": alpha,
                "beta": beta,
                "gamma": gamma,
                "delta": delta,
                "autocorrelation": autocorrelation,
                "mse": mse
            }
            print "use auto HW ", calculated_parameters

        logger.debug("doubleseasonal completed in:" + str(time.time() - t) +
                     " s")

        return forecast_values
Exemplo n.º 4
0
def value_changer():
    try:
        from matplotlib.widgets import Slider, Button, RadioButtons
        
        from pylab import axes
    except:
        print "ljdlj"
    sep = os.path.sep
    path = os.path.join(BASE_DIR, "server" + sep + "forecasting" + sep + "simulation" + sep + "demodata" + sep + "demo_electricity_2014.csv")
    raw_data = DataLoader.load_from_file(path, "Strom - Verbrauchertotal (Aktuell)",delim="\t")
    ind = len(raw_data) / 2
    kW_data = StatisticalForecast.make_hourly([float(val) / 1000.0 for val in raw_data],6) #cast to float and convert to kW
    dates = [int(d) for d in DataLoader.load_from_file(path, "Datum", "\t")]
    input = make_hourly(kW_data,6)[-24*7:]
    start = calendar.timegm(datetime(year=2014,month=1,day=2).timetuple())
    start_index = approximate_index(dates, start)
    train_len= 24*7*8
    trainingdata = kW_data[start_index:start_index+train_len]
    test_start = start_index+train_len 
    testdata = kW_data[test_start:test_start+7*24*2]
    start_forecast = test_start*3600
    end_forecast = start_forecast + len(testdata) * 3600
      

    alpha = 0.0000001
    beta = 0.0
    gamma = 0.05
    delta = 0.01
    autocorr = 0.01
    #plot_dataset(values)
    m = 24
    m2 = 24 * 7
    #forecast length
    fc = int(len(testdata))
    forecast_values, params, insample = double_seasonal(trainingdata, m,m2,fc, alpha, beta, gamma,delta,autocorr)
    values ={ 'forecasting':forecast_values, 'measured':testdata}
    
    (fig, sim_plot,forecast_plot) = plot_dataset(values, 0,block=False)
    
    axcolor = 'lightgoldenrodyellow'
    axalpa = axes([0.25, 0.02, 0.65, 0.02], axisbg=axcolor)
    axautocorr  = axes([0.25, 0.05, 0.65, 0.02], axisbg=axcolor)
    axgamma  = axes([0.25, 0.08, 0.65, 0.02], axisbg=axcolor)
    axdelta  = axes([0.25, 0.11, 0.65, 0.02], axisbg=axcolor)
    
    alpha_slider = Slider(axalpa, 'Alpha', 0.0, 1.0, valinit=alpha)
    gamma_slider = Slider(axgamma, 'Gamma', 0.0, 1.0, valinit=gamma)
    delta_slider = Slider(axdelta, 'Delta', 0.0, 1.0, valinit=delta)
    autocorr_slider = Slider(axautocorr, 'autocorr_slider', 0.0, 1.0, valinit=autocorr)
    
    def update_hw(val):
        alpha = alpha_slider.val
        autocorr = autocorr_slider.val
        beta = 0.0
        gamma = gamma_slider.val
        delta = delta_slider.val
        
        
        forecast_values, params, insample = double_seasonal(trainingdata, m,m2,fc, alpha, beta, gamma,delta,autocorr)
        values ={ 'forecasting':forecast_values, 'measured':testdata}
        
        forecast_plot.set_ydata(forecast_values)
        sim_plot.set_ydata(testdata)
        fig.canvas.draw_idle()
        
        print alpha, autocorr, gamma, MSE(testdata, forecast_values)
        
        
    alpha_slider.on_changed(update_hw)
    autocorr_slider.on_changed(update_hw)
    gamma_slider.on_changed(update_hw)
    delta_slider.on_changed(update_hw)
    
    plt.show()