目录
✅1) 把“成熟度”量化为 RMS(Route Maturity Score)
2.2 分层+簇随机(Stratified Cluster RCT)
一、数据验证
① 数据产出链路是否正常
✅ 数据产出链路定义:
数据从“用户行为产生”到“分析平台可用”的全流程是否通畅、未出错。包括从前端埋点 → 数据采集 → 数据传输 → 数据落库/加工 → 分析口径等各个环节。
✅ 常见检查点:
| 环节 | 检查内容 | 举例说明 |
| 前端埋点 | 埋点是否被误删/覆盖/版本回退 | 某次APP更新把“下单按钮点击”埋点移除了 |
| 数据采集 | 日志是否漏采、格式是否异常 | 某渠道日志中字段为空或丢失一半 |
| 传输调度 | 数据同步是否成功、是否延迟 | ETL作业失败,某日数据未写入表中 |
| 数据落库 | 分区是否齐全、字段是否错乱 | 8月20日分区缺失,分析时被忽略 |
| 数据加工 | 中间表是否更新逻辑出错 | 新增字段没正确join,导致人数异常少 |
| 看板工具 | 看板计算逻辑是否被更改 | BI看板中漏加了渠道过滤条件 |
✅ 具体怎么查?
1. 用历史数据对比:同口径、同周期、去年同期
2. 与原始日志或中间表进行抽查验证
3.看平台监控日志是否有同步失败或空值率升高
4.检查是否有ETL代码发布/调度中断
② 埋点/口径是否发生变化
✅ 定义:
你看到的指标异常,是否是因为埋点逻辑变了或统计规则被改了,而非真实业务变化。
✅ 常见口径变动情况:
| 类别 | 典型变动 | 举例 |
| 埋点变更 | 埋点字段更名、事件ID变更、参数位置改变 | 原来是event_type="click_buy" 改成了 "click_submit" |
| 字段逻辑变化 | 原来用device_id,现在用user_id | 用户量骤减,因为统计对象变化了 |
| 维度范围调整 | 多了/少了某个渠道 | 报表中之前没区分海外用户,现在单独拆了 |
| 过滤条件变化 | 增加了某种行为过滤 | 活跃用户定义中新增了“必须浏览商品页” |
| 周期或分组口径变化 | 日/周/月维度不同 | 使用周均用户而非日活,对比不一致 |
| 指标命名歧义 | 两个报表中“下单人数”定义不同 | 一个统计加购也算,一个只算支付成功 |
✅ 具体怎么查?
1. 查近期的埋点更新文档 / JIRA提测单
2. 对比埋点平台的版本控制记录(如神策、GIO)
3. 查看SQL代码或指标计算口径(有无改动)
4. 向研发/埋点同事确认是否上线了新的埋点包
5. 和之前的埋点数据做全量对比(字段缺失、数据量变化)
二、埋点设计(数据与实验的地基)
✅ 定义
为“哪些行为、何时触发、记录哪些属性、如何命名/ 标识/ 存储”制定统一规范的过程。
✅ 关键要素
事件定义、触发时机、参数字段(商品ID/渠道/页面/用户属性等)、字段类型与必填、命名规范、ID体系(user_id/device_id)、采集方式(手动/可视化/全埋点)。
✅ 在A/B实验中的要求
行为节点要齐全(曝光/点击/加购/下单/支付…)
每条数据都需携带 experiment_id / group 等实验标识,可溯源到用户与时间
保证路径/漏斗的完整性与一致口径,否则无法对比效果
✅ 常见误区
后补埋点、字段命名混乱、版本变更未同步、只埋事件不埋属性、过度埋点影响性能。
三、数据可靠性判断
产品点击率从10%提升至13%,这个数据可靠吗?
✅1)先校准问题与口径
-
“提升3%”的定义:是 3 个百分点(pp) 还是相对 3%?(pp 对应 Δ=0.03;相对 3% 对应 Δ=0.03×p₀)
-
指标与分母:CTR=点击/曝光?以用户去重还是以曝光为单位?是否排除异常曝光/机器人?
-
埋点与归因:按钮曝光事件与点击事件是否同一会话、无丢数/去重错误;版本标识写入是否稳定;跨端/跨天合并规则一致。
-
实验设计:样本占比是否匹配(SRM 检查)即是否随机 50/50 分流、是否覆盖完整周内季节性、是否存在并发实验干扰。
-
护栏指标:比如跳出率、加载耗时、错误率、转化漏斗后续步骤等,不得显著变差。
✅2)确认统计检验流程有无问题(比率的双尾 Z 检验)
-
原假设 H₀:p₁=p₀; 备择 H₁:p₁≠p₀(通常双尾;若上线只关心“变好”,可单尾,但需预先注册)。
-
固定 α=0.05(显著性),Power=0.8(检验功效),避免中途频繁窥视导致 I 类错误膨胀(若需监控过程,采用序贯检验/α 花费或贝叶斯序贯方案)。
-
通过 p 值/置信区间或贝叶斯后验区间判断是否“统计上有意义且业务上有价值”。
✅3)确认样本量大小有无问题
通过MDE、α、Power、基线转化率10%计算出实验所需样本量,与实际样本量进行对比,看是否达到最小样本量要求,判断结果增长的3%是否为随机波动。
使用常见近似公式(两样本比率):

