Information Coefficient (IC) 我很早就知道它了,但是一直沒有時間將它整合到交易系統裡面,今年正好有這樣的機遇,趁著教書的時間,徹底的研究 IC 在各方面的使用方法。
先說結論,IC 就是做最佳化不可或缺的驗證方式,它有幾個優點:
多樣本
多樣本現象:很多人對於「模型」感到很困惑,「這不就是策略嗎」?為什麼要說的很高大尚,說這是「模型?」差別很簡單,假如你在交易一個現象,那就能夠稱為模型。
問題在於,很多人研發策略,只是回測出賺錢的手法,就能稱為「模型」。
這是一個謬誤,因為回測歷史總是會賺錢的!但賺得穩不穩定?未來報酬是否類似呢?假如你使用 MultiChart 等相關的產品,你就知道,它能做很多策略,但它並不能歸類為模型。
什麼叫做模型?模型是用來解釋股市現象,並且將這些現象具體用於交易的方法,例如:
- 市場規則:股市中,大神如菲比斯,他曾說「要瞭解市場的規則」因為從規則中,就可以賺錢,著重在事件交易,例如信用交易、重大訊息、法說會…等等。
- 當然市場上,除了很顯著的規則事件外,其實有很多隱性的規律,例如小市值效應、成交量效應、均線效應、波動的效應。這些「效應」就是描述市場上的報酬,在特定的股票上,價格會有不均衡的現象。這也是 FinLab 最著重在觀察的重點。
在事件交易中,我們可以利用事件發生前後的報酬率統計,來判斷事件對於股價的影響,而在市場的規律,就要靠 IC 來幫我們判斷。
驗證有效性
IC 的其中一個最重要的功能,就是幫助我們驗證這些效應是否真的有效。如果一個策略或模型的 IC 持續為正,且在不同時期、不同市場中都維持穩定,那麼我們就可以更有信心地相信這個策略的背後有其合理性與可靠性。
換句話說,IC 是在幫助我們確保我們看到的不是「假象」,而是真正存在的「現象」。IC 越高,代表我們模型對報酬的預測能力越好,這也意味著這個模型具有一定的可預測性。
監控模型穩定性
IC 也可以作為模型持續性監控的一個重要工具。市場變化迅速,很多模型在一開始可能會表現得很好,但隨著時間的推移,它們的預測能力可能逐漸下降。如果我們持續追蹤 IC 值,就能及早發現模型失效的徵兆,例如 IC 開始由正變負,或是不再穩定。我們可以根據這些指標及時調整策略,甚至放棄不再有效的模型。
組合效應評估
IC 也可以幫助我們比較不同的模型或因子之間的效果。不同模型之間,如果我們使用 IC 來做比較,可以清楚地知道哪個模型在預測能力上更勝一籌。甚至,我們可以透過計算 IC 的加權平均,來衡量多個因子的綜合效果,這樣有助於我們打造更為強大的投資組合。
最重要的:避免過擬合
當你回測每個月持有10檔股票時,每年的樣本數為 12 x 10 ,就是120個樣本。這樣的數量,只要選到一兩支暴漲的股票,就會讓你的回測績效異常優異。然而,你永遠不知道的是,究竟是你是
- 發現了某個現象,捕捉到了股票標的,真的會上漲
- 還是為了捕捉會上漲的股票,而設計了這些條件
上述兩件事情,都能讓回測績效優異,但對於樣本外(實單)有著天差地別的結果,此時,使用 IC 的好處,就是可以確認你真的在做「二」而非在做「一」。因為 IC 是全市場的監測,此時你的樣本就是上市櫃近 2000 檔股票標的,而且你甚至可以做 rolling 的方式,去增加樣本的數量,進而大幅度預防過擬合。
最簡單的方式,就是都不回測,只有最後將 IC 調整至足夠優秀後,再簡易的做出策略。
就像是你做料理,一定是先備料,最後組合,變成一道佳餚,而不是東拼西湊,且戰且走。
IC的使用方法
from finlab.tools.factor_analysis import ic
factor = data.get('price_earning_ratio:股價淨值比')
price = data.get('etl:adj_close')
score = ic(factor, price).mean()
print(score)
實戰的ML預測能力,其 IC 最好能大於 0.05,一般的 Factor,盡量 IC 要大於 0.01。
IC的應用場景
- 用來篩選因子
- 驗證策略的條件合理性
- 用來確認ML模型預測效果
- 用來檢視因子的延續性、穩定性
- 用來檢視模型的延續性、穩定性
結論
假如你想要精進自己的量化交易技術,請研究 IC,將其應用於製作「模型」的所有流程中,很多人認為做一個好策略、報酬率、夏普是重點,其實不是,
例如你用 ML,假如用基因演算法,用暴力列舉所有參數,隨時隨地都能做出好策略,但真的有用嗎?
量化交易的精髓,在於預防 Overfitting,才是重點,再多的快樂表,都底不過一個能夠長期有效的策略。