当前位置: 首页 > 编程日记 > 正文

分析Booking的150种机器学习模型,我总结了六条成功经验

640?wx_fmt=jpeg

(图片付费下载自视觉中国)

作者 | Adrian Colyer
译者 | Monanfei
出品 | AI科技大本营(ID:rgznai100)
本文是一篇有趣的论文(150 successful machine learning models: 6 lessons learned at Booking.com Bernadi et al., KDD’19),通过分析 Booking.com 上 150 个成功的面向客户的机器学习应用程序的集成,该论文对其中的经验教训进行了精彩的总结,主要内容如下:
  1. 使用机器学习模型的项目将带来巨大的商业价值
  2. 模型表现并不代表商业绩效
  3. 明确你要解决的问题
  4. 预测服务的延迟很重要
  5. 尽早获得有关模型质量的反馈
  6. 使用随机对照试验测试模型对业务的影响

不仅如此,本文更是包含超过这 6 条之外的建议。
我们发现,推动真正的业务影响非常困难,而且很难隔离和理解建模工作与观察到的影响之间的联系……我们的主要结论是,构建机器学习支持的 150 种成功产品有一个基础,那就是一个与其他学科相结合的,迭代的,受假设驱动的过程。
请千万不把上面的话理解成投资机器学习是不值得的,恰恰相反,在面向用户的场景中,锻炼设计、构建和实施成功的机器学习模型的能力,这正是组织竞争力的基础。

场景

  • 您可能听说过 “全球最大的在线旅行社”  Booking.com 。为了使向用户提供出色的体验,目前有许多挑战摆在它的面前
  • 推荐的风险很高:在错误的地方预定住宿比播放不喜欢的电影要糟糕得多!
  • 用户在预订旅行时仅提供很少的信息,我们很难明白用户到底在寻找什么
  • 住宿供应受到限制,不断变化的价格会影响客人的喜好
  • 用户的喜好可能会在他们每次使用该平台时发生变化(例如,每年仅预订一次或两次)
  • 住宿的信息过于丰富,这可能会让用户不知所措


不同类型的模型

机器学习模型的好坏会影响 Booking.com 许多方面的体验。一些模型非常具体,着眼于特定上下文中的特定用例(例如针对渠道中某个点量身定制的建议);另一些模型则充当语义层,对上下文中的一些概念进行建模(例如,根据旅行目的地,指示用户的灵活性的模型)。
在 Booking.com 上部署的模型可以分为六大类:
  • 旅行者偏好模型在语义层中运行,并对用户偏好(例如灵活性程度)做出广泛的预测。
  • 旅行者上下文模型:也是语义模型,用于预测旅行发生的上下文(例如,与家人,与朋友,商务……)。
  • 项目空间导航模型:跟踪用户的浏览内容,可为用户的历史记录和整个目录提供建议。
  • 用户界面优化模型:优化 UI 的元素,例如背景图像,字体大小,按钮等。有趣的是,“ 我们发现,几乎没有一个特定的值是一个整体最优的情况,因此我们的模型考虑了上下文和用户信息,从而决定最佳的用户界面。”
  • 内容策划模型:策划人为生成的内容,例如评论,以决定显示哪些内容
  • 内容增强模型:计算有关行程要素的其他信息,例如当前具有较高价值的选择、区域价格趋势等。


第 1 课:使用机器学习模型的项目将带来巨大的商业价值

上述的所有模型系列都在 Booking.com 上产生了商业价值。此外,与未使用机器学习的其他成功项目相比,基于机器学习的项目往往会带来更高的回报
640?wx_fmt=png
这些机器学习模型部署后,除了获得直接的业务收益外,它们经常成为进一步产品开发的基础。下图显示了一系列模型部署后的影响,每个新的部署都建立在原始部署之上,并进一步改善了业务成果。

640?wx_fmt=png


第 2 课:模型表现并不代表商业绩效

