一、离线验证

所谓离线验证就是通过日志系统获得用户行为数据,并按照一定格式生成一个标准的数据集,将数据集按照一定的规则分成训练集和测试集,在训练集上训练用户兴趣模型,在测试集上进行预测,并评测算法在测试集上的预测结果,是否完成了预定的离线数据指标。离线验证的特点是它不需要接入真实的用户行为数据,只需要将日志中的数据集上报系统即可,推荐系统返回的推荐结果均是基于静态数据集计算完成的。

它的优点是不需要用户真正参与实践,并且可以短时间内测试大量算法,不会对生产环境的真正运营产生任何干扰,所以看起来是合理且成本代价较小的验证方式,但在商业环境非实验室环境下,离线实验很难得出具备科学性和令人信服的结果。因为数据集的稀疏性限制了适用范围,例如一个数据集中没有包含某用户的历史行为,则无法评价对该用户的推荐结果。

静态的数据集并不能反应真实的用户行为,因为用户本身的需求及平台内容可能已经发生了转移,时间范围越长的数据集反倒可能成为干扰,当上报数据集时,一个参数上报错误,那么这个数据集就已经不可使用了,需要清洗才能使用,所以这就对数据集及开发人员的要求特别高。另外,离线验证离线属性注定了用户行为反馈算法、用户协同过滤算法等一系列基于用户反馈及用户关系的算法无法正常运转,无法得到用户主观性的评价,自然也就谈不上实验结果的客观性了。

从笔者服务客户的经历来看,有相当多的平台在上线前准备了比较“完美”的离线验证方案,这里以一家国内知名学习机品牌和奢侈品电商平台为例。学习机品牌的推荐场景是推荐课程及与错题相关的评测与知识点,验证方式是根据离线数据计算的结果与现有结果的CTR做对比,如果计算结果的排序与现有各结果的CTR排序较为一致,那么说明离线的计算结果比较“准确”。当我描述完对方的离线验证规则后,聪明的读者肯定从其中察觉到了有点不太对的地方。对方在规则中隐含了两个假设,其中一个比较明显的假设是:目前的结果展示顺序是最合理,数据效果最佳的顺序。还有一个是与真实用户操作环境相悖的假设:所有的候选结果用户均能以同样、公平的展示顺序被用户察觉并且选择。而很显然的是,这两个假设都是无法成立的,如果现有展示结果顺序是最佳顺序,那么也就不需要智能推荐了,如果用户可以看到所有候选结果,那么此场景的候选结果数量更不足以支撑使用智能推荐了。

另一个电商平台的离线验证方式与之类似,其现有数据状况是SKU较少,仅有30W左右,月动销1.8%左右,商品购买集中在自身平台定义的爆款和主推款上,通过离线方式计算的推荐结果顺序是否符合现有的单品销售榜单。显而易见的是,这又是个“先有鸡还是先有蛋”的问题,是用户在主操作路径看不到其他商品,还是这些商品就是能满足所有用户的喜欢和需求?

当然,离线验证在某些特定场景下是能发挥作用的,例如像上述教育场景里的根据试题推荐知识点,那么离线的方式可以验证所推荐结果的准确性,将推荐所推荐的知识点与原本试题所对应知识点一一对应比较即可。但离线验证是无法真正地验证推荐结果与点击率、转化率、转化路径、购买客单价、购买商品类别等在线用户真实反馈的关联的。