第19章:统计学习在定价中的应用:线性回归、岭回归、Lasso在价差预测中的应用

做市商的核心工作是什么?说白了,就是预测价差。

你报出的买价和卖价之间的那点差距,就是你的利润来源。但价差不是拍脑袋定的,它受波动率、订单流、库存风险等多种因素影响。我做了这么多年交易,发现一个规律:能用统计模型解决的问题,就别靠直觉

这一章,我们来聊聊线性回归、岭回归和Lasso这三个经典统计学习方法,怎么用在价差预测上。

19.1 为什么是统计学习?

很多人一听到「机器学习」就兴奋,觉得神经网络才是王道。但说实话,在金融高频场景下,简单模型往往更可靠

我个人的习惯是:先用线性模型跑一遍,看看效果。如果线性模型能解释80%的价差变化,那何必上复杂模型?

统计学习的优势在于:

  • 可解释性强:你能清楚知道每个特征对价差的影响
  • 计算速度快:毫秒级出结果,适合实时交易
  • 过拟合风险低:正则化方法天然防过拟合

核心观点:价差预测本质上是一个回归问题。我们想用历史数据,找到影响价差的关键因子,然后预测下一秒的最优价差。

19.2 线性回归:最朴素的价差预测模型

线性回归假设价差与特征之间存在线性关系。公式很简单:

spread = β₀ + β₁·volatility + β₂·order_imbalance + β₃·inventory + ε

其中:

  • volatility:最近N笔交易的波动率
  • order_imbalance:买卖订单的不平衡度
  • inventory:当前库存水平

我在项目中遇到过一个问题:直接用普通最小二乘法(OLS)拟合,结果R²很高,但回测效果很差。为什么?因为特征之间存在多重共线性

举个例子,波动率和订单不平衡度往往是相关的——波动大的时候,订单不平衡度也高。这会导致系数估计不稳定,今天跑出来的β₁是正数,明天就变成负数了。

避坑指南:我曾经在ETH-USDT的做市策略中,直接用线性回归预测价差,结果实盘第一天就亏了。后来发现,是因为波动率特征和库存特征高度相关,导致模型在极端行情下完全失效。

19.3 岭回归:解决多重共线性

岭回归在线性回归的基础上,加了一个L2正则化项。它的目标函数是:

min ||y - Xβ||² + λ||β||²

这个λ(lambda)是超参数,控制正则化的强度。λ越大,系数越趋向于0,但不会完全变成0。

岭回归的好处是:即使特征高度相关,它也能给出稳定的系数估计

我建议你在做价差预测时,优先尝试岭回归。原因有三:

  1. 金融数据天生存在多重共线性,岭回归天然适合
  2. 它不会把特征完全剔除,保留了所有信息
  3. 调参简单,交叉验证就能找到最优λ

小技巧:在实际交易中,我通常用5折交叉验证来选择λ。如果λ太大,模型会欠拟合;λ太小,又解决不了共线性问题。一般λ在0.1到10之间比较合适。

19.4 Lasso回归:特征选择利器

Lasso回归用的是L1正则化:

min ||y - Xβ||² + λ||β||₁

和岭回归不同,Lasso会把不重要的特征系数直接压缩到0。这意味着它自带特征选择功能。

你想想看,做市商通常有几十个候选特征——波动率、成交量、买卖价差、深度、订单到达率等等。但真正有用的可能只有三五个。Lasso能帮你自动筛选出最重要的因子。

我记得有一次做BTC永续合约的价差预测,初始特征有20多个。用Lasso跑完后,只剩4个特征有非零系数:

特征 系数 说明
波动率(1分钟) 0.42 波动越大,价差越大
订单不平衡度 0.31 买卖压力越大,价差越大
库存水平 0.18 库存越高,价差越大(风险补偿)
时间因子 -0.09 临近收盘,价差缩小

其他16个特征系数全为0。这说明什么?做市商真正需要关注的,就是这4个核心因子

经验之谈:Lasso的λ选择很关键。λ太小,特征选得太多;λ太大,有用的特征也被剔除了。我一般用信息准则(AIC/BIC)辅助选择,而不是单纯依赖交叉验证。

19.5 三种模型的对比与选择

说了这么多,到底该用哪个?我整理了一个对比表:

模型 适用场景 优点 缺点
线性回归 特征少、无共线性 简单、可解释性强 对共线性敏感
岭回归 特征多、有共线性 系数稳定、保留所有特征 不能做特征选择
Lasso 特征多、需要筛选 自动特征选择、模型简洁 可能过度压缩

我个人习惯是:先用Lasso做特征筛选,再用岭回归做最终预测。这样既保留了Lasso的特征选择能力,又利用了岭回归的稳定性。

19.6 实战代码示例

下面是一个简单的Python示例,展示如何用这三种模型预测价差:

import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression, Ridge, Lasso
from sklearn.model_selection import cross_val_score

# 假设我们有历史数据
# features: volatility, order_imbalance, inventory, time_factor
# target: spread

X = np.random.randn(1000, 4)  # 1000个样本,4个特征
y = 0.5 * X[:, 0] + 0.3 * X[:, 1] + 0.2 * X[:, 2] - 0.1 * X[:, 3] + np.random.randn(1000) * 0.1

# 线性回归
lr = LinearRegression()
lr_scores = cross_val_score(lr, X, y, cv=5, scoring='neg_mean_squared_error')
print(f"线性回归 MSE: {-lr_scores.mean():.4f}")

# 岭回归
ridge = Ridge(alpha=1.0)
ridge_scores = cross_val_score(ridge, X, y, cv=5, scoring='neg_mean_squared_error')
print(f"岭回归 MSE: {-ridge_scores.mean():.4f}")

# Lasso
lasso = Lasso(alpha=0.01)
lasso_scores = cross_val_score(lasso, X, y, cv=5, scoring='neg_mean_squared_error')
print(f"Lasso MSE: {-lasso_scores.mean():.4f}")

# 查看Lasso选中的特征
lasso.fit(X, y)
print(f"Lasso系数: {lasso.coef_}")

注意:实际交易中,特征需要做标准化处理。因为不同特征的量纲差异很大——波动率可能是0.01级别,库存可能是100级别。不做标准化,正则化项会失效。

19.7 知识体系图

下面这张图展示了本章的核心逻辑:

统计学习在价差预测中的应用 输入特征 线性回归 岭回归 (L2) Lasso (L1) 价差预测值 稳定系数估计 特征选择 最优做市报价

19.8 总结

统计学习在价差预测中,不是花架子,是真能赚钱的工具。

线性回归给你一个基准,岭回归帮你稳定系数,Lasso帮你筛选特征。三者配合使用,基本能覆盖大部分做市场景。

最后提醒一句:模型再漂亮,也要回测验证。我见过太多人在回测里赚得盆满钵满,实盘一跑就崩。原因往往是——数据泄露、未来函数、或者过拟合。

嗯,这一章就到这里。记住:简单模型,用好了就是利器。


无相订单流研究社 微信Lucian808555