预算分配Budget Allocation:两篇论文(二)
作者:互联网
1 达摩院:A Unified Framework for Marketing Budget Allocation
A Unified Framework for Marketing Budget Allocation
参考解读文章:A Unified Framework for Marketing Budget Allocation
预算分配核心是解决该把钱投在哪的问题,本篇文章意在提出一种做预算分配的通用框架,包括两个步骤,
- 预测模型,通过历史数据去学习需求曲线,也可称为市场响应模型(market response model)
- 优化分配最优解,基于模型进行优化预算分配
学习需求曲线 -> 预算来预测每个组的销量变化情况
问题:尽管一些黑盒的预测方法,如深度学习,已经广泛应用于一些预测问题,但是这样预测和制定决策之间还有很大的gap,其中一个重要的问题就是很难将黑盒的预测结果转化成分配决策。
1.1 通用预算分配框架
这篇paper总结的蛮给力的,一个预算分配的通用框架,包括两个步骤,
- 首先通过历史数据去学习需求曲线,也可称为市场响应模型(market response model)
- 然后基于模型进行优化预算分配
整个市场可以根据不同的商品、客户、消费习惯等维度分为多个组(定价歧视的分组,segment),为了将预算分配给各个组,我们需要根据每个组的预算来预测每个组的销量变化情况。
尽管一些黑盒的预测方法,如深度学习,已经广泛应用于一些预测问题,但是这样预测和制定决策之间还有很大的gap,其中一个重要的问题就是很难将黑盒的预测结果转化成分配决策。
相反,如logit demand curve有明确的表达形式,并且广泛应用于经济学之中,它的缺点则是智能对于每一个市场分组来拟合,并不能利用不同分组下的通用的信息,这会造成很严重的数据分离的问题,因此文中提出一种半黑盒的预测模型,用神经网络来扩展logit demand curve的能力。
预测模型的输入被分成两部分:独立的变量和环境变量(上下文变量)。
环境变量是市场本身的属性,比如商品品牌、顾客属性、消费时间等等。
同时可以证明market cost(市场对于价格最敏感的点)只跟bias parameter有关,所以可以用相同的神经网络来计算不同segment的bias parameter,而弹性参数可以在拟合数据的时候求出,这样销量和花费的变动关系可以有一个显示的表示。
一旦需求曲线确定了,预算分配则可以表示成一个优化问题。
用
N
N
N表示segment数量,预算分配需要优化
N
N
N个变量,在一定预算约束下最大化销量。由于logit demand cruve是非凸的,所以优化问题也是非凸的,文中提出一种办法可以将该问题转化成等价的凸问题。
同时,这个框架可以兼容多种业务约束,包括花费上限、利润下限、或者roi下限。
因为有时候价格需要以
99
99
99结尾,比如
19.99
19.99
19.99,所以有时候变量需要从一个固定的集合取值,本框架也支持对于离散问题的优化求解,可以将该问题转化成一个多选择的背包问题(MCKP,Multiple Choice Knapsack Problem),近似在O(N)的时间复杂度下求解。
1.2 两种市场响应模型
1.2.1 比较常规的:Logit Response Model
这个是蛮典型的增长曲线,随着cost增加,一开始sales增长迅速,后续会到达一个瓶颈。
其中,market cost 指的是一个效率最佳的临界点
1.2.2 Semi-black-box Model
(本节没有细究,有些还没看明白…)
logit对于数据的使用能力有限,当我们对于每个segment都学习出一个
a
i
ai
ai和
b
i
bi
bi,并没有使用segment之间相同的数据,所以认为此处的c为独立变量,环境变量用xi表示,环境变量对于所有segment是通用的,并不会因为segment不同而改变(此处指的应该是有控制的改变,如对于某个segment人为改变花费,而环境变量contextual variables并不能控制),传统的神经网络可以将
x
i
xi
xi和
c
c
c都作为输入,而logit只能利用
c
c
c作为输入。
相比于直接预测最终的销量,我们用神经网络
e
(
x
i
)
e(xi)
e(xi)来估计market cost处的的弹性,基于
e
(
x
i
)
e(xi)
e(xi),弹性的信息可以在不同segment间共享,传统的logit model可以扩展成
1.3 优化预算分配
对于N个segments,预算分配需要决定每个segment的花费
c
i
ci
ci,用
c
:
=
[
c
1
,
⋯
,
c
N
]
c:=[c1,⋯,cN]
c:=[c1,⋯,cN],我们的目标是找到一个最优的c在预算约束下来最大化总销量,
其中B表示预算上限,它既可以为正也可以为负,正的表示花费上限约束,负的表示利润下限约束。
一般来看,可以作为线性规划的来求解,这里论文也提及用可以将该问题转化成一个多选择的背包问题(MCKP,Multiple Choice Knapsack Problem),近似在 O ( N ) O(N) O(N)的时间复杂度下求解。
2 达摩院——MindOpt 优化求解器
文档:
https://solver.damo.alibaba-inc.com/doc/html/testing/compile-python.html
阿里云界面达摩院:
https://tianchi.aliyun.com/mindopt
申请列表:
https://solver.damo.alibaba.com/htmlpages/page#/
3 背包问题
3.1 线性规划
具体可参考:最优解问题——PuLP解决线性规划问题(一)
3.2 背包问题
大概一个案例来理解:
一个小偷面前有一堆(n个)财宝,每个财宝有重量w和价值v两种属性,而他的背包只能携带一定重量的财宝(Capacity),在已知所有财宝的重量和价值的情况下,如何选取财宝,可以最大限度的利用当前的背包容量,取得最大价值的财宝(或求出能够获取财宝价值的最大值)。
一般来讲,背包问题有以下几种分类:
- 01背包问题
- 完全背包问题
- 多重背包问题
例如恰好装满、求方案总数、求所有的方案等。本文接下来就分别讨论一下这些问题。
核心概念:
给定一组物品,每种物品都有自己的体积和价值,在限定的总体积内,我们如何选择,才能使得物品的总价值最高。
背包问题简要的分为以下3种,还有一些都是这3种的变形以及组合。
-
01背包:
即限定每个物品要么拿(1个)要么不拿(0个)。 -
多重(有界)背包问题 - 多选择背包问题:
如果限定物品i最多只能拿m[i]个,则问题称为有界或多重背包问题。 -
完全(无界)背包问题
如果不限定每种物品的数量,同一样物品想拿多少拿多少,则问题称为无界或完全背包问题。 -
多维背包问题
或者多背包问题,它是带有一组约束(重量 尺寸 可靠性等)的背包问题。该问题可以简单描述为n个物品要放入m个称重不同的背包,他与0-1背包问题不同的是,物品放入不同背包的重量是不同的。
显然,在多约束背包的问题中,除了确定每个物品是否被放入背包之外,还需要确定他需要放入哪个背包。 -
动态背包问题
动态两个字的意思是,价值和重量都不是固定的,v ~ f(x) , weight ~ f(y)这样类型的
额外:
要求2:填满背包背包问题还有另一种要求,即如何选取物品将容量为 C 的背包恰好填满(可能不存在)。
几篇参考文献:
四种方法解0-1背包问题-基于python
01背包、多选择背包、完全背包与动态规划解法
3.3 贪心算法
选取当前状态下最好/最优的选择(局部最有利的选择),并以此希望最后堆叠出的结果也是最好/最优的解
事例一:找零钱问题
假设你开了间小店,不能电子支付,钱柜里的货币只有 25 分、10 分、5 分和 1 分四种硬币,如果你是售货员且要找给客户 41 分钱的硬币,如何安排才能找给客人的钱既正确且硬币的个数又最少?
4 论文:阿里妈妈:基于动态背包的多场景广告序列投放算法
https://www.infoq.cn/article/BVzcxT1UMqVJ0vY0GYH4
阿里妈妈:基于动态背包的多场景广告序列投放算法
4.1 序列投放的长期价值
假设消费者和广告存在两次接触,
第一次接触时,其转化的期望低于其它流量转化的平均期望,而如果在接触一次后再发生第二次接触,由于消费者心智累积效应,
其第二次接触后转化的期望显著升高,使得两次接触的整体转化期望高于其它流量转化的平均期望
序列投放算法和单次投放算法做出不同决策的核心原因在于:
第一次接触前,单次投放算法只评估了单次请求的价值,即短期价值,
而序列投放算法评估了未来多次请求的整体价值,我们称为长期价值。
将预算约束问题建模为背包问题:
- 背包中物品的价值为<用户,ad>形成的序列价值 ( 长期成交、收藏加购等 ),
- 物品的重量为此序列中发生的成本 ( 消耗 );
我们按照性价比 ( 序列价值/成本 ) 由高到低逐个选择物品,直到选出的物品总消耗刚好不超过预算约束。
- 物品重量:由于物品重量远小于背包容量,按性价比排序的贪心算法能够接近最优解。
- **物体价值:**然而,每个序列的价值和成本与运营该序列的广告策略有关,因此这是一个动态背包问题。
为求解此动态背包,我们采用双层优化问题的解法来迭代求解:
物品的贪心挑选物品价值/成本以及对应策略的优化
4.2 背包问题
物体:每次接触当作物品
重量 - 成本损耗,max(预算) = B - Ct
体积 -
价值 - 成交价值 Vt
多物体: U个人
目标函数:价值最大
约束条件:成本损耗 < B
标签:问题,背包,两篇,Budget,Allocation,物品,预算,价值,segment 来源: https://blog.csdn.net/sinat_26917383/article/details/117713999