Title: 常见问题 Locale: zh URL: https://sensorswave.com/docs/experiments/faq/ Description: A/B 实验常见问题解答 本文汇总了 A/B 实验相关的常见问题和解答,涵盖实验设计、技术集成、数据分析、与功能开关的关系等方面。 ## 实验设计问题 ### Q:实验需要跑多久? **A**:至少满足以下条件: - **最短周期**:至少 1 周(包含工作日和周末) - **样本量**:每组至少 1000 个用户(推荐 5000+) - **统计显著性**:p < 0.05 **实际周期取决于**: - 流量规模:大流量 1-2 周,中流量 2-4 周,小流量 4-8 周 - 转化率:转化率越低,需要的样本量越大 - MDE:期望检测的最小提升幅度越小,需要的样本量越大 **不要过早结束**: - 即使实验组领先,也要等待达到预定样本量 - 短期波动不代表长期效果 ### Q:如何选择主要指标? **A**:主要指标应该: 1. **与业务目标直接相关**: - 电商:支付转化率、总收入 - 内容平台:内容消费时长、用户留存率 - SaaS:付费转化率、用户活跃度 2. **可以准确测量**: - 有明确的事件定义 - SDK 或后端能够准确追踪 3. **对变化敏感**: - 能够反映实验的影响 - 不会受太多外部因素干扰 **避免虚荣指标**: - 页面浏览量(PV):用户可能只是随便点击,没有真正的参与 - 注册用户数:如果注册后没有活跃,对业务价值有限 ### Q:多变体实验如何分配流量? **A**:多变体实验的流量分配策略: **均匀分配**(推荐): ``` 3 变体实验: - 对照组:34% - 实验组 A:33% - 实验组 B:33% 4 变体实验: - 对照组:25% - 实验组 A:25% - 实验组 B:25% - 实验组 C:25% ``` **对照组占多数**(保守策略): ``` 3 变体实验: - 对照组:50% - 实验组 A:25% - 实验组 B:25% ``` **注意事项**: - 变体数量不宜过多(建议 ≤ 4 个) - 每个变体至少分配 10% 流量 - 多变体实验需要更长周期(样本量分散) --- ## 技术集成问题 ### Q:如何确保曝光日志正常上报? **A**:按照以下步骤检查: **1. 检查 SDK 配置**: JavaScript SDK: ```javascript SensorsWave.init('YOUR_SOURCE_TOKEN', { enableAB: true // 必须设置为 true }); ``` Go SDK: ```go cfg := sensorswave.Config{ AB: &sensorswave.ABConfig{ ProjectSecret: "your-project-secret", // 必须配置 MetaEndpoint: "https://your-ab-endpoint.com", }, } ``` **2. 检查实验状态**: - 实验必须是"运行中"状态 - 草稿状态不会记录曝光日志 **3. 检查代码集成**: ```javascript // 正确:调用 getExperiment const experiment = await SensorsWave.getExperiment('experiment_key'); // SDK 会自动记录 $ABImpress 事件 ``` **4. 验证曝光数据**: 在事件分析中查询: ``` 事件:$ABImpress 筛选条件:experiment_key = 'your_experiment_key' 时间范围:最近 1 小时 ``` ### Q:实验变量获取失败怎么办? **A**:实验变量获取失败的常见原因和解决方案: **原因 1:网络错误** ```javascript try { const experiment = await SensorsWave.getExperiment('experiment_key'); const value = experiment.get('variable_name', defaultValue); } catch (error) { console.error('获取实验失败:', error); // 使用默认值,确保功能正常 const value = defaultValue; } ``` **原因 2:实验不存在或未发布** SDK 会返回默认值: ```javascript const experiment = await SensorsWave.getExperiment('non_existent_experiment'); const value = experiment.get('variable_name', 'default'); // 返回 'default' ``` **原因 3:用户不满足分流条件** 如果用户不在实验的定向受众中,SDK 返回默认值。 **最佳实践**: - 始终提供默认值 - 添加异常处理 - 记录错误日志,便于排查问题 ### Q:实验可以动态修改配置吗? **A**:可以但不推荐。 **修改配置的影响**: - 破坏实验稳定性 - 影响结果可靠性 - 数据难以分析 **如果必须修改**: 1. 停止当前实验 2. 创建新实验(新的 experiment_key) 3. 应用新配置 4. 重新收集数据 **可以修改的内容**(不影响实验): - 显示名称 - 描述 - 实验指标的监控配置 **不应该修改的内容**: - 流量分配比例 - 变量值 - 分流条件 ### Q:同一用户参与多个实验会冲突吗? **A**:不会,不同实验的分流是独立的。 **独立分流**: ``` 用户 A 在实验 1(按钮颜色)中:分配到对照组(蓝色) 用户 A 在实验 2(推荐算法)中:分配到实验组(深度学习) ``` **注意事项**: - 确保实验之间不互相影响(功能冲突) - 流量规划合理,避免流量不足 --- ## 数据分析问题 ### Q:如何判断实验结果是否显著? **A**:使用统计显著性检验(p-value): **判断标准**: - **p < 0.05**:结果具有统计显著性,不太可能是偶然产生的 - **p ≥ 0.05**:结果可能是偶然产生的,需要更多数据或放弃假设 **示例**: | 变体 | 转化率 | 提升幅度 | p-value | 结论 | |------|--------|---------|---------|------| | 对照组 | 24.0% | - | - | - | | 实验组 | 28.0% | +16.7% | 0.002 | 显著,成功 | **计算 p-value**: - 使用 Sensors Wave 报告中的统计检验结果 ### Q:为什么实验组和对照组指标都下降了? **A**:可能的原因: **1. 外部因素影响**: - 节假日影响(如春节期间整体流量下降) - 营销活动结束(活动期间转化率高,活动结束后回落) - 竞争对手促销(用户被分流) **解决方案**: - 延长实验周期,覆盖完整周期 - 对比实验组和对照组的相对差异,而非绝对值 - 排除外部因素影响的时段 **2. 技术问题**: - 实验代码有 Bug,影响了所有用户 - 服务器性能下降,页面加载变慢 **解决方案**: - 检查技术指标(错误率、响应时间) - 暂停实验,排查问题 **3. 新奇效应消失**: - 实验初期,用户对新功能好奇,指标提升 - 一段时间后,新奇感消失,指标回落 **解决方案**: - 延长实验周期,观察长期效果 - 关注留存率等长期指标 ### Q:实验结果不稳定怎么办? **A**:实验结果不稳定的可能原因和解决方案: **原因 1:样本量不足** ``` 问题:每天查看数据,结果大幅波动 - 第 1 天:实验组领先 20% - 第 2 天:对照组领先 15% - 第 3 天:实验组领先 5% 解决方案: - 等待达到预定样本量 - 不要每天查看数据(容易被短期波动误导) - 设置实验最短周期(至少 1 周) ``` **原因 2:外部因素干扰** ``` 问题:工作日和周末差异大 - 工作日:转化率 25% - 周末:转化率 15% 解决方案: - 运行至少一个完整的周(包含工作日和周末) - 排除节假日和营销活动的影响 ``` **原因 3:分群不均衡** ``` 问题:对照组和实验组的用户特征差异大 - 对照组:新用户占比 60% - 实验组:新用户占比 40% 解决方案: - 检查分流算法是否正确 - 样本量足够大时,分群会趋于均衡 ``` --- ## 与功能开关的关系 ### Q:什么时候用功能开关,什么时候用 A/B 实验? **A**:根据目的选择: **功能开关**: - **目的**:控制功能上线,降低风险 - **使用时机**:功能开发完成,准备上线 - **关注指标**:技术指标(错误率、响应时间、崩溃率) - **典型场景**:新功能灰度发布、功能降级、权限控制 **A/B 实验**: - **目的**:验证功能效果,优化决策 - **使用时机**:功能稳定后,验证效果 - **关注指标**:业务指标(转化率、留存率、收入) - **典型场景**:方案对比、优化验证、效果评估 **推荐配合使用**: 1. 先用功能开关验证技术稳定性(1-2 周) 2. 再用 A/B 实验验证业务效果(2-4 周) 3. 全量发布获胜方案 详见 [功能开关与 A/B 测试](../feature-gates/gates-vs-experiments.mdx)。 ### Q:功能开关和 A/B 实验可以一起用吗? **A**:可以,而且推荐配合使用。 **配合方式**: ```javascript // 先用功能开关筛选 VIP 用户 const isVIP = await SensorsWave.checkFeatureGate('vip_users_only'); if (isVIP) { // 在 VIP 用户中进行 A/B 实验 const experiment = await SensorsWave.getExperiment('vip_pricing_test'); const price = experiment.get('price', 299); renderCheckoutPage(price); } else { // 非 VIP 用户使用标准定价 renderCheckoutPage(299); } ``` **优点**: - 功能开关用于控制实验范围 - A/B 实验用于在特定用户群体中验证效果 - 两者互补,功能更强大 ### Q:如何从功能开关过渡到 A/B 实验? **A**:分阶段过渡: **阶段 1:功能开关灰度(1-2 周)** ```javascript const isNewFeatureEnabled = await SensorsWave.checkFeatureGate('new_feature_enabled'); if (isNewFeatureEnabled) { renderNewFeature(); // 新功能 } else { renderOldFeature(); // 旧功能 } ``` **灰度计划**: - 1%:内部测试 - 10%:小范围验证 - 50%:大范围测试 - 100%:全量开启 **验证指标**:错误率、响应时间、崩溃率 **阶段 2:A/B 实验验证(2-4 周)** 功能开关全量后,创建 A/B 实验: ```javascript // 功能开关保持 100% 开启 const isNewFeatureEnabled = await SensorsWave.checkFeatureGate('new_feature_enabled'); if (!isNewFeatureEnabled) { renderOldFeature(); return; } // 在新功能中进行 A/B 实验 const experiment = await SensorsWave.getExperiment('new_feature_optimization'); const variant = experiment.get('variant', 'v1'); if (variant === 'v2') { renderNewFeatureV2(); // 优化版本 } else { renderNewFeatureV1(); // 基础版本 } ``` **验证指标**:转化率、留存率、收入 **阶段 3:清理代码** 实验结束后,应用获胜方案,清理功能开关和实验代码。 --- ## 相关文档 - [A/B 实验概述](overview.mdx):了解 A/B 实验的核心能力 - [快速开始](quick-start.mdx):20 分钟完成第一个实验 - [最佳实践](best-practices.mdx):掌握实验设计和执行的最佳实践 --- **最后更新时间**:2026 年 1 月 29 日