資訊係數(Information Coefficient,IC)是做什麼用的?
來源:FinLab:Information Coefficient(IC)與量化交易
白話整理
一句話總結
IC 是用來「幫選股因子打分數」的工具,告訴你: 「我今天用這個指標(例如本益比、動能、ROE)把股票排順序,這個順序到底能不能預測未來的漲跌?」
分數愈高,代表這個因子愈能預測未來報酬,愈值得放進策略裡。
為什麼需要 IC?(白話版)
你想做量化選股,手上有一堆候選指標:本益比、股價淨值比、營收年增率、近 60 日漲幅…… 問題是:哪些真的有用?哪些只是看起來有道理?
以前的做法是「直接回測」,但回測有個大陷阱:
- 傳統回測每月只挑 10 檔股票,一年 12 個月 = 只有 120 個樣本
- 只要其中一兩檔剛好暴漲,整條績效曲線就被拉上去
- 結果你以為策略很強,其實只是運氣好、剛好選到飆股(過度擬合)
IC 換一種算法:不挑股票,而是每一期把全市場快 2000 檔股票拿來一起看, 計算「因子分數的排序」跟「下一期實際報酬」之間的相關性。 樣本數從 120 暴增到幾十萬,運氣的干擾就被稀釋掉,比較看得出因子的真本事。
IC 怎麼算?
觀念
- 在某一天,用因子(例如動能)幫所有股票打分數、排序
- 等一段時間(例如 20 個交易日),看這些股票實際漲跌多少
- 計算「因子分數」和「實際報酬」的相關係數(correlation),這就是這一期的 IC
- 每個月都算一次,最後把整串 IC 取平均,就是「平均 IC」
程式碼(FinLab 套件)
from finlab import data
from finlab.tools.factor_analysis import ic
adj = data.get('etl:adj_close') # 還原股價
momentum = adj / adj.shift(60) - 1 # 因子:近 60 日報酬(動能)
ic_series = ic(momentum, adj, days=[20]) # 前瞻 20 日的 IC 時間序列
print(ic_series.mean()) # 平均 IC
數值怎麼看?(重點:不要期待很大的數字)
| IC 平均值 | 白話解讀 |
|---|---|
| > 0.01 | 單一因子有用的及格線 |
| 0.002~0.02 | 月頻單因子的正常範圍,落在這裡很普通、不用失望 |
| > 0.05 | 通常是「多個因子組合」後才做得到的理想值 |
| 接近 0 | 這因子基本上沒有預測力 |
| 負值 | 因子方向要反過來用(或根本沒用) |
關鍵心法:強策略不是靠單一因子衝出超高 IC,而是把好幾個「彼此不相關」的低 IC 因子疊在一起, 讓綜合 IC 拉到 0.05 以上。
臺股實測(2010–2026,前瞻 20 日)
| 因子 | 平均 IC | IC IR | 及格? |
|---|---|---|---|
| 動能(60 日報酬) | +0.0199 | 0.165 | ✅ |
| ROE(稅後) | +0.0130 | 0.163 | ✅ |
| 股價淨值比(反向) | +0.0047 | 0.063 | ❌ |
| 本益比(反向) | +0.0046 | 0.099 | ❌ |
| 營收年增率 | +0.0023 | 0.079 | ❌ |
幾個延伸指標
IC IR(IC 的穩定度)
- 算法:平均 IC ÷ IC 的標準差
- 白話:這因子是「每次都小賺」還是「有時大賺、有時大賠平均起來還可以」?
- IR 愈高代表愈穩、愈可靠。動能和 ROE 都在 0.16 左右。
滾動 IC(Rolling IC)
- 用 12 個月移動平均去看 IC 隨時間的變化
- 用途:抓出「這個因子什麼時候失效了」
正值期間比
- IC 為正的月份佔多少比例
- 動能 59.5%、ROE 58.9%(超過一半時間有效,但也沒有壓倒性)
分位數驗證(Quantile)
- 把股票依因子分成 10 等分,看報酬是不是「一格比一格高」
- 動能因子:最強那格 +1.47%,比最弱那格高約 0.78 個百分點,且呈單調遞增
- 代表整條排序都有資訊價值,不是只有頭尾兩端有效
Pearson IC vs Rank IC(兩種算法)
| 類型 | 特性 | 適合 |
|---|---|---|
| Pearson IC(FinLab 預設) | 直接算數值相關,對極端值敏感 | 分布接近常態的因子 |
| Rank IC(Spearman) | 先轉成排名再算相關,不怕離群值 | 有極端值的因子 |
注意:兩種算法結論可能翻盤。 臺股實測中,價值因子的 Rank IC 明顯比 Pearson 高;動能因子則相反。 嚴謹研究兩個都要看。
持有期(前瞻期)會影響 IC
同一個因子,看不同的持有天數,IC 差很多:
| 因子 | 短期(5–10 日) | 中長期(120 日) | 結論 |
|---|---|---|---|
| 動能 | IC ≈ 0.011 | IC ≈ 0.039 | 適合中長期訊號 |
| ROE | IC ≈ 0.016(10 日最強) | IC ≈ 0.003 | 適合短期訊號 |
用途:幫你決定「這個因子應該多久換一次股(再平衡頻率)」。
IC 的主要用途整理
- 因子篩選:回測前先評估,把沒用的因子刷掉,省時間也避免自欺
- 防過度擬合:全市場、每期都算,樣本大,不容易被少數飆股誤導
- 穩定性監控:用滾動 IC、IC IR 追蹤因子是不是還有效
- 決定換股頻率:看不同前瞻期的 IC,找最適合的持有期
IC 的限制(不能只看它)
- 算法不同(Pearson / Rank)結論可能不一樣
- 前瞻期設定不同,最佳因子排名也會變
- 沒有排除低流動性股票(嚴謹研究要加流動性過濾)
- IC 只衡量「預測力」,完全沒算手續費、交易稅、滑價 —— 真正實作策略時這些都要扣
實務建議(文章結論)
一個「可用」的因子,最好同時滿足:
- 平均 IC > 0.01
- IC IR 為正
- 滾動 IC 大部分時間 > 0
然後挑幾個彼此低相關的因子組合起來,把綜合 IC 推到 0.05 以上, 再進入回測、風險控制的階段。
一張圖看懂流程
一堆候選因子
│
▼
用 IC 打分數 ──► IC < 0.01 或 IC IR 為負 ──► 丟掉
│
▼ (通過)
挑低相關的因子組合 ──► 綜合 IC 目標 > 0.05
│
▼
回測(這時才加手續費、稅、滑價)
│
▼
風險控制 ──► 上線