這是全書方法論最密的五章。它們不教你更強的模型,而是教你怎麼把一個交易點子,變成定義良好、可歸因、可計數的學習任務——差一根 bar 的錯位,就能無中生有或抹掉一條真 edge。
三種特徵來源,過同一道 triage 閘門
Part II 的五章有明確分工:Ch 6 固定環境(在什麼條件下評估)、Ch 7 定義任務與診斷(標籤怎麼定、怎麼判斷有沒有訊號、試了幾次怎麼算),然後 Ch 8、9、10 是三個特徵供應商——分別供給價格衍生特徵、模型 fit 出來的特徵、文字特徵。
關鍵在於:三個供應商的產出,全部要回到 Ch 7 的同一道 triage 閘門。這個結構很重要——它意味著你不能因為「這是文字特徵比較新潮」就給它比較寬鬆的標準。所有候選特徵走同一條檢驗線、記進同一本搜尋帳。
三個供應商、一道閘門、一本帳。REVISE 在效率市場下是預期中最常見、也最有資訊量的結果。
先固定環境,再開始搜尋
核心思想:把點子變成可信證據的方法,不是找到更強的訊號,而是先固定評估環境。Ch 6 的產物是一份版本化的 setup:universe 與可交易規則、決策時程、score 怎麼變成部位、限制條件、成本模型類別。之後所有迭代都在這個框裡發生。
最實用的一條是 walk-forward 的可用性檢驗,書把它壓縮成一句話:在決策時刻 t,這個樣本的特徵算得出來、而且標籤已經解決了嗎?h 日的 forward return,標籤要到 t+h 才知道,所以訓練集必須排除最近 h 個時間戳——這就是 purging。
purge 那一段是刻意丟掉的資料——不丟,測試窗就會看到訓練期還沒解決的標籤。
# 分清楚「改機制」與「調參數」,改善才可歸因
是新版本(bump 版號 + 重建 baseline):
排序選股 → 門檻篩選 # mapping 換了
long-only → long/short
加上停損規則
改變調倉頻率
成本模型多加一個成分
留在同版本(只是參數):
門檻 1.8 → 2.0
取前 10% → 20%
成本 10 → 15 bps
retrain 時機
新資料累積到訓練窗的 1–5%,或樣本外表現系統性劣化
# 10 年窗月或季 retrain 即可;20 日窗要日 retrain
→ 接到台股(以下為外推,非書上內容):setup 版本化這件事,跟你既有的假說編號制度(H-018 那種)其實是同一個東西的兩半——假說編號記錄「你想驗什麼」,setup 版本記錄「你在什麼條件下驗的」。書的貢獻是把後者也變成一等公民。實務上值得補的是:把 universe 適格條件(成交金額門檻、排除處置股與全額交割股)、調倉時點(台股 T+1 交割)、成本模型(手續費、證交稅、當沖稅減半)寫成一份設定檔並帶版號。特別注意 purge:台股一年約 240–250 個交易日,加上農曆年連假,交易日與曆日的落差比美股更大,用曆日算 purge 會漏更多。
標籤怎麼定、訊號怎麼判、搜尋怎麼記帳
核心思想:模型再好也救不了定義壞掉的學習問題。這章有三個支柱:標籤必須與執行一致、前處理必須只用訓練段擬合、評估必須以 fold 為單位並記帳搜尋次數。
先講標籤。最容易忽略的是執行慣例:訊號在收盤算出,報酬是量到隔天收盤(close-to-close)還是隔天開盤進、h 天後開盤出(next-open-to-open)?書給的數字是——日頻股票這兩者每筆可以差 50–100 bps。選哪個都行,但標籤計算與回測 PnL 必須用同一個。
再講三重界限標籤(triple-barrier):不是死等 h 天到期看報酬,而是設上界(獲利了結)、下界(停損)、垂直界(時間到),先碰到哪個算哪個。這讓標籤貼近實際的交易行為。
界限寬度用歷史的最大有利/不利波幅(MFE/MAE)校準,才不會是隨手挑的數字。
# 這一條是本章最容易救回一條被誤殺的訊號的規則
不要 把所有資料混在一起算一個 IC
要 逐 fold 算,然後回報四個數字:
中位數 · IQR · 最差的那個 fold · 符號一致性
# 書上的實例:同一個 ETF 21 日動能訊號
pooled IC = 0.001 # 看起來完全沒訊號
fold 層 IC = 0.064 # ICIR 0.79,75% 的 fold 為正
# 差別在哪?pooled 把不同 regime 的正負互相抵消了
信賴區間 用 effective N,不用名目 N
# SPY h=21、約十年:名目 248,436 → effective ≈ 11,830
# 用名目算,區間會窄約 4.6 倍——假的精確
報 p 值 一律附上「你搜尋過幾個」
# 5 個 horizon × 3 個門檻 × 10 個特徵 = 150 個組合
# 在 5% 顯著水準下,期望就有 7–8 個偽陽性
校正方法怎麼選
少量晉級、單一偽陽性代價高 Holm–Bonferroni(控 FWER)
大規模篩選、容忍少數偽發現 BH-FDR(控 FDR)
新因子的發現門檻 建議 t > 3.0
# Harvey, Liu & Zhu (2016)
最常見的記帳失敗
看了結果之後才調的參數,也要計入搜尋集
# 這是人最容易放過自己的地方
→ 接到台股(以下為外推,非書上內容):這章跟你的 H-018 經驗直接對應。當時試了九個組合(3 個事件變體 × N=5/10/20)才下結論——書會說:那九個組合就是搜尋集,p 值要據此校正,而且「N 選 5 還是 20」這種看過結果才決定的事,同樣要計入。fold 層診斷那條也值得回頭套用:如果當時是用 pooled 統計判定失敗,值得再用逐 fold 的方式重看一次,說不定訊號只在特定 regime 存在(書的 ETF 動能就是這樣被 pooled 統計抹平的)。至於執行慣例,台股的對應問題是收盤價 vs 隔日開盤——台股有漲跌幅限制與盤後定價交易,收盤價打不到的情況跟美股不同,但「標籤與回測用同一慣例」這條規則完全適用。
特徵是「經濟主張的可計算表達」
核心思想:每個特徵都要說得出驅動機制、扮演的角色、以及失敗模式。說不出機制的,書稱為「資料型態」而不是特徵假設——它可以用,但要套更嚴的多重檢驗、額外的 holdout、以及部署後的衰退監控。
這章最有價值的一組區分是 signal vs state:signal 預測方向,state 決定「訊號什麼時候有效、該下多重」。很多特徵單獨看關聯很弱,但當 state 用卻很有價值——因為它們是透過交互作用發揮的。書用一個實測把這件事講得很清楚:把動能訊號按波動率高低分成三組,IC 從低波動組的 +0.071 一路掉到高波動組的 −0.034。
波動率本身對報酬的預測力很弱,但當成「什麼時候該相信動能」的開關就很有價值——這就是 state 變數的用法。
# 有 OHLC 就別只用收盤價算波動——同樣精度可以少用好幾倍觀測
效率 收盤價 1× # 只有收盤價時
Parkinson ~5× # 用高低價
Garman-Klass ~7× # 用完整 OHLC,跳空小的時候
Yang-Zhang ~8–14× # 隔夜跳空顯著時,只有這個對
交互作用要編預算
5 個 signal × 3 個 state × 3 個模板 = 45 個試驗
# 搜尋空間是幾何成長的,全部要記帳並做 FDR 控制
起手 一個 signal + 一個 state,一次只變一個模板
建模前先去重
fold 內算秩相關 → 層級聚類(切點常在 |ρ| 0.7–0.8)
每群選一個代表:穩定性優先於單一指標的小幅增益
→ 接到台股(以下為外推,非書上內容):「指標蔓生」這個病在台股技術分析圈特別嚴重——KD、RSI、威廉指標、乖離率有很大一部分在描述同一件事。書給的解法(fold 內秩相關聚類、每群選一個代表)可以直接搬過來當作技術指標的整理工具。signal vs state 的區分也很適合台股籌碼分析:分點買賣超比較像 signal,而大盤波動度、外資期貨未平倉、融資餘額變化這類比較像 state——單獨拿來預測方向可能很弱,但當作「什麼時候該相信籌碼訊號」的開關可能有價值。這是把書的框架套過來的推論方向,不是書上的結論;要驗證仍須走 Ch 7 的整套 triage。
把「fit 一個模型、取它的輸出」變成紀律
核心思想:fit 出來的東西也可以當特徵——條件波動、殘差、regime 機率、不確定性——但每個 fitted 物件的 point-in-time 義務比直接聚合更緊。三個要求:在 walk-forward 的訓練窗內估計、輸出用 filtered 而不是 smoothed、參數與訓練窗要版本化。
其中 filtered vs smoothed 是最關鍵、也最容易犯錯的一條。同一個 HMM 可以給你兩種狀態機率:filtered 是「只用到 t 為止的資訊推斷 t 的狀態」,smoothed 是「用全部資料回頭推斷 t 的狀態」。後者更準、圖更漂亮——因為它偷看了未來。只有 filtered 能當特徵。
同樣的道理也適用 wavelet:標準的離線分解不因果,只能當研究診斷,不能直接上線。
# 每個 fitted 特徵上線前,三個問題都要答「是」
問一 估計窗是否只在訓練折內?
問二 輸出是 filtered 不是 smoothed?
問三 參數與訓練窗有版本記錄?
# 一次 GARCH(1,1) fit 可以同時收下五個特徵
產出 條件波動 cond_vol
衝擊影響 α / 波動持續性 β
衰減半衰期 = ln(0.5) / ln(α+β) # SPY 實測 α+β≈0.97 → 約 23 個交易日
長期變異數 # 僅在 α+β < 1 時才是合法特徵
預測波動 優先用 HAR 而非 GARCH
# SPY 樣本外 RMSE 0.061 vs 0.111——大約是一半
regime 用連續機率餵單一模型,不做硬切換
# 硬切換恰好在轉換點最不穩,而那正是推斷最不確定的地方
→ 接到台股(以下為外推,非書上內容):filtered vs smoothed 這條規則,在台股實務上最容易踩到的地方是「事後看得很準的 regime 標記」——例如回頭把某段標成「多頭」「盤整」,再拿這個標記去做條件化分析。那就是 smoothed,圖會很漂亮但不可交易。書的建議(用 filtered 機率當連續輸入,別做硬切換)可以直接套用到大盤多空判讀上。另外 GARCH 的半衰期概念(衝擊多久衰減一半)套到台股要重新估——書上的 23 個交易日是 SPY 的實測值,不是台股的數字,台指波動的持續性需要自己 fit 才知道。
決定文字訊號能不能活過回測的,不是模型
核心思想:決定文字訊號能否活過回測的不是 NLP 模型,是時間戳紀律。何時真正拿到文件?embedding 模型的訓練截止是否早於回測期?歷史序列有沒有被修訂污染?書講得很直接:表示法品質只是問題的一半。
這裡有個容易被忽略的洩漏管道:embedding 模型本身就是一個 fitted 物件。如果你用 2024 年訓練的模型去編碼 2020 年的新聞再回測 2020 年,那個模型已經「讀過」2020 年之後發生的事。同理,batch LDA 主題模型在完整語料上估計也是同罪——要用 online 版本。
同樣的標籤名稱、不同的文字分布,就是一個要重新驗證的新任務——domain adaptation 救不了語料與標籤定義的分歧。
# 這七項答不全,任何 notebook 的輸出都不可信
定義 ① 時間戳 # 發布/抓取/供應商,哪一個定義可行動
實測 ② 發布延遲 # 按資料源各自量,別用假設值
處理 ③ 實體對齊 # 映射到代號,處理歧義與改名
處理 ④ 去重 # 同一天同一檔的重複發稿
決定 ⑤ 取樣單位 # 句/段/全文,以及怎麼聚合到「個股-日」
注意 ⑥ universe 是內生的 # 新聞覆蓋多的公司系統性不同
驗證 ⑦ 模型訓練截止 早於 回測期
# 評估文字訊號要比一般特徵多三軸
多 horizon 衰減 1 日強、5 日沒了 = 抓的是注意力不是基本面
覆蓋條件化 只在高覆蓋股有效 = 賣的是注意力動態
時間戳平移 延遲 1 小時就崩 = 賣的是速度不是資訊
→ 接到台股(以下為外推,非書上內容):台股做中文文字訊號,這章的時間戳紀律完全適用,但模型選型那一段要整組換——書上的 FinBERT、ModernBERT 都是英文模型,中文財經文本需要另外找 checkpoint,而且「跨分布必重驗」那個教訓(87% → 49.4%)在中文更值得警惕,因為可用的中文財經標註語料更少。覆蓋偏差在台股可能更嚴重:新聞覆蓋高度集中在權值股與熱門題材,用新聞覆蓋不足就剔除的做法,會讓因子嚴重偏向大型股。書提的三個解法(用產業基準補值、標記缺失、或把覆蓋本身建成訊號)值得優先試第三個——「這檔突然開始被報導」本身可能就是台股的訊號,但這是推論,需要實證。
研究設計與特徵的閾值與規則
| 情境 | 怎麼做 | 出處 |
|---|---|---|
| 判斷樣本可否進訓練集 | 問「決策時刻 t,特徵算得出來且標籤已解決嗎」 | Ch 6 |
| 設 purge 間隔 | h 日標籤就 purge 最近 h 個交易日(21 交易日 ≈ 30–32 曆日) | Ch 6 |
| 設 embargo | 經驗法則取樣本長度的 1%;只在訓練資料落在驗證期之後時才需要 | Ch 6 |
| 要不要 bump 版本 | 改機制(mapping、多空、停損、頻率)要;調參數(門檻、比例、bps)不用 | Ch 6 |
| retrain 時機 | 新資料達訓練窗 1–5%,或樣本外系統性劣化 | Ch 6 |
| 篩選可行的 cadence | 用每邊 5–15 bps 的參考成本線,看多少比例的波動超過來回成本 | Ch 6 |
| 選標籤執行慣例 | close-to-close 或 next-open-to-open 都行,但標籤與回測 PnL 要同一個(每筆差 50–100 bps) | Ch 7 |
| 設離散標籤門檻 | 優先用波動縮放(τ = k·σ,σ 只用過去);多資產用橫斷面百分位 | Ch 7 |
| 算 IC 信賴區間 | 用 effective N 不用名目 N;重疊標籤要 HAC 校正 | Ch 7 |
| 回報診斷 | 逐 fold 算,報中位數、IQR、最差 fold、符號一致性——不用 pooled | Ch 7 |
| 報 p 值 | 必附搜尋集大小;少量晉級用 Holm–Bonferroni、大規模篩選用 BH-FDR | Ch 7 |
| 新因子發現門檻 | 建議 t > 3.0(Harvey, Liu & Zhu 2016) | Ch 7 |
| 有 OHLC 算波動 | Parkinson ~5×、Garman-Klass ~7×、Yang-Zhang ~8–14× 效率;跳空顯著只有 YZ 對 | Ch 8 |
| 特徵去重 | fold 內秩相關聚類,切點常在 |ρ| 0.7–0.8;穩定性優先於小幅增益 | Ch 8 |
| 微結構特徵 | 先測執行延遲——當期有效、落後一期就沒有,是這族最常見的死法 | Ch 8 |
| fitted 特徵三問 | 估計窗在訓練折內?輸出是 filtered?參數與訓練窗有版本? | Ch 9 |
| 用 GARCH | α+β 讀持續性,半衰期 = ln(0.5)/ln(α+β);α+β ≥ 1 時長期變異數不是合法特徵 | Ch 9 |
| 預測日波動 | 優先 HAR 而非 GARCH(SPY 實測 RMSE 約一半) | Ch 9 |
| 用 regime 特徵 | 只用 filtered 機率;HMM 從 2 態起步,跨窗要重新對齊狀態標籤 | Ch 9 |
| panel 化順序 | 逐資產時序特徵 → 決策日對齊 → 才做橫斷面轉換;反序就是洩漏 | Ch 9 |
| 文字訊號索引 | 用「實際可得時間戳」不用文件日期;修訂檔預設拒收 | Ch 10 |
| fine-tune 參數 | lr ≈ 2e-5、3–5 epochs、batch 16–32;1,000–10,000 標註是甜蜜點 | Ch 10 |
| 長文件處理 | chunk 256–512 token、重疊 64;chunk 只在單一文件內做 | Ch 10 |
skills/ml4t/chapters/ch06–ch10 蒸餾檔。來源 EPUB 抽取時數學公式與圖表無法讀取,本頁數字均取自章節檔中以文字明確寫出的部分。書中實測數字為作者測試床結果,屬研究等級、非實盤依據;口徑是美股,台股段落已逐段標示為外推。