通过衡量对业务指标影响的随机对照试验,Booking.com 能够估计模型提供的价值。
一个有趣的发现是,提高模型的性能并不一定会转化为业务价值的增长。
这种现象可能是多种因素导致的,包括业务价值饱和(无论做什么,都无法再提升);由于接受试验的人群较少而导致节段饱和(新旧模型在很大程度上吻合);对代理指标的过度优化(特别是那些无法将自身(例如点击)转换为所需业务指标的代理指标);以及怪异的山谷效应。下图可以很好地说明这些问题:

640?wx_fmt=png

第 3 课:明确你要解决的问题

在开始构建模型之前,值得花费时间仔细思考要解决的问题的定义。
问题构建过程将业务案例或概念作为输入,并输出定义明确的建模问题(通常是监督式机器学习问题),这样就能提出一个好的解决方案,从而有效地对给定业务案例或概念进行建模。
一些最强大的改进并非是在给定设置的上下文中改进模型,而是更改设置本身。例如,将基于 Clink 数据的用户偏好模型更改为基于来宾评论数据的自然语言处理问题。
总的来说,我们发现最好的问题往往不是立即想到的,改变设置是提高价值的卓越方法。


第 4 课:预测服务的延迟很重要

在一项引入合成延迟的实验中,Booking.com 发现,延迟增加约 30% 会使转化率降低约 0.5%,“ 这是我们业务的相关成本 ”。
延迟对于机器学习模型尤其重要,因为它们在进行预测时需要大量的计算资源。即使是数学上简单的模型也可能会引入相关的延迟。
Booking.com 竭尽所能以最大程度地减少模型引入的延迟,包括水平缩放的模型分布式副本,内部开发的自定义线性预测引擎,偏好具有较少参数、批处理请求以及预计算 and/or 缓存的模型。

第 5 课:尽早获得有关模型质量的反馈

当模型满足请求时,监视其输出质量至关重要,但这至少带来了两个挑战……
  • 由于难以观察真实标签,反馈不完整
  • 反馈会有延迟,例如在预订时做出的关于用户是否会留下评论的预测,直到旅行完成后才能进行评估。

Booking.com 提出了一种策略:查看模型生成的响应的分布。该策略已经成功地在这些情况下针对二进制分类器进行了部署。“ 具有一个清晰稳定点的平滑双峰分布,这是模型成功区分两类数据的标志”。其他形状(参见下图)则表明该模型正在陷入困境。

640?wx_fmt=png
…响应分布分析已被证明是非常有用的工具,可让我们尽早发现模型中的缺陷。


第 6 课:使用随机对照试验测试模型对业务的影响

在这项工作中,绝大多数成功的机器学习成功案例都是通过复杂的实验设计实现的,这些实验设计既可以指导开发过程,也可以检测其影响。

本文提供了有关如何在不同情况下进行实验的建议。
  • 如果并非所有受试者都有资格接受更改(例如,他们没有模型所要求的特征),则从合格子集中创建实验组和对照组。
640?wx_fmt=png
  • 如果模型仅产生影响用户体验的一个小方面的输出,则进一步将实验组和对照组进行限制,即模型仅产生用户可观察到的输出的情况(当然在对照组)。为了评估性能的影响,需要添加第三个控制组,在控制组中不会调用该模型。
640?wx_fmt=png
  • 在比较模型时,我们对两种模型不一致的情况很感兴趣。我们将使用一个调用当前模型的对照组作为基准(假设针对改进后模型,我们对当前模型进行测试)。实验设计如下:
640?wx_fmt=png


总结

假设驱动的迭代和跨学科的集成,这些是我们利用机器学习实现价值的方法的核心,我们希望这项工作可以为其他机器学习从业人员提供指导,并引发对该主题的进一步研究。

原文链接:
https://blog.acolyer.org/2019/10/07/150-successful-machine-learning-models/