常见基线下的样本量(每组):
| 基线CTR p₀ | 若提升 3 个百分点 | 若提升 相对 3% |
|---|---|---|
| 5% → 8% / 5%→5.15% | 1,059 | 336,102 |
| 10% → 13% / 10%→10.3% | 1,774 | 159,066 |
| 20% → 23% / 20%→20.6% | 2,943 | 70,548 |
可以看到:“相对 3%” 对应的绝对差值非常小,所需样本量会呈数量级增长。
把样本量换算成天数(50/50 分流):
天数 ≈ ![]()
例如:日均可分流曝光量=10,000,则
-
10%→13%:2×1,774 / 10,000≈0.35天(仍建议跑满**≥1 个自然周**);
-
10%→10.3%:2×159,066/10,000≈31.8≈31.8 天(约 4–5 周,且需关注季节性变动)。
✅4)判定可信 & 上线策略
-
可信条件(必须同时满足):
-
SRM(样本比例失衡检查)/ 埋点 / 并发实验检查通过;
-
样本量达标、试验覆盖完整周内周期;
-
统计显著(或后验高置信)且效应量达业务阈值;
-
护栏指标不退化,且不存在明显新鲜感/学习期副作用。
-
-
上线建议:先灰度放量(如 10%→30%→100%),期间持续用同口径监控核心/护栏指标,必要时做留存/后续转化复核,防止“点了却不买”的错配激励。
四、正交分流
✅1)简述
-
定义:
正交分流(Orthogonal Split)是指在 AB 实验中,当有多个实验同时运行时,用户被分配到不同实验的方式彼此独立、不相关。-
核心思想:各实验的分流维度相互正交(独立),保证一个用户在实验 A 中的分组情况不会影响他在实验 B 中的分组情况。
-
目的:避免实验之间相互干扰、混淆效应,保证每个实验的因果推断成立。
-
✅2)举例
场景:某短视频 App 同时想做两个实验:
-
实验 A:测试“新首页推荐算法” vs “旧算法”;
-
实验 B:测试“新视频播放按钮样式” vs “旧样式”。
非正交分流(错误方式)
-
第一步:先对 100 万用户做实验 A 的分流:
-
50 万用户 → A1:旧算法
-
50 万用户 → A2:新算法
-
-
第二步:在 A1、A2 内部分别再做实验 B:
-
在 A1 内:25 万用户 → B1 圆角按钮,25 万用户 → B2 方形按钮
-
在 A2 内:25 万用户 → B1 圆角按钮,25 万用户 → B2 方形按钮
-
👉 结果:
-
每个用户既在 A 实验中,也在 B 实验中,但 B 的分组依赖于 A 的分组。
-
如果新算法刚好让用户更喜欢点击视频,那么按钮实验的点击率也会被算法效应“掺杂”,很难说清到底是按钮的影响还是算法的影响。
正交分流(正确方式)
方法一:哈希空间划分
-
对用户 ID 做哈希,得到一个 0–99 的数值。
-
0–49 → 用于实验 A 分流(共 50 万用户):
-
0–24 → A1:旧算法
-
25–49 → A2:新算法
-
-
50–99 → 用于实验 B 分流(共 50 万用户):
-
50–74 → B1:圆角按钮
-
75–99 → B2:方形按钮
-
👉 结果:
-
用户只会进入 A 或 B 中的一个实验,不会同时进入两个。
-
推荐算法实验与按钮实验完全独立,不存在互相干扰。
方法二:多维随机化(真正的“正交”)
-
给用户两个独立哈希值:
-
哈希 1 → 用于实验 A 的分组(新/旧算法各 50%)
-
哈希 2 → 用于实验 B 的分组(圆角/方形按钮各 50%)
-
-
A 与 B 的分流互不相关,真正的“正交”。
-
用户可能同时落入 A 和 B(比如某用户既用新算法,又看到圆角按钮),但因为两次随机化独立,统计上不会混淆,可以通过 **多重实验分析框架(如因子实验/多元回归)**拆分效应。
| 分流方式 | 用户关系 | 风险 | 适用场景 |
|---|---|---|---|
| 非正交分流 | B 嵌套在 A 内 | 干扰,效应难区分 | 不推荐,除非 B 本身就是 A 的子实验(例如“只在新算法下试不同参数”) |
| 正交分流-互斥 | 用户只进一个实验 | 结果干净,但消耗流量(每个实验样本量减少) | 多个实验并行、互不依赖时 |
| 正交分流-独立随机化 | 用户可能同时在多个实验,但分流独立 | 可通过统计方法分解效应 | 大规模实验平台(Google、字节、Meta 等)常用 |
✅3)总结
正交分流的关键是 实验分流互不依赖。
要么通过“用户只进一个实验”保证完全隔离,要么通过“多维独立随机化”保证数学意义上的独立。
五、不同地点的路线成熟度不同,怎么优化实验
这个实验想要验证的就是——新功能是否在保证安全的前提下,真正带来了业务核心指标的提升,并且在哪些成熟度层次的区域最有效。
我们把“路线成熟度不一”的情况,做成一整套从设计→分流→统计→放量→复盘的可落地方案,并给出公式、SQL/伪代码、数值例子。下面内容你可以直接拿去和算法/运营/数据同学对齐。
✅1) 把“成熟度”量化为 RMS(Route Maturity Score)
目的:把“哪里成熟、哪里稚嫩”从主观判断变成可计算的协变量/分层锚点,用于随机化和分析降噪。
候选特征(按路线 OD 或运营小区/商圈聚合)
-
供需规模:近 28 天日均单量、活跃司机数、订单/司机密度(每 km²)。
-
稳定性:ETA 误差方差、实际车速方差、时段性波动(分时 CV)。
-
可重复性:热门 OD 占比、重复路线比例、司机复访率。
-
质量/风险:取消率、改派率、爽约率、投诉率。
-
数据质量:轨迹完整率、定位丢失率。
-
外界扰动:施工/限行标记、天气(雨/暴雨)、节假日冲击。
RMS 计算两种方式
-
启发式打分:每个特征标准化 z-score 后给权重(w),RMS = Σ wᵢ·zᵢ;按分位数切成 3–5 档(高/中/低)。
-
学习式权重:用“目标稳定度”(如 ETA 误差<阈值、成单率>阈值)做标签,跑 logistic 回归/GBDT 得到特征重要度,再映射为分数。
SQL 示例(启发式)
-- 以 geohash6 网格/运营小区为 unit
WITH base AS (
SELECT unit_id,
AVG(orders) AS avg_orders,
AVG(active_drivers) AS avg_drivers,
VARIANCE(eta_error) AS var_eta,
VARIANCE(speed) AS var_speed,
AVG(cancel_rate) AS cancel_rate,
AVG(repeat_od_ratio) AS repeat_od_ratio
FROM daily_unit_metrics
WHERE dt BETWEEN DATE_SUB(CURRENT_DATE(), 28) AND DATE_SUB(CURRENT_DATE(), 1)
GROUP BY unit_id
),
z AS (
SELECT unit_id,
(avg_orders - AVG(avg_orders) OVER())/NULLIF(STDDEV(avg_orders) OVER(),0) AS z_orders,
(avg_drivers- AVG(avg_drivers)OVER())/NULLIF(STDDEV(avg_drivers)OVER(),0) AS z_drivers,
(var_eta - AVG(var_eta) OVER())/NULLIF(STDDEV(var_eta) OVER(),0) AS z_var_eta,
(var_speed - AVG(var_speed) OVER())/NULLIF(STDDEV(var_speed) OVER(),0) AS z_var_speed,
(cancel_rate- AVG(cancel_rate)OVER())/NULLIF(STDDEV(cancel_rate)OVER(),0) AS z_cancel,
(repeat_od_ratio-AVG(repeat_od_ratio)OVER())/NULLIF(STDDEV(repeat_od_ratio)OVER(),0) AS z_repeat
FROM base
)
SELECT unit_id,
-- 高单量/司机/高重复性 ↑,低方差/低取消率 ↑
( 0.30*z_orders + 0.20*z_drivers - 0.20*z_var_eta - 0.10*z_var_speed
- 0.10*z_cancel + 0.30*z_repeat ) AS rms_score,
NTILE(4) OVER (ORDER BY
( 0.30*z_orders + 0.20*z_drivers - 0.20*z_var_eta - 0.10*z_var_speed
- 0.10*z_cancel + 0.30*z_repeat )) AS rms_quartile
FROM z;
✅2) 试验单元划分与“防外溢”的随机化
即时配送是强干扰网络(司机跨区、分单/定价外溢),要尽量让处理/对照互不影响。
2.1 形成“可实验簇”(cluster)
-
单元:geohash6/运营小区 → 合并成“簇”(同城若干簇)。
-
原则:尽量切断高跨界流
-
高跨界流:司机在某两个区域之间的流动次数多。
-
构建“司机跨单”图:节点=小区,边权=过去 14 天司机在两小区接单的次数。
-
用图划分(简化可用“把边权小的边切断”的贪心法)把城市分成 8–20 个簇,使簇间跨界边权最小。
-
边权:我们可以把城市划成很多小单元。如果一个司机在单元 A 和 单元 B 都接过单,就在 A、B 之间画一条“边”。这条边的权重(边权) = 有多少司机在 A、B 之间交叉过。
-
比如 200 个司机在天河和越秀都接单 → 边权 = 200。
-
只有 5 个司机在天河和番禺都接单 → 边权 = 5。
-
-
伪代码(贪心)
# 输入:邻接表 edges[(u,v)] = cross_driver_count
# 目标:最大化簇内边权占比
clusters = []
while unassigned_units:
seed = pick_unit_with_high_internal_degree()
cluster = grow(seed, add_neighbor_if increases_internal_ratio())
clusters.append(cluster)
return clusters
2.2 分层+簇随机(Stratified Cluster RCT)
-
分层键:城市 × RMS 档(高/中/低)×(可选)时段类型(峰/平)。
-
规则:每个分层里对簇做 50/50 分流;重复随机化直至协变量平衡(rerandomization,见下)。
-
协变量平衡:在簇随机 AB 里,不是随便抽一次就用,而是多次抽签,每次都检查组间基线特征差异,直到差异在可接受范围内,再锁定为实验分组。注意:针对的是所有簇的实验组VS所有簇的对照组。
-
协变量平衡阈值:处理/对照在基线成单率、取消率、司机密度、订单密度的标准化差异< 0.1。
协变量平衡检验(标准化差异)
-- 以簇为单位的基线
WITH base AS (... WHERE dt BETWEEN d-14 AND d-1 GROUP BY cluster_id),
diff AS (
SELECT
ABS(AVG(CASE WHEN treat=1 THEN conv_rate END) - AVG(CASE WHEN treat=0 THEN conv_rate END))
/ NULLIF(STDDEV(conv_rate), 0) AS sdiff_conv,
ABS(AVG(CASE WHEN treat=1 THEN cancel_rate END) - AVG(CASE WHEN treat=0 THEN cancel_rate END))
/ NULLIF(STDDEV(cancel_rate), 0) AS sdiff_cancel
FROM base b JOIN cluster_assignment a USING(cluster_id)
)
SELECT * FROM diff; -- 要求每项 < 0.1,否则重随机化
2.3 Switchback(时间片交替)
-
适用于核心 CBD等很难空间隔离的区域:以小时为时间片,随机决定 treatment/control。
-
洗脱期(washout):≥ 司机到达 90 分位(例如 20 分钟),避免上一个时间片的余波。
-
避免模式:不要固定“工作日治、周末控”,要随机/拉丁方分配,且控制星期、小时固定效应。
✅3) 功效与样本量(考虑簇内相关/ICC)

