{
const data = [
{ sales: 0 },
{ sales: 0 },
{ sales: 0 },
{ sales: 0 },
{ sales: 0 },
{ sales: 0 },
{ sales: 92 },
{ sales: 759 },
{ sales: 3691 },
{ sales: 4039 },
{ sales: 2257 },
{ sales: 1736 },
{ sales: 3979 },
{ sales: 3170 },
{ sales: 6092 },
{ sales: 7839 },
{ sales: 5764 },
{ sales: 5512 },
{ sales: 5494 },
{ sales: 7458 },
{ sales: 3721 },
{ sales: 8512 },
{ sales: 1089 },
{ sales: 7462 },
{ sales: 710 },
{ sales: 4534 },
{ sales: 6224 },
{ sales: 7610 },
{ sales: 3976 },
{ sales: 6243 },
{ sales: 1532 },
{ sales: 2204 },
{ sales: 801 },
{ sales: 1575 },
{ sales: 2144 },
{ sales: 3679 },
{ sales: 217 },
{ sales: 5136 },
{ sales: 3052 },
{ sales: 4320 },
{ sales: 2750 },
{ sales: 2527 },
{ sales: 13962 },
{ sales: 2266 },
{ sales: 741 },
{ sales: 4220 },
{ sales: 3603 },
{ sales: 2688 },
{ sales: 5850 },
{ sales: 3387 },
{ sales: 4692 },
{ sales: 5251 },
{ sales: 9399 },
{ sales: 7165 },
{ sales: 5032 },
{ sales: 4208 },
{ sales: 1342 },
{ sales: 1571 },
{ sales: 1903 },
{ sales: 3614 },
{ sales: 5250 },
{ sales: 1631 },
{ sales: 2189 },
{ sales: 1850 },
{ sales: 2665 },
{ sales: 2645 },
{ sales: 2268 },
{ sales: 3233 },
{ sales: 1335 },
{ sales: 789 },
{ sales: 538 },
{ sales: 572 },
{ sales: 1011 },
{ sales: 6 },
];
const max = Math.max(...data.map(o => o.sales));
const min = Math.min(...data.map(o => o.sales));
function normalize(step) {
return (step.sales - min) / (max - min);
}
function denormalize(sales) {
return sales * (max - min) + min;
}
const scaledData = data.map(normalize)
const trainingData = [
scaledData.slice(0, 12),
scaledData.slice(12, 24),
scaledData.slice(24, 36),
scaledData.slice(36, 48),
scaledData.slice(48, 60),
scaledData.slice(60, 72),
];
const net = new brain.recurrent.LSTMTimeStep({
inputSize: 1,
hiddenLayers: [1],
outputSize: 1
});
net.train(trainingData, {
iterations: 200,
learningRate: 0.005,
errorTresh: 0.02,
log: (stats) => console.log(stats)
})
const firstSet = trainingData[0];
return net.forecast([
firstSet[0],
firstSet[1],
firstSet[2],
firstSet[3],
firstSet[4],
firstSet[5],
], 6).map(denormalize);
}