Purged cross-validation и embargo: как предотвратить утечку меток в торговых моделях
Узнайте, как исключать пересекающиеся интервалы будущей доходности и чем различаются purging, embargo, walk-forward, TimeSeriesSplit и CPCV.
В этом руководствеКогда случайное разбиение на K частей вводит в заблуждение
Краткое резюме
Purged cross-validation исключает из обучения выборки, чьи интервалы результата пересекаются с интервалами меток в тесте. Embargo — отдельно заданный буфер после тестового блока: в разбиениях, где более поздние наблюдения могут попасть в обучение, он временно исключает такие данные. Эти меры решают разные задачи и не заменяют walk-forward, который сохраняет хронологию обучения на прошлом и проверки на будущем.
Когда случайное разбиение на K частей вводит в заблуждение
Обычная K-fold cross-validation делит наблюдения на группы и по очереди использует каждую для теста. В финансовых рядах случайное разбиение может дать слишком оптимистичный результат, если наблюдения зависимы или интервалы меток будущей доходности пересекаются: информация тестового результата оказывается связана с обучающими метками.
Это не означает, что любое применение K-fold всегда неверно. Нужно проверить предпосылки относительно данных и вопроса, на который отвечает оценка. Для временного ряда признаки должны использовать только сведения, доступные в момент прогноза, а будущий исход тестовых наблюдений не должен попадать в обучающие метки.
Заранее определите цель проверки. Хотите ли вы имитировать запуск модели, обученной только на прошлом и применённой к следующему периоду, или сравнить устойчивость модели на нескольких сочетаниях периодов? Для этих вопросов нужны разные схемы разделения.
Определите время решения и интервал метки
Для каждой выборки зафиксируйте момент решения t, данные, реально доступные тогда, окно признаков, интервал целевой метки и момент её определения t1. Например, метка доходности за следующие пять торговых сессий после дневного решения в момент t использует результат на интервале (t, t+5]. Информация, которая станет известна лишь после t+5, не должна считаться доступной при прогнозе в t.
Само по себе перекрытие прошлых окон признаков ещё не означает утечку. Если общая история была известна к обоим моментам прогноза и признаки рассчитаны только по доступным тогда данным, это зависимость между наблюдениями, а не автоматически утечка будущей метки. Но нельзя использовать пересмотренную статистику или исправленные задним числом цены так, будто они были известны в прошлом.
У событийных меток длительность может меняться от выборки к выборке, например при достижении барьера или завершении события. Сохраняйте фактическое время начала и окончания каждого интервала, а не заменяйте его удобным постоянным числом строк.
Удаляйте обучающие метки, пересекающиеся с тестовыми
Purging исключает обучающую выборку, если фактический интервал её результата или метки пересекается с интервалом результата тестовой выборки. Сравнение только дат решений может не заметить, что одно и то же движение цены вошло и в обучающую, и в тестовую метку.
Для меток переменной длины сопоставляйте реальные временные отметки начала и окончания. Исключить фиксированные «пять строк» из каждого разбиения недостаточно, если одни события длятся дольше других. Сначала проверяйте действительное пересечение интервалов, а затем отдельно решайте, нужен ли дополнительный embargo.
Удаление пересекающихся меток само по себе не делает разбиение хронологическим. В некоторых схемах для обучения могут оставаться наблюдения после тестового блока. Исключение перекрытий и симуляция исторического запуска, где будущее не используется для обучения, — разные требования. Глава 7 книги Лопеса де Прадо «Advances in Financial Machine Learning» разбирает cross-validation и purging для финансовых меток с перекрывающимися интервалами.
Проверьте границы на примере пяти сессий
Пусть каждое дневное решение получает метку результата за пять торговых сессий на интервале (t, t+5]. Тестовые даты решений — дни с 11-го по 15-й, значит тестовые метки продолжаются до дня 20. Предположим, номера обозначают последовательные торговые сессии.
Интервал обучающей метки (7, 12] пересекается с тестовыми метками на участке от 11-го до 12-го дня. Кандидат (16, 21] тоже пересекается с тестовым интервалом, который продолжается до дня 20. Поэтому оба таких обучающих наблюдения исключаются. Проверять нужно интервалы исходов, а не только расстояние между датами решений.
Более поздняя обучающая метка без прямого пересечения всё ещё может попасть в отдельно заданный embargo и быть исключена из-за буфера. Этот пример показывает механику границ; он не задаёт универсальную длину временного разрыва.
Задайте embargo отдельно от purging
Embargo — буфер после тестового блока перед тем, как более поздние наблюдения могут войти в обучение. Он полезен в разбиениях с обучающими данными после теста и может уменьшить остаточную зависимость из-за событийных меток или построения признаков. Он не заменяет проверку фактического пересечения интервалов меток.
Универсального правила вроде «1% данных» или «пять дней» нет. Выбирайте и обосновывайте буфер с учётом частоты наблюдений, горизонта метки, конструкции признаков и зависимости данных. Если окно признаков длиннее периода метки, краткий буфер без объяснения может оставить зависимость.
В walk-forward, где обучение всегда ограничено датами до теста, дополнительный буфер для более поздних обучающих наблюдений может не понадобиться. Но всё равно проверяйте, не пересекаются ли прошлые обучающие метки с результатами теста.

