当前位置: 首页 > news >正文

京东推荐系统中的机器学习与大规模线上实验


摘要

机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

内容来源:2017年8月12日,京东推荐系统高级算法工程师熊熹在“网易博学实践日:大数据与人工智能技术大会”进行《大规模线上实验与机器学习》演讲分享。IT 大咖说作为独家视频合作方,经主办方和讲者审阅授权发布。

阅读字数:2405 | 5分钟阅读

嘉宾演讲视频及PPT: suo.im/3BfFPa

页面越简洁越好?

对于一个互联网产品来说,是不是越简洁越好呢?

微软的必应搜索原来的界面非常混杂,后来为了让页面更加简洁,他们把所有浏览器自带的广告全部屏蔽,只保留原始的自然搜索结果以及少量它们自己的搜索广告。就在那一年,整个必应的搜索广告收入提升了47%。

但是也有反例。2014年的亚马逊和如今的京东淘宝都差不多,是一个花里胡哨的页面,有很多导航栏,不会浪费任何一点空间。后来他们的设计师想要做一个简洁的页面,让用户可以直奔主题进行购物,所以就把页面改得非常简洁,看起来的确非常符合工程师文化了,可页面改版后他们的订单却出现了大幅度下跌。

新开一个页面好不好?

2008年,MSN在Hotmail上实验了点击链接新开一个tab功能,邮箱人均打开量提升8.9%。2011年,MSN在其搜索页面上重复这个实验,同样带来了5%的提升,这是MSN历史上最成功的实验。

另一个反例则是In easy,是美国的一个二手货交易小网站,他们的实验平台做得非常好。当时也做了类似的事情,就是在用户搜索完之后开出一个新的弹窗,用户可以在两个窗口之间进行鉴别和比较,非常方便。但是当这个做完之后,他们的整个搜索用户流失率提升到了71.52%。

无限下拉页面

Ineasy认为,以前用户要从第一页看到第二页的时候需要点击“下一页”,会带来用户等待和流失的情况。于是他们做了一个让页面自然往后滑动,无需点击的方案。没想到这个举措导致整个用户的购买率降低了22%。

我们在京东的购物车推荐页面也使用了这个方案,将购物车推荐改为了无限下拉模式。而这却是我们史上最成功的推荐产品实验,在这个实验期间出现了50%的收入提升。

以上几个案例表明,同样的策略,在A成功,但并不代表在B也能成功;以前成功不代表现在也能成功,反之亦然。有的时候我们甚至不知道为什么会成功或失败。

因为一件事情的影响因素太多了,我们要知道到底是什么原因导致的成功,需要去做严格的因果推断。A/B实验是最好的因果检验工具。

微软实验平台的大总监在2010年提出了“Hippos are dangerous!”,意思就是在一个公司里,如果只听最高层那个人的想法其实是很危险的。大多数互联网产品是要面对全中国很多用户,而最高层的想法只能代表一小部分人群。

如果有可能,无论要进行什么改变都要先做A/B实验。

A/B实验核心三要素

利用统计学的思想,我们认为在实验设计中,包含了实验对象、实验因素和实验效应。

而实验对象可以类比为A/B测试中的分流,实验因素类比为单因素,实验效应类比为指标。

分流

我们要做随机分流,保证不同簇群间的用户可能会有差异但能够通过不同的随机进行消减。

通过AA实验验证多层实验的正交性,并计算最少实验流量。


我认为分流还需要有一个均等原则。京东在去年年底进行了为期十天的实验,测试组最初只有5%的流量,然后对比线上的大流量。一开始我们认为A算法一定比B算法要好,它也的确有更优异的表现。之后在逐渐放量的过程中,因为我们的实验日期是2016.12.10~2016.12.20,在这期间包含了“双十二”。在A的量最小的时候正好处于“双十二”期间,到后来大家的荷包都被抽干了进入低潮期,我们的流量变大了,所以虽然A的每一天都比B要好,但是平均意义上比B要差。这点给我带来的启示就是尽量不要在特殊的日子进行发布或者做灰度测试。

单因素

我建议实验因素越简单越好,一次只测试一个因素。一旦确认了一个因素的正面影响,就马上开始下一个。这样带来的时间缩减,比一开始花三个月时间把整套体系建完再上线要好很多。

指标

著名的逻辑学大师Peter Drucker说过,“If you can’t measure it,you can’t improve it.”

