编者注:别想歪了!我们说的是“机器学习”~
在携程技术中心推出的线上公开课程[携程技术微分享]上,来自携程酒店研发的BI经理潘鹏举,介绍了如何借助大数据和算法,通过机器学习去克服酒店服务行业挑战,给用户带来更好的预订体验,希望能对你有所启发。以下为全文实录。
PS:关注携程技术中心微信号(ctriptech),回复“微分享”,可获得[携程技术微分享]最新课程信息。
大家好,我叫潘鹏举,人称PPJ,来自携程酒店研发BI。上图是我的自我介绍,简单做了一下标签,做了词云可视化。
不知道各位有谁不知道携程,我简单介绍一下,携程是一个在线OTA服务公司,提供酒店预订、民宿、短租、机票预订、度假预订、汽车预订、租车、邮轮、轮船预订,火车票预订、商旅管理、签证、会场预订、全球购等业务,简单的说就是个旅游中介,主要是想玩转整个旅游生态圈,从我罗列的结果上看,各种旅游相关产品都有。
公司介绍完了,言归正传,以下是我今天要分享的主题:机器学习如何创造价值,目录结构如下:
首先简单介绍一下OTA酒店行业有哪些我们关心的KPI及其面对的挑战,让大家有个简单概念;
接着重点介绍一下算法在酒店行业是怎么用的,看一下我们的经验对各位有没有启发,也想借此机会和大家交流一下怎么才能让算法创造出更大的价值;
最后分别简单介绍一下使用算法的经验和算法的上线架构等;
一、OTA酒店行业
1、OTA酒店行业和其他行业的区别和挑战
首先我们先说第一块,OTA酒店行业;
我截取了某一个酒店的详情页,即我们的产品。在上面我也罗列出了OTA酒店行业和其他行业的最主要的区别。
首先最大的区分就是:我们的房型是限时限购的,从图上可以看到,我们只能5.11号入住,过时不候。另外每个酒店的房间数量是相对固定的,所以如果酒店超卖的话,那么就不好意思,酒店没有办法一天内加盖房型,只能协调客人到其他酒店去入住了。
然后是第二部分,代理(供应商)房型,这部分就是二房东,它从酒店拿到库存,然后放到携程售卖。,这样有个什么问题呢?我没办法从酒店打听到任何库存信息、订单信息,所以我们在管理代理方面就很谨慎,因为不好的代理会拉低携程的服务水平,如果订单出了问题,只能找二房东去协调,速度慢不说,还有可能解决不了问题。
第三部分,自营:指的是携程和酒店直接谈合作的房型,这些房型中有保留房、直连、直签,自营的房型是靠谱的房型,我们直接跟酒店要库存,知道房价、房态信息,出了问题也可以跟酒店直接协商,自营房源是我们服务标杆,各项服务指标都很好。
说完了行业区别,我们看看我们面对哪些挑战;
因为我们的商业模式,所以第一点挑战对我们影响很大,我们很依赖酒店行为;有些酒店虽然在我们这里售卖,但是比较无赖,会出现不付佣金、前台切客等行为,造成业务损失,当然我们对各种行为有相应的识别方法和会有相应的惩罚措施,另外酒店服务水平参差不齐,管理起来比较困难。
第二点提一下,有些低星酒店很落后,我们跟它联系只能用小灵通,导致我们管理一些酒店比较困难。其他的挑战都比较好理解,简单的说就是低频、长尾、季节性。
2、酒店OTA的服务KPI
说完了挑战,我们看看我们有哪些关心的服务KPI。
服务KPI就是好、快、准。
稍微解释一些KPI,到店无房指的是酒店发给了客人入住凭证,但是因为超卖导致客人无法入住,这种情况主要是酒店的违约行为,正常情况下携程会帮忙协调入住其他酒店并赔偿相应的损失,在旺季的时候会有所升高。然后是到店无预定率,跟到店无房的区别是:客人到了酒店,酒店说没有相应的订单信息,出现这个问题主要是携程和酒店传真客人入住信息的过程中有问题,出现这种情况携程会立即帮忙解决客人的入住问题。
目前来说,基于我们强大的客服力量和优质的6sigma管理体系,这两个指标都控制在极低的水准上。剩下的指标就不一一解释了。
我们现在面对的一个挑战是,业务量持续的增长,我们没办法持续性的增加客服人员来维持一个高标准的服务水准,因此需要借助于算法来实现智能化、自动化。
说完了KPI,我再接着介绍一下我们是如何评估项目收益的。
3、项目收益评估
这里重点说一下客户价值,这个是我觉得值得说的地方,其他的收益和成本类,大家都拎得清。
客户价值实际上传达的是一个间接收益的概念,我们会量化出每个客人的等待成本,每个环节的时间成本,每个事件的客人损失成本,把所有的这些成本量化成对应的金额,所以我们在每个事件产生了之后,不仅可以计算出直接损失还能计算出间接损失。
我举了一个例子:比如一个客人出现了到店无房,除了要直接赔款损失外,我们还要额外计算间接损失,那么我们在做到店无房项目的时候,如果间接收益+直接收益超过了成本,那么我们就值得投入人力去做优化。
对于有些公司来说,单纯提升客人感受认为价值不大,但是我们把客人感受货币化了,那么这个价值就提高了。
行业背景就告一段落,我接着说重点,算法应用实践。
二、算法应用实践
在正式说应用实践之前,我们先简要看看携程的数据量。2亿PV,10TB/日,数量还是蛮大的。我们用到的数据大体分成四块:业务数据、网站性能数据、用户行为数据和爬虫数据,其中我们的应用实践主要会用到业务数据和用户行为数据。
1、关于数据的一些概念和观点
接着说说数据在哪块会产生比较大的价值。
我按照数据的冷热区分了一下数据价值,一般性数据时效性越高,数据价值越大。我划分了一下,如果只用冷数据,那么可以挖到银矿,用好了热数据,你就挖到了金矿,如果你都直接预测了未来,那么你就挖到了钻石。最下面我列了一个公式,未来的人工智能就是基于过去和当前的状态来预测未来,这样的一个组合是未来应用的一个趋势。按照冷热的分类,我们看看数据是怎么应用的。
从这个ppt可以看到,越冷的数据,越不能影响到线上的实时业务,起的作用也越小。如何利用好当前的数据,对于应用,效果会更好。看最下面的备注,特意说一下,这样区分确实不严谨,但是从实践的角度看,越是过去的东西对未来的指导意义是越差的。接着我说说我们在实际应用中的一些观点和想法;
这里面主要是说一下分析和模型之间的差别,对公司来说,不同阶段,重点会不同,对模型的态度也不同,我们也花了很长的时间慢慢积累,才会有一个又一个的应用。
右边的图主要是从数据应用的层面上说的,里面没有提到DW层,但是DW层是地基,没有一个好的地基是没有办法说数据应用的。但是从价值上看,越往上,数据价值越大。
最后提一下,我们可能会有一个误区,我要追求100%准确的数据,实际上,我们的数据很难100%准确,特别是像用户行为数据,任何一种采集方式都会有PV漏记、错记的情况。我们要能容忍一定的数据采集偏差,在现有的数据中看一下怎么利用数据创造价值。反过来说,如果数据一直都存在这个偏差,那么对你未来的应用影响就小,数据已经适应了你的偏差。说了模型这么多好话,我们看看一个算法应用的完整闭环是怎么样的。
这里提一下标红色部分,人工和风控。在算法应用到线上的过程中,人工经验、人工过滤以及风控会起到很关键的作用。如果没有做到这点,那么在实际应用中会大打折扣。
就像我左下角写的那样,人是商业的CPU,决策过程中要依赖人来调整方向。而风控是决定应用快慢的GPU,如果没有做好风控措施,不仅可能会导致业务损失也有可能让算法没有发挥出作用,后面的实例中我会提到一些。
2、模型评估
说了一些概念后,我先说说我们怎么评估模型,然后就讲讲我们的实践实例。
这里列出了三种常用的模型评估方法,第一种A/BTest,用的最多,几乎所有的项目如果没有ABTest是不能拿出来讲的。第二种是为了替代A/BTest想到的简单办法,针对有些情况下面很难做AB实验。最后一种情况是我们评估+风控的方式,先上线模型,但是业务不采纳模型结果,然后我们用log来解析模型是否运转正确,效果好不好。
说完了评估,我们说说酒店服务用到了哪些模型;
按照预定流程,区分了预订前、中、后流程,主要目的是为了提升客户体验和提高服务效率。预订前的主要目的是为了让信息更加准确、预订中主要是为了提升预订效率和速度,预订后就是为了订单风控、酒店风控和客人风控。左下还罗列了一些常见的算法应用,排序、推荐和画像,这里就不细说了。这边说了一个整体的应用的架构,接下来我举一些具体的例子。首先看第一个;
3、具体案例
订单量预测的作用,我们一个应用是用来做业务监控,做到了准实时,延迟一分钟预测。右边写了应用的大致流程,跟我之前写的算法应用闭环是同步的,从预测到应用,接下来我们看看用了什么算法。
其实就是简单的ARIMA+季节系数+一些人工调整,把模型做了出来,没有用很复杂的算法。最后的效果是平均误差~5%。评估指标我也列了一下,主要是看漏报率,不同阶段重点不同,在稳定期间,我们比较关心误报率,因为系统稳定了,我们就要尽量减少人力损失。关于预测误差,我这里也提到,预测总是有误差的,不可能100%,我们可以根据我们的预测的精准度来进行一些规则的设定,看最下面的规则,这个规则让你有些弹性空间来防止预测错误导致的误报。
在时效性上,我们以前是吃过亏的,最老的版本我们上线过T+1预测,就是预测昨天的结果,看昨天是否异常,我们发现这个对业务一点帮助也没有,你的业务损失已经产生了,再去看异常没有特别大的作用,后面我们就慢慢的提高了时效性并做了可视化,目前这块的监控效果和可视化都很好,也监控了各关键KPI的异常情况。
第一个例子说完了,接着看第二个例子。
可能有人觉得,怎么会有怎么长的确认时长,我在右边的解释了一下,并且罗列了相应的挑战,针对这些挑战,我们是怎么做的呢,继续接着看。
我们看一下旧流程和新流程的差别,最大的差别就是我们在新流程中植入了一个预测模型,根据模型的预测结果来调整业务流程。这样做的好处就是,以前回复慢的订单要白白等待X分钟,通过模型预测之后,我们就调整了顺序,把原来确认慢的订单提早确认了,可以提高确认速度。
这个应用点是个很好的一个案例,它让我们来思考那些流程有同样的问题,促进我们进行相应的优化。这个模型准确率为93%,召回率53%,取得了一个不错的效果。这是第二个案例,接着看第三个案例。
询房模型,罗列了一下碰到的问题和需要解决的问题。针对这么庞大的房态数据,如果用人肉的办法肯定是没办法做的很好的。针对这些问题和困难,我们也花了很长的时间来去解决这个问题,最后的解决方案请接着看PPT。
我们的解决方案见右边的流程图,核心是两个模型和IVR自动化工具。
我稍微简单的描述一下,简单的说,针对关掉的房型,我们会用自动开房模型预测出当前状态下每个房型的可定的概率score,我们统计出score的准确率,在可接受的准确率下,把高于这个分数的房型全部自动打开,然后让客人在网站上可以进行预订。针对那些不能自动打开的房型,我们会把这些房型放在询房看板上去。
另外一边,针对现在可订的房型,我们去预测房型无房的概率,然后把这些数据放在询房看板上。
这样我们的询房看板上就有两部分的得分结果,开房分数和关满房分数,针对这些房型,我们有个IVR自动外呼工具把概率高的房型优先外呼到酒店,如果酒店告知房态有变化,我们会做对应的房态变更。
通过这一整套流程,我们完全实现的开房和关房的自动化,针对高准确率的房型,系统自动操作。对准确率不高的房型,我们采用酒店介入(即人工介入)的方式来平摊风险,把损失降到最低。
所以决策过程中,会有很多人工的接入,然后针对风险的高低,我们会有不同的风控和措施,这样的结合才能让算法的作用最大化。这个案例针对那些数据量大,花费人力多,重复性工作多的事情具有很大的启发意义。
案例三说完了,接着说第四个案例吧。
用户价格偏好,是用户画像的一个很小的子集。为什么会单独拎出来说,我等会讲。
我们先看看我们碰到了什么问题,一个用户根据不同场景,价格是一直在波动的,我提供了一个例子,某个客人在历史上的消费价格。我们后面用了一个算法来进行预测,没有用简单的规则来刻画用户价格偏好,花这么多力气做这个预测是因为猜中了客人的价格偏好,对产品和推荐都很有帮助。
看一下我们是怎么做的,图里面罗列了相应的思考维度,用了xgboost来进行预测。我们考虑了很多的实时场景,包括了客人的入住天距离节假日的天数,区域、星级紧张度等,这都是为了刻画客人在当前状态中会变成什么样。
最后这个模型的效果还可以,77%的用户预测价格和实际价格偏差在50元以内。模型说完了,看看这个应用给我们的启示。
这上面说了一件事情,画像不是一成不变的,一直在变,要场景化。所以如果只是为了画像而画像的话,意义不大,我们会根据应用场景的不同进行调整。
三、算法经验分享
以上就是第二部分,算法的应用实践分享,接着我分享一下在算法方面的经验。
这个是我们实验下来比较好的模型项目流程,给大家参考一下,其中标黄色字体是我们比较关心的,数据校验是为了让模型产生效果,因为俗话说的好:垃圾进,垃圾出。接着说一下Feature Engineering的事情;
这个没有特别好说的,跟其他人的做法雷同。
提一下缺失值预测。如果我们觉得某些变量对业务帮助很大,但是有一定量的缺失值,那么我们就会用另一个模型来预测缺失值,做法就是取出关键变量不存在缺失值的样本来进行训练,然后再对有缺失值的变量进行预测。
然后说一下归一化,我们这里没有罗列,因为我们现在用的常用的机器学习方法gbm,xgboost对量纲不敏感,所以我们为了减少数据分布的损失较少做归一化。你们在实际应用中,有些模型是一定要求你归一化的,所以还是需要进行归一化处理。
类别变量处理方法罗列了一些,大家可以找资料看一下。
这里说一下模型融合方法,我们常用这两种,有对应的链接,大家看看资料,这里不细说。
对整个模型的总结见图。特意提一下倒数第二点,线下模型上线,根据线上数据进行调优。主要是担心线上上线过程中有人为失误导致数据计算有偏差,所以可以直接根据线上模型来进行模型优化来适应线上的开发错误,并且能够快速的定位出开发中的数据错误。
列了一下一般情况下,分类算法的优劣对比,大家可以试验一下。算法经验分享结束,我们最后说一下上线架构。
四、模型上线架构
大家看一下模型API架构简图,我们的开发语言是Java,我们会用Java封装模型的所有输入参数,然后把模型训练的结果存储成文件xx.Rdata或者xx.Py文件,最后Java把模型结果常驻内存,最后去调用Rserver和Pyserver来进行预测。整个过程涉及的角色比较多。
最后说一下数据校验,我们非常关注的,罗列了一下我们的常用校验逻辑,供大家参考。我的分享就是这些,谢谢大家。
想要愉快入住酒店?缺了它还真不行!(含PPT)的更多相关文章
-
【Java EE 学习 55】【酒店会员管理系统项目总结】
本酒店会员管理系统使用了SSH框架和传值播客提供的协同OA静态页面. 项目地址:https://github.com/kdyzm/HotelMembersManagement 一.需求分析 酒店会员管 ...
-
[ZT] 几大酒店集团美国Co-Brand信用卡比较(三)如何选择最适合你的酒店联名信用卡
原文地址: http://www.3798.com/archives/596.html 接着对我们这种不是某个酒店忠诚客户的用户选择卡片进行分析.首先要强调的是,我们比较的是信用卡项目本身,而不是酒店 ...
-
射频识别技术漫谈(28)——基于MF1射频卡的酒店门锁设计
电子门锁是现代星级酒店管理电子化.智能化的重要电子设备.相较于传统的机械锁,基于RFID技术的电子门锁使用方便,易于管理,安全性高,可实现对开锁用户的分优先级自动管理,对房间入住信息实现自动统计与报表 ...
-
为什么stm32有的外设在进行初始化的时候需要将寄存器重设为缺省值?不设置会怎么样?
首先,缺省值就是默认值的意思,默认值可以理解为设计芯片的人认为用这个参数,比较适中,起码不可能耽误你对某一模块进行驱动.然后,为什么除了默认值(缺省值),还有这么多其他的参数可以进行选择呢,那就要看你 ...
-
使用JAVA爬取去哪儿网入住信息
昨天帮一个商科同学爬取去哪儿网站的所有广州如家快捷酒店的所有入住信息. 就是上面的商务出行 xxx年入住这些东西 然而去哪儿的前端很强,在获取所有如家快捷酒店的时候就遇到了问题. 他显示的酒店列表是j ...
-
微信小程序酒店日历超强功能
首先利用date拿到年月日 月记得+1 ,因为是从0开始的 先遍历月份,跨年年+1 ,月归至1: 然后遍历天数, lastDat = new Date(val.year,val.month,0).ge ...
-
《我想进大厂》之mysql夺命连环13问
想进大厂,mysql不会那可不行,来接受mysql面试挑战吧,看看你能坚持到哪里? 1. 能说下myisam 和 innodb的区别吗? myisam引擎是5.1版本之前的默认引擎,支持全文检索.压缩 ...
-
<;转>; 纸牌屋1-4集分析
原文:http://blog.sina.com.cn/s/blog_b86c61490102v56t.html 第一季第一集 主人公弗兰克的出场,是以对待一只邻家将死之狗的态度展开的,充分显示了主人公 ...
-
微服务是";银弹";吗?
前言:所谓"银弹",本意是用金属银做成的子弹:在古老的传说里它是杀死狼人的有效武器.在著作<人月神话>也有描述.微服务是当前软件界流行的名词,那么它能成为像银弹一样厉害 ...
随机推荐
-
已解决:Strict Standards: Only variables should be passed by reference in
今天安装ecshop的时候最上面出现了一个错误提示:Strict Standards: Only variables should be passed by reference in F:\www.x ...
-
EF 存储过程
今天我们利用EF执行sql语句的方式来执行存储过程,并得到OutPut的值. 首先新建存储过程: Create PROCEDURE proc_testEF ( @id int, @ ...
-
linux 切换多个jdk脚本
1,编写脚本 jdkswitch.sh #!/bin/sh # usage: . this_file [argvs] openjdk7_home=/usr/lib/jvm/java--openjdk- ...
-
iOS 关于UIWindow 的认识
UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view ...
-
EXP-00091 Exporting questionable statistics
今天在我们对Oracle做EXP的过程中,出现EXP-00091 Exporting questionable statistics.的信息,但是也提示导出成功.最好查询了下发现其实它就是exp的er ...
-
javascript中获取dom元素的高度和宽度
javascript中获取dom元素高度和宽度的方法如下: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网 ...
-
利用FT232实现USB转串口
FT232B数据手册:http://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT232BL_BQ.pdf 常用的USB转串口的芯片有F ...
-
总结vue中父向子,子向父以及兄弟之间通信的几种方式
子向父方式1:通过props,如例子中子组件test1.vue向父组件App.vue传值 App.vue代码 <template> <div id="app"&g ...
-
自动化运维(2)之一键式单实例安装MySQL
ZMySQLAutoTools文档 目标:自动化构建部署MySQL数据库,一键式单实例mysql安装,备份,监控,主从集群部署等.以及jdk,tomcat,nginx等基础中间件的自动化部署安装及运维 ...
-
centos6下升级git版本的操作记录
编译go_ethereum的时候出现了错误 然后发现是自己的git没有升级成功 因为编译需要高版本的git版本 所以会编译不成功 之后执行 root@uatjenkins01 ~]# git - ...