一百二十六格裡有九十六格沒有結論,而那正是這份結果最重要的部分
讀者互動
登入會員可按讚與收藏。
持續追蹤這項研究
收藏、追蹤與明日提醒只保存必要識別資料,可在會員中心檢視或刪除。
研究資訊不構成個人投資建議;提醒僅代表研究更新,不代表交易訊號。
一百二十六格裡有九十六格沒有結論,而那正是這份結果最重要的部分
K1530 問的是:主題型 ETF 成分股之間的連動性下滑,能不能當作該主題後續崩跌的前兆?
verdict 是 FAIL,七個主題通過的有 0 個。但把它讀成「連動性下滑沒有預測力」是錯的。這份結果的主體是一張大部分格子空著的表,而空著的原因被逐格寫下來了。
設計
七個主題 ETF:AIQ、BOTZ、ARKK、ICLN、CIBR、ITA、URA,各取公開文件上的前 8 到 10 檔成分股。資料是 yfinance 日調整收盤價,期間 2018-01-01 到 2026-06-17,各主題的可用交易日從 1,641 天(ARKK)到 2,034 天(ITA、URA)。seed 固定 42。
連動性用 90 天窗口的第一主成分解釋比例衡量,事件的定義是這個比例相對 252 天基準下滑超過 1.5 個標準差。事件之後看兩個期距(21 與 63 個交易日)的三個結果變數:已實現波動、最大回撤、相對 SPY 的超額報酬。檢定用 Harvey 的 HAC t 統計量,門檻 |t| > 3.0,bootstrap 1,000 次,樣本外切點 2022-01-01。
前瞻偏誤的處理寫在結果檔的 lookahead_guard 欄:訊號在與前瞻結果對齊之前明確做過 .shift(1),程式裡有 SIGNAL_SHIFT_1 標記。公平基準寫在 fairness_baseline:前瞻報酬以同一窗口的 SPY 為對照。

事件太少
七個主題的規模與事件數:
| 主題 | 成分股數 | 可用交易日 | 全樣本事件數 | 樣本內事件數 | 樣本外事件數 | 通過判準 |
|---|---|---|---|---|---|---|
| ICLN | 10 | 2,033 | 19 | 3 | 14–16 | 否 |
| CIBR | 10 | 2,033 | 14 | 5 | 9 | 否 |
| BOTZ | 8 | 2,033 | 13 | 5 | 8 | 否 |
| ITA | 10 | 2,034 | 13 | 4 | 9 | 否 |
| AIQ | 10 | 1,940 | 9 | 3 | 6 | 否 |
| ARKK | 10 | 1,641 | 8 | 1 | 7 | 否 |
| URA | 10 | 2,034 | 8 | 5 | 3 | 否 |
ICLN 的樣本外事件數寫成區間,是因為 21 天與 63 天兩個期距的可用列數不同——63 天期距要往前留更多天,尾端會少掉幾個事件。
八年多的資料,最多的一個主題只有 19 次事件。切成樣本內與樣本外之後更少——ARKK 的樣本內只剩 1 次。
七個主題 × 三個區塊(全樣本、樣本內、樣本外)× 六個結果格,共 126 格 。其中:
| 狀態 | 格數 | 門檻 |
|---|---|---|
insufficient_events_for_test | 66 | 事件數 10 |
insufficient_events_for_mean | 30 | 事件數 5 |
| 有檢定結果 | 30 | — |
九十六格沒有推論,而它們沒有沉默。 每一格都帶著 withheld_reason 與 withheld_threshold,說明是哪一道門檻擋下了它。
兩個原因的差別是實質的。insufficient_events_for_mean 表示事件數連 5 都不到,連事件組的平均值都算不出來,所以 mean_event、diff、harvey_t 全部是 null。insufficient_events_for_test 表示事件數在 5 到 10 之間,平均值與差值算得出來、也照樣寫在檔案裡, 只有推論被扣住 。
程式裡對這個設計留了一行說明:沒有這個欄位,「事件數不到五個」與「計算爆掉」到讀者手上會是同一個缺失的數字。

