Intervention Outcome 中的 Association vs Causation
区分“某变化发生在 Intervention 之后”的时间/统计关联与“该 Intervention 导致该变化”的因果结论,解释为什么 BodySense Outcome 默认使用 association_only。
[!info] related notes
- 所属 MOC: bodysense-moc
- 前置概念: intervention-outcome-body-state-feedback-loop
- 并列概念: bodysense-diagnosis-durable-domain-model 中的 Hypothesis 演化
- 易混淆概念: temporal sequence vs causal effect
- 关系笔记: ground-truth-feedback-in-agents
Intervention Outcome 中的 Association vs Causation
一句话定义
在 Treatment Outcome 中,Association 只表示某个变化与 Intervention 在时间或数据上相关;Causation 则声称 Intervention 是造成该变化的原因。前者通常可以由一次真实观察支持,后者需要更强的证据设计。
A happened before B
≠
A caused B
为什么这个区分对闭环 Agent 特别重要
一旦系统开始收集:
Intervention
→ Outcome
它很容易产生一种“闭环幻觉”:
系统推荐 A
用户做了 A
后来变好
→ 系统证明自己推荐对了
这其实把时间顺序误当成因果证明。
如果系统再用这个“证明”训练/强化自己的 future policy,就会形成 feedback bias:
recommend A
→ observe improvement for many reasons
→ attribute to A
→ recommend A more often
→ collect more A-associated observations
最后看起来数据越来越支持 A,但因果结论可能一直没有被真正识别。
所以 longitudinal Agent 越闭环,越需要清楚 epistemic level。
BodySense 为什么默认 association_only
当前 Outcome 模型默认:
causality_level = association_only
并在没有额外说明时使用类似语义:
该变化发生在干预之后,表示时间关联,不代表已经证明因果关系。
这是一个非常重要的 epistemic guardrail。
假设:
Monday
开始 Exercise A
Wednesday
疼痛 6/10 → 4/10
系统确实可以知道:
Exercise A occurred
then
Pain decreased
但仍然不知道:
- 是否自然恢复;
- 是否同时改变了睡眠;
- 是否停止了另一个刺激动作;
- 是否测量波动;
- 是否安慰剂/期待效应;
- 是否多个 Intervention 同时发生;
- 是否用户本身状态进入不同阶段。
因此直接写:
“Exercise A 让疼痛降低了 2 分。”
会把 observation 偷偷升级成 causal claim。
Association 是事实层,Causation 是推断层
可以分成:
Observation
Outcome O7
pain_score = 4
occurred_at = Wednesday
Temporal Association
O7 happened after Intervention I3
Causal Hypothesis
I3 may have contributed to improvement
Strong Causal Claim
I3 caused the improvement
这四层的证据门槛完全不同。
为什么“执行了 Intervention”本身也要先被证实
如果只有:
I3 accepted
却没有 TrainingLog / user confirmation,就连:
I3 happened before O7
都不能可靠成立。
所以因果链更前面还有:
Accepted
≠
Executed
因此完整层次是:
Proposal
→ Accepted action
→ Execution evidence
→ Outcome observation
→ Association
→ Causal hypothesis
→ Strong causal claim
每层都不能跳过。
为什么这和 Diagnosis 的“外部知识不能变成 User Fact”很像
Diagnosis 学过:
medical knowledge
≠
this user's fact
Treatment 这里对应:
temporal sequence
≠
causal proof
本质都是:
不要把低权限 epistemic evidence 自动升级成高权限 truth。
Confounder:为什么同时发生的其他变化会破坏简单归因
用户开始 I3 同时可能:
睡眠从 5h → 8h
停止久坐
减少疼痛诱发活动
吃止痛药
自然恢复
开始另一个 Intervention I4
这些都可能解释 Outcome。
如果没有控制它们,系统看到:
I3 before improvement
只能说 association。
所以 causal inference 的本质问题之一是:
如果没有 I3,其他条件相同,Outcome 会怎样?
这个“反事实世界”通常无法直接观察。
Counterfactual 是因果概念的核心
因果问题不是:
做了 I3 后发生什么?
而是:
同一个用户、同一个时间,
如果做 I3 vs 不做 I3,Outcome 差多少?
现实中同一个时刻不能同时观察两个世界。
所以需要:
- randomization;
- crossover;
- repeated within-user design;
- causal assumptions;
- statistical methods。
普通 Outcome log 天然无法提供完整 counterfactual。
哪些情况下因果信心可以逐渐增强
BodySense 不需要永远禁止 causal reasoning,但应该显式表示证据等级。
例如可以逐渐积累:
Repeated Within-User Pattern
I3 performed → symptom improves
I3 stopped → symptom worsens
I3 resumed → symptom improves again
这比单次“先做后好”更强,但仍可能有 confounders。
Single-variable change
如果多个因素基本稳定,只改变一个 Intervention,解释力更强。
Objective Measurement
例如可重复、标准化的测量比自由文本“感觉好一点”更容易比较。
Dose-response pattern
如果适当增加/减少 dosage 后 Outcome 呈一致方向变化,可能增强 causal hypothesis,但仍需排除时间趋势等混杂。
External Evidence
高质量研究可以支持:
“这种 Intervention 在类似人群中具有平均因果效果。”
但它仍不能自动证明:
“这个用户这次变化就是由它造成。”
Controlled Experiment / N-of-1 design
更严格的个体实验设计可以提高 causal confidence,但已经属于新的产品/研究能力,不应该由普通 Outcome record 暗中承担。
Population Causality 与 Individual Causality 也不同
研究可以证明:
在类似人群中,A 平均提高某指标
但对单个用户:
这个人这次的 +8° 就是 A 导致的
仍然是更强命题。
因此 external RCT evidence 可以提高 Intervention 的 prior credibility,但不能自动把每个 user Outcome 标成 causal。
Outcome Schema 为什么应该把 AssociationStatement 单独保存
如果只保存:
pain = 4
未来 UI/Agent 很容易自己补一句:
“训练后改善。”
而如果 durable Outcome 显式保存:
CausalityLevel = association_only
AssociationStatement = "该变化发生在干预之后……不代表证明因果"
则下游系统有明确的 semantic boundary。
它可以被:
- UI 展示;
- Agent context 使用;
- Evaluation 检查;
- Replay 保留;
- 未来 hypothesis reasoning 引用。
CausalityLevel 应该限制下游语言强度
可以建立 behavioral mapping:
association_only
→ “发生在…之后” / “与…时间相关”
causal_hypothesis
→ “可能有贡献” / “值得继续观察”
stronger_evidence
→ 允许更强但仍有边界的表达
不要让同一个 durable state 被不同 LLM 随机写成完全不同 causal strength。
不要让 LLM 用语言强度偷偷跨越 Causality Level
例如 durable data 是:
association_only
模型 summary 却说:
“该训练显著改善了用户的神经症状。”
即使语气自然,也属于 semantic overclaim。
更合适的表达:
“症状改善发生在开始该训练之后,目前只能视为时间关联;是否由该训练导致仍不能确定。”
所以 CausalityLevel 也可以进入 Behavioral Contract:
association_only
→ generated text must not state proven causation
多 Intervention 场景为什么更危险
Treatment 常常同时包含:
mobility
exercise
habit change
monitoring
如果用户整体变好:
TR3 package
→ Outcome improves
系统更无法知道究竟是:
- I1;
- I2;
- I3;
- 它们交互;
- 或 Treatment 之外的变化。
因此 package-level improvement 不能随意分配给某个 Intervention。
Interaction Effect:多个干预可能共同起作用
甚至真实 causal mechanism 可能是:
I1 alone → little effect
I2 alone → little effect
I1 + I2 → strong effect
如果系统硬要把 Outcome 分给一个 action,会产生错误学习。
这和 Model × Prompt interaction thinking 很像:组合效果不能总归因给单因素。
Negative Outcome 也一样
用户在 Intervention 后症状恶化:
I5
→ next day worse
同样不能立即证明:
I5 caused harm
但安全系统不需要等到因果证明才能采取保守动作。
这是一个很重要的区别:
Causal certainty threshold
≠
Safety action threshold
例如:
worsening after Intervention
→ pause / review may be justified
即使:
causality = uncertain
也可以因为风险管理原则触发 review。
[!important] 安全决策不需要等到科研级因果证明 “我们不能证明它造成了恶化”不等于“应该继续做直到证明”。
为什么安全阈值可以低于因果证明阈值
Safety Policy 解决的是:
在不确定情况下,是否值得承担继续行动的风险?
Causal science 解决的是:
能否有充分证据声称 A 导致 B?
这两个任务的损失函数不同。
所以:
possible harm association
→ may be enough to pause
并不矛盾于:
causality still unproven
与 BodyState Hypothesis 的关系
长期系统可以把因果解释保留为 hypothesis,而不是 Fact:
Hypothesis H12:
I3 may contribute to symptom improvement
随后通过更多 Outcome 支持/削弱:
supporting_outcomes
counterevidence
repeated pattern
这比把第一条 Outcome 直接写成:
Fact: I3 is effective
更符合 longitudinal reasoning。
Hypothesis 可以有“支持度”,但不要伪装成概率真值
可以记录:
supporting observations count
contradicting observations
pattern strength
last updated
但不要轻易输出:
I3 has 87% probability of causing improvement
除非背后真有校准过的 causal model。
Outcome 数据怎样用于未来模型改进而不产生 Label Leakage
真实用户 Outcome 很有价值,但不能直接:
improved after recommendation
→ label recommendation = correct
更稳健用途:
- 找到需要人工 review 的 failure cases;
- 建立 association statistics;
- 构造 safety regression slices;
- 提出新的 causal research hypothesis;
- 训练 Outcome prediction 时明确标签含义是 observation,不是 causal truth。
否则模型会学习到错误“成功标签”。
一个完整例子
Intervention I8
mobility routine
Outcome O20
range_of_motion = +8°
causality_level = association_only
正确 durable statement:
O20 observed after I8
可以形成 hypothesis:
I8 may be associated with improved mobility
如果连续多轮:
O20 + O23 + O27
都呈现相似模式,可以增强 hypothesis,但除非有更强设计,仍不应直接写成确定因果事实。
一个反例:时间顺序也可能被记录错
如果用户补录昨天的 Outcome,但 recorded_at 是今天:
recorded_at
≠
occurred_at
因果/时间分析必须使用实际 occurrence time,而不是数据库写入时间。
所以 Outcome schema 中:
occurred_at
source provenance
很重要。
测试 Causality Boundary 应覆盖什么
Language contract
association_only
→ no “caused / led to / proved effective” claim
Execution prerequisite
no execution evidence
→ cannot associate Outcome to performed Intervention as fact
Multiple interventions
package outcome
→ do not automatically assign to one action
Safety
worsening association
→ review may trigger even without causal proof
Historical provenance
occurred_at / intervention identity / outcome source retained
Hypothesis evolution
new observations may strengthen/weaken hypothesis without rewriting past Outcomes。
自测题
- Association 和 Causation 分别声称什么?
- 为什么 Accepted Intervention 甚至不足以建立时间关联?
- Counterfactual 为什么是 causal reasoning 的核心?
- Population-level causal evidence 为什么不能自动证明 individual outcome?
- 多 Intervention 为什么会造成 attribution 难题?
- Negative Outcome 后为什么可以先 pause,即使 causal proof 不足?
- CausalityLevel 为什么应该约束 LLM 的语言强度?
- BodyStateHypothesis 为什么比 Fact 更适合承载逐渐增强的 causal interpretation?
- Outcome 为什么不能直接当“模型推荐正确”的训练标签?
recorded_at与occurred_at为什么不能混?
最终心智模型
Outcome tells us WHAT happened.
Timing tells us WHEN it happened.
Association tells us WHAT moved together.
Causal inference asks WHY it happened.
Safety policy asks WHETHER we should continue acting under uncertainty.
这些问题不能用一个 after 字段直接合并。