| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jopen
9年前发布

解密Airbnb的定价算法

原文  http://www.infoq.com/cn/articles/decryption-airbnb-pricing-algorithm
 

对于计划出租房屋的房主,你应该将房屋的租金设定为多少呢?或者对于租房的顾客而言,应该给自己的租房支付多少呢?不管是对于一次有计划的远足,还是一次说走就走的旅行,为租房付出多少才真正合适呢?

回答这些问题并不容易。事实上,可以通过将潜在的租房列在我们网站— Airbnb 上来实现,Airbnb是一家联系旅游人士和家有空房出租的房主的服务型网站,它可以为用户提供各式各样的住宿信息。

在焦点小组,我们观察到人们在我们的网站上填写房屋信息的过程中,往往在价格选项上会显得为难。很多人会查看他们的邻居们所设置的价码,然后选择 一个可比较的价格;这个过程会让用户在浏览器中打开很多标签,然后找出那些与他们接近的房源。有些人在填写信息之前,脑子里已经有了一个目标,可能是为了 赚取一些额外的资金,来帮助支付抵押贷款或度假费用。于是,他们开出的价格主要是为帮助他们实现这一目标,反而没有考虑房子真实的市场价值。而对于这其中 的有些人,不幸的是,通常他们的房子都没能被租出去。

显然,Airbnb需要为人们提供一种更好的方式—自动化定价,以帮助顾客做出正确的决定。这就是我们为什么在2012年就开始构建定价工具,并 至今一直在努力地改进它们的原因。今年6月,我们发布了我们最新的版本。我们开始实行动态定价,也就是说,根据不断变化的市场条件每天提供新的价格提示。 我们调整了我们的通用定价算法以考虑市场上一些偶然的、甚至是令人惊讶的特征。此外,我们还增加了一种独特的机器学习方法,让我们的系统不仅能从自己的经 验中学习,而且必要时还能利用人的一些直觉。

在线网络中,许多公司使用算法来设置或建议价格。以 易趣 为例,它会告诉用户哪些类似的产品已经售出,以致用户可以基于这些信息对自己的产品设置价格。易趣的定价问题是相对容易解决的,因为它不用关心卖家和买家在哪里,也不需要是关心产品在什么时候出售。虽然在搭乘共享公司 UberLyft 中,地域和时间都是需要考虑的因素,但是这两家公司仅仅通过法令来确定价格,在定价方面并没有用户选项,也不需要考虑定价的透明性。

在Airbnb上,我们面临着一个异常复杂的问题。我们网站上的数百万房源都是独一无二的,它们有自己的地址、大小和装饰。顾客在接待、饮食或旅游引导方面的要求也不尽相同。一些规律的(如季节性天气变化)和不规律的(如本地的大型活动)因素都会让问题变得更加复杂。

三年前,通过利用房源信息中最重要的一些特征,如房间和床铺的数量、周围的环境、以及某些特殊的设施(如停车位、游泳池等),我们开始构建一个为潜在用户提供价格提示的工具。我们在2013年正式将它推出,它在大多数情况下工作得很好 。但它也存在局限性。第一,其定价算法的工作方式是不变的。 举个例子,假如我们考虑俄勒冈州波特兰市珍珠区的情况,如果设定河边的房子的价格比远离河边的房子的价格要高,除非我们手动地对这些指标进行变更,否则该算法将永远这样执行。 第二,我们的定价工具并不是动态的,并不会根据你预定房间的时间或有多少人在同一时间预定而对价格提示做出调整。

自去年年中以来,我们一直在试图改变这种状况。我们想构建一个工具,其能够通过与用户进行交互而从错误中获得提高。我们也希望使用该工具来调节需求,在必 要的时候,可以在房间空余时给出价格下降的提示,或根据需求增加给出价格增长的提示。我们现在已经解决了这些问题,并且在今年6月份的时候用户已经开始使 用这一新工具。接下来,我们将告诉你这些工具是如何不断改进的,并且它们现在是如何工作的。我们还会告诉你,为什么我们最新的工具— Aerosolve ,除了对租赁的房屋进行定价,最终还可以做的更多。这也是为什么我们将其发布到开源社区的原因。

三个简单的例子

为了得到解决这个问题的思路,我们首先举三种简单的情况。

