Sobes.tech
Middle — Senior

Jak przeprowadzić walidację krzyżową na szeregach czasowych?

sobes.tech AI

Odpowiedź od AI

Walidacja krzyżowa na szeregach czasowych różni się od klasycznej, ponieważ dane mają zależność czasową i nie można ich po prostu mieszać losowo.

Główne podejścia:

  1. Time Series Split (przesuwne okno)

    • Dane dzielone są na kolejne bloki czasowe.
    • Na każdym kroku model jest trenowany na danych do określonego momentu i testowany na następnym interwale czasowym.
    • Przykład: uczymy się na miesiącach 1-3, testujemy na 4; potem uczymy się na 1-4, testujemy na 5 itd.
  2. Walidacja krok po kroku (Walk-forward validation)

    • Podobna do Time Series Split, ale model jest ponownie trenowany na każdym kroku, dodając nowe dane.
  3. Walidacja krzyżowa blokowa (Blocked cross-validation)

    • Dane dzielone są na bloki, unikając wycieku informacji między treningiem a testem.

Przykład w Pythonie z użyciem sklearn:

from sklearn.model_selection import TimeSeriesSplit
import numpy as np

X = np.arange(100).reshape(-1, 1)  # Dane przykładowe
 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]
    # Trenować model na X_train, y_train
    # Ocenić na X_test, y_test

Ważne jest zachowanie kolejności chronologicznej, aby nie używać przyszłych danych do treningu modelu.