本文以航空服务为场景,设计了一系列动态定价方法,对于其他场景具有借鉴意义。
Dynamic Pricing for Airline Ancillaries with Customer Context
https://dl.acm.org/doi/abs/10.1145/3292500.3330746
背景
很多定价方法是静态定价的,即给item定完价之后就一直是这个价格了,没有考虑用户的特征以及一些边际信息。本文提出了考虑用户特征和item特征的动态定价方法。背景相对简单,直接进入正题。
定价因素
本文考虑两个定价因素:需求函数(demand function)和用户属性(customer attribution)。需求函数其实就是用户的购买意愿,也就是通常模型预估的转化率,即根据当前特征和价格,该用户可能购买的概率。而用户属性就是影响转化率预测的特征,本文将其分为以下几部分:时间类型的属性、销售类型的属性、往返间隔时间等,这些特征是和使用场景相关的,这里就不详细介绍了,因为不同场景所涉及的特征也不一样。我们只需要知道他这里涉及两个因素,就是最开始说的需求函数和用户属性。
定价方法
本文的定价方法主要包含两个部分:首先是用户购买意愿的预测,即转化率预测模型;其次是收入优化模型,即如何定价可以使得收入最大化。本文包含两个假设,这些假设也是其他定价方法中常用的:
- 价格范围:模型动态定价的价格必须在一定范围内,不能过大过小。
- 支付购买意愿符合单调性:这也很容易理解,就是如果在当前价格用户不愿意购买,那么价格更高肯定也不愿意购买。
依据上述内容,本文主要提出了三个方法,复杂度也是一次上升。
使用逻辑映射进行辅助购买预测(APP-LM)
原始数据是不平衡的,因此需要考虑数据不平衡的应对方案(例如对交叉熵进行加权等)。本文第一个方法APP-LM,它是一个两阶段的方法:首先使用基于簇特征的朴素贝叶斯对用户的购买意愿进行预测,这里用到的特征是不包含价格的。接着,使用逻辑回归映射函数对得到的购买意愿预测值映射为对应的定价。使用逻辑映射背后的直觉是,当购买概率高时,辅助产品的定价可以更接近定价范围的最大值,而对于低概率,则可以更低。对应公式如下:
这里涉及三个参数:L控制价格的最大值,k控制曲线的形状或陡度,中点x0控制sigmoid曲线。通过k和x0的控制,可以是整个曲线是更激进的或更保守的对价格进行映射。例子如图所示:
具有详尽搜索的辅助购买预测 (APP-DES)
APP-DES也是一个两阶段的定价方法:首先用DNN预测用户的购买意愿,而由于不平衡性,因此损失函数用加权对的交叉熵损失函数,这里和第一个方法的区别就是这里用了深度的方法,APP-LM用传统方法,还有一个区别是这里训练模型时,特征包含价格。接着,对范围内的价格进行离散化,比如等分之类的,对每一个可能的价格结合特征输入到模型,收益最高的就是被推荐的价格,收益计算方式如下:
其中P是价格,x为其他特征。
具有自定义损失函数的端到端 DNN (DNN-CL)
前面两个方法都是两阶段的,而该方法是端到端的。训练数据
中xi表示特征,yi表示是否购买。总体的自定义损失函数如下:
分别表示下界和上界相关的损失函数,
用于控制前文所述的单调性条件,
表示模型预测,
表示离散的定价,即第二部分方法中所说的对价格离散化。
损失对应于此处的
,主要涉及以下公式:
其中j表示第j个价格,i表示第i个item,
表示对应于训练数据中
在离散价格数组中的下标。上下界的损失函数如下所示:
其中
。分析如下:
- 当前item是已经购买了的,则yi=1,那么小于该价格的都会被购买,那么定价可以大于
位置的价格,因此此时下界为Pij,价格可以大于当前下界来获得更大收益。如果没被购买,则下界为c1·Pij,下界需要更小。
- 当item是已经购买了的,则yi=1,那么小于该价格的都会被购买,因此上界可以更高c2·Pij。反之如果没有购买,那么大于该价格的都不会被购买,因为已经贵到没人买了,上界为Pij。
上表为各种情况下的损失函数取值,为了损失函数值不为0,
,
,这里c2的范围和论文这种有区别,不知道是我想错了,还是论文中有问题。