← Research Feed
研究2026/05/31 下午01:00

我們把自己論文裡的兩個數字重做了一次:5.2 跟 −0.05 真的對嗎

方法論波動率風險管理0050復現研究

讀者互動

已追蹤瀏覽 0 次,登入會員可按讚與收藏。

分享到:LINEFacebookX / Twitter

我們把自己論文裡的兩個數字重做了一次:5.2 跟 −0.05 真的對嗎

[提出: Claude]

學術論文裡常常會看到這種句子:「我們估計出來的參數是 η = 5.2、λ = −0.05。」

讀者一掃就過了,因為這兩個數字看起來無傷大雅。但對研究本身來說,這兩個數字才是整個風險模型的脊椎骨——它們決定了你的尾部多厚、你的左尾多偏、最後你算出來的 VaR 到底是高估還是低估。

我們最近做了一件平常很少人做、但其實該做的事: 把自己論文裡這兩個數字,從零開始重新跑一遍 MLE,看看到底跟原本宣稱的對不對得上。 

這篇文章除了報「對了還是錯了」,更想留給讀者一個觀念: 「對得上」不等於「一模一樣」,而是「落在容差帶內」 。這件事是學術研究與量化模型品質的命脈,平常太少被講清楚。

為什麼要回頭驗自己的論文

事情是這樣的。Paper 2(taiwan-vt)在 body.tex 第 459 行寫了:

對 0050.TW,估計參數為 η = 5.2、λ = −0.05(近對稱、中度肥尾)。

聽起來沒問題。但同一個專案的 reproducibility audit 跑下來,這兩個數字旁邊被標了個刺眼的「? No source」——換句話說, 論文寫了這兩個數字,但庫裡找不到任何一份實驗檔可以背書 。

這是研究品質的紅燈。學術圈最近幾年最嚴重的危機之一,就是復現性。嚴格統計 等人 2016 年那篇 ...and the Cross-Section of Expected Returns 之後,整個金融研究界對「你的數字到底從哪裡來」越來越敏感。如果連自己論文裡的兩個關鍵參數,自己都拿不出腳本與結果 JSON,那這篇論文離 desk reject 只剩一封 email。

所以 K1184 這個實驗只做一件事: 重跑一次,看數字對不對,把可復現的證據留下來。 

這兩個參數到底在幹嘛

在進到結果之前,先用白話解釋一下 η 跟 λ 是什麼。

模型用的是 Hansen (1994) 提出的 偏態 Student-t 分配 ,這是金融計量裡為了同時刻劃「肥尾」與「左右不對稱」設計的條件分配。它有兩個形狀參數:

  •  η(自由度) :控制尾巴有多肥。η 越小,極端事件越常見;η = 5.2 已經是相當肥的尾巴(Normal 分配相當於 η → ∞)
  •  λ(偏度) :控制分配左右是否對稱。λ < 0 代表左尾比右尾胖,也就是「崩跌的機率高於同強度的暴漲」;台股這種市場確實常呈現負偏

對風險管理者來說,這兩個數字直接決定 VaR、CVaR、tail expectation 的算法。如果 η 估錯一個整數,每天 1% VaR 的數值可能跳 5-10%;如果 λ 符號搞錯,整個尾部風險就反了。

所以「2009-2026 全樣本下,η 真的是 5.2 嗎?λ 真的是 −0.05 嗎?」這個問題,看似學究式的潔癖,骨子裡是模型能不能信的根問題。

重新跑一次的結果

我們用 0050.TW 從 2009-01-05 到 2026-03-31 的日報酬率(共 4,216 個觀測值,已剔除 2014-01-02 那個明顯來自股票分割未調整的 −138.89% 假值),先擬合一個 GJR-GARCH(1,1) 取得標準化殘差,再對殘差跑 Hansen skew-t MLE。

結果如下:

參數Paper 宣稱K1184 重估差距相對誤差
η(自由度)5.24.9680.2324.5%
λ(偏度)−0.05−0.0590.009絕對 0.009

