京东风控算法工程师带你解读Action Model-精细化运营(下篇)

文章目录

    • 前言
    • 模型设计
          • 公式回顾
          • 模型假设
          • 公式&变量定义
          • 分析误区
    • 模型搭建
    • 模型评估
    • 最后说两句

前言

在《我预见了1400万个未来,最优的决策只有一个(上)》中我们为大家介绍了Action Model,一个可以量化决策的影响的模型,并解释了它是如何给出最优决策的。本篇将着重为大家介绍如何构建Action Model,内容会更为具体,需要一定的业务和算法经验。

模型设计

公式回顾

在模型设计阶段,我们首先需要确定上篇中提出的数学抽象公式中的各个变量该如何选择。现在我们一起回顾一下上篇中定义的优化问题:


其中, p r o f i t ( ⋅ ) profit(·) profit()表示计算出长期利润的公式; a = { a 1 , . . . a m } \boldsymbol{a}=\{a_{1},...a_{m}\} a={a1,...am}表示需要考虑的Action变量; A A A表示我们对Action变量的取值范围所作出的限制,称为可行域; y = { y 1 , . . . y n } \boldsymbol{y}=\{y_{1},...y_{n}\} y={y1,...yn} 表示需要Action Model预测指标,称为子目标; c \boldsymbol{c} c表示不会随Action改变而改变,但也会影响收益的量,比如运营成本。这些内容决定了整个模型的框架,分别怎么设计呢?

模型假设
  1. 决策确实对我们预测的表现有客观存在且有规律的影响(这样我们才有可能预测);
  2. 对不同的人影响不同(这样才有必要预测)。
公式&变量定义

长期利润是我们最终的优化目标,所以 p r o f i t ( ⋅ ) profit(·) profit()的定义十分重要。上篇中已经提到,长期利润的公式需要根据自身的业务来定义。在复杂的业务下要准确表示长期利润,这个公式可能会变得及其复杂。这时,做适当简化将有助于实际操作。需要注意的是,在公式简化之后,我们仍然需要验证其表示的是否与真实长期利润整体保持一致。例如,在信贷场景中比较简单的定义可以是:响应率额度使用率*(定价-资金成本)-违约率违约余额损失率-运营成本。

Action需要是实际可操作的、并且会对长期利润的影响满足上述的两个基本假设的动作。比如,授信时的额度和定价就是我们可操作并会影响我们收益的动作。在实际操作中,我们可以将额度等连续的变量分段,具体的分段方法需要根据业务而定,既需要将不同意义的额度分开,也需要保证各个额度段上的样本量不能太少。例如,可以先将额度每2000作为一档,然后对高额度档再根据人数分布合并人数少的额度档。

c \boldsymbol{c} c和子目标 y \boldsymbol{y} y的定义可以一起考虑,上篇已经讲到,除了Action影响长期利润之外,还有很多量会影响收益,我们将其分为两类:需要用ActionModel预测的子目标 y \boldsymbol{y} y和不需要Action Model预测的量 c \boldsymbol{c} c。子目标的选定需要满足上文两个基本假设,其他变量可以作为 c \boldsymbol{c} c。判断量是否满足上文的两个假设时,对于我们确定的情况,可以根据业务经验判断是否满足,比如说定价对接受率的影响。但也有部分指标我们无法确定,这时就需要通过数据来进行分析。采用数据分析时,如果存在完全随机的测试,我们可以通过分析随机分组间的Action试验来验证上面的两点假设(实际上部分分析仍会受反向选择的影响)。

分析误区

但是,信贷领域的随机测试成本较高,如果没有随机测试数据,由于数据有偏,直接统计Action与子目标的关系也会出现偏差。举个例子,假如我们的产品已经积累了不少的用户,而且用户在不同的额度下表现出各自的收益和风险。这听上去很理想,只要我们的样本积累到一定量就可以了。但是稍做分析我们就会发现,数据结果显示:额度越高,违约率(违约人数占比)越低。这从业务上很好解释,因为通常获得高额度的用户都是优质用户,其违约风险也往往较低。那么,从数学层面如何应该解释呢?我们假设制定额度 a a a参考的是信用评分 s c o r e score score,这个决策过程我们用一个函数 g ( ⋅ ) g(·) g()表示:


假设 s c o r e score score越高代表信用越好,那么 g ( ⋅ ) g(·) g()显然是个单调递增函数。其反函数 g − 1 ( ⋅ ) g^{-1}(·) g1()也同样是个单调递增函数:


而真实的违约率由两个因素影响,一是用户本身的信用水平 f 1 f_{1} f1,二是额度对用户违约率产生的影响 f 2 f_{2} f2,这里将其表示为两项的加和:



