601 / 736LOOK

Look-ahead Bias

使用未来信息造成的偏差

Look-ahead Bias 指历史决策使用了当时尚不可得的信息。问题可能藏在时间戳、已完成的蜡烛图、修订后的数据库或模型准备过程中。此时,良好的回溯结果描述的并不是在当时能够实施的流程。

Look-ahead Bias 是一种评估中的时间错误:将后来才可得的信息用于更早的决策、训练或规则选择。事后衡量已经作出的预测的结果,本身并不属于这种错误。

QuantConnect 将 Look-ahead Bias 描述为用后来才可得的信息作决策。因此,我们的核查问题是:在作出这项决策的那一刻,流程实际上能够知道什么?数据属于同一个日历日并不足够。事件发生、发布、接收和发送订单的时间可能各不相同。必须为每项输入证明其可得时间及操作顺序;仅有正确排序的表格并不能提供这种证明。 [2]

LEAN 的时间模型按数据点的 EndTime 传递已经完成的数据点。我们的推论是:整个周期的最终收盘价、最高价、最低价和成交量,不得用于指导该周期内更早的决策。使用多个时间尺度时,每个序列都必须有自己的可得性规则。移动一行可能修复特定错误,但不能替代对时区、周期结束和来源延迟的检查。使用已经知道的前值,与使用当前蜡烛图后来才形成的最终值,是不同的情况。 [1]

FRED 文档区分了今天可得的历史信息与在历史时期已知的信息;ALFRED 可以选择相应的可得时期。我们的方法要求是:处理后来修正的数据时,必须保留当时的版本及其发布时间。经济统计所属周期的日期不能替代发布日期。即使有历史版本,也不能单独证明精确的日内可得时间;这仍需另行核实。不能悄悄把后来的修正放回更早的决策中。 [3]

scikit-learn 要求仅在训练数据上学习变换,然后将同一已学得的变换应用于测试。我们的时间检查包括归一化、缺失值填补、特征选择和训练目标。未来周期的结果可以用于事后评估预测;但不得用于更早地生成该预测或选择规则。在持续重新训练时,只有在相应时刻已经知道的目标结果才能进入训练。 [4]

TradingView 解释,其经纪商模拟器在使用历史 OHLC 数据时,会对蜡烛图内部的价格运动作出假设。我们区分的是:记录的最高价和最低价本身并不能确定所有价格及订单的真实先后顺序。测试必须分开处理信号生成、订单发送和可能的成交。根据后来才知道的极值选择入场或出场,与单纯过于乐观的成本模型是不同的问题。更精细的数据可以改善核查,但不能保证真实成交。 [5]

Freqtrade 比较多次测试的结果以及指标或信号的变化,也指出了访问未来行和对整张表进行聚合的问题。因此,我们的审计不仅检查移位语法,也检查每项计算的来源。文档明确将检查范围限定为测试中已触发的信号。工具没有报告问题,并不代表未执行的分支也已通过检查。必须结合覆盖范围和模拟设置阅读结果;某些限价订单配置可能产生误报。 [6]

TradingView 将 Look-ahead Bias 与 Overfitting 区分开来,后者是让规则贴合特定开发数据。我们的结论是:即使时间上合规的测试,也可能是广泛挑选胜者后的产物。反过来,简单规则也可能泄漏未来信息。修复之后,必须重新计算结果并记录变化;不能保留原先盈利的报告。历史结果与后续结果之间的差异,本身并不能说明原因是时间错误、市场变化还是其他假设。 [5]

NFA 提醒人们注意假设结果与真实交易的区别。因此,我们可复现的记录包含数据及规则版本、输入的可得时刻、账户状态、订单顺序和已说明的成本。审计必须能够只用当时可得的信息重放决策。Paper Trading 可以提供更多持续记录,但其本身既不能保证数据准备正确,也不能保证真实流动性。消除已经证实的错误并不是对未来收益的承诺。 [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 费用;不入场则没有费用。本模型不考虑其他成本或 Slippage。错误方案 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 在各个周期的净结果。X 用未来数据作出更早的决策,因此其利润不能构成可实施优势的证据。Y 的亏损既不是对真实市场结果的估计,也不表示遵守正确时间顺序总会亏损。模型价格不是 Bitcoin 的历史价格,假设的成交也不保证实际执行。

要获得更完整的理解,请将本词条与以下词条结合阅读: 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文档
修订日期: 来源优先 · 非投资建议