Работа с временными рядами: прогнозирование

Keras.js — это библиотека, позволяющая запускать модели, обученные с использованием Keras на Python, прямо в браузере с помощью JavaScript. Основное преимущество использования Keras.js для работы с временными рядами заключается в возможности создавать интерактивные приложения и визуализировать прогнозы без необходимости серверной обработки.

Подготовка данных для временных рядов

Временные ряды характеризуются последовательной зависимостью между наблюдениями. Для работы с ними необходимо подготовить данные в виде последовательностей фиксированной длины. Пример стандартной процедуры подготовки:

  1. Нормализация данных Значения временного ряда обычно нормализуются для ускорения обучения и повышения стабильности модели:

    function normalizeSeries(series) {
        const min = Math.min(...series);
        const max = Math.max(...series);
        return series.map(x => (x - min) / (max - min));
    }
  2. Формирование обучающих последовательностей Если используется окно размером window_size, то каждое окно данных становится входом модели, а следующее значение — выходом:

    function createSequences(series, window_size) {
        const X = [];
        const y = [];
        for (let i = 0; i < series.length - window_size; i++) {
            X.push(series.slice(i, i + window_size));
            y.push(series[i + window_size]);
        }
        return { X, y };
    }

Архитектура модели для прогнозирования

Для задач прогнозирования временных рядов обычно применяются рекуррентные нейронные сети (RNN), особенно LSTM (Long Short-Term Memory). В Keras модели обучаются на Python, а затем экспортируются для использования в браузере с Keras.js.

Ключевые моменты при проектировании модели:

  • Размер входного слоя должен соответствовать длине окна (window_size).
  • Количество LSTM-слоев и их размер зависит от сложности временного ряда.
  • Выходной слой — полносвязный слой с одной нейронной единицей для предсказания следующего значения ряда.

Пример на Python для подготовки модели, которую затем можно загрузить в Keras.js:

from keras.models import Sequential
from keras.layers import LSTM, Dense

model = Sequential()
model.add(LSTM(50, input_shape=(window_size, 1)))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')
model.save('model.json')

Загрузка и использование модели в Keras.js

После экспорта модели в формате JSON её можно загрузить в браузере:

const KerasJS = require('keras-js');

const model = new KerasJS.Model({
    filepaths: {
        model: 'model.json',
        weights: 'model_weights.buf',
        metadata: 'model_metadata.json'
    },
    gpu: true
});
  • gpu: true позволяет ускорить вычисления на GPU с поддержкой WebGL.
  • Модель необходимо загрузить перед использованием:
await model.ready();

Прогнозирование на новых данных

Для предсказания следующего значения временного ряда:

  1. Данные преобразуются в формат Float32Array и нормализуются.
  2. Создаётся объект входных данных:
const inputData = {
    input: new Float32Array(windowedSequence)  // длина = window_size
};
  1. Выполняется прогноз:
const outputData = await model.predict(inputData);
const predictedValue = outputData.output[0];

Последовательные прогнозы

Для многократного прогнозирования на несколько шагов вперёд используется скользящее окно, где каждый следующий прогноз подставляется в конец окна:

let currentWindow = initialWindow.slice();
const predictions = [];

for (let i = 0; i < n_steps; i++) {
    const inputData = { input: new Float32Array(currentWindow) };
    const outputData = await model.predict(inputData);
    const nextValue = outputData.output[0];
    predictions.push(nextValue);
    currentWindow.shift();
    currentWindow.push(nextValue);
}

Оптимизация и особенности работы

  • Нормализация и денормализация важны для корректного прогнозирования и интерпретации результатов.
  • Размер окна существенно влияет на качество прогноза: слишком маленький — модель не видит долгосрочные зависимости, слишком большой — обучение замедляется.
  • Аппаратное ускорение через WebGL или WebGPU позволяет работать с большими моделями без значительных задержек в браузере.
  • Визуализация результатов может быть интегрирована с графическими библиотеками, например, D3.js или Chart.js, для интерактивного анализа временных рядов.

Применение

Использование Keras.js для прогнозирования временных рядов эффективно в следующих сценариях:

  • Финансовые данные и биржевые котировки.
  • Сбор и анализ показателей сенсоров в реальном времени.
  • Прогнозирование нагрузки на серверы или трафика пользователей.
  • Интерактивные веб-приложения с прогнозами на стороне клиента без серверной зависимости.

Keras.js обеспечивает переносимость моделей, низкую задержку прогнозирования и интеграцию с фронтенд-приложениями, сохраняя при этом все преимущества архитектуры Keras.