601 / 736LOOK

Look-ahead Bias

Искажение из-за использования будущей информации

Look-ahead Bias возникает, когда исторический тест при принятии решения заглядывает в будущее. Например, покупает утром по правилу, использующему цену, которая станет известна лишь вечером. Результат выглядит убедительно, хотя с доступной тогда информацией так решить было нельзя.

Look-ahead Bias — ошибка, при которой информация, доступная позднее, влияет на более раннее решение, обучение модели или выбор правила. Важен момент, когда данные действительно можно было узнать, а не только дата строки. Измерение впоследствии результата уже принятого решения само по себе не является ошибкой.

Пётр проверяет на компьютере, как его правило торговало бы в прошлом. Таблица уже содержит всю историю, поэтому программа может случайно прочесть то, чего Пётр тогда знать не мог. Именно так QuantConnect объясняет Look-ahead Bias. Для каждого входа нужно спросить: был ли он доступен в момент решения? Одной даты бывает недостаточно. Событие могло произойти утром, сообщение выйти позже, а до трейдера дойти ещё позднее. Тест должен соблюдать эту последовательность, а не просто сортировать строки по дате. [2]

Ценовая свеча подводит итог периода: цены открытия и закрытия, максимум, минимум и объём. Пока период продолжается, итоговые значения неизвестны. Поэтому Пётр не может купить в его начале, опираясь на окончательный максимум той же свечи. LEAN, движок QuantConnect, передаёт завершённые данные по EndTime, то есть времени окончания. При сочетании коротких и длинных периодов доступность проверяют отдельно для каждого ряда. Сдвиг на строку помогает только тогда, когда действительно соответствует доступности данных с учётом часовых поясов и задержек. [1]

Пётр скачивает экономические показатели с датами прошлых месяцев. Некоторые числа с тех пор исправили. Используя сегодняшнее уточнённое значение в прежнем решении, он добавляет знание, которого тогда не было. Поэтому St. Louis Fed различает сегодняшний взгляд на прошлое в FRED и исторические версии через ALFRED. Для таких данных нужна версия, опубликованная к тому моменту. Даты месяца, к которому относится показатель, недостаточно; даже историческая версия с дневной датой не устанавливает точного времени доступности внутри дня. [3]

Пётр отделяет старые данные для обучения от новых для тестирования. Но затем вычисляет среднее всей таблицы, чтобы преобразовать входы. Будущее возвращается другим путём. Документация библиотеки машинного обучения scikit-learn поэтому требует настраивать преобразования только на обучающей части и затем применять их к тестовой. Аналогично проверяют заполнение пропусков и выбор входных признаков. Важны и результаты, используемые для обучения: только что открытая сделка ещё не имеет известного итога. Оценить его позже можно, но вернуть во время прежнего обучения — нельзя. [4]

Историческая свеча показывает максимум и минимум, но сама не восстанавливает полную последовательность реальных сделок. Поэтому TradingView объясняет допущения симулятора о движении цены внутри свечи. Петру нужно различать появление сигнала, отправку заявки и возможное исполнение. Продажа на максимуме, найденном позднее, не становится доступным правилом лишь потому, что симуляция умеет найти эту цену. Утечка будущей информации и чрезмерно благоприятное допущение об исполнении — разные ошибки. Более подробные данные могут помочь, но не гарантируют реального исполнения. [5]

Freqtrade Lookahead Analysis сравнивает повторные тесты и ищет изменения индикаторов или сигналов. Он может обнаружить вычисление, обращающееся к будущим строкам. Но не проверит ветвь решений, которая за время испытания ни разу не сработала. Поэтому вместе с результатом нужно знать покрытие. Документация предупреждает и о ложных срабатываниях: например, когда стратегия ведёт себя по-разному при тестировании одного рынка и целой группы. Чистый результат не подтверждает всё, а найденную разницу следует объяснить. Проверка происхождения данных остаётся частью работы. [6]

