Middle — Senior
39
Как провести кросс-валидацию на временных рядах?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Кросс-валидация на временных рядах отличается от классической, так как данные имеют временную зависимость, и нельзя просто перемешивать их случайным образом.
Основные подходы:
-
Time Series Split (скользящее окно)
- Данные разбиваются на последовательные временные блоки.
- На каждом шаге обучаем модель на данных до определённого момента времени и тестируем на следующем временном интервале.
- Пример: обучаем на месяцах 1-3, тестируем на 4; затем обучаем на 1-4, тестируем на 5 и т.д.
-
Walk-forward validation
- Похож на Time Series Split, но модель переобучается на каждом шаге, добавляя новые данные.
-
Blocked cross-validation
- Делим данные на блоки, избегая утечки информации между тренировкой и тестом.
Пример на Python с использованием sklearn:
from sklearn.model_selection import TimeSeriesSplit
import numpy as np
X = np.arange(100).reshape(-1, 1) # Пример данных
y = np.sin(X).ravel()
tscv = TimeSeriesSplit(n_splits=5)
for train_index, test_index in tscv.split(X):
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
# Обучение модели на X_train, y_train
# Оценка на X_test, y_test
Важно сохранять хронологический порядок, чтобы не использовать будущие данные для обучения модели.