前瞻偏差:你的回測用到了當時不可能有的資訊

前瞻偏差,是測試用到在測試那一刻還不可用的資訊,例如後來修訂的數字或未來的價格。它讓回測看起來比實盤會好得多。

MyTrade Academy 編輯部
7 分鐘閱讀

一個看起來很棒的回測,可能無意中作弊:用了後來才修訂的數字、後來才變化的成分,或者在被測試那一刻之後才知曉的價格。

這就是前瞻偏差,也是歷史結果比策略實盤實際會交付更好的最安靜的方式之一。

TL;DR

前瞻偏差,是測試用到在被測試那一刻還不可用的資訊。常見來源:修訂過的財務數字、後來才變化的指數成分、或未來價格漏進訊號。它會讓回測結果虛高,避免方法是讓每個資料點的可用時間與被測試時刻匹配。

前瞻偏差是什麼

測試把一個決定當成是在某個歷史時刻做出的。當測試把那個時刻實際上還不可用的資訊餵給決定時,前瞻偏差就發生了。

最常見的來源是後來修訂或晚些發布的資料:被重新陳述的財務數字、發生變化的指數成分,或發布時間早於資訊真正公開的新聞時間戳。

前瞻偏差的常見來源
來源怎麼漏進來怎麼避免
修訂數字用今天重述的數字測過去用當時報告的版本
未來成分測後來才加入指數的公司用當時存在的成分
新聞時間戳假設資訊在公開前就已知把可用時間與測試日期匹配

為什麼它會讓結果虛高

當時還不可用的資訊,給了策略一個免費的優勢:它根據真實交易者從沒有過的知識行動。

虛高的結果看起來像能力,因為回測完美無瑕,但優勢來自未來,而不是來自策略。

範例:50 筆交易,用修訂資料和用當時可知資料回測同一策略
項目用後來修訂的資料(前瞻偏差)只用當時可知的資料
勝率64%(32 / 50 筆)46%(23 / 50 筆)
平均獲利400 元 / 筆400 元 / 筆
平均虧損250 元 / 筆250 元 / 筆
期望值+166 元 / 筆+49 元 / 筆

同一批 50 筆交易,只是把財務數字換成了當時真正能看到的版本,就少了 9 筆「勝利」,期望值縮水到不足三分之一。

用修訂資料的勝率64%(32/50)
用修訂資料的期望值+166 元 / 筆
用當時資料的勝率46%(23/50)
用當時資料的期望值+49 元 / 筆
3.4 倍的期望值,來自 9 筆本不該贏的交易

同樣的 50 筆交易,把後來才修訂的數字換成當時真正能看到的版本,勝率從 64% 掉到 46%,期望值從 166 元跌到 49 元。多出來的那 9 筆「勝利」,靠的是策略在當時根本拿不到的資訊。

怎麼檢查

對測試用到的每個輸入,問它什麼時候真正可用。修訂的數字只應在它的發布日期之後進入測試;成分變化只應在變化發生之後。

實用的檢查是時間戳紀律:每個資料點按它何時可知來標註,而不是按它描述的時期。

讓資料可用時間與被測試時刻匹配

偏差不在於資料對它描述的東西是否準確,而在於資料是否比真實時間更早可用。一個對季度說得對的數字,如果發布得晚,對測試仍然是錯的。

前瞻偏差與過擬合的區別

過擬合把規則擬合到歷史樣本裡的雜訊。前瞻偏差把規則手裡沒有的資訊交給它。兩者都讓回測看起來比實盤好,但是兩種不同的失敗,修復方式也不同。

過擬合靠測試未見過的時期修復;前瞻偏差靠把每個輸入的可用時間與測試日期匹配修復。

常見問題

用最準確的數字總是對的嗎?

不是。最準確的當前數字在測試日期可能還不存在。測試應該用當時可知的版本。

前瞻偏差常見嗎?

足夠常見,任何嚴肅的回測都把它當成標準檢查,尤其是修訂的基本面或成分資料。

事後能修嗎?

如果資料允許重建每個日期可知的內容,測試可以重做正確。做不到的話,結果不可信。

相信回測之前,先檢查可用時間

第 44 課解釋過擬合、參數風險,以及怎麼用獨立時期驗證策略。

開啟第 44 課