Для временных рядов нельзя делать 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": ...}n_samples = 12n_folds = 2validation_size = 3gap = 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}]n_samples = 20n_folds = 3validation_size = 4gap = 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}]n_samples = 15n_folds = 1validation_size = 5gap = 2[{"train_start":0,"train_end":8,"valid_start":10,"valid_end":15}]