數據分析最常犯的錯——我們差點把錯誤策略推薦給你
讀者互動
已追蹤瀏覽 0 次,登入會員可按讚與收藏。
數據分析最常犯的錯,我們差點把錯誤策略推薦給你
想像一下:你去看醫生,醫生診斷後說要開抗生素。但就在你拿到處方籤的前一刻,他突然停下來重新確認病歷,然後發現原來你對那個抗生素過敏。一個小小的最終確認,避免了一場可能的災難。
這就是我們上個月差點發生的事。只不過主角不是藥方,而是一個看似表現優異的投資策略。
從一個讓人心動的數字開始
今年 3 月,我們的研究系統正在測試一個利用美股 S&P 500(SPY)動能來預測台股(0050)隔夜缺口的策略。
結果讓人興奮: Sharpe Ratio 1.08 ,t 統計量 4.25,5 段跨期驗證全數通過。
對非技術讀者解釋一下:Sharpe Ratio 是衡量「每承受一單位風險,能賺多少報酬」的指標。1.0 以上在投資界通常代表策略有實質價值;t 統計量超過 3.0 才算達到我們設定的嚴格統計門檻(Harvey 2016 建議值)。
這個策略編號 K519,幾乎已經排進準備上架的佇列。
但等等,最後的確認
在任何策略正式對外公布之前,我們有一個例行程序:重新驗證數據對齊方式,確認沒有 前瞻偏誤 (look-ahead bias)。
前瞻偏誤是量化策略研究中最致命的陷阱。它的意思是:如果你在分析「過去」的時候,不小心用了「未來」才有的數據,結果就會虛假地美好。就像你如果能看到明天的報紙,今天買彩券當然百戰百勝,但現實世界做不到。
K521 是我們針對 K519 做的最終驗證實驗,專門檢查數據對齊有沒有問題。
發現了什麼
問題的核心是一個 時區錯誤 。
美股(SPY)在台北時間凌晨 5 點收盤。台股則在早上 9 點開盤。
我們的策略邏輯是:「如果美股昨天上漲,今天台股隔夜缺口可能也是正的。」這聽起來完全合理,美股週四(台北時間週五凌晨 5 點)收盤 → 台股週五早上 9 點開盤,這中間有 4 個小時的資訊傳遞窗口。
但問題是:我們的程式碼在合併數據時,用的是「當天」的美股收盤價,而不是「前一天」的。
具體來說:程式使用了 這個函式,理論上應該用「最近一筆較早的數據」,但實作上卻讓台股週五的數據去匹配 週五 的美股收盤,而週五的美股收盤是週五凌晨 5 點,那時台股 已經交易了一整天了 。
換句話說,我們用了當天台股交易完的資訊,去預測當天台股的走勢。這是典型的前瞻偏誤。
在 3,909 個交易日的數據中,有 96.7% 的數據點 都犯了這個錯誤。
奇特的結果:修正後 Sharpe 反而飆升到 4.4
這裡有個讓人意想不到的轉折。
理論上,如果一個策略有前瞻偏誤,修正後表現應該會 下降 ——因為那些「超能力」被拿走了。
但 K519 恰恰相反:
| 版本 | Sharpe Ratio | 年化報酬 |
|---|---|---|
| 有 bug(K519) | 1.08 | 4.4% |
| 修正後(K521) | 4.45 | 16.9% |
修正之後,Sharpe 從 1.08 跳到 4.45 ,年化報酬從 4.4% 升到 16.9%,最大回撤從 -4.4% 縮小到 -1.8%。
這是怎麼回事?
原來,前瞻偏誤在這裡反而 稀釋了信號 。正確的信號是「美股昨天的表現」,但 bug 版本把 96.7% 的信號換成了「美股今天的表現」(與台股幾乎同步,沒有預測力)。這等於在一杯純果汁裡加了 97 份水,果汁還在,但被稀釋到幾乎感覺不出來了。
修正後,我們才看到真正的信號強度:美股昨晚收盤與台股今天開盤缺口的相關性高達 0.611 ——過去 16 年每一年都是正數,最差的年份 Sharpe 也有 3.49。
但這個策略還是不能上架
即便修正後的 Sharpe 高達 4.45,我們還是沒有把這個策略推薦給一般投資人。
原因在於 實作限制 。
這個策略需要在台灣時間凌晨 5 點(美股收盤的瞬間)下單,在早上 9 點(台股開盤)出場。這個 4 小時的窗口,普通投資人用的是現貨市場(0050 ETF), 現貨市場在早上 9 點才開盤,根本無法在凌晨 5 點買進 。
若要執行這個策略,你需要台指期(TX),那是大戶的遊戲,有保證金門檻和操作複雜度。對於一般投資人,這個機會窗口事實上是關上的。
這個資訊傳遞機會是真實的,是學術界已知的「時區資訊傳遞效應」(K521 就是對應知識庫中 I8 項目的驗證)。但 知道規律和能否賺到錢是兩回事 。
我們為什麼要告訴你這些
有些團隊遇到這種情況,可能會選擇沉默,不提 bug,不解釋來龍去脈,直接埋單了事。
我們的選擇是公開記錄這一切。
理由很簡單: 研究的價值在於可信賴,而可信賴的基礎是誠實 。
一個 Sharpe 1.08 的策略,如果基礎數據有問題,那它什麼都不是。一個因為找到 bug 而看起來「表現退步」的策略,也不是真正的退步,那只是誠實面對現實。
我們在 中完整記錄了 bug 的類型、影響的比例(96.7%)、修正前後的所有數字、以及策略在現實中的實作限制。任何人都可以追蹤、核實、或提出異議。
給所有投資人的啟示
如果你在閱讀任何投資策略的回測報告,這個故事給了你一個具體的問題清單:
- 數據是否有前瞻偏誤? 有沒有用到「現實中不可能提前知道」的信號?
- 時間戳對齊了嗎? 不同市場、不同時區的數據合併時,有沒有考慮實際的資訊到達時間?
- 即使策略理論上可行,執行上呢? 窗口夠嗎?需要什麼帳戶?成本是多少?
最後一個最重要的教訓: 一個看起來變差的修正,有時候反而是更誠實的進步。 那個從 1.08 跳到 4.45 的數字,不是我們做得更好了,而是我們終於看清楚了真實的樣子。
就算最終沒辦法讓一般人從這個發現中獲利,至少我們沒有讓你相信一個有缺陷的策略。
本文基於實驗 K519、K521(2026-03-27),完整數據與程式碼記錄於 experiments/ 目錄。[提出: 用戶, 執行: Claude]
相關文章
先讀正式關聯,若無則使用標籤與主題相似度補齊