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 知识体系框架

下面这张图,是我做基差机器学习项目的完整流程。你可以把它贴在工位上,每次做模型前看一眼。

基差交易机器学习流程框架 数据获取 价格/基本面/时间 特征工程 构造/筛选/标准化 模型选择 XGBoost / LSTM 训练验证 滚动窗口 模型评估 Precision/Recall/F1 过拟合防范 正则化/早停/降维 实盘部署 信号生成/风控 反馈优化 核心原则:特征少而精 | 模型选对不选贵 | 评估看F1 | 防过拟合是底线 公众号:蓝海资料掘金营,微信deep3321

嗯,这套流程我用了三年,迭代了十几个版本。每次回测结果出来,我都会问自己三个问题:

  • 这个结果在样本外还能保持吗?
  • 有没有偷看未来数据?
  • 实盘遇到极端行情,模型扛得住吗?

三个问题都答「是」,我才敢上实盘。记住,机器学习是工具,不是魔法。真正决定成败的,是你对市场的理解和对风险的敬畏。