SAE 機制檢查圖:訓練與驗證集選參完成後,梯度探針顯示 L1 項約為重構項的 1/390;SAE 與 DenseAE 權重餘弦為 0.999998,Hoyer 為 0.479 對 0.478;K=64、λ=30 的校準門中 Hoyer 通過 0.618 門檻,但 MSE 超過 0.664 上限。結論僅適用於我方 150 個 Binance 資產、2022–2024 面板。
在我方 Binance 縮減面板上檢查 SAE 的稀疏機制是否真正啟動。數值來自一手複現;不裁定論文作者的原始面板結果。

第一組對照模型訓練完成後,我把 SAE 和它的密集對照(DenseAE,λ=0)放在一起比較權重(綁定權重,編碼器和解碼器共用同一組參數):餘弦相似度為 0.999998。換句話說,帶有稀疏懲罰的模型和不帶懲罰的模型,實際上是同一個模型。Hoyer 稀疏度(取值 0–1,越接近 1 越稀疏)為 0.479 對 0.478;五折彙總後,預測 IC 都是 +0.0073,投資組合表現也幾乎重合。

我沒想到,第一組對照先碰上的就是這個問題。我要複現的論文裡,稀疏性是整個論述的發動機:正是因為 L1 懲罰讓編碼足夠稀疏,依重構排序選出的籃子才會彼此低相關,波動才會下降。如果稀疏性根本沒有出現,後面的數字就算看起來相似,也不能算是在驗證這篇論文的機制。

這篇文章記錄這次複現的完整過程:哪些結果吻合、哪些沒有,以及最重要的——對不上之處,現有證據究竟把原因指向哪裡。

論文聲稱了什麼,先把證據等級分清楚

Han 與 Qu(華盛頓大學)的論文已獲 ICAIF ‘26 接受,研究問題很具體:把每日橫截面報酬輸入單層 Sparse Autoencoder,依重構值替資產排序,再建立反向操作的五分位投資組合;風險是否會因為「稀疏性」本身而下降?

作者把主要結果分成三個等級,這個區分很重要:

  • 嚴格確認的結果: 先用前 748 天預先選定 K=128、λ=0.1 後,五個確認 fold 中,SAE 籃子的 rank 尺度波動都比相同 K 的 PCA 低 20–26%。
  • 探索性結果: K=64 的波動低 32–37%(money 口徑為 20.0% 對 27.3%)。但選擇期間與早期測試 fold 重疊,因此只能視為探索性證據。作者提出的機制,是籃內平均兩兩相關較低:0.008 對 PCA 的 0.039。
  • 作者明確否定的結果: SAE 沒有帶來額外 Sharpe(輸給最簡單的同日反轉基線,money 口徑差距為 −2.48);因子身分無法跨隨機 seed 重現(解碼器 matching cosine 為 0.13,隨機字典參照值為 0.117);Ledoit–Wolf 最小變異數 overlay 則能補回 SAE 相對 naive 約 73% 的波動優勢。

作者也主動揭露三項限制:訊號在 t 日收盤形成,並以同一收盤價成交,作者稱這種做法「實際上不可執行」;全程沒有計入成本;加密資產池的覆蓋篩選使用全樣本資訊,並非 point-in-time。還有一項重要資訊沒有公開:截至 2026-11-01,論文和 arXiv 頁面都沒有連結程式碼,433 個資產的確切清單也未公開。因此,任何複現都只能自行實作印刷版協議,使用的面板也必然不同。這決定了我的結論範圍:我檢驗的是這些主張能否移植,不是裁定作者在自己的面板上跑出的結果對或錯。

我的複現設定:先把差異寫清楚

資料使用 Binance 公開 API 提供的現貨 USDT 日線,不需要帳戶或 API key。資產池的凍結規則在訓練前就已確定:519 個目前掛牌的交易對中,有 285 個在 2022–2024 期間有資料;其中 245 個至少有 252 個觀測日。最後依每日報價成交額中位數選出前 150 個資產,並在訓練前保存清單與雜湊值。每天可用資產數介於 89 到 150 個,平均為 119 個。

