1. 程式人生 > >美麗的回測 —— 教你定量計算過擬合概率

美麗的回測 —— 教你定量計算過擬合概率

作者:石川,量信創始合夥人,清華大學學士、碩士,麻省理工學院博士;精通各種概率模型和統計方法,擅長不確定性隨機系統的建模及優化。知乎專欄:https://zhuanlan.zhihu.com/mitcshi。

摘要:金融資料的信噪比很低,使得過擬合成為回測中的必然。本文介紹一個量化分析框架,它可以計算回測中過擬合的概率,有助於評價量化策略的有效性。

1、引言:

武當山上,殷素素在張翠山自刎後也隨即自殺,臨死前囑咐兒子張無忌“千萬不要相信漂亮的女人。越是漂亮的女人,越會騙人。”

在量化投資中,回測(backtesting)就是這樣一個漂亮的女人。

眾所周知,金融資料中的信噪比很低。當我們在回測中嘗試了大量的引數時、或是在選股時測試了大量的因子後,找出來效果最好的一組引數或者一個因子總能獲得非常不錯的效果。但這大概率是因為它們僅僅是對回測期內的噪音精準建模了。

“If the researcher tries a large enough number of strategy configurations, a backtest can always be fit to any desired performance for a fixed sample length.譯:對於給定樣本長度,只要嘗試足夠多的引數配置,總能達到想要的風險收益特性。

來看一個例子。

以中證 500 的成分股為選股池、2010 年 1 月到 2018 年 10 月為回測期,評價不同的選股因子 —— 以該因子選出的前 50 支股票構建純多頭的投資組合的最終淨值評價因子的效果。當測試了 20 個不同的因子後,最優秀的因子的淨值為 2.29(同期中證 500 指數淨值僅為 1.06)。這 20 個因子的淨值如下圖所示(紫色加粗的是最好的那個)。

如果把測試因子的個數從 20 個上升至 50 個,選股效果進一步提升,最好因子的淨值從 2.29 上升至 2.40。下圖是 50 個因子(包括最開始的 20 個)的選股效果,紫色加粗曲線依然為前 20 個因子中最好的、紅色加粗曲線為這 50 個因子中最好的。

最後,我們把測試的個數上升至 100(這是一個任何量化選股報告中都會輕易突破的因子個數)。這 100 個因子中(包括之前 50 個),最好的因子的淨值為 2.43,在前 50 個因子的基礎上進一步提高了。下圖中黑色加粗曲線代表了全部 100 個因子中最好的那個的選股淨值。

考慮到這些因子之間不是完全相關,如果我們把這三個因子結合起來再配合更復雜的交易演算法,一定能在回測期內獲得更好的選股效果。但是,如果僅僅因為最終的策略中只用了三個因子就認為沒有過擬合,那就大錯特錯了,因為在發現這三個因子的背後是 97 次失敗的嘗試。

當進行 multiple testing 時(同時檢驗很多不同的假設),效果最好的那個即便在統計上非常顯著(比如有很低的 p-value 或者很高的 t-statistic),它是 false discovery 的概率仍然很高(見《出色不如走運 (II)》)。不幸的是,這是金融圈學術界普遍存在的問題。學者們在頂刊上發表一個有效策略或者因子的時候,並不告訴讀者這個發現的背後經歷了多少失敗的嘗試。失敗的嘗試越多,這個發現其實是虛假的概率就越高。

當我們樂此不疲的測試不同的引數組合或者嘗試不同的因子時,其實只是在做一件事 —— 過擬合。最終被挑出來的往往是過擬合帶來的 false discovery。回測中過擬合的直接結果就是無法準確評價策略在樣本外的效果。如果過擬合非常嚴重,即策略本身就是針對噪音構建的,那麼它可能在實盤中是完全失效的、等待它的只有虧損。

鑑於過擬合的普遍存在以及過擬合的嚴重後果,如何量化回測中過擬合的概率(Probability of Backtest Overfitting,簡稱 PBO)就顯得至關重要。本文就來介紹一種定量計算回測中過擬合概率的方法。

讓我們從夏普率(Sharpe Ratio,簡稱 SR)說起。

 

2、圍繞夏普率的討論

 

為計算回測的過擬合概率,需要比較不同引數下策略的效果;而為了比較不同策略的效果,就必須選定一個適當的指標。在眾多評價投資策略的指標中,夏普率無疑是最重要的,它是下文介紹的這個計算 PBO 框架中使用的策略評價指標。值得一提的是,這個框架本身不依賴於選擇的指標,因此使用者也可以嘗試其他評價策略的指標。

關於回測的過擬合如何誇大夏普率(inflated Sharpe Ratio),學術界和業界有一些有意思的討論。這裡不妨做個簡單梳理。

一般的經驗認為策略在實盤中的夏普率是其在回測期內夏普率的 50%。Harvey and Liu (2015) 定量計算了不同大小的夏普率在樣本外的“打折程度”(他們稱為 haircut),發現了 haircut 和 Sharpe Ratio 之間的非線性關係。打折程度 Haircut 的取值在 0 到 1 之間,等於 1 意味著 100% 折扣,即樣本外的夏普率為零。

下圖來自 Harvey and Liu (2015),顯示了回測期內不同 number of tests(如測試的因子的個數,或者引數組的個數)時,Haircut 和夏普率的關係。三條不同的曲線代表三種不同的考慮 multiple testing 影響的方法(分別為 Bonferroni、Holm 以及 BHY 調整)。從圖中不難看出,當樣本內的夏普率很小時,由於過擬合的存在,打折率為 1,即樣本外的夏普率為零。這種情況隨著 number of tests 的增加而加重。

除此之外,Bailey 和 Lopez de Prado 兩位學者也討論了 inflated Sharpe Ratio 的問題(Bailey and Lopez de Prado 2012, 2014)。在構建量化策略時,人們往往選定一個策略型別,比如趨勢追蹤或者統計套利,然後在給定的模型下使用歷史資料尋找最優的引數。在這個前提下,Bailey 和 Lopez de Prado 假設不同引數的策略的夏普率滿足均值為 E[SR]、方差為 V(SR) 的正態分佈。在這個假設下,他們計算得出 N 組不同的引數中得到的最大的夏普率的期望滿足:

上式中 γ 是尤拉-馬斯刻若尼常數(Euler-Mascheroni constant),約為 0.5772;Z 為標準正態分佈的累積密度函式。從上式不難看出,樣本內的最大夏普率隨 N 增大和 V(SR) 增大。

下圖顯示了當 E[SR] = 0 時,僅僅靠增加 N 和 V(SR) 就可以逐漸提升最優夏普率。增大 N 對應著在回測中增加 number of tests,增大 V(SR) 對應著完全不考慮業務依據而漫無目的的擴大引數的取值範圍。這些都是造成過擬合的原因。

以上的介紹說明,過擬合不可避免的高估了策略的夏普率,這會影響對策略有效性的評判。因此,定量計算回測中過擬合的概率就顯得非常有必要。它要回答的不是一個“是”或者“否”的問題(回測都存在過擬合了),而是定量的評價過擬合的程度。

3、量化過擬合的概率

本節介紹 Bailey et al. (2017) 提出的計算回測中過擬合概率的框架。首先來定義 Probability of Backtest Overfitting。

由於樣本記憶體在過擬合,因此樣本內的最優引數不一定是樣本外最好的。回測中過擬合的概率 PBO 的定義為樣本內最優引數 n* 在樣本外的夏普率小於所有 N 組引數在樣本外夏普率的中位數的概率。

有了 PBO 的定義,下面馬上來介紹計算 PBO 的框架。它的名字叫 Combinatorially-Symmetric Cross-Validation(組合對稱交叉驗證,簡稱 CSCV)。假設我們一共測試了 N 組引數,回測期長度為 T。CSCV 由以下步驟構成:

第一步:首先在回測期內使用 N 組引數各自跑策略,得到每組引數在 T 期的收益率序列,以此構建一個 T × N 階矩陣 M,M 的每一列代表為某組引數 n 的 T 期收益率序列。

第二步:將 M 矩陣按行劃分成 S 個互不相交的 T/S × N 階子矩陣。例如,假設原始的 T = 1000 期,則可以取 S = 10,並把 M 劃分成 10 個子集,每個子集為 100 × N 階矩陣。

第三步:從全部 S 個子矩陣中,取出 S/2 個,令 C_s 代表所有可能的組合。舉例來說,如果 S = 10,則從 10 個子集中取出 5 個,一共有 252 種組合方法,C_s 就是這 252 種組合的合集。

第四步:對 C_s 中的每一個特定組合 c,進行如下操作:

4a. 將 c 包含的子矩陣拼在一起構成訓練集 J,它是一個 S/2 × N 階矩陣;

4b. 將全部 S 個子矩陣中不被 c 包含的子矩陣(即 c 的補集)拼在一起構成測試集 J_c,它也是一個 S/2 × N 階矩陣;

4c. 在訓練集 J 矩陣中,計算每一列收益率序列的夏普率,它們之中夏普率最大的對應的策略 n* 為樣本內的最優策略;

4d. 在對應的測試集 J_c 矩陣中,計算每一列收益率序列的夏普率,並求出 n* 這組引數在樣本外的相對排名 w,w 的取值在 0 到 1 之間,1 意味著樣本內最優的策略 n* 在樣本外同樣最優。

4e. 定義 logit 變數如下:

由定義可知,如果 n* 在樣本外的表現等於所有引數在樣本外夏普率的中位數,則 w = 0.5,而 λ = 0。

第五步:上一步後會得到 λ 的經驗分佈 f(λ),由此就可以求出 PBO:

通過考察 PBO 的大小,就能夠定量的評價一個策略是否靠譜:真正有效的策略的 PBO 應該較小。

在一次題為 What to look for in a backtest 的演講中,CSCV 的發明者之一 Dr. Marcos Lopez de Prado 指出該方法具有以下優點:

1. CSCV 保證了訓練集和測試集同樣大小,從而使得樣本內外的夏普率具有可比性。

2. 由於考慮了全部的組合,任何一個被用做訓練集的組合都在之後反過來被當作測試集(反之亦然),這保證了訓練集和測試集的資料是對稱的,因此夏普率在樣本外的降低只可能來自過擬合。

3. CSCV 將整個 T 期資料劃分成長度為 T/S 的 S 個子集,而非隨機的從 T 期內選出一定長度的資料,這保證了策略收益率的時序相關性。

4. 整個求解 PBO 的過程是 model-free 以及 non-parametric 的;它得到 λ 的經驗分佈 f(λ),進而計算出過擬合的概率,不需要對 PBO 的模型或者引數做任何假設。

接下來就通過一個例子來應用 CSCV。

4、一個例子

《從 CTA 趨勢策略的表現看量化投資面臨的挑戰》一文中,我們使用 15 種商品期貨的指數定性分析了過去 5 年趨勢追蹤策略的表現。該文的實證採用的是最簡單的雙均線策略 —— 短週期均線上穿長週期均線策略時做多;短週期均線下穿長週期均線時做空。長、短週期就是策略的兩個待優化的引數(由 LW 和 SW 表示)。下面就使用本文介紹的框架來計算優化這兩個引數時的過擬合概率。

在回測中,令短週期均線引數 SW 的取值範圍為 1 到 20、長週期均線引數 LW 的取值範圍是 SW + 1 到 50,步長均為 1,因此一共有 790 組引數(N = 790)。令回測長度為 1000 個交易日。使用這 790 組引數分別進行回測,得到每組引數下策略在這 1000 個交易日內的收益率序列,從而構建原始的 M 矩陣(1000 × 790 階)。

使用第四節介紹的 CSCV 框架分析 M 矩陣,假設分析中 S = 10,因此一共有 252 種(10 選 5)回測 + 測試集的配對。在計算 PBO 之前我們先來做一個實驗。對於每一種配對,求出樣本內最優引數的夏普率和該組引數在樣本外的夏普率,這兩個夏普率便構成一個樣本點,因此一共有 252 個樣本點。這 252 個點的散點圖如下(其中紅線為迴歸得到的線性關係):

樣本內最優引數的夏普率和其在樣本外的夏普率之間的相關係數為 -0.36;上述迴歸直線的斜率為負也說明了這種負相關關係。這說明,對於這個雙均線趨勢策略,樣本內最好的引數傾向於在樣本外有更差的表現。

在進一步使用 CSCV 計算 PBO 之前,我們觀察到上圖中存在一些不正常的現象 —— 這些散點的分佈區域的上限似乎近似的坐落在一條直線上(下圖),意味著這些點對應的訓練集和測試集的夏普率之和大致相同。

出現這種現象的原因是趨勢策略非常依賴價格序列的路徑。在整個 1000 個交易日的回測期內,趨勢策略掙錢的表現集中在某些特定的時間。當我們採用 CSCV 將這 1000 個交易日劃分成 252 個長度各為 500 的訓練集、測試集配對時,這其中有相當一部分的訓練集都包含了趨勢策略最賺錢的那些特定時間,使得這些訓練集中的最優引數相同。

對於這些訓練集、測試集配對,它們的 n* 相同,因此它們在樣本內、外全部 1000 個交易日內收益率的均值都是來自策略 n*,即均值相同。雖然這些配對中的訓練集和測試集不盡相同,但由於收益率的波動率在整個回測期內較為穩定,因此訓練集和測試集內的夏普率之和近似的等於這兩個序列中收益率均值之和。綜合以上兩點就能夠解釋為什麼這些配對的樣本內、外夏普率之和非常接近。由於它們對應的 n* 恰好又是整段回測期內效果最好的引數,因此這些配對的散點構成了上圖中散點分佈中不正常的線性上限。

為了減弱路徑依賴對評判趨勢策略過擬合程度的影響,我們對 CSCV 進行適當的改進,引入一定的隨機性。

在 CSCV 的第三、四步,不是考慮所有可能的組合,而是隨機的構建訓練集和測試集。具體的,將長度 1000 的回測期分成 50 個長度為 20 個交易日的子集。從這 50 個子集中,隨機選出 13 個作為測試集、13 個作為訓練集(13 這個數並沒有什麼特殊的含義),因此訓練集和測試集的長度各為 260 個交易日。將上述過程重複 250 次,得到 250 個訓練集、測試集配對,然後計算 λ 的經驗分佈 f(λ) 以及 PBO。

引入隨機性後,再次畫出樣本內最優引數的夏普率和它在樣本外的夏普率的散點圖(下圖),原始結果中不正常的線性上限消失了。迴歸方程的斜率是 -0.49,說明樣本內、外的夏普率之間存在負相關性。

此外,λ 的經驗分佈 f(λ) 如下圖所示:

通過 f(λ) 求出 PBO = 0.572 —— 在使用雙均線構建趨勢追蹤策略時,回測中過擬合的概率高達 0.572。一個靠譜的策略的 PBO 不應該這麼高。因此,在使用雙均線構建趨勢策略時必須格外小心。

本節的例子說明使用 CSCV 這個框架能夠方便的計算出 PBO,從而評價一個策略是不是靠譜。此外,本節花了一定的篇幅指出了趨勢策略的路徑依賴對 CSCV 結果造成的影響。通過它想要強調的是,再先進的統計方法也不應該代替我們的獨立思考,我們必須為自己的回測結果負責。

5、結語

