nostradamus
v0.1.0
Published
Holt-Winters triple exponential smoothing algorithm (for time series forecasting)
Downloads
37
Readme
Nostradamus.js
-- is a time-series forecasting tool for Node.js
-- uses triple exponential smoothing via the Holt-Winters approach
-- works best with seasonal && trending data
-- can be quite useful in a machine context
$ npm install nostradamus
Option 1:
// plain-vanilla
var forecast = require('nostradamus')
, data = [
362, 385, 432, 341, 382, 409,
498, 387, 473, 513, 582, 474,
544, 582, 681, 557, 628, 707,
773, 592, 627, 725, 854, 661
]
, alpha = 0.5 // overall smoothing component
, beta = 0.4 // trend smoothing component
, gamma = 0.6 // seasonal smoothing component
, period = 4 // # of observations per season
, m = 4 // # of future observations to forecast
, predictions = [];
predictions = forecast(data, alpha, beta, gamma, period, m);
// -> [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 594.8043646513713, 357.12171044215734, …]
Option 2:
// faster w/ reuse of internal arrays
// if you know you'll be feeding it
// the same # of data, same params (alpha, beta, etc.),
// and you need to throw tons of data at it
var setupForecast = require('nostradamus').memo // note the (dot)memo
, forecast
, data = [
362, 385, 432, 341, 382, 409,
498, 387, 473, 513, 582, 474,
544, 582, 681, 557, 628, 707,
773, 592, 627, 725, 854, 661
]
, predictions = [];
forecast = setupForecast({
length: data.length,
alpha: 0.5, // overall smoothing component
beta: 0.4, // trend smoothing component
gamma: 0.6, // seasonal smoothing component
period: 4, // # of observations per season
m: 4 // # of future observations to forecase
});
predictions = forecast(data);
// -> [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 594.8043646513713, 357.12171044215734, …]
forecast([…]);
forecast([…]);
forecast([…]);
…
Some rules your parameters must abide by:
alpha >= 0.0 && alpha >= 1.0
beta >= 0.0 && beta <= 1.0
gamma >= 0.0 && gamma <= 1.0
m > 0
m <= period
This project would't exist, if not for the versions written in Go and Java. Thanks!