與論文的差異逐項列出:資產數是 150,而非 433,且限於流動性較高的子集合;期間是 2022–2024,而非 2019–2024;資產清單來自目前仍在交易的品種,因此帶有存續偏差。論文則保留已下市資產,直到最後一次報價。存續篩選會系統性壓低這個面板的波動,而本文核心比較的正是波動。這項偏差的大小無法事後還原:已下市資產不在目前的交易清單中,無從由這個來源計數。面板處理遵循論文:每日橫截面 1/99% winsorize、缺失值最多向前填補 3 天後再 mask,以及截斷的 inverse-normal rank 轉換。選擇期間取前 500 個報酬日(450 天訓練 / 50 天驗證),只依驗證集重構誤差,在 K∈{32,64,128} × λ∈{10⁻³,10⁻²,10⁻¹} × learning rate 網格中選參數。接著執行 5 個 expanding walk-forward fold,每個 fold 有 119 個訊號日。每個訊號日的 PnL 都需要次日報酬,因此每個 fold 的最後一個訊號日不計入,合計 590 個評估日。投資組合依重構排序建立反向五分位、等權配置,每一腿 gross exposure 為 1;缺少 t+1 報酬時以 0 計。這些選擇與論文一致。

另外預先註冊了兩道關卡。停止條件很簡單:如果縮小後的資產池無法重現波動方向,就如實標記為 non-replication;不擴大資產池,也不調整參數去尋找想要的正負號。校準關卡則規定:只有在診斷顯示 λ 沒有產生可測量的作用時,才允許在選擇期間內,依照「稀疏度達標且重構成本受控」的標準挑選一個 λ,執行額外的實驗組。如果沒有 λ 同時符合兩個條件,就不執行。也不允許看過測試集後再回頭修改規則。

第一個異常:λ 在這個面板上幾乎沒有作用

先看參數選擇結果。K=128 時,驗證集重構 MSE 幾乎不受 λ 影響:λ=10⁻³ 時為 0.3374,10⁻² 時為 0.3375,10⁻¹ 時為 0.3380。依規則選出的嚴格設定是 K=128、λ=10⁻³。作者的面板也選出相同的 K,但 λ 卻是最強的 0.1。同一套選擇標準,在兩個面板上對懲罰強度產生相反偏好。只依重構誤差選參數,本來就會系統性偏向最弱的懲罰,因為 L1 只會讓重構更困難。我選出 10⁻³ 幾乎是這條規則下的必然結果。相對地,論文聲稱依照同一套規則選出最強的 0.1。這個落差值得記錄:可能是強懲罰在作者的面板上確實沒有損害重構,也可能是選擇流程還有未說明的部分。

梯度測量提供更直接的證據。在 λ=10⁻²(論文的探索設定)下,L1 項對權重的平均梯度量級為 5.5×10⁻⁶,重構項則是 2.1×10⁻³。懲罰項只有主項的約 1/390,兩者根本不在同一個量級。另一組獨立診斷是在前 500 天重新訓練,並以第一個 fold 的期間評估;我把 λ 提高到 1.0 做壓力測試,是論文探索設定 10⁻² 的 100 倍。即使如此,Hoyer 也只從 0.474 升到 0.514,模型仍稱不上稀疏。

沒有任何 λ 通過校準關卡。在 λ∈{0.3,1,3,10,30} 的掃描中(這組採用 K=64 的選擇期間口徑),Hoyer 從 0.483 上升到 0.619 後便飽和;驗證 MSE 則從 DenseAE 基線的 0.554 上升到 0.918,增加 66%。我的門檻要求 Hoyer 至少比 DenseAE 高 0.15,且 MSE 不超過密集基線的 1.2 倍。λ=30 時,Hoyer 0.619 勉強超過 0.618 的門檻(這個口徑下 DenseAE 為 0.468,加上 0.15 即 0.618);但 MSE 0.918 約為允許上限 0.664 的 1.4 倍。依預先註冊的規則,不執行校準實驗組。不過,「懲罰強度不足」只解釋了一半:在相同協議下實測,λ=30 時懲罰梯度已是重構梯度的約 7.7 倍。強度早已足夠,Hoyer 卻仍在 0.62 附近飽和,重構品質反而先崩潰。也就是說,論文範圍內的 λ 在這個面板上近乎惰性,超出該範圍後又遇到另一個上限。這批資料似乎無法在保住重構品質的前提下,讓編碼變得明顯更稀疏。上限的具體成因沒有測量,因此仍待確認。

