Walk-forward splits с gap для временного ряда

MediumML coding
05:00
Лучше работает на десктопе
ML CodingTime SeriesValidationLeakage
Реальный собес01:11:25-01:16:042026-04-22 12-03-04.movСтраница собеса

Для временных рядов нельзя делать random split: validation должен идти после train по времени.

Напишите функцию, которая строит n_folds walk-forward splits. Каждый split использует expanding train prefix, затем optional gap, затем validation window фиксированного размера.

Индексы полуоткрытые: [start, end).

Сигнатура

def walk_forward_splits(n_samples: int, n_folds: int, validation_size: int, gap: int = 0) -> list[dict]:

Каждый элемент результата:

{"train_start": 0, "train_end": ..., "valid_start": ..., "valid_end": ...}

Примеры

Пример 1

Вход:
n_samples = 12
n_folds = 2
validation_size = 3
gap = 0
Выход:[{"train_start":0,"train_end":6,"valid_start":6,"valid_end":9},{"train_start":0,"train_end":9,"valid_start":9,"valid_end":12}]

Пример 2

Вход:
n_samples = 20
n_folds = 3
validation_size = 4
gap = 1
Выход:[{"train_start":0,"train_end":7,"valid_start":8,"valid_end":12},{"train_start":0,"train_end":11,"valid_start":12,"valid_end":16},{"train_start":0,"train_end":15,"valid_start":16,"valid_end":20}]

Пример 3

Вход:
n_samples = 15
n_folds = 1
validation_size = 5
gap = 2
Выход:[{"train_start":0,"train_end":8,"valid_start":10,"valid_end":15}]
Консоль
Нажмите Run или Ctrl+Enter для запуска