直接結論: 兩個都在容差帶內 。η 偏離 5.2 只有 4.5%(容差通常設 ±20% 以內),λ 與原值差 0.009(絕對差小於 0.02),對 VaR 影響可以忽略。Verdict 寫的是 (a) MATCHED — both η and λ within tight tolerance

論文這兩個數字過關了。

參數比較圖

GJR-GARCH 本身的四個參數也一起報出來給有興趣的讀者:ω = 0.0433、α = 0.0437、γ = 0.1010、β = 0.8803,持續度 0.9745,模型收斂沒問題。標準化殘差的偏度 −0.136、峰度 4.00,正好是「需要 skew-t、不能用 Normal」的典型樣態。

順帶一提:我們也跑了一版對稱 Student-t(沒考慮偏度),估出來自由度是 4.97——非常接近論文另一處假設用的固定 df = 5。這是一個額外的小型 sanity check,從另一條 path 印證了原 df = 5 假設不離譜。

「MATCHED」到底是什麼意思——這是這篇文章真正想講的事

走到這裡,文章如果就停在「對了,論文沒問題」會錯失最重要的一課。Verdict 雖然是 (a) MATCHED,但 K1184 的 results JSON 還藏了一個值得攤開講的細節。

我們同時做了一個 OOS(樣本外)子期間檢驗,只用 2020-2026 這段(n = 1,513)重估。出來的結果是:

參數PaperOOS 重估(2020-2026)差距是否落在容差內
η5.26.0340.834  (差 16%,超過 20% 容差緊一點的設定下就會出局)
λ−0.05−0.0430.007

換句話說: 全樣本(2009-2026)下 MATCHED;只看 OOS 子期間時 η 反而漂掉了 。

這不是 bug,這是真實研究會遇到的層次。

容差帶可視化

兩個層次的解讀:

  1.  論文的核心數字真的對得上 ,因為論文宣稱的就是整段樣本上的估計,這跟 K1184 全樣本結果落差不到 5%,沒有任何造假或計算錯誤的跡象。
  2.  參數本身有時間異質性 :把樣本切到 2020-2026,η 從 4.97 跳到 6.03。這意味著疫情之後台股的尾部「變薄」了一些(自由度變大代表尾巴變瘦)。這個細節對風險管理實務有意義——如果你直接拿 2009-2019 的參數套到 2024-2026 的市場上算 VaR,你可能會稍微高估極端事件機率。

第二點不會推翻論文結論,但會變成下一個研究問題:要不要做 rolling-window 估計?要不要在模型裡加 regime-switching?這是 K1184 留給後續實驗的小遺產。

一個誠實的小註記:VaR 違反數對不上

研究誠實原則要求把不完美的地方也報出來。

論文宣稱在 2020-2026 期間,用 Student-t(df=5) 的 1% VaR 模型只發生 8 次違反(違反率 0.5%)。K1184 重跑同一個設定,得到的是 20 次違反(1.32%)。差了 2.5 倍。

這個差距已經在原本的 reproducibility audit 標記為 DIV-2 issue。最可能的原因有兩個:(i) 論文那 8 次違反是用 Cornish-Fisher 變體算的(K1184 跑的是純 skew-t),(ii) 原始估計用的是不同資料來源(可能是 TEJ)而不是 yfinance,前者對 0050.TW 在 2014 分割那天的處理不同。

K1184 確認的是「參數估計」這一塊,VaR 違反數的 reconciliation 另案處理。 這是真實研究的常態:一份重做不會所有數字都對得上,但你要清楚知道哪些對了、哪些沒對,以及為什麼 。

為什麼這種「自己驗自己」的工作值得做

很多人聽到 replication 第一反應是:「這不就是別人來查你嗎?」其實不是。

最有效率的 replication 是 研究者自己對自己做的 ,理由有三個:

  1.  論文還沒投出去就先把破綻補好 :reproducibility audit 抓到的 issue,自己先補比讓 reviewer R1 提出來省事十倍
  2.  建立可累積的證據基礎 :每一個 K 編號的實驗都成為下一篇論文、下一個策略上架的 building block
  3.  訓練「容差思維」 :研究者最容易犯的錯就是要求 byte-for-byte 一致,但學術數字本來就是 estimate,重點是落在合理範圍

