第十六章 基差交易的机器学习应用:特征工程、模型选择与部署

说实话,很多做基差交易的朋友一听到「机器学习」就头大。觉得那是量化团队的事,跟自己没关系。

但我告诉你,这几年我亲眼看着好几个团队,靠着一套简单的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%
拟合优度 大于0.5才算可用
方向准确率 预测涨跌方向正确率 大于60%才有交易价值

小技巧:我习惯在验证集上同时看「方向准确率」和「盈亏比」。有时候R²不高,但方向准确率超过65%,配合好的止损策略,照样能赚钱。

四、模型部署:从研究到实盘

模型部署这块,我踩过的坑最多。你以为模型训练好了就完事了?太天真了。

4.1 部署架构

我现在的标准流程是:

  1. 每天收盘后,自动拉取最新数据
  2. 运行特征工程脚本,生成当日特征
  3. 加载训练好的模型,预测次日基差
  4. 将预测结果写入数据库,供交易系统调用

4.2 模型监控

模型部署后,必须监控两个东西:

  • 预测误差漂移:如果连续5天预测误差超过2倍标准差,说明市场结构变了,需要重新训练
  • 特征分布变化:如果某个关键特征的分布发生突变,模型可能失效

嗯,这里要注意:我见过最惨的案例,是有人把模型部署了半年没管,结果市场结构已经变了三次,模型还在用半年前的参数做预测。亏得那叫一个惨。

五、基差交易机器学习应用框架

下面这张图,是我做基差交易机器学习项目的标准流程。每次新项目,我都会先画一遍这个图,确保思路清晰。

基差交易机器学习应用框架 数据采集 特征工程 模型选择 XGBoost LSTM 训练与验证 模型部署与监控 反馈重训

这张图里,我最想强调的是那个「反馈重训」的循环。很多团队模型做出来就不管了,但市场是活的,模型必须跟着变。

我的建议:至少每季度重新训练一次模型。如果遇到重大政策变化或突发事件,立即重训。别心疼那点计算资源,跟实盘亏损比起来,训练成本九牛一毛。

好了,这一章的内容就到这里。特征工程、模型选择、训练验证、部署监控,这四个环节环环相扣。你如果能把这一套流程跑通,基差交易的机器学习应用就算入门了。


公众号:蓝海数据掘金营,微信deep3321