nostradamus

Holt-Winters triple exponential smoothing algorithm (for time series forecasting)

npm install nostradamus
2 downloads in the last week
9 downloads in the last month

Nostradamus.js


-- is a time-series forecasting tool for Node.js

-- uses triple exponential smoothing via the Holt-Winters approach

-- 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!

npm loves you