其中 x \boldsymbol{x} x表示用户特征,显然 f 1 ( ⋅ ) f_{1}(·) f1()是个单调递减函数(信用分越高,违约率越低), g − 1 ( ⋅ ) g^{-1}(·) g1()单调递增(额度越高,信用分越高),因此 f 1 ( g − 1 ( ⋅ ) ) f_{1}(g^{-1}(·)) f1(g1())单调递减(额度越高,违约率越低)。且用户本身信用水平对违约率的影响强于额度对违约率的影响,第一项随额度升高而递减的趋势会掩盖第二项的趋势。最终的统计结果就是随额度提升,违约率下降。这种人为干预产生的额度与风险间的强相关性,将对我们分析和预测不同额度下的风险产生严重影响。机器学习模型还是属于统计学的范畴,无法区分到底是风险低导致的高额度,还是高额度导致了低风险。

京东风控算法工程师带你解读Action Model-精细化运营(下篇)_第1张图片 京东风控算法工程师带你解读Action Model-精细化运营(下篇)_第2张图片
(a)左图:理想的数据额度不根据用户信息而定
(b)右图:实际业务会参考信用水平来定额度,在该数据下统计的额度与违约率关系有偏


京东风控算法工程师带你解读Action Model-精细化运营(下篇)_第3张图片
图:数据中表现出来的额度与风险关系(模拟展示)


因此,无论是分析还是建模,我们都需要优先使用随机测试数据,消除信用水平score对额度a的影响。如果没有做过随机测试,我们只能退而求其次。这时可以尝试找一个分群方法,在这个分群下,用户是相似的,额度却不同,这样便能看到更接近于真实的情况。如何找这样的分群,域自适应领域有相关的研究可供参考。

模型搭建

确定好以上内容之后,我们就可以开始建模了。首先,为大家介绍我们是如何预测出所有可能Action下的子目标的。在训练过程中,我们将Action和用户特征一起作为输入,对应的子目标作为目标变量来训练模型。在得到训练好的模型进行预测时,我们输入用户特征和不同的Action,从而得到其在不同Action下的预测值。这样可以得到整个Action空间中的预测值,也就是上篇中的模型结果。

那么应该选择什么算法呢?我们的主要原则是:模型尽可能使用Action信息,且变量之间要有充分交叉。这里不建议直接使用逻辑回归等无交叉特征的模型,简单模型可以采用FM,并去除一次项,复杂模型可以用神经网络。如果想使用树模型,需要做一些修改来保证Action变量被选中并且在我们想要区分的取值上被切段。

我们的第一个假设是Action实际会影响用户行为,要学习到这种影响,Action变量的重要程度很大。如果Action变量与用户特征之间存在多重共线性导致信息被替代,最直接的后果就是,我们预测出Action变量的变化对用户的行为影响很小。这样模型自然给不出合理的建议结果,也就失效了。在建模过程中就应该注意这个问题,可以在建模之前就去掉一些与Action变量相关性较强的变量,也可以在模型设计的时候,限制模型尽可能使用Action信息。我们的第二个假设是Action对不同的人影响不同,学习到这一点,变量之间要有充分交叉,特别是Action变量与用户本身变量之间。我们的模型需要识别出不同用户对Action的敏感度不同,这点和ctr预估类似。

京东风控算法工程师带你解读Action Model-精细化运营(下篇)_第4张图片
图 真实数据中统计出:毛收益随额度上升持续增长。但实际情况下,用户的毛收益会随额度上升而饱和,最终趋于平缓。


需要注意的一点是,每个用户真实的label只有一个值(例如:真实额度下的收益),却要预测一条线(例如;不同额度下的收益变化趋势)。如果模型过拟合,则可能只会学习label对应的一个点(即真实额度下的收益),导致预测趋势无参考价值。要解决这个问题,可以增加一些正则项来防止模型只需从用户本身特征中获取信息,常见的范数约束、dropout、加入先验约束都可以。

模型评估

模型训练结束之后我们需要对模型进行评估,在没有上线测试效果之前,我们可以先利用离线的数据来评估一下。常见的RMSE、MSE等回归评价指标,或AUC、F1等分类评价指标均可以使用。但是这些指标却难以形象地刻画我们的模型带来的实际业务效果,毕竟理论指标与实际应用之间还存在较大差距。

如果有随机测试数据时,利用随机测试,我们可以对比不同Action下的真实收益趋势和预测趋势。如果没有随机测试数据,跟之前验证模型假设时类似,我们可以构造一些接近同质的组来验证。另外,我们还可以从模型的区分性、稳定性以及预测趋势是否具有可解释性等方面进行分析。

要衡量模型实际带来的增益,还是直接用线上方案做ABTest得到的数据最为准确。选择目标用户,随机分两组,A组按Action Model求解的最优结果作为决策,B组按照已有的决策给出策略,比较两组的长期利润来评估模型实际带来的提升。

最后说两句

Action Model本质上是量化策略对用户各种行为的影响,如何解决反事实推断是核心问题。虽然Action Model有广泛的应用场景,但对数据和算法都有比较高的要求,在实际研发中,从模型假设的验证、子目标和Action变量的选取,到模型算法的构建都有很多挑战。

该文章首发于公众号 JDD风控算法,想获取更多资讯请扫码关注或阅读原文

你可能感兴趣的:(最优决策,机器学习,数据挖掘,数据库)