原始排序分常写成 点击率×转化率×价格权重,三个数直接相乘。问题出在量纲:点击率在 0.02 到 0.2 之间,转化率在 0.01 到 0.1 之间,价格权重是 0.5 到 2.0 的系数,相乘后分数跨度 200 倍,一个爆款能把整个列表压死。
修正步骤 1:对每个因子取对数再标准化。以 10 万条商品数据为例,点击率取自然对数后均值 -3.1、标准差 0.8,标准化后落在 -3 到 3 之间。这样乘法变成加法,各因子权重可解释。
修正步骤 2:做位置偏差修正。同一商品在第 1 屏的 CTR 是第 5 屏的 4 到 6 倍,直接用原始 CTR 训练会把“位置好”误判成“商品好”。具体做法是用 7 天日志估计每个位置的点击率比值,把曝光按位置加权,权重取位置 CTR 的倒数并归一化。
对比两组修正前后结果:某食品类目 5000 个商品,修正前排序前 10 名里有 7 个是长期占据首屏的老品;修正后前 10 名换掉 4 个,新品曝光占比从 9% 升到 21%,整体 CTR 持平但收藏率涨了 11%。
案例:某数码配件 8 月在成都灰度,排序分里“价格权重”用线性函数,价格 19 到 39 元的商品得分最高,结果列表被低价小配件占满,客单价从 86 元掉到 61 元。改成对数价格权重并把权重从 1.0 降到 0.6,客单价回到 79 元,CTR 只跌 0.1 个百分点。
概率上,乘法模型隐含“各因子独立”的假设,实际点击率和转化率相关,相关系数约 0.25 到 0.4。强相关下直接相乘会重复计算同一信息。替代方案是逻辑回归或梯度提升树,把因子作为特征输入,让模型自己学交互,离线评估时对比两种打分方式的 NDCG。
数据统计要做的最后一步是单调性检查。取 1000 个商品按排序分分成 10 档,每档 100 个,看实际 CTR 是否随档位单调上升。若第 7 档 CTR 反而低于第 6 档,说明分数里有噪声因子,通常是样本量不足的商品(少于 50 次曝光)贡献的。处理办法:曝光不足的商品用类目均值兜底,不参与精细排序。
模型评估要用业务指标闭环。排序分调整后,除 CTR 外看三个数:人均浏览商品数、加购率、7 日复购率。设定通过线——CTR 不跌、加购率涨 ≥3%、复购率不跌,三条同时满足才保留新打分公式,否则回滚并记录原因。