為什麼同一個公式、同一組 λ 網格,在論文面板上能把籃內相關壓到五分之一,在這裡卻連模型都改變不了?可以確定的是測量結果:懲罰梯度與重構梯度的相對量級。接下來是推論,我會標明界線。L1 的相對強度取決於程式碼的典型量級,而程式碼量級會隨資產數和橫截面結構改變。論文使用 2019–2024 年的 433 個資產,我使用的是 2022–2024 年的 150 個流動性資產。λ=0.1 在他們的尺度上可能是有效劑量,移到我的面板尺度卻幾乎像安慰劑。另一種無法排除的解釋是:作者未公開的實作細節,可能使懲罰項的實際作用不同於印刷公式,例如 mini-batch 訓練,或 loss reduction 的約定。印刷公式沒有說明重構項是對 N 個資產取 sum 還是 mean,也沒有說明 L1 項是對 K 個隱藏維度取 sum 還是 mean。光是這兩個分母的組合,就可能讓有效懲罰強度產生數百倍的隱含縮放。沒有官方程式碼,這項可能性只能保留,不能據此替作者下結論。

有一件事不依賴上述推論:在忠實遵循印刷公式的標準實作中,論文使用的 λ 不是能不經校準就搬到其他面板的固定常數。若有人直接把 λ=0.1 套到自己的資料,接著宣稱得到「SAE 的分散化效果」,他很可能只是在報告一個從未啟動的機制。

波動只剩方向,機制結果反轉

五個 fold 的彙總結果(590 天,money 口徑):

方法年化波動Sharpe
naive 同日反轉31.39%+1.69
PCA K=6429.54%+1.75
PCA K=12830.39%+1.32
SAE K=64(λ=10⁻²)29.90%+0.65
SAE K=128(λ=10⁻³,選定)28.97%+0.96
DenseAE K=64(λ=0)29.96%+0.65

SAE-128 的波動比 PCA-128 低 4.7%(逐 fold 分別為 −4.0、−4.2、+3.1、−3.0、−10.0;5 個 fold 中有 4 個方向一致)。這大約只有論文嚴格結果 −20~26% 的五分之一。統計細節也要說清楚:五個 fold 差異的平均值是 −3.6%(與合併日資料計算的 −4.7% 不同;前者是 fold 間平均,後者是依每日觀測合併),t 值約 −1.7(n=5),談不上顯著。這裡能下的結論只有方向和量級。K=64 甚至連方向都沒有重現:SAE 波動比 PCA 高 1.2%。結合上一節,這並不意外。以 λ=10⁻³ 選出的「SAE」本來就幾乎是密集模型,因此相對 PCA 的微弱優勢,更像一般自編碼器重構的特性,而不是稀疏性帶來的好處。

為了看清楚各 fold 的變動,以下列出 money 口徑的逐 fold 年化波動:

方法Fold 1Fold 2Fold 3Fold 4Fold 5
naive 反轉22.12%31.31%32.00%31.37%37.93%
PCA K=6421.71%30.42%27.16%26.53%39.22%
SAE K=6420.16%30.32%30.54%30.56%35.91%
PCA K=12821.65%30.88%29.05%29.51%38.26%
SAE K=12820.78%29.58%29.95%28.61%34.42%

機制層面的結果更明確。依論文定義,在 rank 尺度與 60 日移動視窗內,計算籃內平均兩兩相關:SAE-64 多頭籃為 0.0215、空頭籃為 0.0297;PCA-64 為 0.0201 / 0.0261;naive 反轉籃更低,為 0.0136 / 0.0148。論文報告 SAE 0.008、PCA 0.039,在我的面板上,排序完全反過來。若改用原始報酬尺度,所有方法都擠在 0.56–0.60(共同市場因子占主導),同樣看不出 SAE 的優勢。只有一個子結論方向一致:SAE 籃內資產的個別波動略高於 PCA(日波動 0.0478 對 0.0466)。也就是說,它確實不是在挑選「比較安靜」的資產,但選出的資產也沒有更低的相關性。

