Временные ряды везде - вот как это на самом деле прогнозировать

Временные ряды везде - вот как это на самом деле прогнозировать

7 июля 2025 г.

В чем дело с временными рядами?

Данные временных рядов везде: цены на акции, показания температуры, трафик веб -сайта, сигналы ЭКГ - если у него есть временная метка, это временные ряды.

Традиционные статистические модели, такие как Arima или экспоненциальное сглаживание, выполняют работу для основных тенденций. Но давайте будем реальными - данные Тодея шумные, нелинейные и часто охватывают несколько переменных. Вот где машинное обучение (ML) и глубокое обучение (DL) сгибают свои мышцы.

Быстрый взгляд на традиционные подходы

Метод

Сильные стороны

Слабые стороны

Арима

Легко интерпретировать, хорошо для линейных тенденций

Борьба с нелинейными узорами

Пророк

Простой в использовании, обрабатывает праздники/сезоны

Не очень здорово с шумными многомерными данными

Но когда вы имеете дело с реальной сложностью (например, несколько датчиков на фабрике), вы хотите что-то более гибкое.


Введите глубокое обучение: LSTM & Friends

RNN великолепны, но LSTM (длинные кратковременные сети памяти) являются первыми для временных рядов. Почему? Они обрабатывают длинные зависимости, как чемпион.

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

import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense

# Simulated sine wave data
def create_dataset(data, time_step):
    X, y = [], []
    for i in range(len(data) - time_step - 1):
        X.append(data[i:(i + time_step)])
        y.append(data[i + time_step])
    return np.array(X), np.array(y)

data = np.sin(np.linspace(0, 100, 1000))
time_step = 50
X, y = create_dataset(data, time_step)
X = X.reshape(X.shape[0], X.shape[1], 1)

model = Sequential([
    LSTM(64, return_sequences=True, input_shape=(time_step, 1)),
    LSTM(32),
    Dense(1)
])

model.compile(loss='mse', optimizer='adam')
model.fit(X, y, epochs=10, verbose=1)

Совет: размер партии, количество слоев и временной шаг влияют на то, как далеко вперед и как точно может предсказать ваша модель. Эксперимент!


Подкрепление обучения соответствует прогнозированию?

Да, правда. Подкрепление обучения (RL) традиционно используется в ИИ или робототехнике. Но вы также можете моделировать решения временных рядов, например, когда покупать/продавать акции, используя Q-обучение.

Код: Q-обучение для простой торговой стратегии

import numpy as np

actions = [0, 1]  # 0: hold, 1: buy
Q = np.zeros((100, len(actions)))

epsilon = 0.1
alpha = 0.5
gamma = 0.9

for episode in range(1000):
    state = np.random.randint(0, 100)
    for _ in range(10):
        if np.random.rand() < epsilon:
            action = np.random.choice(actions)
        else:
            action = np.argmax(Q[state])

        next_state = (state + np.random.randint(-3, 4)) % 100
        reward = np.random.randn()
        Q[state, action] += alpha * (reward + gamma * np.max(Q[next_state]) - Q[state, action])
        state = next_state

Этот пример игрушки учит вас основам. В реальной торговле вы бы использовали RL с реальными рыночными средами (например,gymилиFinRL)


Реальные варианты использования

  • Прогнозирование акций-Прогнозирование краткосрочного ценового действия с использованием глубоких моделей и включения технических показателей.
  • Обнаружение промышленного разлома- Временные ряды от датчиков могут помочь прогнозировать неудачи, прежде чем они произойдут.
  • Здравоохранение мониторинг- LSTM может обнаружить аномалии в Данных ЭКГ или сна.

Есть, вы должны знать

  • Переосмысление: Глубокие модели любят запоминать шум. Используйте отступление, раннюю остановку и регуляризацию.
  • Утечка данных: Всегда разделите временные ряды хронологически.
  • Слишком мало данных: Временные ряды часто нуждаются в большем количестве данных, чем вы думаете.

Последние мысли

Не бойтесь смешивать модели. Традиционная статистика + DL + RL может фактически дополнять друг друга. Временные ряды развиваются - и если вы разработчик, вы находитесь в отличном месте, чтобы вести путь.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE