關於倖存者偏差,流傳最廣的一個故事就是,「1941年,第二次世界大戰中,美國哥倫比亞大學統計學沃德教授(Abraham Wald)應軍方要求,利用其在統計方面的專業知識來提供關於《飛機應該如何加強防護,才能降低被炮火擊落的機率》的相關建議……」
這個故事已經講濫了啊,不講了,我們今天就來展示一下「倖存者偏差」如何在量化策略回測,尤其是指數增強策略回測中產生的,直觀地看看這種偏差能造成多大的後果。
先看一行(ricequant的)代碼,來源於真實的案例:
def init(context):
...
context.stocklist =index_components('000300.XSHG')
...
他最初的目的在於做一個滬深300的指數增強策略,首先獲取滬深300指數的成分股作為股票池,然後定期地按照一定的標準選定其中一部分超配,並定期再平衡組合。
不去討論策略和回測本身,直接獲取【今日】的滬深300指數成分股作為【歷史】回測的股票池;更有甚者,不但利用指數成分作為股票池,相應的權重也直接引入到歷史回測中。這些做法就等於引入了倖存者偏差。
為什麼這麼說呢,我們先引用一段中證指數公司發布的滬深300指數編制方案——
「6、 指數定期調樣
依據樣本穩定性和動態跟蹤相結合的原則,每半年審核一次滬深 300 指數樣本,並根據審核結果調整指數樣本。
……
7、 指數臨時調樣 在有特殊事件發生,以致影響指數的代表性和可投資性時,中證指數有限公司將對滬深 300 指數樣本做出必要的臨時調整。」
這就說明滬深300指數歷史上並不一直是目前的這300隻成分股。目前的這300隻成分股恰恰就是歷經多次「指數調樣」後的「倖存者」。
這個問題可能很多做量化回測的實踐者都明白,但是由於代碼的編制不便或者無偏差歷史數據的難以獲取,索性直接忽視了指數成分股存在「倖存者偏差的問題」,寄希望於偏差不太大,不會造成實質性的影響。
俗話說,「There AreWasps in the Yard. You』d Better Get to Know Them.」究竟這種倖存者偏差有多大,看圖——
藍線代表的策略是:在回測的第一天,直接按照今天的滬深300成分股買入組合,配比按照今天的權重,當然歷史上沒上市的時候先不買。另外,為了避免新股上市後的連續漲停造成更大的偏差,成分股上市後60個交易日後再加入回測組合。也就是【假如能預先知道滬深300成分股及其權重】策略。
橙線代表的策略是:在回測的第一天,直接按照今天的滬深300成分股買入組合,由於假設是不知道今天的權重,所以按等權重配比,同樣歷史上沒上市的時候先不買,也同樣成分股上市後60個交易日後再加入回測組合。也就是【假如能預先知道滬深300成分股】策略。
紅線是滬深300全收益指數H00300,綠線是滬深300指數000300。
這張圖顯示了累積10多年的成分股倖存者偏差,都不用看詳細數據,這偏差相當可觀啊!!
下面再看累積了5年的成分股倖存者偏差——
最後,我們檢視一下造成這種偏差的來源,手動翻一下滬深300的【歷史】成分股,退市、合併的其實不少。下面是幾個比較著名的,樂視網,華銳風電,吉恩鎳業。
當然,還有600074保千裡、000939凱迪電力、000511烯碳新材、600747大連控股、601268二重重裝。強烈自己翻一下這些股票,再感受一下這些股票退市前的最後時光,可能你用的行情軟體不夠「高級」的話,這些退市股已經看不到了,這些巨坑就這麼悄無聲息的消失掉了,不再給感受的機會……
也許,做量化選股策略的實踐者,認為這樣的事件太過稀有,自己不會踩到這樣的坑。可是,許多量化選股策略,偏重於價量數據及其衍生指標,根本不會用到基本面數據。即使如果確實利用到而且沒有被篩選掉基本面數據,但是財務手段千變萬化。遙想當年樂視網有多少人追捧,仿佛就在昨天,再來一次類似的坑,真的能100%確信無疑的避免嗎?
所以啊,對於量化選股策略,倖存者偏差,絕不可完全忽略。我們做回測,必須仔細一點再仔細一點,共勉……