Пётр убирает будущий вход, и замечательный результат ухудшается. Старый отчёт уже нельзя представлять как результат исправленного подхода. Но и после исправления проверки не заканчиваются. TradingView отличает Look-ahead Bias от Overfitting: переобученное правило слишком приспособилось к особенностям данных, на которых его разрабатывали. Это возможно и без будущей информации. Напротив, временная ошибка встречается даже в очень простом правиле. Само расхождение исторического и последующего результатов ещё не показывает, какая ошибка или перемена рынка его вызвала. [5]

Полезная запись позволяет восстановить знания Петра в тот момент: версию данных, правила, состояние счёта, доступные входы и отправленные заявки. К ним добавляют допущения об исполнении и расходы. Paper Trading, то есть учебная торговля без настоящих денег, может дать записи, сделанные по ходу работы, но симуляция по-прежнему отличается от реальной торговли. Американская организация National Futures Association (NFA) отмечает ограничения гипотетических результатов в отношении ликвидности, разницы между ожидаемой ценой и ценой исполнения и решений под давлением убытков; её рекламные правила относятся к определённым членам. Исправление временной ошибки делает тест честнее, но не обещает будущей прибыли. [7]

ПримерПРИМЕР · LOOK

Когда тест заранее знает, какой период вырастет

В этом вымышленном примере у Петра четыре последовательных периода A, B, C и D. Цены открытия — [100, 100, 100, 100] USD/BTC, закрытия — [110, 90, 120, 80] USD/BTC. Период перед A открылся и закрылся по 100 USD/BTC. Каждый вариант начинает с 1000 USD, без позиции, долга и внешних денежных потоков. При входе он покупает фиксированное количество 1 BTC по модельной цене открытия и по заранее заданному правилу продаёт на закрытии того же периода. Каждая сторона исполненной сделки стоит 1 USD; без входа комиссии нет. Другие расходы и проскальзывание здесь опущены. Ошибочный вариант X покупает только перед ростом, который уже прочёл в будущей цене закрытия начинающегося периода. Входы — [1, 0, 1, 0], чистые результаты — [8, 0, 18, 0] USD: всего 26 USD и конечные деньги 1026 USD. Вариант Y использует рост предыдущего завершённого периода, который уже может знать. Его входы — [0, 1, 0, 1], чистые результаты — [0, -12, 0, -22] USD: всего -34 USD и конечные деньги 966 USD. После каждого периода у обоих вариантов нулевая позиция; график сравнивает их чистые результаты по периодам. Прибыль X получена благодаря знанию будущего и не доказывает доступного торгового преимущества. Убыток Y не означает, что соблюдение временной последовательности всегда убыточно. Это придуманные цены и упрощённые исполнения, а не история Биткоина или гарантия реального исполнения.

Для полной картины прочитайте эту статью вместе с Backtesting, Overfitting, Walk-forward Analysis, Survivorship Bias, Paper Trading. На эту статью также ссылаются Walk-forward Analysis, Overfitting, Survivorship Bias, On-chain Analysis.

01Достаточно ли сдвинуть индикаторы на одну строку?

Иногда это исправляет конкретную ошибку, но не служит универсальным решением. Данные могли опубликовать с задержкой, позже пересмотреть или уже использовать при подготовке всей таблицы. Важна доступность каждого входа в момент решения.

02Можно ли использовать более поздний результат для оценки?

Да. Чтобы оценить прежний прогноз, нужно знать последующий результат. Ошибка возникает, когда результат возвращают в прошлое: он влияет на более раннее решение, обучение или выбор правила, хотя тогда ещё не был известен.

DOC · 001QuantConnect — Time Modeling: TimeslicesДокументация DOC · 002QuantConnect — Custom Securities: Avoid Look-Ahead BiasДокументация DOC · 003Federal Reserve Bank of St. Louis — FRED API Real-Time PeriodsДокументация DOC · 004scikit-learn — Common Pitfalls: Data LeakageДокументация DOC · 005TradingView — Strategies: Broker Emulator and Lookahead BiasДокументация DOC · 006Freqtrade — Lookahead AnalysisДокументация DOC · 007NFA — Use of Promotional Material Containing Hypothetical Performance ResultsДокументация
Обновлено: Сначала источники · Не является инвестиционной рекомендацией