HW: Impact of baseline duration (L) on Forecasts for missing data

The following two graphs show the impact of of holes in the observations on the forecasts as one changes the duration (L) which includes 95% of the weights contributing to the Exponential Weighted Moving Average (EWMA) for the baseline smoothing parameter a = 1 - exp (ln(1 - total weights as %) / # of time points) = 1 - exp(ln(0.5%)/L). The graphs below show the observations, the HW forecast, the X2 = SUM((Observation-Forecast)2/Forecast) where the sum is over the L points, the mean of the last L points that lay within mean - 3 * standard_deviations (the history buffer mean), the standard deviation of the history buffer, points at which events were triggered[1] and holes in the observations. The thing to note is the large difference in the forecasts for the missing data (holes) and how they change with various parameters..

Basically what we found in some papers is that minimal errors optimization has to be done for example in the simplest way with a grid search with some small ( 0.01) step size for each parameter over the "training" set of observations ( no holes).

Caltech: L is equivalent to 3 hours

The parameters of the following graph for Caltech are:

[maxim@netflow ~/work]$ ./plotem_for -p dbcap -a 40 -t -x -e 2004_07_30 -b -n detail-node1.cacr.caltech.edu.txt
Observ_diff = 322.28 sec L(3 hours)=33 points Y(7days) = 1876 points
HW: Base=0.0867811892914749 Trend=4.99010115920795e-05 Seasonal=4.99010115920795e-05

 Caltech: L is equivalent to the number of points in 4 hours

Also increased the trend duration to 12 weeks.

Caltech: L is equivalent to the number of points in 6 hours

NIIT:

[maxim@netflow ~/work]$ ./plotem_for -p dbcap -a 40 -t -x -e 2004_07_30 -b -n detail-node1.niit.pk.txt
Observ_diff_average = 113.51 sec L(3 hours)=95 points Y(7days) = 5328 points
HW:
Base=0.0310420118679549 Trend=5.98149342312393e-06 Seasonal=5.98149342312393e-06

Extending the trend duration to 12 weeks

Footnotes:

[1] The events were triggered using a history/trigger buffer scheme:

my ($mean1, $dev1) = stats(\@History);
if( $hw_forecasted< ($mean1 - 3.*$dev1)) {
  push @Trigger, $observation;
}
else {
  shift @Trigger; push @History, $hw_forecasted;
}
if ($#Trigger > $T_L) {
  &set_alert();
  splice( @History, 0, ($#History - $#Trigger - 1), @Trigger);
  @Trigger = ();
}
if ($#History > $H_L) { shift @History; }

If mean(trigger_buffer) < mean(history_buffer)-3*standard_deviation(history_buffer) then an event is triggered.