基差回归中的常见陷阱:伪回归、幸存者偏差、前视偏差、数据窥探
做基差回归模型,说白了就是在历史数据里找规律。但历史数据这东西,有时候会骗人。我做了这么多年交易,踩过的坑不少,今天就把最常见的四个陷阱掰开揉碎了讲给你听。
一、伪回归:看起来很美,用起来很惨
伪回归是基差回归里最隐蔽的坑。两个完全不相关的序列,因为都带有趋势,回归结果却显示“显著相关”。
举个例子。我把沪深300指数和澳大利亚的羊毛价格放在一起做回归,R方可能高达0.8。但这有意义吗?完全没有。两个序列都在涨,只是时间上凑巧了。
我个人习惯,在做任何基差回归之前,先做单位根检验。这是基本功,但很多人嫌麻烦就跳过了。
- R方很高(>0.8),但DW统计量很低(<0.5)
- 两个序列都有明显的趋势项
- 残差序列不平稳(这是关键!)
我在项目中遇到过最典型的案例:有人用螺纹钢和铁矿石的基差做回归,R方0.85,觉得找到了圣杯。结果一检查残差,单位根检验p值0.32——残差不平稳。这就是典型的伪回归。
怎么解决?两个办法:
- 差分处理:把价格序列变成收益率序列再做回归
- 协整检验:直接检验两个序列是否存在长期均衡关系
# Python示例:协整检验
from statsmodels.tsa.stattools import coint
# 假设price1和price2是两个价格序列
score, pvalue, _ = coint(price1, price2)
if pvalue < 0.05:
print("存在协整关系,可以做回归")
else:
print("小心伪回归!")
二、幸存者偏差:你看到的都是活下来的
幸存者偏差在基差回测里特别常见。你想想看,我们做回测时用的数据,都是今天还活着的品种。那些退市的、被合并的、出过重大问题的品种,数据早就没了。
这就导致一个问题:你的回测结果天然偏向于“好品种”。那些烂品种的亏损数据,你根本看不到。
我曾经犯过这个错。2018年做农产品基差策略,回测曲线漂亮得不行。实盘一跑,直接亏了三个月。后来复盘才发现,回测数据里少了几个已经退市的品种——它们要是还在,回测曲线得砍掉一半。
具体怎么做?
- 回测时尽量包含所有历史品种,包括已退市的
- 如果数据不全,至少做个敏感性分析:假设退市品种亏损20%,你的策略还能不能赚钱?
- 别只看“赚钱的样本”,多看看“亏钱的样本”长什么样
三、前视偏差:你用了未来的信息
前视偏差说白了就是“开挂”。你在回测时不小心用到了未来才知道的数据,结果回测曲线当然漂亮。
最常见的场景:你用当天的收盘价计算基差,然后判断是否开仓。但收盘价是在收盘后才确定的,你不可能在盘中就用这个价格做决策。
嗯,这里要注意。很多新手会犯这个错,我自己也中过招。
- 用未来数据做归一化(比如用全样本的均值和标准差)
- 用未来数据做参数优化(比如用未来一年的数据选最佳参数)
- 用未来数据做信号生成(比如用收盘价做盘中决策)
我记得有一次帮朋友看他的回测代码,发现他用的是shift(-1)而不是shift(1)。就这一个符号的差别,回测年化收益率从15%变成了35%。他当时还觉得找到了好策略,我说你仔细看看,是不是用了未来数据?
怎么避免?
- 严格区分训练集和测试集:训练集只能用历史数据,测试集只能用未来数据
- 使用滚动窗口:每次只使用过去N天的数据做参数估计
- 代码里加断言:确保任何计算都不会用到未来数据
# 错误示范:用了未来数据
df['signal'] = df['basis'].rolling(20).mean() # 这里没问题
df['signal'] = df['basis'].shift(-1) # ❌ 用了未来数据!
# 正确做法
df['signal'] = df['basis'].shift(1).rolling(20).mean() # ✅ 只用历史数据
四、数据窥探:你看了太多遍数据
数据窥探,也叫“过度优化”。你反复看同一组数据,总能找到一些“规律”。但这些规律只是噪声,不是真正的信号。
我见过最夸张的例子:有人把参数从1到100全部跑了一遍,选了一个回测收益最高的参数。然后说“我找到了最优参数”。这不是找规律,这是在做数据拟合。
为什么会这样?因为数据量有限,你跑100次,总有一次运气好。但运气不是实力。
- 回测曲线完美向上,几乎没有回撤
- 参数稍微一改,收益就大幅下降
- 样本内表现远好于样本外
我个人习惯的做法是:
- 限制参数搜索次数:最多跑20组参数,选最好的
- 使用交叉验证:把数据分成5份,轮流做训练和测试
- 保留验证集:最后用完全没看过的数据做一次验证
说白了,你要对数据保持敬畏。数据不会骗人,但人会骗自己。
知识体系总览
下面这张图,把四个陷阱的关系和应对方法串起来了。建议保存下来,做模型时对照着看。
做基差交易,技术是基础,但心态和认知才是天花板。模型可以帮你赚钱,但只有清醒的头脑才能帮你守住钱。
公众号:蓝海数据掘金营,微信deep3321