How do you account for time dependencies when splitting data for model validation?
Implement time_series_splits(timestamps, initial_train_size, validation_size, n_splits, gap) using chronological expanding-window splits. Return a list of objects containing zero-based train and validation index arrays. Timestamps are strictly increasing, and each validation window must occur after its training window with exactly gap unused observations between them.
def time_series_splits(timestamps, initial_train_size, validation_size, n_splits, gap):