方法多頭籃相關空頭籃相關
SAE K=640.02150.0297
PCA K=640.02010.0261
naive 反轉0.01360.0148
論文報告 SAE / PCA0.008 / 0.0390.010 / 0.044

因此,我對論文第一項主張的判讀是:K=128 部分呈現了相同方向,但量級沒有重現;K=64 和機制主張都沒有重現。這不構成對作者自有面板結果的反證,因為面板、期間和實作都不同。它至少說明,這項主張不能被預設為不經校準就能跨面板沿用。

論文的幾項結論,我的複現有些吻合,有些沒有

這篇論文值得肯定的一點,是作者沒有把風險下降等同於可交易的 Alpha。論文明確報告 SAE 沒有增量 Sharpe、因子身分無法跨隨機 seed 保持穩定,IC 也沒有改善;同時也寫明同收盤成交不可執行、全程不計成本,以及資產池篩選並非 point-in-time。我的複現中,這幾項負面結果的方向與作者報告一致;但稀疏度分離沒有重現,overlay 則因構造細節不明,無法做出乾淨判讀。

  • 沒有增量 Sharpe: naive 反轉的 money Sharpe 為 +1.69,SAE-64 只有 +0.65,SAE-128 為 +0.96。預測能力也沒有改善:反轉 IC 是 SAE-64 +0.0073、PCA-64 +0.0146(論文為 +0.016 對 +0.021,排序一致)。
  • 因子身分無法跨 seed 重現: 三組 seed 配對做 Hungarian matching,解碼器 cosine 為 0.217–0.220,隨機字典參照為 0.198(第 95 百分位為 0.203)。它只比隨機略高,可能反映共通的市場方向,但離「同一組因子」仍很遠。論文是 0.13 對 0.117。由於資產數不同,隨機基準也會改變,因此量級不同,但結論一致。
  • 稀疏度分離沒有重現: 論文的 Hoyer 是 SAE 0.497、DenseAE 0.303;我的結果是 0.479 對 0.478。把兩組數字並排,就能看出差距在哪裡:SAE 端幾乎沒有差異(0.497 對 0.479),缺少的整段差距都來自密集基準(0.303 對 0.478)。我也測了原因:編碼中精確為零的比例,SAE 是 47.7%,DenseAE 是 47.6%。在這個面板上,ReLU 編碼即使沒有任何懲罰,也已經有將近一半為零。密集模型在結構上本來就「夠稀疏」,自然看不出差距。這是上一節的另一面:作者面板上確實有稀疏度分離,我的面板上則沒有。

overlay 這一項我無法給出乾淨判讀,因此如實記錄。預先註冊的版本使用逐腿 Ledoit–Wolf 最小變異數權重、原始報酬協方差,以及 money 口徑。overlay 後波動反而升到 59.96%(權重過度集中)。改用 rank 尺度實作時,波動為 8.19(rank 尺度,不是百分比),低於 naive 的 8.97,也低於兩種 SAE 變體。論文只說 overlay 使用 60 日移動 LW 協方差作用於 naive 五分位投資組合,沒有固定構造細節,因此無法判斷兩種實作哪一個才是「作者的方法」。我把自己的構造拆開檢查:每一腿約有 28 個資產,60 日 LW 協方差的條件數中位數約為 94,矩陣並沒有病態。問題出在權重:最小變異數解把每一腿集中到約 6 個有效持倉(最大單一股票權重中位數為 27%)。59.96% 的波動是權重集中的結果,不是矩陣奇異。這一項只能標記為 inconclusive:問題出在我方複現,公開資料不足以確定構造細節。

改成可執行的時序:報酬先消失,波動沒有改變

下一節是論文沒有做的內容,屬於我自己的延伸,結論不能歸到作者身上。

論文的評估是在 t 日收盤形成訊號,並以同一個 t 日收盤價成交。作者自己也註明這不可執行。我把相同籃子改成次日收盤成交(在這個設定下最早可實際執行的時點),並加入依換手計算的 10 / 25 bps 樣式化成本。每日換手約為 3.1(兩腿合併權重每日絕對變動的總和,最大值為 4,代表投資組合幾乎每天全部換手)。

