从预测到行动--如何从数据中学习最佳政策 (4/4)
在这个系列的最后一篇文章中,我们将学习如何找到一个最佳政策。
照片:Jens LelieonUnsplash
回顾一下。
- 在第一部分,我们讨论了从数据中学习_最优_政策的必要性。政策优化涵盖了_大量_的实际情况,我们简要地看了来自医疗保健、流失预防、目标营销和城市政府的例子。
- 在第二部分中,我们描述了如何创建一个数据集,使其适合于政策优化。
- 在第三部分,我们提出了一个简单的方法来使用这样一个数据集来估计政策的结果。 任何政策。
首先,值得注意的是,许多领域的研究人员--因果推断、计量经济学和情境匪徒--多年来一直在研究这个问题,并设计了许多算法来解决这个问题--双重稳健方法、直接方法、转换结果方法、双重机器学习、X-学习者、R-学习者等等。看看最近这项调查的第3节就知道我的意思了。
鉴于这种丰富的资源,我面临着在这篇文章中关注什么的困难问题。但幸运的是,对这一领域有重大贡献的研究团队之一在2018年组织了 "上下文强盗烘焙赛",许多关键的算法都在这里相互竞争。
一个相对简单的方法叫做 重要性加权回归 (IWR) 在比赛中表现出色,下面我将介绍它。IWR直接利用了我们关于如何建立回归模型的知识,直观易懂,并且可以使用你选择的任何监督学习回归方法轻松实现(如果你对基础理论感兴趣,请参见《使用回归奥拉的实用情境匪徒》)。
在第二部分,我们组装了一个这样的数据集。
图片来源:作者
或者,为了更具体,让我们使用Netflix的流失例子,有3个行动:提供20%的折扣,在另外两个设备上提供免费流媒体,什么都不做。
图片来源:作者
我们的目标是从这个数据集中学习一个函数,为每个客户分配最好的行动,也就是说,我们要学习一个最优策略。
使用重要性加权回归(IWR)学习最佳策略是一个三步的过程。
第一步:根据分配的_实际行动_来分割上面的数据集。
每一行动数据集(图片由作者提供
你现在会有和行动数量一样多的数据集。
第二步:利用_每个_数据集,建立一个回归模型,从客户特征向量_x_中预测结果_。_
最重要的是,你需要使用加权平方损失作为损失函数,其中权重是概率列中数字的倒数。
回归模型通常默认为最小化平方损失,所以这是很标准的。你必须做的_额外_事情是为训练集中的每个数据点送入一个权重。
图片来源:作者
让我们用代数法写下来,这样就不会有歧义了。
这就是了。
(BTW,加权回归通常是开箱即支持的。例如,在scikit-learn中,线性回归、梯度提升回归和随机森林回归都以一种简单而统一的方式支持加权,使用fit函数的_sample_weight_参数。
来自scikit-learn.org/stable/modu…
当你调用fit函数时,只需将_sample_weight_ 设置为概率列中数字的倒数)
在这一步结束时,你将会建立与行动一样多的回归模型。
第3步:对于任何客户特征向量_x_,通过 每个模型运行_x_ ,得到其行动的预测结果。
图片来源:作者
现在,选择预测结果最高的行动。
你已经学到了一个最佳的政策!
正如你在上面看到的,IWR中唯一的新东西(与传统回归相比)是使用概率的倒数作为权重。
这种概率的使用背后的直觉是什么?
为了简单起见,设想你的客户特征向量_x_只有一个元素:它是一个二元变量,如果有关客户曾经在Netflix上看过一部纪录片,它就是1,如果没有,就是0。
在与商业利益相关者协商后,假设你想出了以下_数据收集策略_(在第二部分中定义)。
数据收集政策(图片由作者提供
让我们专注于 "八折 "一栏。
图片由作者提供
假设我们随机选择了_N个_客户作为数据收集的样本,而纪录片观看者占样本的一部分_p_,所以在我们的样本中大约有_Np_个客户是纪录片观看者,而_N(1-p)_个客户不是。
图片由作者提供
鉴于此,"八折 "数据集中的顾客的大致数量将是。
图片来源:作者
(即,在我们的样本中观看纪录片的_Np_顾客中,根据我们的数据收集政策,其中50%将被分配到 "8折",所以我们得到_N_x_p_x 0.5)
但是我们现在有一个问题。在 "8折 "一栏中的x=1和x=0顾客的组合与样本中x=1和x=0顾客的整体组合不同。如果我们用这个倾斜的数据集建立一个回归模型,它对 "8折 "行动结果的预测可能会有偏差。
更一般地说,在一个你打算在整个客户群中使用的模型中,你用来建立模型的数据点的_x_分布方式应该与整个客户群的分布方式相同。
回到我们的例子,我们怎样才能解决这个问题?
一种方法是 "复制"这些点,使 "8折 "一栏中的x=1和x=0点的组合与样本中x=1和x=0顾客的整体组合相匹配。
比方说,我们对x=0的点数使用_u_的乘数,对x=1的点数使用_v_的乘数。乘法(即复制)完成后,新的点数显示在下面最右边一栏。
图片由作者提供
我们应该如何选择_u_和_v_,以使 "8折 "一栏中调整后的顾客数量与整个样本中的数字一致?
图片来源:作者
很简单。只需将乘数设置为概率的倒数即可**!**
设_u_=1/0.5,v=1/0.2。
图片来源:作者
乘数和概率很好地抵消了,调整后的数字与总体数字相符
(在实践中,我们并不复制数据点。相反,我们只是将概率的倒数作为权重插入损失函数中,它具有相同的效果)
总而言之,在回归中使用概率的倒数作为权重,可以消除由我们的数据收集政策造成的数据点的倾斜。
如果这个概率倒数业务让你想起了[第三部分](http://For the mathematically curious, here’s my attempt at a clearer version of the proof on the Wikipedia page that shows how the Horvitz-Thompson Estimator unbiasedly estimates the outcome of any policy.)中的霍维茨-汤普森估计器的工作原理,你的直觉是正确的!事实上,我们可以用一个类似的论证来证明IWR的工作。如果你感到好奇,帖子底部有一个代数证明。
(BTW,这种使用概率倒数进行调整的想法是一种非常普遍和强大的技术的一个简单例子,这种技术被称为重要性抽样,在许多领域被广泛使用)
你已经使用IWR学习了一个最优策略,并准备将你的最优策略投入使用。
我建议在你启动之前做最后一次调整。
世界在不断变化,你的最优策略中所捕捉和体现的客户行为模式会随着时间的推移而变化。_今天是最优的政策,下一季度可能就不是最优_了。
当然,你可以使用数据收集策略定期收集新的数据,并利用这些数据学习新的最优策略。但是有一个更好的方法。
在你的最优策略中添加一点随机性,然后启动(见第二部分中关于_epsilon-greedy的_讨论,以刷新你对如何做到这一点的记忆)。
通过这样做,你的最优策略可以作为一个数据收集策略。 每隔一段时间,你可以从中获取数据,使用IWR重新学习一个最优策略,并切换到该策略(但是,同样,当你启动它时,你会在其中加入一些随机化)。
在这篇文章中,我们将策略优化描述为一个批处理周期:运行一个数据收集策略一段时间,在收集到的数据上使用IWR来学习一个最优策略,部署添加了一点随机化的最优策略,并每隔一段时间重复一次。
但这也可以实时完成。在极端情况下,我们可以在_每次互动_ 后_(即每次观察到x->行动->结果后)通过_ 增量更新与所分配的行动相对应的IWR模型来完成。更多内容见这里。
在我们结束之前,让我们考虑一个非常重要的特殊情况:当我们只有 二 行动可供选择。通常,其中一个是_主动的_事情(例如,给病人吃X药,给顾客提供折扣),另一个是_被动的_事情(例如,给安慰剂,什么都不做)。
特别是在因果推理/计量经济学中,双行动(或双治疗)的情况极为常见,因为很多时候你想估计一个_干预_(又称行动或治疗)对现有系统的影响,_与不干预_相比。
在这种特殊情况下,你实际上可以只用一个直接预测两种行动之间结果差异的模型来学习一个最佳政策。在某些情况下,这可能比学习两个单独的模型更有效。要了解更多信息,请看最近这项调查的第3节,并关注其中的参考资料。
在这个由4个部分组成的系列中,我试图从庞大且快速增长的研究中提取政策优化的最实用元素。有大量真正有趣的材料--如果你想了解更多,这里有几个建议。
- IWR在2018年才首次被描述(参考),如果我在2018年之前试图写这篇文章,我可能会选择Doubly-Robust方法。更普遍的是,有许多替代IWR的方法,如果你有兴趣,可以从这个最近的调查开始,然后去你的好奇心的方向。
- 如果你对政策优化的库/模块感兴趣,这里有一个样本。Vowpal Wabbit,CausalML,EconML,PyLift, andUplift.特别是,这篇文章中描述的IWR方法是在Vowpal Wabbit库中实现的。
- 如果你对商业上的政策优化产品/服务感兴趣,这里有一个例子。
学习愉快!
可选的
对于好奇的人,这里有一个关于IWR如何工作的代数证明。
图片由作者提供
从预测到行动--如何从数据中学习最佳政策(4/4)》最初发表于Towards Data Scienceon Medium,人们通过强调和回应这个故事继续对话。