(*本文为AI科技大本营编译文章,载请微信联系 1092722531


精彩推荐



早鸟票倒计时最后2天,扫码购票立减2600元

2019 中国大数据技术大会(BDTC)再度来袭!豪华主席阵容及百位技术专家齐聚,15 场精选专题技术和行业论坛,超强干货+技术剖析+行业实践立体解读,深入解析热门技术在行业中的实践落地。

640?wx_fmt=png


推荐阅读

  • 诺贝尔物理学奖出炉,三大天体物理学家获奖

  • 美政府再将8家中国企业列入“黑名单”,海康、科大讯飞、旷视等做出回应

  • Python入门你要懂哪些?

  • 如何保护你的Python代码(一)——现有加密方案

  • 百度回应李彦宏卸任百度云执行董事;甲骨文拟增聘 2000 员工拓展云服务;PostgreSQL 12 正式发布 | 极客头条

  • 真·上天!NASA招聘区块链"多功能复合型"人才, 欲保护飞行数据安全……

  • 10 月全国程序员工资统计,一半以上的职位 5 个月没招到人!

  • 【光说不练假把式】今天说一说Kubernetes 在有赞的实践

640?wx_fmt=png

你点的每个“在看”,我都认真当成了喜欢

相关文章:

Android官方提供的支持不同屏幕大小的全部方法

2019独角兽企业重金招聘Python工程师标准>>> 本文将告诉你如何让你的应用程序支持各种不同屏幕大小,主要通过以下几种办法: 让你的布局能充分的自适应屏幕根据屏幕的配置来加载合适的UI布局确保正确的布局应用在正确的设备屏幕上提供可以根据…

C++/C++11中头文件iterator的使用

<iterator>是C标准程序库中的一个头文件&#xff0c;定义了C STL标准中的一些迭代器模板类&#xff0c;这些类都是以std::iterator为基类派生出来的。迭代器提供对集合(容器)元素的操作能力。迭代器提供的基本操作就是访问和遍历。迭代器模拟了C中的指针&#xff0c;可以…

从多媒体技术演进看AI技术

&#xff08;图片付费下载自视觉中国&#xff09;文 / LiveVideoStack主编 包研在8月的LiveVideoStackCon2019北京开场致辞中&#xff0c;我分享了一组数据——把2019年和2017年两场LiveVideoStackCon上的AI相关的话题做了统计&#xff0c;这是数字从9.3%增长到31%&#xff0c;…

五. python的日历模块

一 .日历 import calendar# 日历模块# 使用# 返回指定某年某月的日历 print(calendar.month(2017,7))# July 2017 # Mo Tu We Th Fr Sa Su # 1 2 # 3 4 5 6 7 8 9 # 10 11 12 13 14 15 16 # 17 18 19 20 21 22 23 # 24 25 26 27 28 29 30 # 31# 返…

Linux下的Shell工作原理

为什么80%的码农都做不了架构师&#xff1f;>>> Linux系统提供给用户的最重要的系统程序是Shell命令语言解释程序。它不 属于内核部分&#xff0c;而是在核心之外&#xff0c;以用户态方式运行。其基本功能是解释并 执行用户打入的各种命令&#xff0c;实现用户与L…

C++/C++11中头文件functional的使用

<functional>是C标准库中的一个头文件&#xff0c;定义了C标准中多个用于表示函数对象(function object)的类模板&#xff0c;包括算法操作、比较操作、逻辑操作&#xff1b;以及用于绑定函数对象的实参值的绑定器(binder)。这些类模板的实例是具有函数调用运算符(functi…

飞天AI平台到底哪里与众不同?听听它的架构者怎么说

采访嘉宾 | 林伟 整理 | 夕颜 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 天下没有不散的宴席。 9 月 25 日&#xff0c;云栖大会在云栖小镇开始&#xff0c;历经三天的技术盛宴&#xff0c;于 9 月 27 日的傍晚结束。 三天、全球6.7万人现场参会、超1250万人…

浅谈 sessionStorage、localStorage、cookie 的区别以及使用

1、sessionStorage、localStorage、cookie 之间的区别 相同点 cookie 和 webStorage 都是用来存储客户端的一些信息不同点 localStorage localStorage 的生命周期是 永久的。也就是说 只要不是 手动的去清除。localStorage 会一直存储 sessionStorage 相反 sessionStorage 的生…

任务栏窗口和状态图标的闪动 z

Demo程序&#xff1a; 实现任务栏窗体和图标的闪动&#xff1a; 整个程序是基于Windows Forms的&#xff0c;对于任务栏右下角状态图标的闪动&#xff0c;创建了一个类型&#xff1a;NotifyIconAnimator&#xff0c;基本上是包装了Windows Forms中的NotifyIcon类型&#xff0c;…

深度学习中的最大似然估计简介

统计领域为我们提供了很多工具来实现机器学习目标&#xff0c;不仅可以解决训练集上的任务&#xff0c;还可以泛化。例如参数估计、偏差和方差&#xff0c;对于正式地刻画泛化、欠拟合和过拟合都非常有帮助。点估计&#xff1a;点估计试图为一些感兴趣的量提供单个”最优”预测…

简单粗暴上手TensorFlow 2.0,北大学霸力作,必须人手一册!

&#xff08;图片付费下载自视觉中国&#xff09; 整理 | 夕颜 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 【导读】 TensorFlow 2.0 于近期正式发布后&#xff0c;立即受到学术界与科研界的广泛关注与好评。此前&#xff0c;AI 科技大本营曾特邀专家回顾了 Te…

常见运维漏洞-Rsync-Redis

转载于:https://blog.51cto.com/10945453/2394651

zabbix笔记

&#xff08;1&#xff09;转载于:https://blog.51cto.com/zlong37/1406441

C++/C++11中头文件algorithm的使用

<algorithm>是C标准程序库中的一个头文件&#xff0c;定义了C STL标准中的基础性的算法(均为函数模板)。<algorithm>定义了设计用于元素范围的函数集合。任何对象序列的范围可以通过迭代器或指针访问。 std::adjacent_find&#xff1a;在序列中查找第一对相邻且值…

js filter 用法

filter filter函数可以看成是一个过滤函数&#xff0c;返回符合条件的元素的数组 filter需要在循环的时候判断一下是true还是false&#xff0c;是true才会返回这个元素&#xff1b; filter()接收的回调函数&#xff0c;其实可以有多个参数。通常我们仅使用第一个参数&#xff…

每30秒学会一个Python小技巧,GitHub星数4600+

&#xff08;图片付费下载自视觉中国&#xff09;作者 | xiaoyu&#xff0c;数据爱好者来源 | Python数据科学&#xff08;ID:PyDataScience&#xff09;很多学习Python的朋友在项目实战中会遇到不少功能实现上的问题&#xff0c;有些问题并不是很难的问题&#xff0c;或者已经…

Nginx自定义模块编写:根据post参数路由到不同服务器

Nginx可以轻松实现根据不同的url 或者 get参数来转发到不同的服务器&#xff0c;然而当我们需要根据http包体来进行请求路由时&#xff0c;Nginx默认的配置规则就捉襟见肘了&#xff0c;但是没关系&#xff0c;Nginx提供了强大的自定义模块功能&#xff0c;我们只要进行需要的扩…

深度学习中的贝叶斯统计简介

贝叶斯用概率反映知识状态的确定性程度。数据集能够被直接观测到&#xff0c;因此不是随机的。另一方面&#xff0c;真实参数θ是未知或不确定的&#xff0c;因此可以表示成随机变量。在观察到数据前&#xff0c;我们将θ的已知知识表示成先验概率分布(prior probability distr…

少走弯路:强烈推荐的TensorFlow快速入门资料(可下载)

&#xff08;图片付费下载自视觉中国&#xff09;作者 | 黄海广来源 | 机器学习初学者&#xff08;ID: ai-start-com&#xff09;知识更新非常快&#xff0c;需要一直学习才能跟上时代进步&#xff0c;举个例子&#xff1a;吴恩达老师在深度学习课上讲的TensorFlow使用&#xf…

有状态bean与无状态bean

在学习bean的作用域的时候&#xff0c;了解了这个问题。 bean5种作用域&#xff1a;分别是&#xff1a;singleton、prototype、request、session、gloabal session 接下来就讲一下有状态bean与无状态bean&#xff1a; 有状态会话bean &#xff1a;每个用户有自己特有的一个实例…

从Developer Removed From Sale 回到可下载状态的方法

2019独角兽企业重金招聘Python工程师标准>>> 如果你不小心点了”Remove“ 按钮&#xff0c;App的状态会变成"Developer Removed From Sale "&#xff0c;这时&#xff0c;即使更新应用也无法改变这个状态。想要让App恢复可下载状态&#xff0c;你需要尝试…

朴素贝叶斯分类器简介及C++实现(性别分类)

贝叶斯分类器是一种基于贝叶斯定理的简单概率分类器。在机器学习中&#xff0c;朴素贝叶斯分类器是一系列以假设特征之间强(朴素)独立下运用贝叶斯定理为基础的简单概率分类器。朴素贝叶斯是文本分类的一种热门(基准)方法&#xff0c;文本分类是以词频为特征判断文件所属类别或…

你当年没玩好的《愤怒的小鸟》,AI现在也犯难了

&#xff08;图片源自百度百科&#xff09;作者 | Ekaterina Nikonova&#xff0c;Jakub Gemrot译者 | Tianyu出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;现在说起《愤怒的小鸟》游戏&#xff0c;要把人的回忆一下拉扯到差不多十年前了。它是一款当时一经推出就广…

msf反弹shell

今天回顾了一下msf反弹shell的操作&#xff0c;在这里做一下记录和分享。(&#xffe3;︶&#xffe3;)↗ 反弹shell的两种方法 第一种Msfvenom实例&#xff1a; 1、msfconsole    #启动msf 2、msfvenom -p php/meterpreter/reverse_tcp LHOST<Your IP Address> LPOR…

mysql 5.5半同步复制功能部署

安装、配置Semi-sync Replication在两台主机上安装好MySQL5.5&#xff0c;编译好的插件在目录CMAKE_INSTALL_PREFIX/lib/plugin下&#xff08;默认是/usr/local/mysql/lib/plugin&#xff09;。例如这里编译是指定CMAKE_INSTALL_PREFIX为/home/mysql/mysql&#xff0c;则有&…

Windows7/10上配置OpenCV3.3.0-Python3.6.2操作步骤

目前OpenCV无论是2.4.x还是最新的3.3.0版本&#xff0c;默认支持的都是Python 2.7版本。这里介绍下如何使OpenCV 3.3.0支持Python 3.6.2的操作步骤&#xff1a;1. 从 https://github.com/opencv/opencv/releases/tag/3.3.0 下载3.3.0.zip或opencv-3.3.0-vc14.exe&#xff0c;…

manage.py命令

一、manage.py命令选 manage.py是每个Django项目中自动生成的一个用于管理项目的脚本文件&#xff0c;需要通过python命令执行。manage.py接受的是Django提供的内置命令。 内置命令包含 checkdbshelldiffsettingsflushmakemigrationsmigraterunservershellstartappstartproject…

图灵奖得主Bengio再次警示:可解释因果关系是深度学习发展的当务之急

&#xff08;图片付费下载自视觉中国&#xff09;作者 | Will Knight译者 | Monanfei来源 | Wired出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;深度学习擅长在大量数据中寻找模式&#xff0c;但无法解释它们之间的关系。图灵奖获得者 Yoshua Bengio 希望改变这一状…

解决jQuery不同版同时引用的冲突

今天研发的同事在开发一个新jQuery插件时&#xff0c;遇到一个揪心的问题。平台以前使用的 jQuery版本是1.2.6&#xff0c;偶&#xff0c;天啊&#xff01;这是古代的版本啊&#xff01; 由于很多功能基于老版本&#xff0c;不能删除啊&#xff0c;同志们都懂的&#xff01; 于…

TensorFlow中的计算图

作者 | stephenDC来源 | 大数据与人工智能&#xff08;ID:ai-big-data&#xff09;1 什么是计算图&#xff1f;一个机器学习任务的核心是模型的定义以及模型的参数求解方式&#xff0c;对这两者进行抽象之后&#xff0c;可以确定一个唯一的计算逻辑&#xff0c;将这个逻辑用图表…