13、基差交易的机器学习方法:特征工程、模型选择(XGBoost/LSTM)、预测基差方向、模型评估与过拟合防范
说实话,基差交易做到一定阶段,你会发现传统统计方法开始吃力了。为什么?因为市场是非线性的,变量之间互相纠缠。这时候,机器学习就该上场了。
我个人习惯把机器学习看作一把「瑞士军刀」——不是万能,但用对了地方,效果惊人。今天我们就聊聊怎么把这把刀磨快,用在基差交易上。
13.1 特征工程:基差预测的「原材料」
模型好不好,七分靠特征。我在项目中踩过最大的坑,就是一股脑把所有数据扔进模型,结果过拟合得一塌糊涂。
基差交易的特征,我一般分三类:
- 价格类特征:现货价格、期货价格、基差本身、近远月价差。注意,基差的一阶差分和二阶差分也很有用。
- 基本面特征:库存、仓单、持仓量、成交量、持仓比。这些能反映供需格局。
- 时间类特征:交割日距离、星期几、月份、是否临近交割月。季节性规律不能丢。
举个例子,我做过一个螺纹钢基差模型。一开始只用了价格和库存,效果一般。后来加了「钢厂开工率」和「下游采购节奏」两个特征,预测准确率直接提升了8%。
核心原则:特征要「少而精」,别贪多。20-30个高质量特征,远好过200个垃圾特征。
13.2 模型选择:XGBoost vs LSTM
选模型就像选工具。XGBoost是锤子,LSTM是手术刀。各有各的适用场景。
XGBoost:结构化数据的王者
XGBoost对表格数据非常友好。速度快、可解释性强、不容易过拟合。我建议你从它开始。
import xgboost as xgb
# 参数调优示例
params = {
'max_depth': 5,
'learning_rate': 0.05,
'n_estimators': 300,
'subsample': 0.8,
'colsample_bytree': 0.7,
'reg_alpha': 0.1,
'reg_lambda': 1.0
}
model = xgb.XGBClassifier(**params)
model.fit(X_train, y_train)
这里有个坑:max_depth别设太大。我试过设到10,训练集准确率99%,测试集直接崩到55%。
LSTM:时序数据的利器
LSTM擅长捕捉长期依赖关系。如果你觉得基差走势有明显的「记忆效应」,比如连续三天上涨后大概率回调,那LSTM值得一试。
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout
model = Sequential()
model.add(LSTM(64, return_sequences=True, input_shape=(lookback, n_features)))
model.add(Dropout(0.2))
model.add(LSTM(32))
model.add(Dropout(0.2))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='adam', loss='binary_crossentropy')
注意:LSTM对数据量要求高。少于1000条样本,别碰LSTM。我吃过这个亏,样本不够,模型学到的全是噪声。
13.3 预测基差方向:涨还是跌?
基差预测,我一般做二分类:基差扩大(1)或基差缩小(0)。为什么不做回归?因为回归预测的数值误差太大,不如方向判断来得实用。
实际操作中,我会把基差变化超过某个阈值(比如0.5%)才标记为有效信号。小于阈值的,直接扔掉。这样能过滤掉大量无效波动。
小技巧:阈值设置可以参考历史波动率。波动率大的品种,阈值设高一点;波动率小的,设低一点。
13.4 模型评估:别只看准确率
准确率是个陷阱。为什么?因为基差方向往往有偏向性。比如某品种基差扩大的概率是60%,那你瞎猜也能有60%准确率。
我常用的评估指标:
| 指标 | 含义 | 我的经验阈值 |
|---|---|---|
| Precision | 预测上涨中,实际涨了多少 | > 0.6 |
| Recall | 实际上涨中,抓住了多少 | > 0.5 |
| F1-score | Precision和Recall的调和平均 | > 0.55 |
| Sharpe Ratio | 回测中的风险调整收益 | > 1.5 |
我个人最看重F1-score。它平衡了精确率和召回率,不会让你为了追求一个指标而牺牲另一个。
13.5 过拟合防范:别让模型「背答案」
过拟合是机器学习在金融领域最大的敌人。我见过太多人,回测曲线漂亮得像教科书,实盘一跑直接亏成狗。
怎么防?我总结了几条铁律:
- 时间序列交叉验证:不能用随机K折,要用滚动窗口。比如用前3年训练,后1年验证。
- 早停法:验证集损失连续5轮不下降,立即停止训练。
- 正则化:XGBoost的reg_alpha和reg_lambda,LSTM的Dropout,都是好东西。
- 特征降维:用PCA或特征重要性筛选,把无关特征砍掉。
避坑指南:我曾经在回测中用了「未来数据」——用当天的数据预测当天的基差方向。结果回测准确率95%,实盘直接腰斩。记住,预测必须基于历史数据,不能偷看未来。
13.6 知识体系框架
下面这张图,是我做基差机器学习项目的完整流程。你可以把它贴在工位上,每次做模型前看一眼。
嗯,这套流程我用了三年,迭代了十几个版本。每次回测结果出来,我都会问自己三个问题:
- 这个结果在样本外还能保持吗?
- 有没有偷看未来数据?
- 实盘遇到极端行情,模型扛得住吗?
三个问题都答「是」,我才敢上实盘。记住,机器学习是工具,不是魔法。真正决定成败的,是你对市场的理解和对风险的敬畏。