mcpField
D
diagnosing-experiment-results

diagnosing-experiment-results

github.com/posthog数据与数据库96153 次安装今天更新
代码仓库

关于 diagnosing-experiment-results

用于诊断 PostHog 实验结果偏差、为空、不一致或难以解读的技能。它根据症状,结合实验配置、诊断快照和参考资料进行核查。

主要功能

  1. 01将症状对应到诊断类别
  2. 02检查实验配置与诊断快照
  3. 03识别偏差和曝光问题
  4. 04对比结果与 SQL 计数
  5. 05评估运行中变更和反馈

适用场景

  1. 01调查实验分组失衡或结果为空
  2. 02解释显著性变化或指标差异
  3. 03将 PostHog 结果与原始事件数核对
  4. 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.md
diagnostic-snapshot.md
empty-experiment.md
interpretation.md
mid-run-changes.md
numbers-vs-sql.md
qualitative-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 — 如果未设置,则默认为 true
  • feature_flag.active、状态(draft / running / paused / exposure_frozen / stopped)、start_date、end_date
  • feature_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——当数据没有问题,但你需要查看数据背后的行为时

评论

支持 Markdown