這篇文章如果只能帶走一句話,希望是這句:

 「對得上」的真正定義:兩個數字落在彼此的不確定區間內。 

這句話既適用於我們重做自己論文的參數,也適用於讀者面對任何一份財報、任何一個基金績效、任何一份券商研究報告時應該採取的姿態。看到「年化報酬 12.4%」不要問「跟去年差多少」,要問「這數字後面的 95% 信賴區間多寬」。前者讓你變成被頭條牽著走的散戶,後者讓你看到頭條後面的不確定本質。

文末——這次重做留下了什麼

實驗本身的產出:

  • experiments/k1184/k1184.py:完整 MLE 程式碼,固定 seed,可一鍵重跑
  • experiments/k1184/k1184_results.json:所有估計值、收斂狀態、tolerance 判定,全部保留
  • experiments/k1184/README.md:方法、資料、邊界條件(包含 2014-01-02 分割值如何剔除)

下次有人問「你 Paper 2 那兩個參數是怎麼來的」,我們可以直接給他這個資料夾,不需要從記憶裡撈。研究誠實的最低門檻就在這裡。


本文基於實驗 K1184(腳本:experiments/k1184/k1184.py,結果:experiments/k1184/k1184_results.json)。資料來源:yfinance 0050.TW,期間 2009-01-05 至 2026-03-31,共 4,216 個交易日(OOS 子期間 2020-2026,n=1,513)。模型:Hansen (1994) 偏態 Student-t(IER 35(3):705-730)+ GJR-GARCH(1,1)。

詳情

audience
research
image_url
https://qxhfgdfzazwpkdgesavm.supabase.co/storage/v1/object/public/article-images/k1184_param_comparison.png
experiment_refs
K1184
audience_backfill
{"reason":"validator_371_historical_backfill","script":"scripts/backfill_audience.py","applied_at":"2026-05-26T16:21:47+00:00","article_id":"mile_fd36c6cd","previous_audience":"general"}

相關文章

先讀正式關聯,若無則使用標籤與主題相似度補齊

📄
換了更好的模型,風險計算卻沒變好多少:36 場測試告訴你,關鍵在哪裡
# 換了更好的模型,風險計算卻沒變好多少:36 場測試告訴你,關鍵在哪裡 **[提出: 用戶, 執行: Claude]** 有個問題值得想一想:如果你現在用的波動率模型不夠準,你應該換一個更好的模型,還是換一個更好的計算方式? 大多數人的直覺是「換模型」。模型更複雜、更聰明,風險估計自然更準。但 36 場跨資產測試的結果,給出了不一樣的答案。 --- ## 實驗怎麼設計的 我們跑了一個...
📄
K1402/K1403/K1404:跨市場 HAR-RV 尾部分位數預測驗證 — 美股、債券、黃金、台股全數通過
# K1402/K1403/K1404:跨市場 HAR-RV 尾部分位數預測驗證 — 美股、債券、黃金、台股全數通過 [提出: Claude] ## 摘要 本文整合實驗 K1402(SPY)、K1403(QQQ/GLD/TLT)、K1404(^TWII)的樣本外驗證結果,測試 HAR-RV 分位數迴歸(Koenker-Bassett 1978 pinball loss)在 5 類資產、跨美股...
📄
比特幣半減後波動真的會降嗎?K1372 的答案是:看起來像,但還不能當鐵律
# 比特幣半減後波動真的會降嗎?K1372 的答案是:看起來像,但還不能當鐵律 每次比特幣半減,市場上都很容易冒出一種說法:題材炒完了,波動就會自己冷下來。 `K1372` 想檢查的,就是這件事到底有沒有真的出現在資料裡。做法很直接:把比特幣三次可觀察的半減事件拿出來,分別看前後各 90 個交易日的波動率,再用 GARCH 去對照整體波動 regime。 結果很整齊,但也很尷尬。整齊的是,三...