# Holt-Winters algorithms to forecasting # Coded in Python 2 by: Andre Queiroz # Reference: Brockwell, P. J.; Davis, R. A. Introduction to Time Series and Forecasting. New York: Springer-Verlang, 2002. 434 p. from sys import maxint from math import sqrt def non_seasonal(x, fc): alpha_opt = 0 beta_opt = 0 erro = maxint for alpha in range(101): for beta in range(101): a = [x[1]] b = [x[1] - x[0]] y = [a[0] + b[0]] e = [] for i in range(2, len(x)): a.append(alpha / float(100) * x[i] + (1 - alpha / float(100)) * (a[i - 2] + b[i - 2])) b.append(beta / float(100) * (a[i - 1] - a[i - 2]) + (1 - beta / float(100)) * b[i - 2]) y.append(a[i - 1] + b[i - 1]) e.append((x[i] - y[i - 2]) ** 2) if sum(e) < erro: erro = sum(e) alpha_opt = alpha / float(100) beta_opt = beta / float(100) a = [x[1]] b = [x[1] - x[0]] y = [a[0] + b[0]] e = [] mse = 0 for i in range(2, len(x) + fc): if i == len(x): x.append(a[-1] + b[-1]) a.append(alpha_opt * x[i] + (1 - alpha_opt) * (a[i - 2] + b[i - 2])) b.append(beta_opt * (a[i - 1] - a[i - 2]) + (1 - beta_opt) * b[i - 2]) y.append(a[i - 1] + b[i - 1]) e.append((x[i] - y[i - 2]) ** 2) mse = sqrt(sum([(m - n) ** 2 for m, n in zip(x[2:-fc], y[:-fc - 1])]) / len(x[2:-fc])) return x[-fc:], alpha_opt, beta_opt, mse