方法同收盤 gross Sharpe次日收盤 gross同收盤 net 10 bps次日收盤 net 25 bps
SAE-128+0.98+0.05−2.98−10.07
SAE-64+0.67+0.26−3.12−9.34
naive 反轉+1.71−0.10−1.86−9.62

註:Arm D 使用儲存的籃子,在 589 天上重新計算(比五折彙總少一天)。因此,同收盤 Sharpe 與彙總表略有差異,例如 SAE-128 為 +0.98 對 +0.96。差異只來自那一天。

只把執行延後一天,三種方法的 gross Sharpe 就全部接近零。這並不意外:日頻反轉賺到的錢,本來就在訊號形成後的第一天。加上 10 bps 成本後,結果全部轉負;25 bps 下則大幅為負。還要補充市場慣例的差異:加密市場 7×24 小時交易,沒有收盤競價;「日線收盤」只是某個時間點的快照。因此,同收盤加上成本的那一欄,反而更接近可執行的近似(實際延遲與滑價仍需另外扣除)。次日收盤則是把股票市場的保守口徑搬過來,測量的是執行落差的上限,不是加密市場的日常狀況。所有時序與成本變體下,波動幾乎不變,維持在 28–31%:成本是平滑的拖累,時序延遲拿走的則是反轉溢價本身,兩者都沒有改變風險量。

作者從未聲稱這套策略可以交易。這一節量化的是論文免責聲明在實務上的影響:從「訊號證據」到「可交易結論」之間,還隔著整套執行假設。任何以同收盤口徑報告 Sharpe 的日頻橫截面模型,都應該先通過這一關,再提出更強的主張。

以後審查 ML 因子論文,我會先跑這幾項檢查

這次複現留下了一份比結果本身更耐用的檢查清單,順序也固定下來了:

  1. 消融身分檢查: 關掉聲稱的機制(這裡就是 λ=0),比較權重、機制統計量(這裡是 Hoyer)和下游指標。如果兩者無法區分,就先報告「機制沒有啟動」,不要急著討論效果大小。如果我這次一開始就跑這一關,應該能省下大半段冤枉路。
  2. 最簡單的基準: naive 同日反轉在兩套面板上都拿到最高或接近最高的 Sharpe。複雜模型應該先贏過它,再談其他優勢。
  3. 教科書式 overlay: 如果一個協方差 overlay 就能補回大部分優勢,模型的增量就只剩下殘差。這次我沒能乾淨地複現這一項,但檢查本身不能省略。
  4. seed 穩定性: 換 seed 重新訓練、匹配因子,再和隨機參照比較。過不了這一關,「發現了因子」就只是「這次執行跑出了一些方向」。

回到開頭的 0.999998。它可能是這次複現裡資訊量最大的數字:論文的公式、參數和評估協議都可以逐字照抄,唯獨機制是否啟動不會寫在紙面上,只能在自己的面板上測出來。波動降低四分之一也好、降低 4.7% 也好,在確認稀疏性真的出現之前,都只是重構模型的數字。

複現範圍與材料: 本文結論僅適用於縮減面板(150 個流動性資產、2022–2024,帶有存續偏差)與依印刷公式自行實作的版本(NumPy,梯度已通過有限差分驗證)。本文既未證實,也未否證作者在 433 個資產、2019–2024 面板上的結果。資料是 Binance 公開日線,可依本文規則重建。撰文時作者尚未公開官方程式碼;文中引用的論文數字均標示為作者報告值。本文只討論複現方法與證據界線,不構成投資建議。

這次複現的程式碼、凍結資產清單(含雜湊值)、逐 fold 結果與判讀紀錄都已公開。材料包附有 SHA256SUMS,可逐一驗證檔案。

vxime/sae-crypto-factor-replication

如果你想把這次複現放進更完整的量化研究流程,可以接著看如何驗證量化因子是否真的有效和如何安全調整多因子模型權重。前者檢查排序證據是否成立,後者討論證據進入模型後,如何控制權重變更。