2023年11月,上海一家在线教育公司发现课程页转化率从3.2%突然涨到3.9%,运营准备加大投放。我接手排查,用了3天定位到问题:统计SQL里分子用了“支付时间”,分母用了“页面曝光时间”,跨天订单被重复计算。修正后转化率回落到3.1%,避免了一次约40万元的错误投放预算。
第一个坑是时间口径。曝光日志按天分区,订单表按支付时间分区。一条23:58的曝光、次日00:05的支付,在按天join时会被算到第二天,导致分母少、分子多。修正方法是统一用“曝光ID”做关联,并在订单表里回填曝光时间。常见错误是直接用日期字段join,跨零点订单必然出错。
第二个坑是去重。课程页有“立即报名”和“咨询老师”两个按钮,都跳同一支付页。统计时两个按钮的点击各算一次,导致点击率虚高约35%。正确做法是用session_id+用户ID去重,同一会话内多次点击只算一次。我们统计了7天数据,去重前点击率18.7%,去重后13.8%,差距明显。
第三个坑是分母定义。产品经理要的“转化率”是“访问到支付”,运营要的是“点击到支付”,两者差了一个点击率。最初报表只写“转化率3.9%”,两个团队各自理解,开会吵了半小时。后来在报表里强制拆成三级:访问→点击(12.4%)、点击→支付(25.1%)、访问→支付(3.1%),并标注每个指标的口径说明。
第四个坑是异常值。有一次统计“人均学习时长”,平均值被几个挂机用户拉到每天9.6小时。检查发现有个用户连续7天、每天24小时在线,是测试账号。处理方式是先剔除单日时长超过16小时的记录,再算中位数。剔除前均值9.6小时、中位数2.1小时;剔除后均值2.4小时、中位数2.0小时,结论完全不同。
第五个坑是样本量。A/B测试新页面,前3天转化率从3.1%涨到4.2%,团队准备全量。我查了样本量:每天访问约800人,3天共2400人,按基线3.1%、最小可检测提升0.5%计算,至少需要每组1.2万人。继续跑到第14天,两组转化率分别是3.15%和3.22%,差异不显著。常见错误是看到前几天数字好就下结论。
排查流程可以固定为5步:1)确认指标定义和分子分母;2)检查join键和时间窗口;3)做去重和异常值剔除;4)对比前后两期同口径数据;5)用最小样本量公式验证。这次排查中,第2步就发现了问题,但第3步又发现测试账号,前后花了3天。
给团队的统计规范写了3条:所有报表必须标注“分子/分母/时间窗口”;跨天指标统一用曝光ID关联;A/B测试上线前先算最小样本量。执行两个月后,口径类争议从每周约4次降到1次以下。数据统计的实用原则是:宁可指标少,也要口径清。