关于 diagnosing-experiment-results
用于诊断 PostHog 实验结果偏差、为空、不一致或难以解读的技能。它根据症状,结合实验配置、诊断快照和参考资料进行核查。
主要功能
- 01将症状对应到诊断类别
- 02检查实验配置与诊断快照
- 03识别偏差和曝光问题
- 04对比结果与 SQL 计数
- 05评估运行中变更和反馈
适用场景
- 01调查实验分组失衡或结果为空
- 02解释显著性变化或指标差异
- 03将 PostHog 结果与原始事件数核对
- 04按变体收集定性反馈
MCP 相关
该技能使用实验相关 MCP 工具,并支持通过 MCP 开展定性反馈工作流,包括关联功能标记的调查问卷。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ posthog/ ai-plugin --skill diagnosing-experiment-results安装后在 Claude Code 中输入/diagnosing-experiment-results确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/bias-and-skew.mddiagnostic-snapshot.mdempty-experiment.mdinterpretation.mdmid-run-changes.mdnumbers-vs-sql.mdqualitative-feedback.md详细介绍
诊断实验结果
此技能回答的问题是:我的 PostHog 实验结果看起来不对、有偏差或为空,这是怎么回事?
在分派表中匹配用户的反馈,然后读取对应的参考文件进行诊断。
参考文件中的每项诊断都标有 [HIGH]、[MEDIUM] 或 [LOW],表示其验证程度 — [HIGH] 已通过 PostHog 代码直接验证,[MEDIUM] 已部分验证或通过团队来源验证,[LOW] 描述的是此处未经验证的 SDK/外部行为。将 [LOW] 项视为需要测试的假设,而非可以断言的事实。
第 1 步 — 确认实验
如果用户通过名称或描述提及实验,请先加载 finding-experiments 技能,将其解析为具体 ID。
调用 experiment-get 并提取以下字段。几乎所有诊断都需要这些输入:
feature_flag.filters.multivariate.variants[].rollout_percentage— 变体分配比例exposure_criteria.multiple_variant_handling— 如果未设置,则默认为"exclude"exposure_criteria.exposure_config.event— 未设置表示使用默认曝光事件;从resolved_exposure_event读取具体事件($feature_flag_called或$experiment_exposure— 在服务端解析,两者属性相同)exposure_criteria.filterTestAccounts— 如果未设置,则默认为truefeature_flag.active、状态(draft/running/paused/exposure_frozen/stopped)、start_date、end_datefeature_flag.filters.groups[]— 对每个组读取variant、properties和rollout_percentage(该组的分配比例,即进入实验的匹配分桶单元中所占的百分比 — 分桶单元可以是用户;设置了feature_flag.filters.aggregation_group_type_index时则可以是群组。每个组都有自己的分配比例,因此除非标记只有一个无条件组,否则不存在单一的总体分配比例)。任何非空的variant都表示对匹配群体强制指定变体(基于发布条件进行分配,而非随机分配)— 对应 A7。注意严重情况(A7b):变体固定组具有范围很广/为空的properties,且分配比例较高;或没有保留随机分配的组(variant: null)/没有通向某一实验分支的发布路径 — 这会导致另一个变体的样本不足(一支几乎没有可分析的曝光量)。参见references/bias-and-skew.md。stats_config— Bayesian(默认)或 Frequentist
第 1.5 步 — 获取诊断快照(先验证再提问)
在向用户提出澄清问题之前,先获取 references/diagnostic-snapshot.md 中的诊断快照。此技能中的大多数诊断都可以根据这些数据确认或排除,无需访谈。
第 2 步 — 将症状与诊断匹配
| 用户说…… | 诊断类别 |
|---|---|
| “较小的变体看起来有偏差” / 横幅提示有偏差 | A — 偏差与倾斜 |
| “变体比例与我的拆分不符” / SRM 警告 | A — 偏差与倾斜 |
| “为什么不是 50/50?” / “用户同时属于两个组” | A — 偏差与倾斜 |
“用户同时属于对照组和测试组” / $multiple 百分比偏高 | A — 偏差与倾斜 |
| 服务端渲染应用中的多变体曝光 | A — 偏差与倾斜 |
| 关于功能标志/实验状态不匹配的横幅 | A — 偏差与倾斜 |
| “迁移 distinct_id” / “运行中从匿名 ID 切换到 user_id” | A — 偏差与倾斜 |
| 指标计数远小于曝光量(例如相差 10 倍或 100 倍) | A — 偏差与倾斜(先归入此类,再看 D) |
| “实验显示 0 / 数据不足” / 为空 | B — 实验为空 |
| “变体始终为 undefined / false” | B — 实验为空 |
| “$feature_flag_called 已触发,但没有曝光记录” | B — 实验为空 |
| “实验显示正在运行,但曝光量数周/数月都没有变化” | B — 实验为空 |
| “运行时间越长,显著性就越是反复变化” | C — 解读误区 |
| “之前判定为显著,后来又变得不显著了” | C — 解读误区 |
| “46 次曝光中比例为 30/16,这是坏了吗?” | C — 解读误区 |
| “A/A 测试显示结果显著” | C — 解读误区 |
| “指标很多——有些显著,有些不显著” | C — 解读误区 |
| “贝叶斯分析显示获胜概率为 96%——应该发布吗?” | C — 解读误区 |
| “置信区间有重叠——这是否意味着结果不显著?” | C — 解读误区 |
| “外部工具(显著性计算器或 AI Agent)的结论与 PostHog 不一致” | C — 解读误区 |
| “应该发布吗?主要指标上升,但次要指标下降” | C — 解读误区 |
| “PostHog 的数字 ≠ 我的 SQL 计数” | D — 数字与 SQL |
| “漏斗显示 X%,但我的原始事件计数显示 Y” | D — 数字与 SQL |
| “收入总和看起来不对” / “细分结果显示 ‘none’” | D — 数字与 SQL |
| “录制面板与统计数据不符” | D — 数字与 SQL |
| “我应用了筛选条件,但用户数没有变化” | D — 数字与 SQL |
| “我想按当前人员属性(现在的属性,而非曝光时的属性)细分结果” | D — 数字与 SQL |
| “运行中更改了拆分 / 发布比例 / 指标 / 条件,现在结果异常” | E — 运行中更改 |
| “实验已结束/发布——标志现在意外变成了 0/100” | E — 运行中更改 |
| “长期指标与主要指标走势相反” | E — 运行中更改 |
| “留存指标统计了我没预料到的用户” | E — 运行中更改 |
| “实验结束后,无法将功能标志转回简单的(布尔值)标志” | E — 运行中更改 |
| “如何使用新变体重新启动实验?” | E — 运行中更改 |
| 指标线已渲染,但结果块为空 / 没有获胜概率或显著性 | E — 运行中更改(E13 旧版方法) |
“结果无法加载” / 多个指标行显示 data: null(非旧版实验) | 第 1.5 步 — 诊断快照(空值行) |
| “用户如何看待新的流程?” / 想了解实验的定性反馈 | F — 定性反馈 |
| “用户为什么更喜欢对照组?” / “他们不喜欢测试变体的哪些方面?” | F — 定性反馈 |
| 如果症状不明确,请先提出一个澄清问题,再选择诊断。大多数诊断对应不同的修复方法 | |
| ——不要猜测。 |
第 3 步 — 列出证据支持的所有诊断
在第 2 步中匹配症状并阅读相关参考文件后,请先列出所有适用的诊断,再建议采取行动。
分别指出同时存在的机制——即使其中一种更明显,也不要把它们合并成一个“等待”或“修复”建议。不同机制需要不同的修复方法:_系统性_偏差(例如不均匀拆分 + Exclude)不会因等待而消失;_统计性_模式(例如小样本方差)则会。把它们捆绑在一起,会导致用户照着建议操作后偏差依然存在。
只列出有途径通过项目状态验证的机制——配置(来自
experiment-get)、快照数据、活动日志或仓库源代码。基于配置推断的机制也要列出:80/20 拆分搭配默认的 multiple_variant_handling="exclude" 可以在 experiment-get 中看到,因此可以列出。不要指出没有来源支持的机制(例如快照显示变体比例正常,却仍声称存在 SRM)。
诊断类别
A — 偏差与倾斜
变体看起来不均衡、某个变体似乎有偏差、出现了应用内警告横幅,或用户出现在多个变体下。涵盖不均匀拆分与 Exclude 的交互、SRM、身份碎片化、bootstrap 与 /decide 不匹配,以及标记与实验状态不一致。
→ 参阅 references/bias-and-skew.md
B — 实验无数据 / 曝光量为 0 /“数据不足”
常见痛点。涵盖 SDK 调用(评估方法错误、identify() 时机、去重)、曝光捕获(自定义事件缺少变体属性、必需属性、广告拦截器)以及曝光条件匹配(测试账号筛选、资格判定顺序、事件早于曝光触发)。
→ 参阅 references/empty-experiment.md
C — 显著性与解读陷阱
显著性反复变化、A/A 测试显示显著性、贝叶斯与频率学派的混淆、多重比较、低流量方差、窥探数据/提前停止。包括旧版统计问题(在新的贝叶斯模块推出前,A/A 测试历史上经常过度触发),以及 2025 年 1 月胜率计算方法的变化(单个测试组与对照组比较,而非对照组与所有变体比较)。
→ 参阅 references/interpretation.md
D — 数字不匹配(PostHog 与用户的 SQL/原始计数)
实验页面会应用曝光范围、$multiple 排除、测试账号筛选和日期范围,而临时编写的 SQL 几乎从不会复现这些条件。涵盖漏斗归因(统计只计入第一步到最后一步)、细分(从曝光事件而非指标事件读取)、“收入总和”与按用户平均值的混淆,以及录制面板与统计数据不一致。
→ 参阅 references/numbers-vs-sql.md
E — 实验进行期间更改后的意外情况(包括生命周期与留存指标的特殊情况)
增加流量比例是安全的;降低流量比例需谨慎;更改变体拆分方式是不良做法;实验中途添加指标属于 p-hacking;发布变体可能以出乎意料的方式重写标记;重置会清除结果,但不会清除标记。还涵盖留存指标的特殊情况(要求首次事件发生在曝光之后的设计)、“成熟用户”筛选,以及长期与短期指标不一致。
→ 参阅 references/mid-run-changes.md
F — 定性反馈:变化带来的感受,而非数字变化幅度
A–E 组用于查找机制。F 则用于回答它们无法触及的问题:实验中的人如何看待这项变化。在用户完成实验流程时展示一份简短问卷,就能补上定性反馈这一部分——包含评分和可选评论,并可按变体查看;目前可通过 MCP 使用。
它适用于某些实验,但并非所有实验。判断标准是:用户能否在未看到两个版本的情况下描述这项变化。重新设计的流程、布局或过程适用;阈值或排名的微调则不适用,无论测得的影响有多大。机械性诊断仍未解决时,不要提供问卷——在故障的标记门控之上再加一份问卷,只会收集那些从未收到该功能的受众中的一半人的意见;提议新问卷前,还要检查现有或近期的问卷是否已覆盖该时间段。
创建问卷前,有两点需要注意:只向单个变体展示问卷,本身就是变体之间的一项差异;与标记关联的_运行中_问卷可能会生成曝光事件。
→ 参见 references/qualitative-feedback.md
第 4 步——根据实验状态调整建议
先展示诊断信息(第 3 步)。然后再提出建议,但建议范围必须符合实验当前状态所允许的内容。
- 草稿——配置变更没有风险;可以提出并应用建议。
- 运行中——每项变更都有取舍。提出建议前,先说明对运行中实验的影响(反模式?是否安全?用户是否可见?)。有关运行中变更的规则,请参见
configuring-experiment-rollout及其参考文件references/changing-distribution-after-launch.md。 - 已停止 / 已归档——实验和其功能标记共同代表此次运行的记录结果。建议范围仅限于:(a) 解读现有数据,(b) 下一次实验该如何做,或 (c) 解释发生了什么。
对于已停止或已归档的实验,不要主动提出撤销状态变更(ship-variant 标记重写、手动编辑标记、重置、归档)。如果用户问“X 为什么会发生?”,就解释 X,不要附带“这是撤销方法”的结尾。这种做法预设了用户未表达的意图。诸如_“如果这不是你想要的,可以……”或“要我帮你撤销吗?”_这类有条件的提议也属于主动提出;只有用户明确提到撤销操作(“如何撤销?”、“我可以回滚 ship-variant 吗?”、“怎样恢复 50/50 分流?”)时,才应说明撤销方法。
术语要保持一致:变体之间的_分流_(split)不同于整体_投放_(rollout,即进入实验的总体百分比);默认曝光事件(resolved_exposure_event)不同于_自定义曝光事件_;排除 / _首次出现_选项控制的是多变量处理方式,而非曝光。
相关技能
configuring-experiment-analytics——修复诊断指出的曝光或指标配置问题configuring-experiment-rollout——分流变更反模式及安全的投放调整managing-experiment-lifecycle——当实验无法在原地挽救时,重置、结束或重启analyzing-experiment-session-replays——当数据没有问题,但你需要查看数据背后的行为时