2005 年,發表於 PLoS Medicine 上的一篇題為 Why most published research findings are false 的文章(Ioannidis 2005)引起了廣泛的關注。該文指出科學界,特別是醫學界有相當一部分所謂的顯著發現都是錯誤的。而原因之一正是經過大量測試後找出的那個最顯著的往往是 false discovery。2015 年醫學界最權威的同行評審期刊之一柳葉刀(The Lancet)的主編 Dr. Horton 指出醫學界一半的研究成果是錯誤的(Horton 2015)。

“ The case against science is straightforward: much of the scientific literature, perhaps half, may simply be untrue. Afflicted by studies with small sample sizes, tiny effects, invalid exploratory analyses, and flagrant conflicts of interest, together with an obsession for pursuing fashionable trends of dubious importance, science has taken a turn towards darkness.

雖然比醫學界晚了差不多 10 年,但幸運的是,金融圈也已經意識到了 multiple testing 帶來了太多的虛假髮現(例如並不能掙錢的策略,或者是不能解釋預期收益率截面差異的因子)。以 Dr. Campbell Harvey(學術界 —— 杜克大學商學院教授、前美國金融協會主席)和 Dr. Marcos Lopez de Prado(業界 —— AQR Capital, Head of Machine Learning)為代表的學者們從幾年前開始就呼籲這個嚴峻的問題,並提出了對 multiple testing 造成的過高 false discover rate 的解決方法。我之前的文章《出色不如走運 (II)》對 Dr. Harvey 的一些研究進行了梳理,而本文介紹的回測中過擬合概率的量化手段則是 Dr. Lopez de Prado 和他的 co-authors 提出的。

 

一個量化策略的提出往往經過回測、模擬盤、實盤三個階段。回測中有很多門道(見《科學回測中的大學問》);回測準確與否對於該策略在實盤外的表現至關重要。由於金融資料的信噪比極低且難以分辨出資料中哪些是噪音、哪些是因果關係,這使得回測中或多或少都會存在過擬合。如今,僅僅通過考察引數平原或者使用有限訓練集、測試集來評價過擬合的危害是遠遠不夠的。希望學術界和業界提出的這些新方法能帶給我們更多的啟發。

越美麗的回測,越會騙人。

參考文獻

Bailey, D. H. and M. Lopez de Prado (2012). The Sharpe ratio efficient frontier. Journal of Risk, Vol. 15(2), 3 – 44.

Bailey, D. H. and M. Lopez de Prado (2014). The deflated Sharpe ratio: correcting for selection bias, backtest overfitting, and non-Normality. Journal of Portfolio Management, Vol. 40(5), 94 – 107.

Bailey, D. H., J. M. Borwein, M. Lopez de Prado, and Q. J. Zhu (2017). The probability of backtest overfitting. Journal of Computational Finance, Vol. 20(4), 39 – 69.

Harvey, C. R. and Y. Liu (2015). Backtesting. Journal of Portfolio Management, Vol. 42(1), 13 – 28.

Horton, R. (2015). Offline: What is medicine’s 5 sigma? Lancet, Vol. 385(9976), 1380.

Ioannidis, J. P. A. (2005). Why most published research findings are false. PLoS Medicine, Vol. 2(8), 696 – 701.

來源:量信投資    已獲得授權轉載!

---------------------------------------------------------------------------------------------------------------------

推薦閱讀:

