跳至主要內容
台股研究 約 5 分鐘閱讀

台股因子選股總綱:三因子分析、IC、Rank IC 到多因子回測

因子選股不能只看回測曲線。本文把台股三因子拆成 Factor Return、Centrality、Shapley、IC 與趨勢五件套,說明如何先驗證因子預測力,再延伸到 Rank IC、多因子選股與股票選股器,建立可重複的 FinLab 因子研究流程。

先驗證因子,再合成策略 CAGR 0.0% Sharpe 0.00

封面圖片 封面圖片

台股因子選股總綱:先檢查因子,再合成策略

因子選股的核心是先問每個條件有沒有預測力、是否和其他條件重複、在不同市況會不會失效,再決定要不要把條件疊成策略。本文用三個常見因子(市值、營收動能、價格動能)示範完整檢查流程:先拆成單一因子,檢查 Factor Return、Centrality、Shapley、IC 與趨勢,再決定要不要合成策略。

研究問題 這篇會用的工具 下一步延伸
這個因子長期有沒有貢獻? Factor Return 多因子選股策略
因子是不是已經太擁擠? Centrality 調整權重或暫停使用
多個因子裡誰真的出力? Shapley Values 刪除低貢獻因子
因子對未來報酬有沒有預測力? IC 資訊係數 對照 Rank IC
如何把研究變成可執行策略? finlab 回測與 feature.combine 台股股票選股器股票選股教學

如果你要的是完整選股方法地圖,先讀 股票選股教學;如果你已經有幾個指標,本文負責回答「怎麼判斷這些因子是否值得放進策略」。想用 AI 自動產生候選因子,可以延伸到 AI 因子挖掘,但仍應回到本文的 IC 與貢獻度檢查。

免費試用

用 AI 開始 FinLab

把這句話交給你的AI,它會帶你完成設定並做出第一個策略。

告訴你的AI:

幫我用 FinLab 檢查三個台股選股因子:先算 Factor Return、IC、Rank IC 與相關性,再判斷哪些因子適合合成多因子策略,請讀:https://finlab.finance/setup?relatedUrl=/blog/factor_analysis_3_factor

很多選股策略的起點都很直覺:螢幕上跳出一檔飆股,心裡覺得「它會漲」。直覺可能有價值,但不能直接變成策略。比較穩的做法,是把靈感拆成可驗證的因子,把「為什麼漲」說清楚,再用資料檢查它是否真的對未來報酬有幫助。

真正的難點是流程:資料要對齊、標籤要定義清楚、不同頻率不能偷看未來,最後還要知道因子之間是否重複。FinLab 把這些步驟包成一致的資料與分析工具,讓研究者把時間放在判斷因子,減少手工清資料的負擔。

因子分析和一般做法,哪裡不一樣?

一般做法:先選幾個看起來厲害的指標,湊一套回測;結果好就覺得是神功,結果差就再換一套。

我們的做法:先把策略拆解,再逐一檢驗每個因子的線索:它帶來的超額報酬是多少?在什麼狀態下有效?會不會太擁擠(大家都在用)?彼此相關性高不高?

沒有 Finlab 我們得自己處理:資料下載、清洗、對齊、換股對齊、月/季頻率對接… 一個環節錯了,結果就不可信。

有了 finlab,我們可用一致頻率的資料集與安全的 resample 邏輯,把時間對齊、避免偷看未來;剩下的,就是認真跟資料搏鬥。

我們的範例策略:

三個最基本、卻常被忽略「為什麼」的因子:市值、營收動能、價格動能。

  • 為什麼要小市值?因為小市值在資訊修正與資金挹注時,彈性常常更大。
  • 為什麼看營收加速?因為是最扎實的推力。
  • 為什麼要動能?因為市場的從眾與慣性,往往延長趨勢。
顯示程式碼
from finlab import data, backtest
 
marketcap = data.get('etl:market_value')
revenue   = data.get('monthly_revenue:當月營收')
close     = data.get('price:收盤價')
 
cond_smallcap = marketcap.rank(pct=True, axis=1) < 0.3
cond_revgro   = (revenue.average(3) / revenue.average(12)).rank(pct=True, axis=1) > 0.7
cond_momentum = (close / close.shift(20)).rank(pct=True, axis=1) > 0.7
 
pos = cond_smallcap & cond_revgro & cond_momentum
report = backtest.sim(pos, resample='ME', upload=False)
report.display()

**為什麼要用 rank?**比較的是「相對位置」,而不是絕對數值。

回測結果 回測結果

把策略拆成可驗證的語言:特徵 & 標籤

先定義我們「到底要預測什麼」:未來一段時間的超額報酬(相對市場平均)。這是策略的真目標,而不是單看漲跌。

顯示程式碼
from finlab import data
import finlab.ml.feature as feature
import finlab.ml.label as label
 
features = feature.combine({
    'marketcap' : cond_smallcap,
    'revenue'   : cond_revgro,
    'momentum'  : cond_momentum
}, resample='ME')
 
labels = label.excess_over_mean(index=features.index, resample='ME')

為什麼用超額報酬? 因為我們將焦點從「追隨市場」轉向「超越對手」。我們比較的是相對於競爭者的反應速度,而非大盤的絕對速度。

VIP 區域接著會把 3 因子拆成因子報酬、集中度、Shapley、IC 與趨勢五件套,讓你看到每個因子是否真的貢獻超額報酬。

VIP 區域包含策略細節

登入後可看策略優化、完整程式碼與互動式回測報告

FinLab AI

想建立自己的策略?

用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案

免費開始

更多多因子選股研究

查看全部