Валидация временных рядов требует специальных подходов, которые учитывают временную структуру данных. Обычные методы кросс-валидации не подходят, так как они разрывают временную последовательность.
🟠Train/Test Split
Простейший метод заключается в разделении данных на две части: обучающую и тестовую выборки. При этом важно, чтобы тестовая выборка содержала данные, которые следуют за данными из обучающей выборки.
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
# Пример данных временного ряда
data = pd.Series(np.arange(100))
# Процент данных для тестовой выборки
test_size = 0.2
split_index = int(len(data) * (1 - test_size))
# Разделение данных
train_data = data[:split_index]
test_data = data[split_index:]
print("Обучающая выборка:", train_data)
print("Тестовая выборка:", test_data)
🟠Time Series Cross-Validation
Кросс-валидация для временных рядов (Time Series Cross-Validation) выполняется путем последовательного использования разных временных интервалов для обучения и тестирования. Два основных подхода включают rolling cross-validation и expanding window validation.
🟠Walk-Forward Validation
Похожа на expanding window validation, но отличается тем, что каждая новая модель обучается на данных, включающих предыдущие обучающие данные, и делает одно предсказание на каждом шаге.
import numpy as np
import pandas as pd
# Пример данных временного ряда
data = pd.Series(np.arange(100))
# Размер начального окна и шаг
initial_window = 20
# Walk-forward validation
for i in range(initial_window, len(data)):
train_data = data[:i]
test_data = data[i:i+1]
print("Обучающая выборка:", train_data)
print("Тестовая выборка:", test_data)
🟠Использование методов скользящего окна
Этот метод включает в себя создание фиксированного окна данных, которое движется по временной оси. Модель обучается на данных внутри окна и тестируется на следующем наборе данных. При валидации моделей для временных рядов следует учитывать временную структуру данных.
import numpy as np
import pandas as pd
# Пример данных временного ряда
data = pd.Series(np.arange(100))
# Размер окна и шаг
window_size = 20
step_size = 5
# Sliding window validation
for start in range(0, len(data) - window_size, step_size):
train_data = data[start:start+window_size]
test_data = data[start+window_size:start+window_size+step_size]
print("Обучающая выборка:", train_data)
print("Тестовая выборка:", test_data)
Ставь 👍 и забирай 📚 Базу знаний