时间序列分类问题中的因果推理·进阶篇
🔬

时间序列分类问题中的因果推理·进阶篇

(2/3)· 当指标信号只是巧合,怎样用匹配和不确定性评估逼出真正的交易因果

含代码示例实战向 第 2/3 篇

把移动平均线金叉直接当标签丢进模型,是很多交易者踩过的坑——这些标记往往只是价格运动的伴随现象,并不构成可重复的因果。本篇接上篇的元学习器训练,继续深挖怎样在时序数据里区分真因与噪声。

随机分组为何要训一堆模型

把样本随机拆成训练组与对照组、再重复多次训练,是消除评估偏差的基本操作。单次实验里,某个具体分类器的预测确实不依赖它自己被没被训练;但我们要看的是「潜在结果」——即同一批数据在「训过」和「没训过」两种状态下的差异。 这里容易绕晕:我们并不希望观测到的预测与训练无关,因为训练本就该改变输出;我们真正要的是,对照组和测试组的潜在结果分布可比,不能让某一只特定分类器因为权重分配偏了而带歪结论。 单个分类器总给不同训练样例不同权重,即便做混合,每个观测受到的「处理量」也不均等,因果推断就被搅浑了。MQL5 上做这类验证时,可以靠随机化拿到测试集与训练集的误差差,来估训练效果;但分类任务里,因每只分类器都在过半原始样本上训、权重不一,单模型估计仍有偏。 用多个分类器组集合、对得分取平均,能把每单元的「处理」拉平,让所有训练样例处于同条件、同权重。外汇与贵金属行情高危,这种集合平均思路只降低估计偏差,不预示任何方向性收益。

◍ 用时间点对齐做精确匹配

随机实验只能给出训练一组模型的平均表现,但实盘更关心单笔训练样本到底赚没赚。要回答“这条样本该留还是该调”,得拿到每个对象的个体效应,也就是在控制其它特征不变时,它进不进训练集带来的条件差异。 匹配的本质,是拿单个样本和全样本里其余单位比,逼着它们在除了“是否参与训练”之外的维度都尽量相似,从而给该样本单独打分。匹配分精确和不精确两类;时间序列场景下有个取巧办法——直接按时间轴对齐。 若训练的是模型集合,每个模型在任意时刻的预测都已经和该时间点的特征集绑死。那只要挑定一个时间点,把所有模型在这一刻的预测结果拉出来互比就行。相比欧几里德、闵可夫斯基或马氏距离那种全量相近度计算,这种时间位置比对的计算复杂度最低,能支撑更多实验,而且属于精确匹配。

「把数据的不确定性拆成两套订单来看」

做算法交易时,光看平均处理效果和单个样本表现还不够,因为最终要落地的是一个分类器模型。这里要用到因果推断的思路:先估计数据集里每个单元的不确定性,再把样本切成「对条件训练有反应」和「没反应」两类。绝大多数时候,这种切分本身也有对错,而不确定性本质上等于所有集成模型潜在输出结果之间差异的加总。 一个容易被忽略的坑是买卖订单必须分开评估。若把两者混在同一个联合分布里算,会直接污染最终的不确定性估计,导致你以为模型稳了,其实只是分布被搅浑了。外汇与贵金属杠杆高、跳空频繁,这种估计偏差可能引发实盘大幅回撤,概率不低。 实操上,建议你在 MT5 里分别跑 buyer/seller 两组特征的不确定性直方图,观察重叠区占比。重叠越高,说明该时段行情对分类器越不友好,倾向降低仓位或暂停训练。

用元学习器拆开异质反应

