一個看起來很棒的回測,可能無意中作弊:用了後來才修訂的數字、後來才變化的成分,或者在被測試那一刻之後才知曉的價格。
這就是前瞻偏差,也是歷史結果比策略實盤實際會交付更好的最安靜的方式之一。
前瞻偏差,是測試用到在被測試那一刻還不可用的資訊。常見來源:修訂過的財務數字、後來才變化的指數成分、或未來價格漏進訊號。它會讓回測結果虛高,避免方法是讓每個資料點的可用時間與被測試時刻匹配。
前瞻偏差是什麼
測試把一個決定當成是在某個歷史時刻做出的。當測試把那個時刻實際上還不可用的資訊餵給決定時,前瞻偏差就發生了。
最常見的來源是後來修訂或晚些發布的資料:被重新陳述的財務數字、發生變化的指數成分,或發布時間早於資訊真正公開的新聞時間戳。
| 來源 | 怎麼漏進來 | 怎麼避免 |
|---|---|---|
| 修訂數字 | 用今天重述的數字測過去 | 用當時報告的版本 |
| 未來成分 | 測後來才加入指數的公司 | 用當時存在的成分 |
| 新聞時間戳 | 假設資訊在公開前就已知 | 把可用時間與測試日期匹配 |
為什麼它會讓結果虛高
當時還不可用的資訊,給了策略一個免費的優勢:它根據真實交易者從沒有過的知識行動。
虛高的結果看起來像能力,因為回測完美無瑕,但優勢來自未來,而不是來自策略。
| 項目 | 用後來修訂的資料(前瞻偏差) | 只用當時可知的資料 |
|---|---|---|
| 勝率 | 64%(32 / 50 筆) | 46%(23 / 50 筆) |
| 平均獲利 | 400 元 / 筆 | 400 元 / 筆 |
| 平均虧損 | 250 元 / 筆 | 250 元 / 筆 |
| 期望值 | +166 元 / 筆 | +49 元 / 筆 |
同一批 50 筆交易,只是把財務數字換成了當時真正能看到的版本,就少了 9 筆「勝利」,期望值縮水到不足三分之一。
同樣的 50 筆交易,把後來才修訂的數字換成當時真正能看到的版本,勝率從 64% 掉到 46%,期望值從 166 元跌到 49 元。多出來的那 9 筆「勝利」,靠的是策略在當時根本拿不到的資訊。
怎麼檢查
對測試用到的每個輸入,問它什麼時候真正可用。修訂的數字只應在它的發布日期之後進入測試;成分變化只應在變化發生之後。
實用的檢查是時間戳紀律:每個資料點按它何時可知來標註,而不是按它描述的時期。
偏差不在於資料對它描述的東西是否準確,而在於資料是否比真實時間更早可用。一個對季度說得對的數字,如果發布得晚,對測試仍然是錯的。
前瞻偏差與過擬合的區別
過擬合把規則擬合到歷史樣本裡的雜訊。前瞻偏差把規則手裡沒有的資訊交給它。兩者都讓回測看起來比實盤好,但是兩種不同的失敗,修復方式也不同。
過擬合靠測試未見過的時期修復;前瞻偏差靠把每個輸入的可用時間與測試日期匹配修復。
常見問題
用最準確的數字總是對的嗎?
不是。最準確的當前數字在測試日期可能還不存在。測試應該用當時可知的版本。
前瞻偏差常見嗎?
足夠常見,任何嚴肅的回測都把它當成標準檢查,尤其是修訂的基本面或成分資料。
事後能修嗎?
如果資料允許重建每個日期可知的內容,測試可以重做正確。做不到的話,結果不可信。


