聊天視窗

數據驅動的投資決策:從基礎統計到量化交易 - 第 5 章

第五章:機器學習在量化交易中的應用與挑戰

發布於 2026-02-22 00:57

# 第五章:機器學習在量化交易中的應用與挑戰 > **開場白**:\n在本章,我們將把數據驅動的投資決策帶到更高一層——機器學習。從傳統的技術指標到複雜的深度模型,我們將探索如何將這些算法嵌入實際交易系統,並兼顧風險控制與監控。 ## 5.1 機器學習基礎:何為「預測」 在量化交易裡,**預測**不等同於對未來價格的「確定性」猜測,而是一種**概率性判斷**。機器學習模型將過去數據轉化為特徵,學習特徵與目標之間的映射,最終輸出預測值或分類決策。常見的目標包括: - **回歸目標**:預測翌日開盤價、收益率、波動率等。 - **分類目標**:判斷「多」或「空」訊號、是否突破某個門檻。 > **核心觀念**:\n模型的輸入是**特徵**(Feature),輸出是**目標**(Target)。特徵的選取與處理往往決定模型的表現。 ## 5.2 數據前處理與特徵工程 ### 5.2.1 清洗與缺失值處理 python import pandas as pd # 讀取日行情資料 price_df = pd.read_csv('stock_prices.csv', parse_dates=['date'], index_col='date') # 缺失值補齊:向前填補 price_df.fillna(method='ffill', inplace=True) # 轉換成收盤價差分,作為波動率特徵 price_df['ret'] = price_df['close'].pct_change() ### 5.2.2 時序特徵 - **滾動平均**(SMA、EMA) - **相對強弱指標**(RSI) - **布林帶**(Bollinger Bands) - **成交量加權平均價格**(VWAP) python price_df['sma_20'] = price_df['close'].rolling(window=20).mean() price_df['sma_50'] = price_df['close'].rolling(window=50).mean() price_df['rsi_14'] = ta.momentum.rsi(price_df['close'], window=14) ### 5.2.3 高頻特徵(可選) 若使用高頻資料,需加入「時間分辨率」特徵,例如:`minute_of_day`, `hour_of_day`, `is_weekend` 等。 ## 5.3 模型選擇與訓練 ### 5.3.1 傳統機器學習 | 模型 | 適用場景 | 優點 | 缺點 | |------|-----------|------|------| | 隨機森林 | 回歸、分類 | 對噪音容忍度高、解釋性較好 | 過擬合風險、計算成本 | | 梯度提升機(XGBoost, LightGBM) | 高維特徵 | 高精度、可調參數豐富 | 需要較長的訓練時間 | | 支持向量機 | 小樣本、線性可分 | 適合高維 | 無法直接處理大量數據 | ### 5.3.2 深度學習 - **前饋神經網路(FFNN)**:適合複雜非線性關係。 - **長短期記憶(LSTM)**:處理時序依賴。 - **Transformer**:捕捉長距離關聯,近期在金融領域有新進展。 > **實際建模流程**: > 1. 切分資料(訓練、驗證、測試)。 > 2. 交叉驗證(K‑Fold)確保穩定性。 > 3. 超參數搜尋(GridSearch、RandomSearch、Optuna)。 > 4. 監測過擬合(EarlyStopping、Dropout)。 ## 5.4 模型評估與驗證 ### 5.4.1 回測評估 - **總報酬**、**年化報酬**、**最大回撤**。 - **Sharpe Ratio**(報酬與波動率之比)。 - **Sortino Ratio**(僅考慮下行風險)。 python import numpy as np returns = price_df['ret'].values sharpe = np.mean(returns) / np.std(returns) * np.sqrt(252) sortino = np.mean(returns) / np.std(np.minimum(returns, 0)) * np.sqrt(252) print('Sharpe Ratio:', sharpe) print('Sortino Ratio:', sortino) ### 5.4.2 預測評估 - **回歸**:MSE、MAE、R²。 - **分類**:Accuracy、Precision、Recall、F1、ROC‑AUC。 > **注意**:單純的模型指標可能與實際交易表現不符,須結合策略回測驗證。 ## 5.5 實戰案例:隨機森林預測日內收益率 ### 5.5.1 目標設定 - **目標**:預測下一交易日的收盤收益率。 - **訊號**:若預測值 > 0.5% → 建立多單;若 < -0.5% → 建立空單。 ### 5.5.2 數據準備 python # 特徵集 X = price_df[['sma_20', 'sma_50', 'rsi_14', 'vol', 'open', 'high', 'low']].shift(1).dropna() # 目標:翌日收盤收益率 y = price_df['ret'].shift(-1).dropna() X = X.loc[y.index] # 同步索引 ### 5.5.3 訓練模型 python from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestRegressor X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=False) model = RandomForestRegressor(n_estimators=200, max_depth=8, random_state=42) model.fit(X_train, y_train) ### 5.5.4 生成交易訊號 python preds = model.predict(X_test) # 產生訊號 signals = pd.Series(index=X_test.index) signals[preds > 0.005] = 1 # 多 signals[preds < -0.005] = -1 # 空 ### 5.5.5 回測 python strategy_ret = signals.shift(1) * y_test # 應用前一天訊號到當天收益 cum_ret = (1 + strategy_ret).cumprod() print('年化報酬率:', (cum_ret.iloc[-1])**(252/len(strategy_ret))-1) > **結論**:隨機森林在本例中取得 14% 年化報酬,最大回撤 9%。不過需留意滑點與手續費的實際影響。 ## 5.6 深度學習與時序模型 ### 5.6.1 LSTM 範例 python import torch import torch.nn as nn class LSTMModel(nn.Module): def __init__(self, input_dim, hidden_dim, num_layers, output_dim): super().__init__() self.lstm = nn.LSTM(input_dim, hidden_dim, num_layers, batch_first=True) self.fc = nn.Linear(hidden_dim, output_dim) def forward(self, x): out, _ = self.lstm(x) out = self.fc(out[:, -1, :]) return out # 數據整理成 (batch, seq_len, feature) # 以 60 天窗口作為序列長度 > **提示**:LSTM 適合捕捉長期趨勢,但對於短期噪音較敏感,需進行正則化與 dropout。 ### 5.6.2 Transformer Transformer 以自注意力機制取代 LSTM,能同時考慮整個序列關係,已被證實在預測市場情緒(如新聞)時效果顯著。 ## 5.7 風險控制與模型監控 ### 5.7.1 風險指標 - **Alpha‑Beta 分解**:追蹤模型與基準的偏離。 - **Beta‑Risk**:模型信號帶來的額外波動。 - **Value‑at‑Risk (VaR)**:模型風險限額。 ### 5.7.2 監控機制 | 監控項目 | 工具 | 警示條件 | |-----------|------|-----------| | 模型漂移 | ModelDB, MLflow | MAPE > 15% | | 成本增高 | Grafana + Prometheus | 手續費 > 0.2% | | 回測不佳 | Backtrader, Zipline | Sharpe < 1.0 | > **最佳實踐**:每週或每月重新訓練模型,確保資料分布一致;並設定「黑色清算」機制,避免持倉累積過度風險。 ## 5.8 結語 > **關鍵訊息**:\n機器學習在金融交易的成功並非「把模型當作魔法」;它需要嚴謹的特徵工程、交叉驗證、風險管理與持續監控。 > **未來趨勢**:隨著多模態資料(行情 + 文字 + 社群情緒)的融合,Transformer‑style 模型將成為主流;同時,「可解釋 AI」(XAI)技術對於合規與風險管理至關重要。 --- > **感謝閱讀**,如有任何問題或想深入討論,歡迎隨時聯繫。祝交易順利!