**簇内相关(ICC ρ)**会放大方差。簇随机对二项型指标(如成单率)的样本量近似:

-
m:每簇平均样本(订单或用户)
-
δ:期望可检出差异(MDE)
-
σˉ2≈p(1−p):基线方差
-
ρ:ICC(用历史簇间/簇内方差估)
数值例子(成单率)
-
基线 p=0.82,计划 MDE=+0.004(+0.4pp)、α=0.05、power 80%
-
估计 m=5,000单/簇/周,ICC ρ=0.02
-
则每臂需要簇数约:
-
计算量略(结果)→ 约 8–10 个簇/臂。
-
-
若 ρ 提升到 0.05,则需求簇数可能翻倍 → 优先降低 ρ(用更“紧”的簇划分/在模型中显式建模)。
✅4) 指标、护栏与 CUPED 降噪
核心指标(按实验目标选)
-
供需成交:成单率、订单完成率。
-
效率:司机响应时长、到达时长、总履约时长(TAT)、空驶里程。
-
经济:单位订单利润(含补贴/抽成/绕路成本)。
护栏:异常取消率、投诉率、系统 5xx、定位丢失、司机在线不稳定度。
CUPED(以簇/用户基线降方差)

-
x:上线前 14 天对应指标的基线;y:实验期指标。
-
先在 unit(簇/用户)级算 θ,再做组间比较。CUPED 一般能 10%–30% 降方差。
✅5) 分析模型(给出可直接复用的三种)
-
y = 业务核心指标本身(成单/履约时长/GMV…),实验后直接能观测到。
-
uplift(Treatment 效应) = 实验组均值 – 对照组均值,最简单直接。
-
为什么还要混合效应/层次贝叶斯?
-
为了修正簇间异质性、样本不均衡、小样本极端波动。
-
给出更稳健的总体 uplift 和分层效应估计。
-
uplift 可以直接通过观测均值算出来;但混合效应/层次贝叶斯相当于一个 “降噪 + 稳健” 的版本,尤其在多城市、多簇、样本量差异很大的实验里更靠谱。
-
-
简单均值差:广州 uplift=+0.9pp(2万单),佛山 uplift=+5pp(200单)。如果只看均值差:佛山好像很猛。
-
混合效应/层次贝叶斯:但混合效应/层次贝叶斯会“收缩”佛山的估计 → 可能给出 +1.5pp(更接近总体),因为样本太小,不足以支持 5pp。同时还能给你总体 uplift(比如 +1.0pp)+ 各城市稳健的分层 uplift
5.1 分层汇总 + 簇稳健标准误
-
先在每个「城市×RMS 层」算差异,再按样本权重合并。
-
计算按簇聚类的稳健标准误,避免虚高显著性。
5.2 差分中的差分(DiD,含固定效应)