比如,去年足球世界杯期间你居住在巴西。你的家乡会涌入大量来自于世界各地的游客,聚集在一起享受这个星球上最伟大的足球比赛。如果此时你的房子 里正好有空余的房间,你也想满足其他足球爱好者的需求,顺便赚取一些额外的现金,就可以将它们租出去。为了帮助你设置合理的价格,我们的工具需要考虑几个 因素。首先,在这个国家,这是一代人才可能经历一次的事情,所以我们在Airbnb上绝对没有历史数据可供参考。其次,所有酒店都被预定一空,供需之间巨 大的不平衡此时尤为明显。第三,人们来旅游的时候,他们已经在机票和国际旅行上花了很多钱,因此他们也已经准备为住房花上一笔。因此,除了房间大小、房间 数量和位置等因素,这些因素也都应该被考虑进去。

解密Airbnb的定价算法

或者,想象你在苏格兰高地继承了一座城堡,为了支付清理护城河、经营酒厂、以及饲养猎鹰的成本,你决定将炮塔改造成一个提供早餐和住宿的旅馆。不 同于世界杯的情况,此时你有一些可比较的数据,那就是附近的城堡。一些数据可能跨越了很多年,提供了有关旅行的一些季节性信息。而且你知道,因为该地区还 有其他的住宿选择,此时,对于旅游租房的供应和需求相当平衡。然而,这种特殊的城堡在苏格兰是独一无二的,其拥有独特的双护城河。系统应该如何评价这些特 有的功能的价值呢?

解密Airbnb的定价算法

再看最后一个例子,假设你在巴黎拥有一个典型的两居室公寓。当你决定在8月份休假数周,并向南去往蒙彼利埃,此时想把房子租出去。此时存在很多可 比较的房源,所以它是相对容易定价的。但是,当有很多人对你的房子产生兴趣的时候,你决定开始逐步提高价格,以最大限度地赚取更多的现金。但这是一个棘手 的问题,如果你定价太高,或预定日期太紧迫,将面临赚不到任何钱的可能,这时该怎么办?或者相反的情况,你一开始设置了较低的价格,虽然在接下来的几个月 里就会承担较小的风险,可是却赚了更少的钱。我们应该如何帮助房主获得更好的信息,以避免这种不确定性和遗憾呢?

这些都是我们所面临的各种各样的问题。我们想构建一个易于使用的工具,当用户决定出租自己的房子的时候,为他们提供有用的信息,同时为定价提示给出明确的理由。

解密Airbnb的定价算法

工具的整体架构

对于我们的工具,其整体架构出奇简单:当一个新房主开始在我们的网站上添加一个房源的时候,我们的系统提取房源的关键属性,查看在这区域中有相同或相似属性的、且被成功预定的房源,同时考虑到需求要素和季节性特征,提供一个居中的价格提示。

当我们试图将这个问题描述清楚的时候,最棘手的问题出现了,即房源的哪些属性是关键属性。没有两个房源在设计和布局上是相同的,房源也分布在城市 的每一个角落,而且很多都不是公寓或别墅,而是城堡和小屋。我们的工具选择了三大类型的数据来设置价格:相似性、新旧程度和位置。

对于相似性数据,一开始查看所有已知的可量化的房源属性,然后看哪些房源与顾客计划支付的价格最接近。之后看房间里可以住多少人,是一个大的集体宿舍还是小的私人房间,以及住房的类型(公寓、城堡、蒙古包等)和评论数量。

这里最令人惊讶的属性也许是评论数量。事实证明,人们愿意为有很多评论的房源进行支付。而针对买什么以及向谁买等问题,亚马逊、eBay和许多网 站都靠评论帮助用户进行选择,但评语数量是否会导致价格有很大的区别目前并不清楚。对我们来说,与没有任何评论相比,即使只有一条评论也会导致房源有一个 巨大的价格差异。

我们也考虑了新旧程度,因为市场变化频繁,特别是旅游业。最重要的是,旅游是一种季节性很强的活动,所以在进行分析的时候,重要的是基于现在的数 据,或者去年这个时候的数据,而上个月的数据可能关联性很小。下图给出了一个例子,说明季节性需求和当地的活动会导致房屋出租价格起伏,在得克萨斯州奥斯 汀市,在South by Southwest(SXSW)和Austin City Limits festivals音乐节期间,房屋出租价格会上涨。

