返回目錄
A
數據驅動的投資決策:從基礎統計到量化交易 - 第 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)技術對於合規與風險管理至關重要。
---
> **感謝閱讀**,如有任何問題或想深入討論,歡迎隨時聯繫。祝交易順利!