第十六章 基差交易的机器学习应用:特征工程、模型选择与部署
说实话,很多做基差交易的朋友一听到「机器学习」就头大。觉得那是量化团队的事,跟自己没关系。
但我告诉你,这几年我亲眼看着好几个团队,靠着一套简单的XGBoost模型,把基差预测的准确率从55%提到了70%以上。说白了,机器学习不是玄学,它就是帮你从历史数据里找规律的工具。
一、特征工程:基差相关的核心因子
模型好不好,七分靠特征。我在项目里踩过最大的坑,就是一股脑把所有数据都扔进模型。结果呢?过拟合严重,实盘一跑就崩。
1.1 价格类因子
- 基差本身:当前基差、过去N日基差均值、基差标准差
- 期货价格:主力合约价格、次主力合约价格、价差结构
- 现货价格:现货报价、现货升贴水、现货价格波动率
1.2 库存与供需类因子
- 库存数据:显性库存、隐性库存、库存变化率
- 供需平衡:产量、消费量、进出口量、开工率
- 季节性因子:月份、季度、是否处于消费旺季
1.3 市场情绪与资金类因子
- 持仓量:总持仓、主力持仓、持仓变化率
- 成交量:成交量变化、成交持仓比
- 期限结构:近远月价差、升贴水结构
我个人习惯:先做因子相关性分析,把相关系数超过0.8的因子只保留一个。不然模型学到的全是重复信息。
二、模型选择:XGBoost vs LSTM
选模型这事,我建议你从简单开始。别一上来就搞LSTM,那玩意儿调参能调到你怀疑人生。
2.1 XGBoost:基差交易的「万金油」
为什么我偏爱XGBoost?因为它对特征工程的要求没那么苛刻,而且能处理缺失值。我在做铜的基差预测时,XGBoost的R²能到0.68,LSTM反而只有0.61。
import xgboost as xgb
from sklearn.model_selection import train_test_split
# 假设你已经准备好了特征矩阵X和标签y
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, shuffle=False
)
model = xgb.XGBRegressor(
n_estimators=200,
max_depth=5,
learning_rate=0.05,
subsample=0.8,
colsample_bytree=0.8
)
model.fit(
X_train, y_train,
eval_set=[(X_test, y_test)],
early_stopping_rounds=20,
verbose=False
)
2.2 LSTM:处理时序依赖的利器
LSTM适合那种「今天的基差跟过去5天的走势高度相关」的场景。但要注意,LSTM需要的数据量更大,而且对数据标准化要求极高。
我曾经用LSTM预测螺纹钢基差,训练了3天,结果发现模型在测试集上还不如简单的移动平均策略。后来排查发现,是数据没有做差分处理,模型学到的全是趋势项。
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout
model = Sequential([
LSTM(64, return_sequences=True, input_shape=(lookback, n_features)),
Dropout(0.2),
LSTM(32),
Dropout(0.2),
Dense(16, activation='relu'),
Dense(1)
])
model.compile(optimizer='adam', loss='mse')
三、模型训练与验证
训练模型最忌讳的就是「未来函数」。你想想看,如果用未来的数据去预测过去,那准确率当然高,但实盘就是另一回事了。
3.1 时间序列交叉验证
不能用普通的K折交叉验证。我一般用「滚动窗口验证」:
- 训练集:2018-2020年数据
- 验证集:2021年数据
- 测试集:2022年数据
3.2 评估指标
| 指标 | 含义 | 我的经验阈值 |
|---|---|---|
| MAE | 平均绝对误差 | 小于基差标准差的30% |
| RMSE | 均方根误差 | 小于基差标准差的40% |
| R² | 拟合优度 | 大于0.5才算可用 |
| 方向准确率 | 预测涨跌方向正确率 | 大于60%才有交易价值 |
小技巧:我习惯在验证集上同时看「方向准确率」和「盈亏比」。有时候R²不高,但方向准确率超过65%,配合好的止损策略,照样能赚钱。
四、模型部署:从研究到实盘
模型部署这块,我踩过的坑最多。你以为模型训练好了就完事了?太天真了。
4.1 部署架构
我现在的标准流程是:
- 每天收盘后,自动拉取最新数据
- 运行特征工程脚本,生成当日特征
- 加载训练好的模型,预测次日基差
- 将预测结果写入数据库,供交易系统调用
4.2 模型监控
模型部署后,必须监控两个东西:
- 预测误差漂移:如果连续5天预测误差超过2倍标准差,说明市场结构变了,需要重新训练
- 特征分布变化:如果某个关键特征的分布发生突变,模型可能失效
嗯,这里要注意:我见过最惨的案例,是有人把模型部署了半年没管,结果市场结构已经变了三次,模型还在用半年前的参数做预测。亏得那叫一个惨。
五、基差交易机器学习应用框架
下面这张图,是我做基差交易机器学习项目的标准流程。每次新项目,我都会先画一遍这个图,确保思路清晰。
这张图里,我最想强调的是那个「反馈重训」的循环。很多团队模型做出来就不管了,但市场是活的,模型必须跟着变。
我的建议:至少每季度重新训练一次模型。如果遇到重大政策变化或突发事件,立即重训。别心疼那点计算资源,跟实盘亏损比起来,训练成本九牛一毛。
好了,这一章的内容就到这里。特征工程、模型选择、训练验证、部署监控,这四个环节环环相扣。你如果能把这一套流程跑通,基差交易的机器学习应用就算入门了。