预算分配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)
  • 然后基于模型进行优化预算分配
    预算分配Budget Allocation:两篇论文(二)
    整个市场可以根据不同的商品、客户、消费习惯等维度分为多个组(定价歧视的分组,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

预算分配Budget Allocation:两篇论文(二)
这个是蛮典型的增长曲线,随着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可以扩展成
预算分配Budget Allocation:两篇论文(二)

1.3 优化预算分配

对于N个segments,预算分配需要决定每个segment的花费 c i ci ci,用 c : = [ c 1 , ⋯ , c N ] c:=[c1,⋯,cN] c:=[c1,⋯,cN],我们的目标是找到一个最优的c在预算约束下来最大化总销量,
预算分配Budget Allocation:两篇论文(二)
其中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:两篇论文(二)

上一篇:防抖(debounce) 和 节流(throttling)


下一篇:Kafka 架构模型