0Pricing
Learn AI with Python · Урок

LSTM для прогнозирования временных рядов

Подготовка последовательностей, stateless- и stateful-варианты LSTM, окно ретроспективы, многошаговое прогнозирование

«LSTM для прогнозирования временных рядов» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.

Почему LSTM подходит для временных рядов

LSTM (долговременная краткосрочная память) — рекуррентная нейронная сеть, которая запоминает закономерности в длинных последовательностях с помощью ячеек памяти с вентилями. Она может моделировать нелинейные зависимости, которые ARIMA не способна учитывать, поэтому хорошо подходит для сложных рядов при наличии достаточного объёма данных.

Разбиение последовательности на окна

LSTM обучаются на окнах: фрагментах прошлого фиксированной длины, которые используются для предсказания следующего значения. При размере окна 10 модель видит шаги 1–10 и предсказывает шаг 11, затем шаги 2–11 и предсказывает шаг 12 и так далее.

Создание окон в коде

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

import numpy as np

def make_windows(series, window):
    X, y = [], []
    for i in range(len(series) - window):
        X.append(series[i:i+window])
        y.append(series[i+window])
    return np.array(X), np.array(y)

X, y = make_windows(values, window=10)

Масштабирование данных

Нейронные сети лучше обучаются на масштабированных входных данных. Используйте MinMaxScaler, чтобы преобразовать значения к диапазону [0, 1], и не забудьте позже выполнить обратное преобразование предсказаний.

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
scaled = scaler.fit_transform(values.reshape(-1, 1))

Изменение формы данных для LSTM

Слои LSTM в Keras ожидают входные данные формы (образцы, временные шаги, признаки). Для одномерного ряда число признаков равно 1.

# X is (samples, timesteps); add a feature axis
X = X.reshape((X.shape[0], X.shape[1], 1))
print(X.shape)  # (samples, timesteps, 1)

Построение модели

Простая архитектура: один слой LSTM(50), передающий данные на выходной слой Dense(1), который предсказывает следующее значение.

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

model = Sequential([
    LSTM(50, input_shape=(X.shape[1], 1)),
    Dense(1)
])

Почему Dense(1)

Прогнозирование на один шаг вперёд — это задача регрессии с одним числовым результатом, поэтому в последнем слое используется Dense(1) без функции активации. Для многошаговых прогнозов можно использовать Dense(n_steps).

Компиляция

Используйте оптимизатор adam и функцию потерь mse (среднеквадратичную ошибку) — стандартный выбор для регрессии с непрерывными целевыми значениями.

model.compile(optimizer="adam", loss="mse")

Обучение

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

history = model.fit(
    X, y,
    epochs=50,
    batch_size=32,
    validation_split=0.2
)

Предсказание

Выполните предсказание для новых окон, а затем примените обратное преобразование, чтобы вернуться к исходному масштабу.

pred_scaled = model.predict(X_test)
pred = scaler.inverse_transform(pred_scaled)

Объединение слоёв и настройка

Для более сложных рядов объединяйте несколько LSTM-слоёв (задавайте return_sequences=True для всех слоёв, кроме последнего) и добавляйте прореживание. Дополнительные слои выявляют более глубокие закономерности, но требуют больше данных и повышают риск переобучения.

model = Sequential([
    LSTM(50, return_sequences=True, input_shape=(X.shape[1], 1)),
    LSTM(50),
    Dense(1)
])

Проверка знаний

Проверьте свои знания о прогнозировании с помощью LSTM.

Итоги

Вы подготовили окна, масштабировали данные с помощью MinMaxScaler, изменили их форму на (образцы, временные шаги, признаки), создали связку LSTM(50) + Dense(1), выполнили компиляцию с adam/mse, обучили модель и сделали предсказания, вернув их к исходному масштабу. На этом курс «Временные ряды» завершён. Следующий курс: рекомендательные системы.

Часто задаваемые вопросы

Урок «LSTM для прогнозирования временных рядов» бесплатный?

Да — полный текст урока «LSTM для прогнозирования временных рядов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.

Чему я научусь в уроке «LSTM для прогнозирования временных рядов»?

Подготовка последовательностей, stateless- и stateful-варианты LSTM, окно ретроспективы, многошаговое прогнозирование Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Learn AI with Python?

Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «LSTM для прогнозирования временных рядов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Learn AI with Python?

Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Компоненты временных рядов и стационарность
  2. Модели ARIMA и SARIMA
  3. Prophet для автоматического прогнозирования
  4. LSTM для прогнозирования временных рядов
← Назад к Learn AI with Python