解密Airbnb的定价算法

对于像伦敦和巴黎这样高度发达的市场,获得市场数据是很容易的,在我们的网站上有成千上万被预定的房源可供比较。对于新兴市场,我们按照大小、旅 游业的发展水平以及在Airbnb上所处的增长阶段,将它们进行分类。这样,我们不仅仅能够将其与所在城市的房源进行比较,而且可以与其他具有相似特征的 市场相比较。因此,如果来自于日本的一个房主第一次在Airbnb进行注册,计划出租一套位于京都的公寓,我们不妨查看来自于东京或冈山的房源,如果 Airbnb上没有这些城市的数据,我们还可以与来自于阿姆斯特丹的房源进行比较,因为对于Airbnb来说,阿姆斯特丹是一个比较成熟的市场,而且它与 京都具有接近的城市规模和旅游业水平。

最后,我们需要考虑位置,对我们来说,这是一个与酒店相当不同的问题。酒店通常成片地分布在几个主要的地点,而我们的房源几乎分布在城市的每一个角落。

在我们的定价算法的早期版本中,算法以房源为中心绘制一个不断扩大的圆圈,考虑在房源位置附件不同半径上与其特征相似的房源。这种方法有的时候工 作的很好,但我们最终发现一个重要的缺陷。想象我们在巴黎有一套公寓。如果公寓是位于市中心,那么我们将圆圈不断扩大时,它会迅速开始覆盖塞纳河两侧非常 不同的街区。在巴黎,虽然在塞纳河两边的房子都不错,但仅仅相隔百米距离的公寓都会有非常大的价格差异。在其他的一些城市,有时这个问题会显得更加明显。 在伦敦,举例来说,仅仅相隔一条泰晤士河,格林尼治地区的价格可以超过伦敦码头附近的两倍。

因此,我们让一个制图员在世界各地主要的一些大城市中为每一个街区绘制边界。这些信息的创建是非常准确的,通过使用相关的地理空间数据,如周围的河流、公路和运输线,我们能够对房源进行准确分类。

现在,这些问题得到了解决。例如,在十月份的第一个周末,如果想在伦敦租住一个二人标间,泰晤士河边上格林尼治地区的价格提示是130美元一晚, 而河对岸具有类似条件的房间的价格提示仅仅是60美元一晚。以前的算法让系统为很多新的房源给出一个99美元的价格提示,没有考虑它们的具体特征。虽然这 不是长时间发生,也不是在每一个地区都这样,但我们认识到,当这种情况发生的时候,可能会导致人们质疑我们的定价工具是否有效。

动态定价与算法自动学习

随着时间的推进,我们不断改进我们的算法,直到他们能够考虑数千种不同的因素,并在非常精细的水平上理解地理位置。但该工具仍然存在两个不足。其 一,它给出的这些价格提示是静态的,事实上,在了解了当地的一些活动和旅游的季节性变化之后,它应该在一年之中不同的季节为相同属性的房源建议不同的价 格。但它并没有这样做,然而,航空公司却会当日期临近的时候改变机票价格,订单减少时将价格下调,在市场升温时将价格提高。

另外一个不足是,工具本身是静态的。事实上,当工具能够挖掘到前所未有的历史数据的时候,它的价格提示有所改善,但算法本身并没有变得更好。

去年夏天,我们开始了一个项目,以解决这两个问题。在动态定价方面,我们的目标是为每个房主,针对他们的房子计划出租的日期,每天给出一个新的定 价提示。动态定价其实并不新鲜。航空公司开始动态调整机票价格已经几十年了,而且常常是实时的,以试图确保最大的满座率,以及每个座位卖出最高的价格。酒 店业也是这样,随着连锁的规模变得越来越大,酒店的业务数据量不断增长,酒店营销也被搬到网上,使得连锁每天可以多次变动价格。

因此,我们需要对动态定价进行投资,一旦我们有好几年的历史数据,我们就可以挖掘它们,尽管这需要大量的计算资源,但对我们来说具有非常大的意义。

