--- title: "别把 LLM 提取的主题当成真实变量 — 因果分析中 '生成变量' 的 4 类错误与 5 问诊断清单" source_url: "https://mp.weixin.qq.com/s/mfJrT0HtMTvIhw9hf6HQ3Q" mp: "数据派 THU" author: "William Gieng(翻译:周梓溢)" pub_date: "2026-06-12" ingested: "2026-06-12" sha256: "d210ceba15b5377f421862dabce1a089814a8da6f47b5af79e8e8b39e3e6bc37" type: source tags: ["llm-themes", "causal-inference", "generated-variables", "selection-bias", "measurement-error", "post-treatment-bias", "dag", "ipw", "text-as-covariate", "william-gieng", "datapi-thu"] --- # 别把 LLM 提取的主题当成真实变量 ## 核心论点 **别把 LLM 提取的主题当成观测值**,给因果分析从业者的提醒:**警惕"生成变量"**。 当分析师将 LLM 提取结果拼接进客户数据表,**把缺失值填为 0 或"未提及问题"**时,实际上可能把"**没有留下文本记录**"错误解释为"**没有经历相关问题**"。这种干预会在因果分析中引入**选择偏差、时序偏差、测量误差和变量角色误判**。**错误地控制干预后生成的文本主题,甚至可能导致干预效应方向被反向估计**。 **LLM 生成的主题标签是"生成变量"**——它继承了**文本产生机制、模型提取过程和样本选择机制**中的隐含假设。 ## 经典反例:客服通话"账单不满"主题 ### 危险的工作流 1. 分析师把 LLM 从客服通话语料中抽取出的主题,与客户数据表合并 2. **没有通话转录的客户被记为 NULL** 3. NULL 被填成 0,或写成"未提及问题",或被悄悄作为参照类别省略 4. 接下来的回归结果看起来很清晰——"账单不满"系数显著,符号正合产品团队预期 5. **没有人问这个变量到底从哪里来的** ### 实际发生的事 > 一行预干预代码,整条数据流程把"**没有致电客服**"转换成了"**没有对账单不满**"。 ## NULL 干预的 4 类常见错误 ### 1. 选择偏差 **某个主题之所以出现在某位客户身上,是因为这位客户打了电话、提出投诉、发了帖子,或者填写了回复**。 - 这种行为很可能与干预变量、结果变量相关,**或两者同时相关** - NULL 填充把"**没有生成文本**"折叠进参照类别 - 分析估计的不再是整个客户群体上的效应,而是**被预干预重新定义过的人群**上的效应 ### 2. 时序问题 文本发生时间决定其在因果图中的位置: | 文本类型 | 因果作用 | 风险 | |---------|---------|------| | **干预前文本** | **潜在混杂因素** | 客户在 1 月致电询问账单,3 月才发留存优惠 | | **同期文本** | **不能当协变量** | 干预本身就是来自客户留存专员的电话,主题来自同一通电话——**以该主题为条件会消除分析人员试图测量的部分效果** | | **干预后文本** | **最危险** | 客户 3 月收到留存优惠,4 月打电话投诉——对从这通电话提取的主题进行条件化 = 对干预后变量进行条件化,**可能阻断中介路径、诱发关联碰撞、导致估计值偏离** | ### 3. 测量问题 **"账单不满"这个标签本身并非对账单不满**。它只是流程在文本中识别出的看起来像账单不满的语言表达。 - 分类器的准确率是有限的 - **不同干预组的准确率可能存在差异**——因为改变客户表达方式的干预方法也会改变模型读取这些表达的方式 - **标签噪声并不与研究对象无关** ### 4. 变量作用 **主题在模型中到底发挥什么作用?**混杂因素 / 中介变量 / 干预变量 / 结果变量 / 描述性特征? > **答案由因果有向无环图(DAG)决定,而不是由列名决定**。 > > 一个变量在某种作用下可能方法论上成立,换到另一种作用下却会成为偏差来源。 ## 案例:bill_shock 主题导致符号反转 ### 模拟场景 **业务逻辑**:企业根据捕捉价格敏感度的模型向客户定向发放留存优惠。 - 优惠分配和客户流失都受**潜在价格敏感度**影响(不可观测) - 价格越敏感的客户:越可能收到优惠 + 越可能流失 + **越可能致电客服并表达对账单的冲击** - "**账单冲击 (bill_shock)**" 主题正是从这些**干预后**的通话中生成 ### 数据生成过程(Python) ```python import numpy as np import pandas as pd import statsmodels.api as sm rng = np.random.default_rng(7) n = 20000 price_sens = rng.normal(0, 1, n) offer = rng.binomial(1, 1 / (1 + np.exp(-(0.8 * price_sens)))) churn = rng.binomial(1, 1 / (1 + np.exp(-(-1.0 + 1.2 * price_sens - 0.5 * offer)))) called = rng.binomial(1, 1 / (1 + np.exp(-(-1.5 + 0.7 * price_sens + 0.9 * churn)))) theme_prob = 1 / (1 + np.exp(-(-0.5 + 0.8 * price_sens))) bill_shock = np.where(called == 1, rng.binomial(1, theme_prob), 0) df = pd.DataFrame({"churn": churn, "offer": offer, "bill_shock": bill_shock}) X = sm.add_constant(df[["offer", "bill_shock"]]) naive = sm.Logit(df["churn"], X).fit(disp=0) print(naive.params) ``` ### 4 种模型设定的 4 个答案 | 模型设定 | 优惠系数 | 结论 | |---------|---------|------| | **朴素模型(含 bill-shock)** | **+0.12** | 优惠看似**增加**流失 | | **删除变量(不含 bill-shock)** | +0.24 | 优惠仍看似**增加**流失 | | **理想模型(含 price_sens)** | **−0.55** | 优惠**减少**流失 | | **真实效应(数据生成过程)** | **−0.50** | 优惠**减少**流失 | ### 关键洞察 > **朴素模型的设定方向是错的**。在一个本已存在偏差的模型中加入 bill-shock 控制变量,**会改变优惠系数的符号**。产品团队如果看到这样的输出结果,会得出结论:**留存优惠会导致客户流失**。这个结论是错的。 > **剔除 bill-shock 变量并不能解决分析问题**。剔除变量后的模型系数仍然为正。**只有那个能够直接控制未观测混杂因素 price_sens 的理想模型,恢复了真实效应**。 > > 在实际分析中,分析师并没有这列数据,**关键就在这里**。**移除不合适控制变量是必要的,但并不充分**。 ### 符号反转的机制 - **客户流失会影响客户致电的可能性**(即将离开的客户更可能致电客服) - **账单冲击只对已来电的客户才可观察到**(该主题需要通话记录才能存在) - 因此,**对 bill-shock 条件化 = 对流失的下游后果进行条件化** - 在 `bill_shock = 1` 的客户中,**优惠与价格敏感度之间的关系已经被扭曲**,因为这两个变量现在都参与解释了客户为什么最终被打上这个标签 - **优惠系数吸收的正是这种被诱导出来的关联** ## 选择问题的 3 种处理假设 | 做法 | 假设 | 问题 | |------|------|------| | **把 NULL 填成 0 / "未提及问题"** | 未生成文本表明不存在潜在问题 | 没有打电话的客户也可能经历过账单不满,**只是他们通过取消服务、转向竞争对手、在社交媒体抱怨,或干脆放弃** | | **删除 NULL 所在的行** | 限制在致电的子人群中 | "致电客户的干预效应" ≠ "全体客户的干预效应"——**这正是业务问题的核心** | | **IPW(逆概率加权)** | 基于来电者模型做加权 | 对文本生成者建模需要记录**来电驱动因素**,而该模型取决于人口统计特征、客户年限、既往问题、干预暴露以及不可测的冲击——**这正是该主题最初旨在帮助测量的概念** | ### 更深层次问题 > **文本选择行为会与干预方式相互作用**。例如: > - 留存优惠可能**改变通话频率** > - 价格调整可能**改变投诉率** > - 新功能发布可能**改变客户提出的问题类型** > > 所有这些都使得**选择机制本身依赖于干预方式**——即使是**完美提取、时机恰当的主题,其测量对象也是随着干预方式而变化的群体**。 > > **标准的观测校正假设选择机制是稳定的。当干预方式改变选择时,这些校正方法就失效了。** ## 测量问题:差异性测量误差 ### LLM 输出的"不显嘈杂"是隐患 - 旧式 NLP(TF-IDF / LDA)输出**看起来很嘈杂**,从业者本能地不信任它们,**这种本能避免了许多错误的分析** - LLM 输出**看起来像潜在构念**——"账单不满""信任侵蚀""续约焦虑"读起来像在描述客户的心理状态 - 这些标签**清晰明了、类别语义连贯、错误模式不会直接暴露在表格里** - **说服问题在统计问题出现之前就已经存在了** ### 差异性测量误差才是真正造成损害的地方 > **如果一项干预措施改变了客户的表达方式**(大多数值得实施的干预措施都会如此),**那么分类器在主题检测方面的准确率在干预组和对照组之间可能会有所不同**。 > > 例如,一项**旨在缓和客户情绪的挽留优惠可能会降低模型对"账单冲击"等措辞的标记率,但并不能降低客户潜在的不满情绪**。 > > 一项改变客户抱怨方式的**价格调整可能会导致分类器准确率在某一组比另一组更显著地变化**。 > > **标签噪声不再是均值为零**。**它与干预措施相关**,**而基于噪声标签进行条件化会使估计的干预效果产生偏差,分析师很难确定其方向**。 ### 相关文献 - **Egami 等**《How to Make Causal Inferences Using Texts》——为把文本发现的测量作为干预或结果的因果推断提出**分割样本工作流** - **Mozer 等**将**文本增强匹配**应用于电子健康记录,展示文本协变量如何改变估计效应 - **Keith、Jensen 与 O'Connor**《Text and Causal Inference: A Review of Using Text to Remove Confounding from Causal Estimates》——综述文本在消除因果估计混杂方面的应用 > 这些方法确实存在,**在分析结果重要时也值得使用**。但它们首先要求分析师承认:**标签是一种带有误差的测量**。**而这一步,恰恰是多数工作流跳过的**。 ## 5 问诊断清单 使用从文本记录中生成的变量进行的因果分析仍然合理。它只需要在回归分析运行之前回答**五个问题**: | # | 问题 | 核心 | |---|------|------| | **1** | **我假设这个变量起什么作用?** | 它是混杂因素 / 中介变量 / 干预变量 / 结果变量 / 描述性特征?**由 DAG 决定,不由列名决定** | | **2** | **文本相对于干预措施,是在什么时候生成的?** | 干预前 / 同期 / 干预后?**如果分析师无法从数据中回答这个问题,该变量就不应作为混杂因素进入模型** | | **3** | **文本是由什么选择机制生成的?对于没有文本的人,我做了什么假设?** | 零填充 / 删除 / IPW:**每一种都是假设**。请选择其中一种并加以说明 | | **4** | **标签是如何产生的?它的可靠性是否可能在不同干预组之间不同?** | 如果干预措施有可能改变顾客表达潜在结构的方式,**那么分类器准确率在本次比较中就不恒定为常数** | | **5** | **压力测试下,结果怎么样?** | **去掉从通话记录中派生的变量,重新拟合模型**。如果核心系数因此出现明显变动,**说明结果还不够稳健,不足以单独支撑一个因果性的结论** | > 这五个问题不是解决方案,而是一套**诊断工具**。 > > **能回答这些问题的分析师,并不能保证一定能得到一个可识别的因果效应**。 > > **而无法回答这些问题的分析师,做的不过是描述性工作,只是在外面包了一层因果推断的语言外壳**。 ## "生成变量" 的更广泛模式 > 这种更广泛的模式,**比 LLM 的出现要早得多**。 > > **生成变量是流水线的输出,看起来像观测值,实际上却是以选择机制为条件的模型输出**。 > > 它们出现在: > - **欺诈评分** > - **推荐系统的相关性指标** > - **情感指数** > - **被重用为协变量的倾向性评分** > - 一切由上游模型产生、被下游分析消费的潜在特质估计 > > **LLM 没有发明这个错误,它们只是以旧时 NLP 输出从未达到的规模和流畅度,把这个错误变得触手可及**。 > > 标签看起来像潜在构念,数据列看起来像测量值,**整个工作流看起来像因果推断**。 > > **假设并没有消失。它们只是被移到了上游。** ## 关键术语 - **生成变量(Generated Variable)**:由流水线(LLM / 分类器 / 嵌入聚类)产生的测量值,**以客户先做了能留下文本痕迹的事为条件** + 以这段痕迹能被模型识别为条件 - **NULL 干预(NULL Intervention)**:把缺失值填成 0 / "未提及问题" / 删除 / IPW 的决策 - **干预后偏差(Post-Treatment Bias)**:对干预后生成的变量做条件化引发的偏差 - **差异性测量误差(Differential Measurement Error)**:分类器准确率在不同干预组之间不同时的测量误差 - **分割样本工作流(Split-Sample Workflow)**:Egami 等提出的文本测量因果推断工作流 - **文本增强匹配(Text-Augmented Matching)**:Mozer 等将文本协变量用于因果匹配 ## 原文信息 - **原文标题**:LLM Themes Are Not Observations - **原文链接**:https://towardsdatascience.com/llm-themes-are-not-observations/ - **作者**:William Gieng - **翻译**:周梓溢(广州大学统计学在读) - **校对**:陈超 / 林亦霖 - **发布**:数据派 THU(清华大学大数据研究中心) - **关键词**:大语言模型 / 生成变量 / 因果推断 / 文本分析 / 选择偏差 / 测量误差 / 干预后偏差