KDD'18「airbnb」房屋动态定价经典方法

2022-09-19 11:50:29 浏览数 (1)

背景

本文是以airbnb为背景,设计的房屋动态定价方法。本文采用两阶段的方式对定价进行预测,总体方案流程和上一篇文章中APP-LM有点类似,但是细节上也有差别。本文为kdd'18的论文,上一篇为kdd'19的论文,上一篇论文也就更进一步的提出了端到端的方法,如果没看过上一篇的可以看一下上一篇,因为关于损失函数中的一些含义介绍有所省略,因为在前一篇介绍过了。

上一篇:推荐系统(十四)——kdd'19动态定价方法(APP-LM,APP-DES,DNN-CL)

本文所提模型主要包括三个部分:

  • 一个二分类模型,用于预测房屋被预定的概率
  • 一个回归模型,用于结合各种特征以及定制的损失函数进行定价预测
  • 一个辅助个性化的模块,和回归模型结合预测更好的价格

可以发现这里的前两部分其实和APP-LM有点相似。

难点

需求估计难点

  • 需求预估:通常做动态定价时,使得P*F(P)最大的P就是所求定价,F(P)为需求函数。其实这里的需求函数就是对应的二分类模型,他的好坏影响着最终结果。但是文中场景中的房屋都是异质的,不能直接作出需求曲线,因此采用机器学习的方法结合其他特征进行学习得到。
  • 时间变化:房屋的预定会随着时间有季节性的变化,并且随着一些特殊事件的发生也会引起房屋预定的较大变化。
  • 供给变化:不像旅馆,所有房屋都是差不多的,是同质的,airbnb上的房屋是异质的,周围环境等因素都不一样,因此需要考虑在内。并且评分,周围房源也都要考虑进去。

定价难点

算法提供的动态定价建议只会被一部分商家接受,其他商家仍然会按照自己的想法来定价,并且他们的定价会偏高。因此,通过这些数据预测出来的价格可能会超出原始设定的价格范围。(PS:正如上一篇文章所述,虽然是动态定价,但是为了防止定价过高过低,会有一个固定的范围限制)

方法

定价的总体流程如上图所示,先预测预定概率,然后采用定价策略模型进行定价,然后进行个性化。

预定概率预测模型

该二分类模型文中采用了GBM模型(当然想上一篇文章的DNN等模型也可以尝试),使用了房屋的本身特征(可住几人,房间类型等)、时间特征(季节性、距离晚上的时间等)、辅助特征(房屋周围环境,搜索率等)。这些特征是在airbnb场景下用到的,可以参考,不过具体问题还是具体分析,这里就不过多陈述了。

除了设计模型之外,本文还在采样上进行了改进,文中说的是房屋密度高的地方有地理优势,因此在高密度的地方采样率也高。

想要得到精确的价格-需求曲线是很难的,主要存在以下挑战:数据稀疏、样本的唯一性、部分特征之间存在依赖关系。因此本文采用将预测的概率作为价格预测模型的输入的一部分。

定价策略模型

训练数据

{x_i,y_i}_{i=1}^N

中N表示样本数,xi是特征,yi表示是否预定,是标签。

mathcal{L}=underset{theta}{arg min } sum_{i=1}^{N}left(Lleft(P_{i}, y_{i}right)-f_{theta}left(x_{i}right)right)^{ } left(f_{theta}left(x_{i}right)-Uleft(P_{i}, y_{i}right)right)^{ }

上式为总体的损失函数, 表示max(0,·),上图为损失函数对应的上下界的直线。虽然无法预测到准确的价格用于构建损失函数,但是可以有一个范围。上下界的函数如下所示

Lleft(P_{i}, y_{i}right)=y_{i} cdot P_{i} left(1-y_{i}right) cdot c_{1} P_{i}
Uleft(P_{i}, y_{i}right)=left(1-y_{i}right) cdot P_{i} y_{i} cdot c_{2} P_{i}

这里的上下界函数可以发现和上一篇文章的是类似的,因此这里不再过多赘述他们表达的含义,有需要的小伙伴可以看一下上一篇中的这部分内容,也可以结合上一篇文章中的表格一起看,会更加容易理解。其实就是要让价格在一个范围内,大于或小于都会产生损失。定价模型基于以下三个假设:

  • 对于同一个房子,建议价格与当前价格的预订概率呈正相关。预定概率高的可以涨点价
  • 动态定价的价格以房东通常设定的最具代表性的价格为中心,具有可学习的增加/减少幅度,因此这里说明模型预测的价格是基于原有价格的。
  • 预订概率模型未完全捕获的其他需求信号,应该将这些信号融入模型中

定价模型为:

P_{sug}=P*V
V=left{begin{array}{ll} 1 theta_{1}left(q^{varphi_{H}^{-q D}}-theta_{2}right) & text { if } D>0 \ 1 theta_{1}left(q^{varphi_{L}^{-(1-q) D}}-theta_{2}right) & text { if } D leq 0 end{array}right.

P是calendar price(可以用多种方式定义,例如历史价格的均值等),q是预测概率,D是额外的需求信号得到的需求分数(例如相似的房屋聚类为一个簇)。

theta_1

控制价格的涨跌,

theta_2

当建议价格与实际价格相同时,以适当调节当参数。这两个参数保证

P_{sug}

是单调的,随着概率的增大而增大。

通过将簇级别的需求信号调整到常见的高斯尺度上,将需求分数 D 归一化。D 的值越高,对应集群中的需求就越高。

1<varphi_L<varphi_H<2

,这两个参数控制曲线的弯度。如图所示,价格增加和下跌的曲线是不一样的,非对称曲线。通过这种方式,建议的价格可以更好的反应需求敏感度。

训练方式和参数设置等就不在这展开了。

0 人点赞