让算法自身不断改进要更加困难,尤其是因为我们希望系统给出的价格提示具有高的可解释性。在某些情况下,我们希望算法能够有自己“思维过程”,能够从数据中学习而获得提高。机器学习系统通常具有一定的规模和复杂度,常常以一种神秘的方式工作。例如, 谷歌大脑 学习了在网络视频中找出猫脸的能力,通过一个多层模型对数据进行分类,然后得出一个视频是否包含猫脸的结果,而这个工作对于人类来说几乎是不可能复制的。

我们选择了一个分类机器学习模型。它使用房源的所有属性以及当前市场的需求,然后预测其是否将被预定。系统计算价格提示是基于数百个属性,如是否 包含早餐、房间是否有一个私人浴室等。我们通过将价格提示与结果进行比较,对系统进行训练。考虑房源是否以一个特定的价格被预订,将帮助系统调整其价格提 示以及评估一个价格被接受的概率。当然,房主可以选择比价格提示更高或者更低的价格,然后我们的系统也会对估计概率做相应地调整。系统之后会检查房源在市 场上命运,并使用这些信息来调整未来的提示。

下面就是机器学习发挥作用的时候了。通过分析哪些价格提示获得了成功,我们的系统开始调整不同房源属性的权重。我们一开始也会做一些假设,例如地 理位置非常重要,而是否有热水浴缸没有那么重要。我们保留了以前的定价系统中所考虑的某些房源属性,同时又添加了一些新的属性,如“预定日期之前的剩余天 数”,这些信息对我们的动态定价产生影响。所有新的信息被考虑到模型中,都是通过我们对历史数据的分析,表明它们与我们的动态定价能力是相关的。

例如,某些照片更可能吸引预订。总的趋势可能会让你大吃一惊,时尚、明亮的客厅的照片,虽然易于得到专业摄影师的偏爱,但相比于用暖色调装饰的、舒适的卧室的照片,它们并没能吸引更多的潜在客人。

随着时间的推移,我们期待各种信息的权重能不断自动改进,以提高我们的价格提示。如果我们相信我们所了解到的一些东西,模型并没有刻画清楚,我们 也可以通过其他方式参与和影响权重的设置。我们的系统能够为每个定价提示产生一个各种因素及相应权重的列表,提高工具的可解释性,这也是大家所希望看到 的。如果我们觉得有些信息在模型中没有被很好地描述,我们会手动地将它们添加到模型中。

我们的系统也在不断地调整我们的地图以反映街区边界的变化。因此,系统并不是依赖于当地的地图,比方说,一个当地的地图可能告诉我们波特兰开拓者 队的恩光街区在哪个地方结束,里士满街区从哪个地方开始,但这并不是我们所关心的,我们依靠一个城市中房源的预订和价格的分布数据来描绘各种曲线。这种做 法也让我们发现了我们以前所没有意识到“微街区”。这些地区可能有大量的流行的房源,但它们并不一定与标准的街区边界相匹配,或者可能存在一些局部特征, 依据它们将一个较大的传统街区分为一个个小的部分可能更加理想。下图给出的例子,是我们的工具所划分的伦敦的“微街区”分布。

解密Airbnb的定价算法

今天,这些工具为来自于全球的Airbnb房源提供价格提示。但是,我们认为这些工具除了帮助潜在的房主为在线出租服务更好地设置合理的价格之 外,事实上它还可以做得更多。这就是为什么我们将这些工具所基于的机器学习平台(Aerosolve)作为一个开源工具发布的原因。它将给那些还没有接触 过机器学习的从业人员一个简单的切入点。通过弄清楚系统的功能,它会让更多人使用这些工具,这也是作者写作本文的目的。到目前为止,我们已经用它来构建了 一个系统,能够以一种点彩画的风格进行绘画。我们渴望看到我们行业以外的有创造性的工程师开始使用这些工具,并期待他们最终的成果。

关于作者

Dan Hill,Airbnb的产品主管。Hill写出了Airbnb的定价算法,他还与人合伙创办了家庭共享公司Crashpadder,其在2012年被 Airbnb收购。Hill一开始做Web开发是为了支持他的小提琴手事业。他在最近的一次采访中说到,“有一天当我醒来的时候,突然意识到我真的没有被 小提琴所眷顾”。对于他的下一步想法,Hill表示,“我真的想用我的一生致力于技术和产品”。

 本文由用户 jopen 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!
 本文地址:https://www.open-open.com/lib/view/open1445226443460.html
算法