Не смешивайте walk-forward и TimeSeriesSplit
Walk-forward или rolling-origin проверка обучается на прошлом и тестируется на более позднем отрезке. Она ближе к вопросу развёртывания: мог ли доступный на тот момент набор данных дать прогноз для следующего периода? Уточните, расширяется ли обучающее окно со временем или имеет фиксированную длину.
TimeSeriesSplit из scikit-learn также оставляет обучение до теста; параметр gap задаёт число наблюдений, исключаемых в конце обучения перед тестом. Официальная документация описывает gap именно в количестве строк. При равномерно расположенных наблюдениях это фиксированный промежуток строк, но не автоматическая проверка фактических интервалов событийных меток.
Поэтому одного gap недостаточно для variable-event purging. Отдельно задайте хронологию, сопоставьте интервалы меток и обоснуйте буфер. Если строки кодируют неравномерное реальное время, документируйте, как число строк соответствует временной дистанции.
Поймите, что оценивают Purged K-fold и CPCV
Purged K-fold для каждого тестового блока исключает из обучения метки с пересекающимися интервалами. В зависимости от схемы обучающая часть может также содержать наблюдения после тестового блока. Это помогает изучать устойчивость модели на сочетаниях периодов, но не отвечает на тот же вопрос, что walk-forward-симуляция исторического развёртывания.
Combinatorial purged cross-validation (CPCV) комбинирует тестовые блоки и строит несколько тестовых путей, чтобы изучать разброс результатов. Глава 12 книги Advances in Financial Machine Learning рассматривает walk-forward и CPCV, а глава 7 — обработку пересекающихся финансовых меток. Много тестовых путей не устраняют утечку признаков из будущего, пересмотренные данные, глобальную предобработку или смещение от многочисленных попыток подобрать модель.
Число путей CPCV также нельзя считать числом независимых экспериментов при выборе лучшей стратегии. Для эффекта отбора и переобучения на множестве испытаний нужна отдельная оценка. Работа Бейли и соавторов о вероятности переобучения бэктеста рассматривает проблему выбора среди множества кандидатов.
Проверьте утечки, которые остаются после разбиения
Даже после purging могут сохраниться признаки с заглядыванием вперёд, неверные временные отметки, смещение выживших или данные, пересмотренные позже. Если нормализацию, заполнение пропусков или отбор признаков выполнить на всей выборке до разделения, тестовая информация попадёт в обучение. Многократная настройка по тестовым результатам создаёт ещё и смещение отбора.
Настраивайте преобразования и выбор признаков внутри каждого обучающего фолда, применяя их затем к его проверочной части. Для выбора модели или гиперпараметров используйте вложенную временную проверку, а для финальной оценки оставьте нетронутый хронологический holdout. Нереалистичные предположения о комиссиях, спреде и исполнимости ордеров тоже искажают результаты.
Ни один способ cross-validation не гарантирует будущую доходность. Оценка относится к конкретной выборке, признакам, меткам и допущениям о затратах.
Зафиксируйте схему так, чтобы её можно было повторить
Для каждого эксперимента запишите время решения, момент доступности данных, окно признаков, начало и конец метки, границы обучающих и тестовых фолдов, исключённые пересечения, длину и обоснование embargo, область подгонки преобразований и финальный holdout. Так другой исследователь сможет восстановить те же границы выборки.
О переобучении моделей см. компромисс смещения и дисперсии в финансовых моделях; о повторных проверках — множественные тесты и доля ложных открытий; о годовом пересчёте с учётом серийной корреляции — коэффициенте Шарпа и автокорреляции. Важно фиксировать не только название метода, но и то, какие данные на каком этапе попадали в обучение.
Частые вопросы
Q1Если окна прошлых признаков пересекаются, это всегда утечка?
Нет. Если общая история была доступна в моменты обоих прогнозов, само пересечение не означает утечку меток. Проблема возникает, когда результат теста или сведения из будущего попадают в обучающие метки, признаки или предобработку.
Q2Embargo всегда должен составлять пять дней?
Нет. Универсальной длительности или доли нет. Обоснуйте буфер частотой выборки, горизонтом меток, построением признаков и зависимостью; отдельно проверяйте фактические пересечения интервалов.
Q3Хороший результат CPCV гарантирует качество будущей торговли?
Нет. CPCV строит несколько путей проверки, но не устраняет заглядывание вперёд, пересмотренные данные, смещение от перебора или нереалистичные предположения о затратах и исполнении.
Источники и дополнительное чтение
Сообщить о проблеме
Мы подготовим письмо со ссылкой на эту статью. Mark получит сообщение только после отправки
Быстрая проверка
Прочитали руководство? Проверьте себя в 3 вопросах
Вопрос 01
Что делает purging, если интервал будущей метки обучения пересекается с результатом тестовой выборки?
Выберите ответ, чтобы увидеть объяснение
Словарь опционов
The relationship between systematic prediction error from model mismatch and instability caused by sensitivity to the training sample.
Читать подробное руководствоFamily-wise error rateThe probability of falsely rejecting at least one true null hypothesis within a predefined family of tests.
Читать подробное руководствоназначение опционаПроцесс, при котором после уведомления об исполнении обязанность выполнить контракт распределяется на продавца опциона и может создать поставку или покупку акций.
Читать подробное руководство