FinOps有望降低企业50%+的云成本! 了解详情
写点什么

解密 Airbnb 的定价算法

  • 2015-10-18
  • 本文字数:6276 字

    阅读完需:约 21 分钟

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

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

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

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

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

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

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

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

三个简单的例子

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

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

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

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

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

工具的整体架构

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

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

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

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

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

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

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

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

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

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

动态定价与算法自动学习

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

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

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

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

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

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

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

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

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

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

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

关于作者

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


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-10-18 11:018508
用户头像

发布了 268 篇内容, 共 114.1 次阅读, 收获喜欢 23 次。

关注

评论

发布
暂无评论
发现更多内容

数字资产交易所系统开发交易平台APP

区块链交易所系统开发,合约交易模式软件方案

Win10环境前后端分离项目基于Vue.js+Django+Python3实现微信(wechat)扫码支付流程(2021年最新攻略)

刘悦的技术博客

django Vue 微信支付 python3 请求数据 扫码

第十三周 作业

熊桂平

极客大学架构师训练营

全球第一个 Serverless Redis 服务:Lambda Store 免费用

donghui

redis Serverless Lambda Store

区块链钱包软件系统开发及费用

架构师 3 期 3 班 -week5- 作业

zbest

作业 week5

什么是定点数?

Kaito

计算机基础

RPC 核心,万变不离其宗

yes

Java 微服务 后端 RPC

菜鸟实时数仓2.0进阶之路

Apache Flink

flink 流计算

IDC发布2021年中国云计算10大预测;Docker 桌面为 M1 推出技术预览版

京东科技开发者

云计算 AI 程序人生

天源迪科获2020年度中国产业供应链(中央企业集采供应链)百强企业荣誉

DT极客

数字货币量化交易所系统开发案例

和 lvgo 一起学习设计模式.PDF

米凤君

Java 设计模式 23种设计模式

架构的业务属性

soolaugust

架构 设计 架构师 七日更

阿里不允许使用 Executors 创建线程池!那怎么使用,怎么监控?

小傅哥

Java JVMTI 线程池 七日更 Executors

文件写入的6种方法,这种方法性能最好

王磊

Java io 文件读写 文件操作 文件写入

Linux安装MySQL标准教程

Simon

MySQL centos 安装 七日更

第十三周 学习总结

熊桂平

极客大学架构师训练营

突破某度云盘下载限速,提速30倍!想学?我教你啊

Silently9527

百度云 HTTP

智慧公安防控管理,重点人员管控系统建设方案

t13823115967

智慧公安 情报研判系统建设

智慧平安小区搭建,智慧社区综合服务平台开发

t13823115967

智慧城市 智慧社区管理平台开发

数字货币交易所币币OTC交易系统开发

FGC青蛙钱包系统开发|FGC青蛙钱包软件APP开发

系统开发

盘点2020 | 云上建站流程全解,教你如何节约成本

老魚

云服务器 建站 盘点2020 web全栈

vivo 商城架构升级-SSR 实战篇

vivo互联网技术

大前端 服务端 Node SSR

Flutter动态创建UI实现方案

FisherJoe

十日谈:我的 2020

escray

2020 七日更 十日谈

数字货币持币生息钱包系统开发案例

Java并发编程:AQS的互斥锁与共享锁

码农架构

Java Java并发

量化交易模式系统开发app案例

  • 需要帮助,请添加网站小助手,进入 InfoQ 技术交流群
解密Airbnb的定价算法_语言 & 开发_张天雷_InfoQ精选文章