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
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)
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
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()