-
c=城市, z=簇, t=时间(日/小时);γcz簇固定效应,λt时间固定效应;X 为天气/活动/峰平等协变量。
-
关注 β;可分 RMS 层跑或加交互项看异质性(HTE)。
5.3 混合效应/层次贝叶斯(强推)

-
随机项 u 给小样本簇/低成熟度“向总体收缩”,CI 更稳;还能输出各 RMS 层/城市的后验分布与 P(lift>0)。
✅6) 分流与埋点工程落地(关键字段)
-
曝光日志:
unit_id,cluster_id,city,rms_bucket,treat_flag,hash_key,switchback_block_id,washout_flag,feature_flag_version,dt,hh. -
订单日志:
order_id,pickup_unit_id,dropoff_unit_id,driver_id,accept_ts,arrive_ts,finish_ts,cancel_type,eta_pred,eta_error. -
司机画像:历史接单率、在线时长、热区偏好。
-
A/A 健康检查:先跑 3–7 天,检查 SRM(样本占比是否匹配)、指标均衡、方差假设。
SRM 检查(卡方)
SELECT treat_flag, COUNT(*) AS n
FROM cluster_exposure
WHERE dt BETWEEN d-7 AND d-1
GROUP BY treat_flag;
-- 用 n_treat vs n_control 做卡方;p<0.01 视为SRM报警
✅7) 放量与决策闸值(示例)
阶梯:高成熟度层 → 中 → 低;每 7 天评估一次。
进入下一档条件(例)
-
成单率 uplift 的 95%CI 下界 > +0.4pp;
-
履约时长(TAT)95%CI 上界 < -1.8%;
-
护栏:异常取消率 CI 上界 < +0.2pp、投诉不过线;
-
SRM、埋点、系统稳定无告警。
回退条件:任一护栏越界或 ITS/DiD 出现显著负效应 → 回到上一档或关停 feature flag。
期望收益(EV)助决策

