聊天視窗

量化投資之道:理論、模型與實戰 - 第 9 章

第 9 章 因子時間序列預測與機器學習模型在因子預測中的應用

發布於 2026-02-24 00:37

# 第 9 章 因子時間序列預測與機器學習模型在因子預測中的應用 > **章節重點**:學習如何將因子值視為時間序列,運用統計與機器學習方法進行預測;掌握特徵工程、模型選擇、評估指標與實際部署。 ## 1. 為何將因子視為時間序列 | 觀點 | 說明 | |------|------| | **因子本質** | 多數因子(如價值、動量、品質)本身隨時間變動,構成一條可觀測的時間序列。 | | **預測價值** | 透過預測因子未來值,可在組合構建前提前鎖定信號,提高進場/出場時機。 | | **風險調整** | 預測誤差可視為預測風險,結合風險模型更完整的風險度量。 | > **提示**:預測因子並非簡單的「加上均值」,需考慮自相關、季節性、突發事件等特徵。 ## 2. 資料前處理與特徵工程 ### 2.1 資料清洗 - **缺失值處理**:對於週期性缺失,使用前後值插補;對於長期缺失,可考慮使用多重插補或直接剔除。<br> - **異常值檢測**:利用 3×IQR 或 MAD 方法,將異常點視為 NaN 再做插補。 ### 2.2 變換與標準化 | 變換 | 目的 | |------|------| | **對數變換** | 消除偏態,提升線性關係。 | | **差分** | 去除非平穩性,尤其對於價格相關因子。 | | **Z‑score** | 使不同因子尺度一致,利於多因子組合。 ### 2.3 時間特徵 - **滾動窗口統計**:滾動平均、方差、最大最小等。<br> - **季節性分解**:使用 STL 分解後,保留趨勢、季節、殘差三項。<br> - **事件指標**:如財報發布、宏觀公告,編碼為 0/1 變量。 ### 2.4 交叉衍生特徵 - **因子差值**:兩個同類因子之差,如價值因子與低波動因子。<br> - **因子乘積**:捕捉非線性交互,如 `size * quality`。 > **實務提醒**:過度擴張特徵往往導致「維度災難」。在模型初期,先以 **特徵重要性** 或 **Lasso** 篩選關鍵特徵。 ## 3. 時間序列預測基礎模型 | 模型 | 公式/原理 | 優缺點 | |------|------------|--------| | ARMA(p,q) | `X_t = φ₁X_{t-1}+…+φ_pX_{t-p}+θ₁ε_{t-1}+…+θ_qε_{t-q}+ε_t` | 解析性強,適合低維;對非線性、異方差不友好。 | | ARIMA | 加入差分 `Δ^d X_t` 以處理非平穩。 | 可自動處理趨勢;參數選擇複雜。 | | SARIMA | 加入季節性參數 `(P, D, Q, s)` | 針對季節性,適合宏觀周期。 | | Prophet | 拆分趨勢、季節、假日效應 | 使用簡單,易於解釋;對長期異常敏感。 > **實作範例**(Python): > python > from statsmodels.tsa.statespace.sarimax import SARIMAX > model = SARIMAX(factor_series, order=(1,1,1), seasonal_order=(1,1,1,12)) > results = model.fit(disp=False) > forecast = results.forecast(steps=20) > ## 4. 機器學習模型在因子預測中的應用 ### 4.1 監督學習基礎 | 模型 | 主要特徵 | |------|----------| | 隨機森林 | 多決策樹集成,非線性,對異常值不敏感 | | XGBoost / LightGBM | 梯度提升樹,支持稀疏特徵,速度快 | | SVM (RBF) | 捕捉複雜非線性關係,需大量數據 | ### 4.2 深度學習:LSTM / GRU | 何時使用 | 優點 | |----------|------| | 多週期、長序列預測 | 捕捉長期依賴,對非線性有較強適應性 | | 訓練資料量 > 10k | 深度模型才能發揮作用 | #### 4.2.1 LSTM 範例 python import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM, Dense, Dropout model = Sequential([ LSTM(64, input_shape=(n_steps, n_features), return_sequences=True), Dropout(0.2), LSTM(32), Dense(1) ]) model.compile(optimizer='adam', loss='mse') model.fit(x_train, y_train, epochs=50, batch_size=32, validation_split=0.1) > **注意**:LSTM 需要對資料做 **滑動窗口** 轉化,並保持資料的時間順序。缺失值插補與標準化同樣重要。 ### 4.3 模型選擇與調參 - **交叉驗證**:使用 **TimeSeriesSplit** 而非隨機拆分,避免信息泄露。 - **評估指標**:RMSE、MAPE、對數損失;對於因子預測,**R²** 仍是常見指標。 - **特徵重要性**:對於樹模型,使用 `feature_importances_`;對於深度學習,利用 SHAP 或 Integrated Gradients 進行可解釋性分析。 ## 5. 模型部署與實際交易 | 步驟 | 具體做法 | |------|----------| | **模型驗證** | 進行前向回測,確保預測信號在實際交易中的有效性。 | | **預測窗口** | 設定每天或每週一次的預測窗口,並將結果輸入組合優化。 | | **風險控管** | 使用 **預測誤差** 作為風險指標,設定止損或倉位限制。 | | **交易執行** | 以預測因子值與閾值為基準觸發交易指令,並與滑點校正模型結合。 | > **案例**:一支以 `quality` 因子為主的投資組合,使用 XGBoost 預測明日值,若預測值高於 75th 分位數即進場,低於 25th 分位數則平倉。整體回測期間年化 Sharpe 3.2,超額收益 12%。 ## 6. 常見陷阱與對策 1. **過度擬合**:模型在歷史資料上表現好,但未來失效。解決:交叉驗證、正則化、早停。 2. **資料泄露**:使用未來資訊影響預測。檢查:確認滾動窗口不包含未來值。 3. **季節性誤判**:季節效應被誤解為趨勢。對策:使用 STL 或 SARIMA 確認。 4. **特徵冗餘**:過多特徵降低模型解釋性。對策:PCA 或 L1 正則化。 ## 7. 小結 - **因子時間序列預測** 是將量化投資推向更主動的關鍵一步,能提前捕捉風險與機會。 - **機器學習模型** 提供了更靈活的非線性建模能力,但需嚴格驗證與風控。 - **實際部署** 必須結合風險控制、滑點校正與前向回測,確保策略可行。 > **行動點**:選擇一個你熟悉的因子,從資料清洗、特徵工程、模型選擇到實際回測,完整執行一次。將結果寫入 `report.ipynb`,並分享於社群,讓他人給予反饋。 --- > **下一章**:量化投資的高頻交易策略——從訊號生成到實時執行。