推荐系统工作笔记(2)

一、笔记

  • 工作上一定仔细,只有细致,才能减少问题,避免踩坑。当然,该踩的坑还是要踩。
  • 留出更多的思考时间,不能陷进业务里,经常跳出业务,看到目前的不足,确定之后的优化方向。
  • 必须要让自己在业务中快速成长,业余时间找机会自我提升、自我充电,保持核心竞争力。
  • 很多时候,很多东西的掌握不是因为难,而是因为没有主动意识和恰当的环境去掌握,你进了那个环境,就会很快接触到该接触的,剩下的就看自己的努力程度了。
  • 要有总结,更要有行动,坐而论道,毫无意义。
  • 每一步都要自己先 check,尤其是在向别人更新信息、要求提供帮助之前,确保自己提供的信息准确,不出现低级错误。
  • 减少肉眼判断,相信脚本、程序,人工都是不可信的,尤其是一些重复性质的工作,很容易出错,而且不容易排查。
  • 遇到问题,多个角度思考,多积累业务经验。

二、推荐系统

核心流程:

  • 在线业务代码:为后端提供推荐接口,传入用户、商品信息,返回推荐商品 list。
  • 特征模块:一般可以分为数值特征、类别特征和序列特征。初期可以多埋一些,后期通过xgb等树模型进行特征筛选,或者基于DNN模型的特征重要性进行评估,对于 DNN 模型,这一点似乎还没有很好的解决方案。
  • 召回:常见的有 i2i、word2vec、graph embedding 等召回方式,基于用户 session 中的商品共现行为,计算商品的相似度,召回部分核心是覆盖率和准确率,trigger 商品的选取策略也很重要。
  • 打分模型:精排模块,一般是基于模型为召回的每个商品打分,例如 ctr、cvr 等,然后基于场景的优化目标,结合商品price进行组合,构成最终的 score。
  • 规则过滤、业务需求:各种业务需求,基本原则是解决各种 bad case。

  • 关于cvr模型打分公式的探索:ctr、cvr 和 gmv 如何组合?

  • 如何进行 AB 实验?

一开始做实验的时候,比较年轻,经常盯着实时数据,心情随着数据波动而波动,一整天的数据刚出来,就要试图下结论。对于某些场景,如果成交订单比较少,那么订单额的波动就很正常,尤其是某些大订单的影响(例如手机、电脑等),评价策略效果的时候,就要多观察一段时间,长期正向 or 负向,才可以下结论。

  • 数据的采样方式

业务场景中,正负样本比例往往失衡,通用的采样方式是对样本进行负采样,一般都会拿到收益。但是细致到如何采样,还要通过实验进行验证,例如点击率预估场景中,负样本比例往往远超正样本,那我们是对负样本随机采样,还是针对 pv 采样,又或者是针对 uv 角度采样?

采样之后,如何还原 ctr 到真实值?如果是按照固定比例进行采样,可以参考 Facebook 的《Practical Lessons from Predicting Clicks on Ads at Facebook》

9adf4e89f0c55f5ead8764ed023740301d8a8313

  • 一些评价指标的理解

AUC:模型把正样本排在负样本前面的概率

pcopc:预估准度PCOPC(Predict Click Over Post Click)

如果是点击率预估问题,label取值为0、1,那么 pcopc = sum(ctr) / sum(label),理想情况下,pcopc = 1,表示模型的打分相对准确,如果有较大偏差,就要分类型看一下,模型对于哪些数据学习的不好,导致打分不准确。

MAE, RMSE,logloss

  • 训练和测试集
  • DNN中特征重要性如何衡量
  • 如何阅读报表?

抓住关键指标,理解指标含义,理解指标为何变化。

参考文献

1.Practical Lessons from Predicting Clicks on Ads at Facebook