-
报告 EV 下界(CI 5%分位) 是否为正;为正则倾向放量。
✅8) “新分单/路由算法”数值化示例
-
城市:广/深/沪/成;每城划 12 个簇,总 48 簇。
-
RMS:按四分位切成 4 档,每城每档各 3 突。
-
随机化:城市×RMS 档内 50/50。
-
功效:预估 m=5k单/簇/周,ρ=0.02,MDE 0.4pp → 需 ~9 簇/臂;当前 24 簇/臂,功效>90%。
-
第 1 周结果(高成熟度层):
-
成单率 +0.62pp(95%CI [+0.18, +1.06])
-
TAT -3.0%(95%CI [-4.1, -1.9])(从司机接单 → 完成送达 的全流程时长)
-
护栏正常 → 放量至中成熟度层。
-
-
低成熟度层:成单率 +0.15pp(CI [-0.35, +0.65])不确定 → 延后放量,同时对低成熟度加强地图纠偏/候选路集扩充再试。
✅9) 你能直接复用的“模板片段”
CUPED 计算 θ(以簇为单位)
WITH hist AS (... 基线 x ...),
exp AS (... 实验期 y ...),
joined AS (
SELECT e.cluster_id, e.y, h.x
FROM exp e JOIN hist h USING(cluster_id)
),
stats AS (
SELECT COVAR_POP(y,x) AS cov_yx, VAR_POP(x) AS var_x FROM joined
)
SELECT cov_yx/NULLIF(var_x,0) AS theta FROM stats;
DiD 回归(示意,任意回归引擎实现)
y ~ treat_flag + C(city) + C(cluster_id) + C(date) + covariates
# 标准误:对 cluster_id 聚类;或使用 Newey-West(时间相关)
Switchback 洗脱校验
-- 丢弃 washout 窗口内的样本
SELECT * FROM orders
WHERE ts NOT BETWEEN switch_start AND switch_start + INTERVAL '20' MINUTE;
协变量平衡的“重随机化”流程(伪代码)
for attempt in range(2000):
assign = random_50_50_within_strata()
sdiff = compute_standardized_diffs(assign, covariates)
if all(sdiff < 0.1):
break
save(assign)
✅10) 常见坑位 & 对策
-
网络干扰(司机跨区、价格/分单外溢):用图划分+簇随机+互斥流量池+CBD 用 switchback。
-
ICC 过大:簇太松或异质过强 → 更细簇+在模型里显式随机项;或改用 时间片 switchback。
-
SRM/埋点变更:先做 A/A,上线期间冻结口径;用自动化 SRM 与埋点巡检。
-
季节/活动冲击:回归里放入时间固定效应与活动/天气协变量,或用 合成控制做单城评估。
-
短期“新鲜感”:用稳态窗口(剔除首 X 天)与滚动均值判断是否进入稳态再决策。
✅小结(一句话)
对货拉拉这种强空间异质+强网络干扰的场景,核心是:先量化成熟度(RMS)→ 分层+簇随机/时间片 switchback → 用 CUPED + DiD/混合效应稳住方差 → 以护栏/EV 做节奏化放量。
这样既能在“成熟”区域快速吃到红利,又不被“低成熟度”区域的噪声拖死功效。
六、落地版本
👍 我把内容再落地化,用“货拉拉上新功能(比如新分单/路由算法)”为例,结合“不同城市/区域成熟度不同”一步步展开,让你能直接想象在业务里怎么操作。
这个实验想要验证的就是——新功能是否在保证安全的前提下,真正带来了业务核心指标的提升,并且在哪些成熟度层次的区域最有效。
✅1. 为什么要考虑“成熟度”
-
广州 CBD:订单量大、路线重复多、司机很多 → 数据稳定,实验效果容易收敛。
-
三线城市郊区:单量少、路线随机性强、司机流动性大 → 波动大,实验很可能不显著。
👉 如果你“一刀切随机分流”,低成熟度区域的波动会掩盖高成熟度区域的真实效果,实验结论要么不显著,要么误判。
✅2. 第一步:量化“成熟度”
在每个城市的运营区(比如行政区/商圈)计算近 30 天数据:
-
单量(日均订单数)
-
司机活跃数
-
成单率稳定性(方差)
-
路线重复度(热门 OD 比例)
-
取消率
例子:
| 城市 | 区域 | 日均单量 | 成单率波动 | 取消率 | 成熟度评分 | 档位 |
|---|---|---|---|---|---|---|
| 广州 | 天河区 | 5000 | 低 | 3% | 高 | 高 |
| 广州 | 花都区 | 500 | 高 | 8% | 低 | 低 |
| 佛山 | 南海区 | 2000 | 中 | 5% | 中 | 中 |
👉 给每个区域打分,分成 高/中/低三档。
✅3. 第二步:如何分流
方法 A:簇随机(推荐)
-
把城市分成若干“簇”(区域 × 成熟度档)。
-
在每个簇里 50% 区域用新算法,50% 区域继续旧算法。
-
例如:广州高成熟度簇(天河区、越秀区、海珠区),随机一半用新算法,一半做对照。
-
可根据 ICC 和 其他值 计算出簇的数量(见上文),避免簇内样本差异过小
方法 B:时间片交替(switchback)
-
对核心城区,难以切割司机池,可以用时间做分流。
-
比如:周一、周三、周五 → 新算法;周二、周四、周六 → 旧算法。
-
这样避免司机跨区抢单造成干扰。
✅4. 第三步:怎么分析
核心逻辑:
-
在每个成熟度层内部,分别算新旧算法的差异。
-
然后加权汇总,避免低成熟度噪声掩盖整体结论。
例子(成单率 uplift):
| 成熟度层 | uplift | 95%CI | 结论 |
|---|---|---|---|
| 高 | +0.8pp | [+0.4, +1.2] | 显著提升 ✅ |
| 中 | +0.3pp | [-0.1, +0.7] | 不确定 ⚠️ |
| 低 | -0.2pp | [-0.8, +0.4] | 无效果 ❌ |
👉 结论:功能在高成熟度区域有效,可以先放量;中低成熟度需要优化再试。
如某簇样本量过少,可通过混合效应/层次贝叶斯更稳健地估计 uplift(Treatment 的效应)(上文)
✅5. 第四步:放量节奏
-
阶段 1:先在高成熟度区域灰度(20% → 50% → 100%),验证指标。
-
阶段 2:扩展到中成熟度区域,看效果是否一致。
-
阶段 3:最后才到低成熟度区域,同时针对性优化(如改 ETA 算法、增强地图数据)。
✅6. 第五步:护栏指标
上线过程中必须盯紧:
-
异常取消率
-
投诉率
-
系统延迟
-
司机在线时长是否异常减少
例子: 如果高成熟度 uplift 明显,但投诉率上升 > 0.5pp,就要暂停扩量。
✅7. 完整业务话术
你在复盘时可以说:
“我们把全国城市按日均单量、成单率波动和取消率分成高/中/低成熟度。先在高成熟度区域跑实验,新算法成单率提升 +0.8pp 且置信区间完全为正,同时护栏指标正常,于是逐步扩量到中成熟度区域。低成熟度区域效果不稳定,计划迭代功能后再试。”
✅ 总结:
-
先定义成熟度 → 分层分流 → 分层分析 → 阶梯放量 → 监控护栏。
-
这样既能在成熟区域快速吃到收益,又能降低低成熟度区域带来的噪声和风险。

1355

被折叠的 条评论
为什么被折叠?