我们首先要找到一个衡量的方法,然后就能通过各种方法进行优化。

要衡量优化指标,就需要引入假设检验,计算置信区间。要明确区分随机因素和真实影响。重大提升出现的概率不到1/500,而且在一个成熟系统中,基本上都被做过了。大多数的增长都是缓慢的累积,因此方向比努力更重要。

多个指标的平衡

业界的做法:其它指标没有下降,或者下降不显著的情况下,另一些指标上升,即可认为是一次成功的实验。不允许用降低一个指标来提升另一个。

学界的做法:使用机器学习的方法,学出指标之间的最佳组合,以进行最好的区分。


我们成功的实验

个性化VS非个性化:个性化为我们的整个搜索引流带来了剧烈的提升。

机器学习VS规则:从规则版本变为机器学习版本,曾为我们的购物车推荐带来了很大的提升。

深度学习VS机器学习:从机器学习到深度学习,给我们的广告收入带来了一定的提升。

我们现在做的强化学习正在为我们的首页用户粘性带来不可估量的提升。

这一切实验都告诉我们,更深的数据挖掘、更细致的模型、更广的覆盖和更实时的响应,都能给我们的持续增长带来无限可能。

机器学习实践要点

我认为机器学习无非是建立一个Y=f(X)函数,Y是优化目标,f是模型,而X是怎样去做特征。

Y:深入理解你的metrics,调整正负样本的权重很重要,加入人工标注。

f:只要确定了目标,要找一个合适的模型是不难的。

X:我们要做大量的特征工程。这里再提出一个feature log的工作,很多工程师的工作都是在清洗数据、拼接数据、找很多不同的信息然后把它布置上线。在布置上线的过程中,我们把所有特征的取值直接记录下来。这有两个好处,第一个好处是在下一次进行模型训练的时候不用自己拼接,只要把这个log抽出来,工程师的工作可能会从原来90%的数据清洗+10%的数据建模变成了50%的拼接,剩下的50%全部用于建模。

另外它还可以保证线上线下的一致性。最后还是要不断进行优化。

最后的一点建议

一旦有了点子,越早开始试验越好。一次只改动一个地方。

线上线下一致性非常重要。无论工程师的水平有多高,实现都很可能是有问题的。

如果一个实验一开始就不奏效,除非查到实现bug。不然继续等待下去,它也一定不会奏效。

性能监控越实时越好,产品数据分析t+1天绝对是必要的。

我今天的分享就到这里,谢谢大家!


相关文章:

  • JavaScript设计模式系列一:工厂模式
  • Swift 计算文本的size
  • 73.node.js开发错误——TypeError: Cannot set property 'XXX' of undefined
  • ubuntu安装wxpython库
  • golang学习笔记(1):安装helloworld
  • 第 9 章 Spring Security
  • 一个字符串转换类
  • Ubuntu 16.04 LTS国内快速更新源
  • 考过网工的心得
  • 8.3. Spring Cloud 相关的 application.properties 配置
  • 大数据与云计算学习:数据分析(二)
  • 3.4 usermod命令 3.5 用户密码管理 3.6 mkpasswd命令
  • 剑指offer 矩阵覆盖
  • 从0开始弄一个面向OC数据库--终结篇
  • C++ Exercises(一)
  • 2019.2.20 c++ 知识梳理
  • AngularJS指令开发(1)——参数详解
  • css的样式优先级
  • css属性的继承、初识值、计算值、当前值、应用值
  • Flannel解读
  • IOS评论框不贴底(ios12新bug)
  • java正则表式的使用
  • JWT究竟是什么呢?
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • Spring Cloud Feign的两种使用姿势
  • SQLServer之创建显式事务
  • TCP拥塞控制
  • WePY 在小程序性能调优上做出的探究
  • windows下使用nginx调试简介
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 批量截取pdf文件
  • 如何解决微信端直接跳WAP端
  • 实现简单的正则表达式引擎
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • ionic异常记录
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • #pragma pack(1)
  • $.each()与$(selector).each()
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (剑指Offer)面试题34:丑数
  • (七)Knockout 创建自定义绑定
  • (五)关系数据库标准语言SQL
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET Framework杂记
  • .NET HttpWebRequest、WebClient、HttpClient
  • .Net MVC4 上传大文件,并保存表单
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • @angular/cli项目构建--http(2)