6、一元线性回归模型:模型设定、参数估计、R方与调整R方、残差分析

聊到基差交易,我们总得有个趁手的工具。一元线性回归,说白了就是最基础的那把尺子。别小看它,我做了这么多年交易,很多复杂的策略,底层逻辑拆开来看,还是这玩意儿。今天我们就把它彻底聊透。

6.1 模型设定:先画条线

一元线性回归,就是研究一个X怎么影响一个Y。在基差交易里,X可以是现货价格,Y可以是期货价格。我们想找的就是它们之间那条最“靠谱”的直线。

数学上长这样:

Y = β₀ + β₁X + ε

这里:

  • Y:因变量,我们想预测的东西(比如期货价格)
  • X:自变量,我们手里的信息(比如现货价格)
  • β₀:截距,当X=0时Y的值。嗯,现实中很少出现,但数学上得有它
  • β₁:斜率,X每变动一个单位,Y跟着变多少。这是核心参数
  • ε:误差项,模型没解释清楚的部分。说白了就是“运气”或者“噪音”

我个人习惯,在设定模型前,一定会先画个散点图。看一眼数据长什么样,心里才有底。别上来就咔咔跑回归,那是新手干的事。

我的经验: 在基差交易中,我通常把近月合约价格作为Y,远月合约价格作为X。这样回归出来的β₁,就能直观反映两个合约之间的联动关系。如果β₁偏离1太多,说明基差结构可能有问题。

6.2 参数估计:最小二乘法

模型设好了,怎么找到最好的β₀和β₁?最常用的方法就是普通最小二乘法(OLS)

它的核心思想很简单:让所有数据点到我们画的这条直线的垂直距离的平方和最小。为什么是平方?因为这样能放大那些偏离很远的点,让模型更在意“大错误”。

公式推导我就不展开了,直接给结论:

β₁ = Σ[(Xᵢ - X̄)(Yᵢ - Ȳ)] / Σ[(Xᵢ - X̄)²]
β₀ = Ȳ - β₁X̄

看着复杂?其实你想想看,β₁就是X和Y的“协方差”除以X的“方差”。说白了,就是看X和Y一起变动的程度,相对于X自己变动的程度。

用Python实现就几行代码:

import statsmodels.api as sm
import numpy as np

# 假设X和Y是准备好的数据
X = sm.add_constant(X)  # 加一列常数项,对应β₀
model = sm.OLS(Y, X).fit()
print(model.params)  # 输出β₀和β₁
注意: 我曾经在回测中犯过一个低级错误——忘记给X加常数项。结果跑出来的截距永远是0,模型完全跑偏了。后来排查了半天才发现。嗯,这种坑踩过一次就记住了。

6.3 R方与调整R方:模型好不好?

参数估出来了,模型好不好用?这时候就得看R方了。

R方的定义:

R² = 1 - (SS_res / SS_tot)

其中:

  • SS_res:残差平方和,模型没解释的部分
  • SS_tot:总平方和,Y本身的波动

R方的取值范围是[0, 1]。越接近1,说明模型解释得越好。但这里有个坑——R方会随着自变量数量的增加而自动变大,哪怕加进去的是个没用的变量。

所以就有了调整R方

Adjusted R² = 1 - [(1 - R²)(n - 1) / (n - k - 1)]

n是样本量,k是自变量个数。调整R方会对“多出来的变量”进行惩罚。在一元回归里,R方和调整R方差别不大。但如果你以后做多元回归,一定要看调整R方。

指标 优点 缺点
R方 直观,容易理解 会随变量增加而虚高
调整R方 惩罚多余变量,更客观 计算稍复杂,但软件都帮你算了
我的习惯: 在基差回归中,如果R方低于0.7,我会怀疑这个模型是否真的抓住了两个合约之间的关系。但也不是越高越好——R方接近1反而要警惕,可能是过拟合了。

6.4 残差分析:模型到底行不行?

R方再高,也不代表模型真的靠谱。真正能看出问题的,是残差

残差 = 实际值 - 预测值。说白了,就是模型“猜错”的部分。

残差分析主要看三点:

  1. 残差是否随机分布:如果残差有明显的趋势或周期性,说明模型漏掉了重要信息
  2. 残差是否等方差:如果残差的波动幅度随着X变化而变化,这叫异方差性,会影响参数估计的可靠性
  3. 残差是否正态分布:虽然OLS对正态性要求不那么严格,但如果残差严重偏态,会影响统计推断

我一般会画两张图:

import matplotlib.pyplot as plt
import statsmodels.api as sm

# 残差图
plt.scatter(model.fittedvalues, model.resid)
plt.axhline(y=0, color='r', linestyle='--')
plt.xlabel('拟合值')
plt.ylabel('残差')
plt.show()

# Q-Q图检查正态性
sm.qqplot(model.resid, line='s')
plt.show()
避坑指南: 我曾经在分析螺纹钢的期现基差时,发现残差有明显的“U型”模式。后来仔细一看,原来是忽略了季节性因素——每年春节前后的基差结构完全不同。加上虚拟变量后,模型就好多了。

残差分析还有一个重要用途:发现异常值。如果某个时间点的残差特别大(比如超过3倍标准差),那这个点可能就是你的交易机会——基差偏离了正常范围,迟早要回归。

嗯,这就是一元线性回归的全貌。工具虽简单,但用好了,在基差交易里能帮你省不少事。记住:模型只是辅助,最终决策还得靠你对市场的理解。

核心总结:
  • 模型设定:Y = β₀ + β₁X + ε,先画图再建模
  • 参数估计:最小二乘法,让残差平方和最小
  • R方与调整R方:衡量模型解释力,注意调整R方更客观
  • 残差分析:检查随机性、等方差性、正态性,发现交易机会
公众号:蓝海资料掘金营,微信deep3321