因果推理里的元学习器,本质是用来估计条件平均处理效果(CATE,也叫 HTE)的一类模型。ATE 和 ATT 只给群体平均答案,但人、账户、机构面对同一处理往往反应不同,ATE 会把这部分差异抹平。 CATE 的定义里多了一个 X——描述每个单位自身特征的变量集,处理从同质效果转到异质效果。用上行矩阵看最直观:行是「是否给处理」,列是「不给处理时的反应」,四个色块里绿色(有信心者)给不给都买,红色(请勿打扰)不给会买、给了反而不买,灰色(无兴趣)怎样都不买,蓝色(可说服)不给不买、给了才可能买。 预算有限的交易者或营销方,应该只打蓝色组、避开红色组;打绿灰两组没直接伤害也没增益。落到时间序列分类,就是先从训练集里挑出对「处理」(比如某 classifier 的训练方式)反应最强的样本单独成组。 一个简单估计异质效果的代理模型是拿 X 去预测处理变量 T:T ~ X。这模型性能应当接近随机。若显著非随机,说明处理分配依赖了某些特质,意味着有遗漏变量在干扰因果推论——常见原因是随机对照没真随机。外汇与贵金属市场高波动、高杠杆,这类遗漏会让策略回测结论失真,上 MT5 跑代理模型看 AUC 是否逼近 0.5 是低成本验证手段。

◍ 单个模型怎么估出因果效应

S-Learner 是因果元学习器里最轻量的一支,核心就一句话:拿一个基础模型(树、神经网络都行)在含处理变量的全量数据上训一遍,再靠两次预测相减拿到 CATE。它和机器学习里那个「学会怎么学习」的 meta-learning 不是一回事,这里的元只是指「套在基模型外算因果」的结构。 具体落地时,对一条观测先把它处理变量置 1 跑一次预测,再原样把处理变量置 0 跑一次,两者相减就是该样本的可能处理效应。外汇或贵金属行情里用这套,意味着你要先定义清楚什么是「处理」(比如某宏观事件是否发生),模型才不会把相关当因果。 这种做法的代价是:单一模型容易把处理变量当普通特征平滑掉,低频处理的效应可能被基模型低估。MT5 上验证时,建议先用小规模符号数据跑通相减逻辑,再换复杂模型看 CATE 分布是否明显偏移。

「拆成两个模型来逼出处理效应」

S-Learner 有个老毛病:模型可能直接把处理变量学忽略掉,导致算不出干预带来的差异。T-Learner 的解法很硬——不共用模型,而是按处理状态把数据劈成两堆,分别训两个模型:一堆只看已处理样本,另一堆只看未处理样本。这相当于在树模型里强制第一刀就按处理变量切分,处理效应想被忽略都做不到。 具体跑法是:先按处理标签拆子集;各自训一个模型;对每个样本用两个模型都预测一遍结果;最后用未处理模型的预测减去已处理模型的预测,得到该样本的处理效应估计。因为处理状态已经被编码进「用哪个模型」这件事里,忽视处理的情况理论上被排除了。 代价也实在:两个模型各吃一半数据,单模型训练样本变少,拟合质量会掉;想达到和 S-Learner 同等的基学习器表现,T-Learner 大约需要两倍数据量。更麻烦的是,当某一处理组的观测远少于另一组时,效应估计的方差会变得非常大,分数波动比 S-Learner 更剧烈。 所以适用场景很明确:当你怀疑处理效应本身较弱、S-Learner 可能压根识别不出来时,T-Learner 更有可能把微弱效应逼出来。它比 S-Learner 费数据,但随着总样本规模上升,这个劣势会慢慢收窄——在 MT5 上做因果面板回测时,若处理组样本不足千条,优先看 S-Learner 的稳健性,别急着上 T-Learner。

把因果诊断交给小布盯盘
小布盯盘的 AIGC 模块已内置信号相关性筛查,打开对应品种页即可看到哪些指标组合只是伪相关,省去你手算匹配的重复劳动。

常见问题

只能用当时可得的信息切分样本并固定规则回测,任何依赖后续数据的分组都破坏因果闭环,结论只具概率倾向。
选择性匹配导致样本失去代表性,未观测混杂变量仍会扭曲效应估计,外汇贵金属品种受宏观事件冲击时尤甚。
可以,在品种页的 AIGC 诊断中切换元学习器类型,小布会输出两种器在您选定窗口下的不确定性区间,辅助判断过拟合风险。
宽置信带说明因果效应弱或数据噪声大,此时降低仓位或暂停机器学习信号更稳妥,市场高风险下勿硬扛。
它把处理效应作为估计目标而非单纯分类,能分离混杂与真实干预影响,但依赖前篇提到的干净标注流程。