序號 標題 傳送連結
1 雙均線策略(期貨)  量化策略原始碼 https://www.myquant.cn/docs/python_strategyies/153
2 alpha對衝(股票+期貨)  量化策略原始碼 https://www.myquant.cn/docs/python_strategyies/101
3 集合競價選股(股票) 量化策略原始碼 https://www.myquant.cn/docs/python_strategyies/102
4 多因子選股(股票)  量化策略原始碼 https://www.myquant.cn/docs/python_strategyies/103
5 網格交易(期貨)  量化策略原始碼 https://www.myquant.cn/docs/python_strategyies/104
6 指數增強(股票)  量化策略原始碼 https://www.myquant.cn/docs/python_strategyies/105
7 跨品種套利(期貨)量化策略原始碼 https://www.myquant.cn/docs/python_strategyies/106
8 跨期套利(期貨) 量化策略原始碼 https://www.myquant.cn/docs/python_strategyies/107
9 日內迴轉交易(股票)量化策略原始碼 https://www.myquant.cn/docs/python_strategyies/108
10 做市商交易(期貨) 量化策略原始碼 https://www.myquant.cn/docs/python_strategyies/109
11 海龜交易法(期貨) 量化策略原始碼 https://www.myquant.cn/docs/python_strategyies/110
12 行業輪動(股票) 量化策略原始碼 https://www.myquant.cn/docs/python_strategyies/111
13 機器學習(股票) 量化策略原始碼 https://www.myquant.cn/docs/python_strategyies/112
14 倉位管理(1): 鞅與反鞅策略,凱利公司及其侷限 https://www.myquant.cn/community/topic/673/2
15 倉位管理(2): 凱利公式指導投資與多種資金管理方式 https://www.myquant.cn/community/topic/679
16 多因子選股之有效因子 https://www.myquant.cn/community/topic/690
17 多因子策略之冗餘因子 https://www.myquant.cn/community/topic/695
18 多因子選股之策略的實現 https://www.myquant.cn/community/topic/708/2
19 大師系列之彼得•林奇基層調查選股法 https://www.myquant.cn/community/topic/719/2
20 從量化角度告訴你常見的技術指標到底能不能賺錢? https://www.myquant.cn/community/topic/649/2
21 從回測到實盤(2):如何讓回測更貼近實盤結果  https://www.myquant.cn/community/topic/665
22 程式化交易(3):從回測到實盤,還需要注意些什麼? https://www.myquant.cn/community/topic/668
23 股市暴跌深套 | 如何利用日內迴轉交易策略降低持倉成本 https://www.myquant.cn/community/topic/704
24 演算法交易策略的成功回測之一 https://www.myquant.cn/community/topic/721
25 股票中的情侶——配對交易 https://www.myquant.cn/community/topic/735
26 量化交易入門 https://www.myquant.cn/community/topic/28/2
27 分享一個python均線策略 https://www.myquant.cn/community/topic/78/2
28 一個量化交易策略師的自白 https://www.myquant.cn/community/topic/652/2
29 《利用Python進行資料分析》PDF電子書下載 https://www.myquant.cn/community/topic/618
30 高頻交易:為了0.07毫秒的比拼,竟然花費了1400萬美金 https://www.myquant.cn/community/topic/634/2
31 分享幾本量化和python方面的書,可以直接下載 https://www.myquant.cn/community/topic/89/2
32 2018:資料科學20個最好的Python庫 https://www.myquant.cn/community/topic/664
33 《投資中最簡單的事》讀書筆記 https://www.myquant.cn/community/topic/575/2
34 史上最全的量化交易資源合集 https://www.myquant.cn/community/topic/624/2
35 七種量化選股模型 https://www.myquant.cn/community/topic/663
36 談資金管理 https://www.myquant.cn/community/topic/579/2
37 網格交易策略(附策略原始碼與收益圖) https://www.myquant.cn/community/topic/548/2
38 指數增強策略 https://www.myquant.cn/community/topic/527
39 日內迴轉交易策略 https://www.myquant.cn/community/topic/526
40 跨期套利策略 https://www.myquant.cn/community/topic/525
41 跨品種價差套利策略 https://www.myquant.cn/community/topic/524
42 集合競價選股 https://www.myquant.cn/community/topic/523
43 基於EV/EBITDA倍數估值法的Alpha對衝策略 https://www.myquant.cn/community/topic/522
44 行業輪動策略 https://www.myquant.cn/community/topic/521
45 海龜交易法則 https://www.myquant.cn/community/topic/520