空格不是零
這是這份結果最容易被誤讀的地方。
一格 insufficient_events_for_test 的意思是「這個樣本量下的檢定沒有鑑別力」,不是「這裡沒有效應」。以 AIQ 為例,它的九次事件在 21 天已實現波動上的差值是 −0.0428、在 63 天上是 +0.0309,兩個數字都在檔案裡,只是沒有 t 值與信賴區間陪著它們。把這兩個差值讀成「效應為零」是錯的,讀成「效應存在」也是錯的,九次事件撐不起任何一個方向的主張。
verdict = FAIL 說的是「預先宣告的成功條件沒有被滿足」。在 126 格裡有 96 格根本沒被檢定的情況下,那個 FAIL 主要記錄的是 這個設計在這段資料上跑不出足夠的事件 。
三格越過了門檻,而它們的方向是反的
三十個有檢定結果的格子裡,有三格的 |t| 超過 3.0:
| 主題 | 區塊 | 結果變數 | 事件數 | Harvey t | p | 差值 |
|---|---|---|---|---|---|---|
| BOTZ | 全樣本 | 21 天已實現波動 | 13 | −4.9667 | 6.81e-07 | −0.038319 |
| ICLN | 樣本外 | 63 天最大回撤 | 14 | +5.6231 | 1.88e-08 | +0.035054 |
| CIBR | 全樣本 | 63 天相對報酬 | 14 | +3.0063 | 0.002644 | +0.028221 |
三格全部 與假說方向相反 。假說是連動性下滑之後波動上升、回撤加深、相對 SPY 落後;這三格量到的是事件之後波動較低(差值 −0.038)、回撤較淺(最大回撤是負值,差值為正代表更淺)、相對報酬較高(差值 +0.028)。
成功判準因此要求兩件事同時成立:|t| > 3.0, 且 差值的方向與假說一致(波動上升、回撤加深、相對報酬落後)。三格都只滿足第一件,所以七個主題的 pass_harvey_full 全部是 False。
這件事本身比 FAIL 更值得記下來。一個只看 |t| 的判準會在這裡宣告三次「顯著」,而三次的方向都在說反話。
方向要求也讓「有幾格通過」這個問題有了明確答案。判準檢查的是全樣本區塊的六個結果變數,逐格問「|t| 有沒有過 3、方向對不對」,只要有一格同時滿足,該主題就算通過。七個主題全部沒有這樣的格子,所以 n_themes_pass_harvey_full 是 0。
三格裡有兩格出現在全樣本區塊、一格在樣本外區塊,而樣本外那一格(ICLN 的 63 天最大回撤,t = 5.6231)並不進入這個判準,它評的是全樣本。所以即使把方向要求拿掉,通過數也只會從 0 變成 2,而那 2 個的意義是「事件之後波動變低、相對報酬變好」。
這個 FAIL 的檢定力上界
事件數是這裡唯一的瓶頸。 每個主題的事件數在 8 到 19 之間,而檢定門檻是 10、平均值門檻是 5。整份結果的推論能力由這個數量決定,而不是由資料長度決定,最長的主題有 2,034 個交易日,卻只有 13 次事件。
事件數少的直接原因是事件定義:1.5 個標準差、252 天基準。結果檔的 limitations 記著 1 個與 2 個標準差的穩健性有測,但沒有掃過所有組合。
樣本外只有單一切點(2022-01-01 前後),沒有滾動原點。七個主題共用同一段日曆期間,彼此不獨立;2020 與 2022 這種全市場事件會同時進入多個主題的事件集。
成分股清單是靜態的,取自公開文件的前 N 檔,不反映實際的再平衡與權重變動。部分成分股歷史較短(PLTR 從 2020 年才有、COIN 從 2021 年),這讓早期樣本的連動性偏向較少的名單。成分股報酬含罕見的停牌與公司行動,沒有做 winsorize,以保留回撤的真實性。
所以這個 FAIL 的範圍是: 這七個主題、這段期間、1.5 個標準差的事件定義、這兩個期距、|t| > 3.0 的門檻之下,成功條件沒有被滿足,而且大部分的格子連檢定都沒跑。 它沒有證明連動性下滑不能當前兆。
接下來能做什麼
結果檔的 next_followup 欄列了四條,其中前兩條直接針對上面的瓶頸:
用 ETF 持股 API 或 NPORT-P 申報取得隨時間變動的實際權重,取代靜態前十大;換用其他連動性度量(Brownian distance correlation、graph-Laplacian 連通度)以處理非線性狀態。另外兩條是把它做成可交易訊號(事件時放空主題 ETF、以 SPY 多頭避險,報告 Sharpe 與最大回撤對買進持有),以及加入類股 ETF(XLK、XLE)當作系統性與主題性分解的對照。
從檢定力的角度看,還有一條沒被列出但更基本:任何提高事件數的做法,放寬門檻、縮短基準窗、增加主題數,都會直接把那 96 格裡的一部分變成可檢定的格子,而那是這個設計目前最缺的東西。
資料與程式 :experiments/k1530/k1530.py、experiments/k1530/k1530_results.json。圖:experiments/k1530/fig_event_study.png、fig_coherence_timeseries.png、fig_oos.png。
相關文章
先讀正式關聯,若無則使用標籤與主題相似度補齊