回測過度最佳化:為什麼最漂亮的回測通常被高估
當你嘗試許多組參數並只留下最好的一組,它的分數有一部分來自運氣,而且嘗試的組數越多,這一部分就越大。Bailey、López de Prado 等人的研究說明了如何估計運氣的占比,並為勝出者設定更高的門檻。
作者 Soren Huang · 發佈 · 更新於 · 編輯原則
目錄
為什麼多次回測中的最佳者靠運氣而好看?
多次回測中的最佳者通常被高估,因為「挑選」這個動作本身就會增加運氣的成分。當你嘗試許多組參數並留下最好的一組,它的分數有一部分是隨機雜訊的最大值,而且每多試一種變化,這一部分就會變大。Bailey、López de Prado 等人的研究說明了如何估計並扣除這一部分。
請 100 個人各擲公平硬幣 10 次。沒有人具備擲硬幣的技巧。即便如此,至少有一個人擲出 8 次或更多正面的機率仍高於 99%。有人擲出 9 次或 10 次正面的機率約為三分之二。
現在請這位「最會擲硬幣的人」再擲一次。他下一次的成績很可能接近 5 次正面,和其他人一樣。他第一次的結果是真實的,只是並不能證明他有技巧。那只是 100 個隨機結果中的最佳者。
參數掃描就是同樣的實驗。每一組參數就是一個人在擲硬幣,最佳回測就是那位最會擲的人。它的結果有一部分可能是市場中真實的優勢,另一部分則是身為多次嘗試中最大值的運氣。回測過度最佳化,指的是因為某個策略在多次嘗試中得分最高而選了它,於是它的回測結果有一部分來自運氣,而不是真實的優勢。
回測過度最佳化的研究發現了什麼?
研究顯示,只要不斷嘗試各種變化,就很容易做出看起來很強的回測,而且試得越多,勝出者越可能是過度最佳化的結果。David Bailey、Jonathan Borwein、Marcos López de Prado 與 Qiji Jim Zhu 在三篇論文中證明了這一點(列於下方參考文獻)。他們的主要發現,用白話來說:
- 好看的回測很容易做出來。不需要上百萬次嘗試。在幾年的資料上做相當少量的變化,就足以找到一個看起來很強的結果,即使其中沒有任何一個真的有優勢。
- 嘗試的變化越多,光靠運氣,最佳者就看起來越好。勝出者是過度最佳化的機率,會隨嘗試次數增加而上升。
- 嘗試次數通常是隱藏的。多數回測在公布時不會說明測試了多少種變化。沒有這個數字,沒有人能判斷結果有多少是挑選造成的,包括你自己,如果你沒有記錄次數的話。
- 過度最佳化的策略可能比零還差。如果市場行為在一段走勢之後傾向反轉(例如一段強勢趨勢之後接著震盪),那麼緊貼某一段期間配適出來的參數,在下一段期間可能虧損。此時預期的實單交易結果是負的,而不只是持平。
2014 年 Notices of the AMS 的論文給了一個例子:使用五年的日資料,在大約 45 種獨立變化之後,即使最佳者在新資料上的預期 Sharpe ratio 為零,它在回測中預期仍會呈現約 1 的年化 Sharpe ratio。
Sharpe ratio 是平均報酬除以報酬的波動程度(標準差),通常換算成一年的數值。它衡量的是每單位波動所換來的報酬。1 這個值常被視為不錯的策略,這正是這個例子重要的原因。
光靠運氣能產生多高的 Sharpe ratio?
光靠運氣,在五年資料上做大約 50 種變化後,最佳 Sharpe ratio 就可能被推到約 1,做到 100 種時會高於 1.1。你可以為自己的搜尋估計這個「運氣門檻」。運氣門檻是指,即使你的所有變化都沒有任何優勢,其中最佳者仍會達到的 Sharpe ratio。可用下列公式估計:
運氣門檻 ≈ M ÷ √Y
- M 是 N 次隨機抽樣中最佳分數的典型值。它來自下方的表格,隨 N 增加而緩慢成長。
- Y 是回測的年數。√Y 是它的平方根。歷史越長,運氣門檻越低,因為資料越多,隨機的 Sharpe ratio 越會向零靠攏。
- 結果以年化 Sharpe ratio 表示。
這個公式假設三件事:各種變化彼此獨立、報酬大致呈鐘形分布、且沒有任何一種變化有真實的優勢。請把它當作粗略的尺度,而不是精確的答案。
| 嘗試的變化數(N) | M | 運氣門檻,5 年 | 運氣門檻,10 年 |
|---|---|---|---|
| 1 | 0 | 0 | 0 |
| 10 | 1.54 | 0.69 | 0.49 |
| 100 | 2.51 | 1.12 | 0.79 |
| 一千 | 3.24 | 1.45 | 1.02 |
| 10,000 | 3.85 | 1.72 | 1.22 |
假設性範例
你在五年資料上測試某個突破系統的 100 種變化。最佳者的 Sharpe ratio 為 1.2。五年內嘗試 100 次的運氣門檻約為 1.1。你的勝出者僅略高於純靠運氣就能得到的水準,所以誠實的折扣幾乎等於整個結果。如果最佳者的 Sharpe ratio 是 2.0,它就大幅超過門檻,這個結果就值得進一步檢驗。
實際的各種變化並不獨立。50 根 K 棒與 52 根 K 棒的移動平均幾乎會產生相同的交易。因此有效的獨立嘗試次數會比原始次數少,但很難知道少多少。請把原始次數當作嚴格的一端,把較低的估計當作寬鬆的一端。如果結果只有在採用寬鬆數字時才過關,那它就很薄弱。
Deflated Sharpe Ratio 衡量什麼?
Deflated Sharpe Ratio(DSR)出自 Bailey 與 López de Prado 2014 年的論文,是把上述概念轉成機率的單一數字。它要問的是:考慮到嘗試了多少種變化,我們有多大把握認為勝出者的真實 Sharpe ratio 高於運氣所能產生的水準?
它會考慮:
- 嘗試次數。嘗試越多,勝出者必須跨過的門檻越高。
- 所有嘗試的 Sharpe ratio 分散程度。分散越大,代表運氣能把最佳者推得越高。
- 績效紀錄的長度。紀錄越短,雜訊越大。
- 報酬的形狀。偏態衡量不對稱程度。峰態衡量極端結果出現的頻率,常被稱為「肥尾」。一個有許多小獲利、偶爾出現大虧損的策略,其 Sharpe ratio 看起來會比實際風險好,DSR 會把它調低。
輸出是介於 0 到 1 之間的機率。接近 1 的值,例如 0.95,代表結果不太可能只是挑選與雜訊所造成。接近 0.5 或更低的值,代表勝出者大約就是光憑嘗試次數就能預期的水準。
Probability of Backtest Overfitting 衡量什麼?
Probability of Backtest Overfitting(PBO)出自 2017 年的論文,衡量的是你挑選勝出者的方式在未見過的資料上多常失敗;它看的是挑選的過程,而不是某一個勝出者。簡化後的概念如下:
- 把歷史資料切成相等的區塊,例如 10 個區塊。
- 選出一半區塊作為「挑選」集,另一半留作「檢查」集。對區塊對半分的每一種可能方式都這樣做。10 個區塊共有 252 種方式。
- 每一種分法,都先在挑選集上找出最佳的變化,再看這個變化在檢查集上,於所有變化中排第幾名。
- 計算被選中的勝出者在檢查集上排名低於中位數的次數占比。
這個占比就是 PBO。如果你的流程沒有真正挑出勝出者的能力,被選中者落在中間之上或之下的次數大約相同,PBO 就會接近 0.5。PBO 遠低於 0.5,代表樣本內的勝出者在未見過的資料上傾向停留在較好的那一半。PBO 高於 0.5,則代表挑選回測領先者還不如隨機挑選。
PBO 需要你嘗試過的所有變化的結果,而不只是勝出者。這是另一個該把每次執行都記錄下來的理由。
期貨交易者實際上做了多少次嘗試?
變化累積的速度比多數交易者察覺到的要快。
假設性範例
20 種回看長度、10 種停損大小與 5 種交易時段過濾條件,就構成一千種組合。把它在三個市場與兩種 K 棒週期上都跑一遍,就是六千種。再加上你上個月試過又放棄的想法,真實的次數還會更高。
你在做出選擇之前看過的所有東西,都算一次嘗試:
- 參數掃描中的每一種參數組合,
- 你換進換出的每一個指標或規則,
- 你測試過的每一個市場、K 棒週期或交易時段,
- 同一項研究先前的每一輪,即使你把結果丟掉了。
當許多不同的交易規則在同一份資料上測試時,也會出現同樣的問題,勝出者要跨過的門檻也以同樣的方式升高。
自動化的策略生成會放大這個效應。在數百萬個候選策略中搜尋,會浮現回測分數非常高的勝出者,因為每多一個候選策略,運氣門檻就會升高。這並不代表大規模搜尋沒有用。它的意思是,勝出者必須跨過由搜尋規模決定的門檻,並且要在搜尋從未碰過的資料上受到檢查。更完整的討論請見策略生成中的過度最佳化。
如何讓折扣維持誠實?
要讓折扣維持誠實,就要記下每一次嘗試、留住未動用的資料,並用該批次的運氣門檻來衡量勝出者。
- 記錄你的嘗試次數。替每一個批次留下紀錄:多少種變化、哪些市場、哪段日期範圍。你需要這個數字來設定運氣門檻、計算 DSR 或執行 PBO 檢查。
- 保留未動用的資料。在開始之前,先把歷史資料中最近的一段留下來,例如最後兩年。只拿你最終的候選策略到這段資料上測試,而且只測一次。如果你看過它、改了規則又再看一次,它就不再是未動用的資料,而成為搜尋的一部分。
- 偏好穩定的參數區域。看看相鄰參數值的結果。一大片高原,也就是附近的設定也都表現不錯,比較可能反映真實的規律。單一尖銳的峰值被糟糕的結果包圍,則是運氣好抽中的特徵。
- 盡可能使用更長的歷史資料。測試越長,運氣門檻越低,所以同樣的 Sharpe ratio 在十年資料上比在三年資料上更有說服力。
- 測試流程,而不只是勝出者。推進分析會在整段歷史上重複「挑選再檢查」的循環,顯示你挑選參數的方式是否站得住腳。
- 從第一次執行就納入成本。手續費與滑價會在許多由雜訊驅動的小優勢勝出之前就把它們消除;請見回測中的交易成本。
- 用該批次來衡量勝出者。把最佳結果與該嘗試次數對應的運氣門檻相比。先打折,再拿它和其他東西比較。
如果你使用 AlphaPrime(Valynox),這代表:把每個搜尋批次保存在策略資料庫中,讓嘗試次數有紀錄可查,並在策略檢驗中用推進分析檢查勝出者。
常見問題
測試多少種變化之後,過度最佳化就很可能出現?
沒有固定的數字,因為這取決於你的歷史資料有多長,以及勝出者勝過運氣的幅度。在 Bailey 等人 2014 年 Notices of the AMS 的論文中,在五年日資料上做大約 45 種獨立變化之後,光靠運氣,最佳者預期就會呈現約 1 的回測 Sharpe ratio。請記錄每一次嘗試,並把勝出者與該次數對應的運氣門檻相比。
多高的 Deflated Sharpe Ratio 才算好?
Deflated Sharpe Ratio 是介於 0 到 1 之間的機率。接近 1 的值,例如 0.95,代表結果不太可能只是來自挑選與雜訊。接近 0.5 或更低的值,代表勝出者看起來大約就是嘗試次數靠機率就能預測的水準。
推進分析能消除過度最佳化嗎?
推進分析會在未用來挑選參數的資料上,測試你挑選參數的方式,因此能揭露單一回測中的大部分過度最佳化。但如果你跑了許多次推進分析並留下最好的一個,它就無法消除過度最佳化,因為此時推進分析本身也成了搜尋的一部分。請留下最後一塊未動用的資料作為最終檢查。
為什麼我最好的回測在新資料上表現較差?
最好的回測之所以被選中,是因為它得分最高,而那個分數有一部分是運氣。在新資料上,運氣不會重演,所以結果會回到它真實的水準,那可能是零或更低。你嘗試的變化越多,這個落差往往越大。
參考文獻
- Bailey, D. H., Borwein, J., López de Prado, M., & Zhu, Q. J. (2014). Pseudo-Mathematics and Financial Charlatanism: The Effects of Backtest Overfitting on Out-of-Sample Performance. Notices of the American Mathematical Society, 61(5), 458–471.
- Bailey, D. H., & López de Prado, M. (2014). The Deflated Sharpe Ratio: Correcting for Selection Bias, Backtest Overfitting and Non-Normality. The Journal of Portfolio Management, 40(5), 94–107.
- Bailey, D. H., Borwein, J., López de Prado, M., & Zhu, Q. J. (2017). The Probability of Backtest Overfitting. Journal of Computational Finance, 20(4), 39–69.
AlphaPrime 在這裡能幫上什麼
AlphaPrime 的策略檢驗提供基本、標準與完整三種檢驗等級、推進分析與自訂門檻,讓你能在搜尋從未碰過的資料上檢查搜尋的勝出者。策略資料庫會把每個批次整理好,方便檢閱與重新檢驗。

