深入研究BG-NBD,这是一个有影响力的分层模型,有助于了解客户的购买行为。
1. 客户终身价值的重要性
客户终身价值(CLV)是指客户在其关系期内对公司的总价值。在实践中,这个"价值"可以被定义为收入、利润或分析师选择的其他指标。
CLV是一个需要追踪的重要指标,有2个原因:
-
-
首先,一个公司在其整个客户群中的总CLV给出了一个关于其市场价值的大致概念与理解。因此,一个拥有高的CLV的公司对投资者来说会显得很有吸引力。 -
-
其次,CLV分析可以指导客户获取和挽留战略的制定。例如,可以对高价值客户给予特别关注,以确保他们对公司保持忠诚。
许多CLV模型已经被开发出来,具有不同程度的复杂性和准确性,从粗糙的启发式方法到使用复杂的概率模型框架。在本系列文章中,我们将深入研究其中一个。β几何负二项分布(BG-NBD)模型。这个模型由Fader、Hardie和Lee在2005年¹开发,由于其可解释性和准确性,一直是该领域中最有影响力的模型。
这个系列由三篇文章组成,它们彼此相辅相成。我们文章布局如下:
-
在第一部分,我们将实现对BG-NBD模型及其假设的ELI-5理解。
-
在[[用lifetime来模拟客户的CLV]]中,我们将研究Python库lifetimes,可以让我们以类似于 scikit-learn 的方式方便地将BG-NBD模型拟合到数据集上,并几乎立即得到模型参数的最大似然估计。我们还将探索 lifetimes 实现的各种下游分析。
-
在[[计算客户LTV-pymc3]]中,我们将看看实现BG-NBD模型的另一种方式,这次是以贝叶斯的角度。我们将看到贝叶斯分层的BG-NBD模型如何允许我们将我们对顾客行为的先验直觉注入模型。为此,我们将使用Python库[PyMC3](https://docs.pymc.io/en/v3/)。
2. BG-NBD的范围
在深入研究BG-NBD的数学原理之前,我们需要了解它能做什么和不能做什么。有两个主要的局限性需要牢记。
该模型只适用于非合约性的连续购买。
该模型只解决了CLV计算的一个组成部分,即预测购买数量。
让我们更详细地了解一下这些限制。
3. BG-NBD适用于非合同性的连续购买行为
根据卖方和买方之间的关系,企业可以是一个 合同性企业 或 非合同性企业 。
-
合同型企业,顾名思义,是指买方和卖方的关系受合同约束的企业。当任何一方不再想继续这种关系时,合同就会终止。由于合同的存在,对于某人在某一时刻是否是该企业的客户,并不存在模糊不清的问题。 -
另一方面,在一个无合同的企业中,购买是按需要进行的,没有任何合同。
我们可以进一步区分 连续 和 离散 的环境。
-
在一个 连续 的环境中,购买可以在任何特定的时刻发生。大多数的购买情况(如购买食品杂货)都属于这一类别。 -
在一个 离散 的环境中,购买通常是定期发生的,有一定程度的规律性。这方面的一个例子是每周购买杂志。
| 类型 | 非合约 | 合约型 |
|---|---|---|
| 连续 | 电子商务或杂货店 | 信用卡或sim卡每笔消费金额 |
| 离散 | 足球赛缺席或周期购买杂志 | 奈飞或健身房的会员卡 |
BG-NBD模型处理的是非合同性的、连续的情况,是四种情况中最常见的、最难分析的。在这种情况下,客户流失是无法明确观察到的,而且随时可能发生。这使得区分无限期流失顾客和回流顾客变得更加困难。正如我们将在后面看到的,BG-NBD模型能够为这两个选项中的每一个分配概率。
4. BG-NBD专注于预测交易数量
一个客户在某一时期的CLV可以通过乘以两个数字来计算。
-
该客户在这一时期内的预测订单数量。
-
每笔订单购买的价值。
通常,这两个部分是分开处理和建模的。BG-NBD模型解决了第一个问题--预测交易数量,这是两个问题中比较困难的一个。
第二部分,购买的预期价值,可以通过使用简单的启发式方法,如取过去所有购买的平均值,或通过更复杂的概率模型,如Gamma-Gamma模型²(这也是由BG-NBD的作者创建的)来找到。
5. 直觉
在进入模型的数学运算之前,让我们试着理解该模型在概念层面上是如何工作的。
让我们想象一下下面的情景。日期是2021年12月31日,你是一家蛋糕店的经理。你仔细记录了今年发生的所有交易,你想预测2022年你的顾客会有多少交易量。
你也碰巧是一个熟练的数据科学家,你计划通过对你的数据进行拟合模型来实现这一预测。这个模型应该能够以一种可解释的方式描述你的客户的购买行为。
在开发模型时,有一些假设你可以考虑。
6. 每个客户都有不同的购买率
你已经注意到,有些人每天都买蛋糕,有些人每周末都买蛋糕。其他人只在平均每六个月的特殊场合购买。你的模型将需要一种方法,为每个客户分配不同的购买率。
7. 每个客户可以在任何时候流失
在竞争激烈的蛋糕行业,忠诚度是无法保证的。在任何时候,你的客户都可以离开你的企业去找另一个。我们把这种离开称为以前活跃客户的 "流失"。
为了方便建立流失的模型,我们可以假设它只在成功购买后发生。也就是说,在你的商店里每次购买后,顾客都会决定他是否继续在你的商店里购买,或不再购买。当顾客决定选择后者时,流失就会发生。
我们将假设流失既是永久的,也是隐形的。永久,意味着一旦客户决定流失,他将永远不会再回来。隐形性,因为数据不会明确地告诉你:他将不再是你的客户。
图解
有了这些假设,让我们考虑以下情况,我们有两个客户,A和B。他们每个人都在2021年进行了一些交易,每笔交易都用红点表示。
我们能不能判断哪些客户已经流失,哪些客户仍然会经常光顾你的商店,为你的未来收入做出贡献?
答案是肯定的--在某种程度上。例如,看一下上面A的模式,我们看到他过去经常购物,但已经有一段时间没有看到他了。因为他的交易间隔时间比他上次交易后的时间短得多,所以A很可能已经流失了。
另一方面,B是一个不经常购物的人,与她的平均购买间隔时间相比,她最近的购买时间并不长。她很可能会回来。
现在让我们把这些假设和直觉发展成一个更复杂的模型!
数学模型
概率模型:介绍
传统上,CLV是用过去数据的一个简单函数来计算的。例如,我们可以通过取过去交易价值的一个固定分数来估计未来交易的价值。这样的计算是简单化的,但不可靠的,也是不可解释的。
另一方面,BG-NBD模型是一个概率模型 。在概率模型中,我们假设我们的观察(即交易)是由一个物理过程产生的,我们可以用概率分布来建模。我们的任务是估计能够最好地解释我们现有观察结果的参数。一个常用的办法是找到这些参数的最大似然估计值。然后我们可以使用这些估计的参数来进行未来的预测。与第一种相比,这种概率框架通常更加稳健、准确、可解释。
有了这个介绍,现在让我们把上面定性描述的假设转换成稳健的概率模型框架。
泊松过程来模拟交易,指数分布来模拟购买之间的时间
首先,我们来关注活跃客户的重复购买行为。我们可以假设,只要客户仍然活跃,他们的交易遵循一个泊松过程,购买率恒定𝜆。有了这个假设,我们可以将下一次购买的时间 Δt 建模为一个指数分布,参数为𝜆。这个分布的PDF是这样的:
每个活跃的客户将有他自己的指数分布,我们可以用它来预测下一次购买的时间概率。
上图显示了与两个顾客相关的两个指数分布的PDF。第一位顾客(蓝色曲线)一般每天买一个蛋糕(他的购买率𝜆为1个蛋糕/天)。他的下一次购买是在当前购买的一天之内发生的概率,可以通过取蓝色曲线下0和1之间的面积,计算出0.63。
第二位顾客每周只买一个蛋糕(他的𝜆是1/7蛋糕/天)。在进行同样的整合后,我们看到他的下一次购买发生在明天之前的某个时间的可能性要小得多(P=0.13)。
Gamma分布来描述不同人群购买行为的变化
我们可以认为,所有这些顾客,以其不同的𝜆,为整个商店的𝜆分布做出了贡献。我们现在的任务是为这个𝜆分布建模。在这样做的时候,我们需要遵守以下要求。
-
这个分布最好是一个理论成熟的分布。 -
由于𝜆只能在正实数中取值,所选择的分布必须只有正值。 -
该分布需要足够灵活,以模拟具有不同购买行为的不同客户群。
Gamma分布符合所有这些条件,是BG-NBD中用来模拟𝜆的一种。它的参数是形状参数 r 和尺度参数α;这两个参数的不同组合导致Gamma分布具有不同的形状。下面是Gamma分布的PDF:
值得注意的是,这种Gamma分布并不只是存在于理论层面的。事实上,特定的Gamma分布定量地描述了特定客户群的集体购买行为,并带有重要的商业含义。
例如,下图中的蓝线显示了一个向下倾斜、向左倾斜的Gamma分布,它是将 r 和 α 都设置为1的结果。如果这个分布与我的客户群相对应,我不会太高兴--严重的左倾意味着我的大部分客户的购买率𝜆接近于零。也就是说,他们几乎没有购买任何蛋糕!
另一个Gamma分布显示为橙色。这是一个更健康的分布,其中𝜆的峰值在2左右,这意味着这个客户群中有相当大的一部分人每天购买两个蛋糕。不算太寒酸!
现在,Poisson/Gamma分布的组合,我们一直在使用它来模拟我们客户的购买行为,也被称为负二项分布(NBD)。是的,这就是我们模型名称的由来。
客户的流失被建模为一个几何过程
现在让我们来处理流失过程。如前所述,在每次购买后,客户会做出是否流失的决定。我们可以为这种流失分配一个概率 p 。因此,客户流失后的交易是按照几何分布分布的。这个离散分布的PMF如下所示。
这个PMF是非常直观的--它来自于注意到
-
如果一个客户在xᵗʰ交易后流失,他必须在之前的x-1个交易中留存下来 -
每个留存的概率是(1-p)。
请注意,根据定义,一个客户在流失前必须至少进行过一次交易(否则他一开始就不会成为我们的客户!)。
下图比较了两位顾客的 p = 0.01和 p = 0.1。这个PMF是非常直观的--它来自于注意到:
-
如果一个客户在xᵗʰ交易后流失,他必须在之前的x-1个交易中存活下来, -
每个存活的概率是(1-p)。请注意,根据定义,一个客户在流失前必须至少进行过一次交易(否则他一开始就不会成为我们的客户!)。
下图比较了两位顾客的 p = 0.01和 p = 0.1。
我们可以看到,p 越高,流失就越有可能提前发生。与 p =0.1(橙色)的客户相比,p=0.01(蓝色)的客户流失的概率要低很多。
β分布来描述流失概率的变化
与𝜆类似,考虑一个客户群体与一个分布 p 有关是很有用的。然而,这一次,我们不能使用Gamma分布,它没有上限。我们需要另一个同样灵活的分布,但其数值范围为0到1(因为 p 只能在0到1之间)。
这一次,贝塔分布符合我们的需要。这里是贝塔分布的PDF文件。
我们可以看到,该分布的参数是两个正的形状参数 a 和 b 。下面是一些Beta分布的例子。
与Gamma分布相似,这个Beta分布也有商业含义。你希望看到一个左偏的Beta分布,它的大部分权重都在0附近,这表明你的大多数客户的 p 很低,不太可能提前流失。上图中的橙色线条就是一个例子。
另一个简单的说明--正是这种Beta/Geometric分布的组合,产生了BG-NBD模型中的 "BG"。现在你知道了吧!
把一切联系在一起:个人层面上的可能性数学模型
我们已经看了所有的分布,我们用这些分布来定量地描述客户的行为。那么,我们如何获得这些分布的最佳参数呢?
一种方法是获得最大似然估计值(MLE),这个参数估计值使模型产生实际观察到的数据的可能性最大化。
让我们把它变得更加具体。假设我们目前处于时间 T ,我们正在回顾一个特定客户的历史交易,该客户的购买率为𝜆。他的第一笔交易发生在 ,最后一笔交易发生在 。这些时间点画在时间轴上,看起来像这样。
我们可以通过以下步骤推导出这个人的个人层面的似然函数。
-
第一笔交易发生在 的可能性是用我们前面阐述的指数分布来描述的。
-
第二笔交易在 发生的可能性是客户在 之后仍然活跃的概率(1-p)乘以标准指数可能性分量。
-
这样的可能性模式在随后的每一笔交易中都会重复出现,也就是说, 交易在 发生的可能性是。
-
现在,让我们分析一下在 的最后一笔交易之后发生了什么。我们没有观察到 和T;_之间的任何交易,这种流失可能是由于以下两种情况之一。
-
客户在 的最后一笔交易后流失了。正如我们所知,这种情况发生的概率是 p 。 -
他仍然活跃,但在这个时间间隔内没有进行任何交易。这种情况发生的概率是:
-
我们观察到的交易模式的可能性只是早期交易的所有可能性乘以两种情况下的似然之和。
-
上述定义的可能性公式适用于在观察期内进行了那些购买的客户。由于我们假设所有的客户一开始都是活跃的,所以客户在时间[0, T]之间不进行任何购买的可能性是标准的指数函数。
-
最后,结合上述两个可能性公式,我们得到一个适用于所有客户的通用公式,无论他们进行了多少次交易(或没有交易)。
如果 那么 其他为0
然后我们可以通过编程尝试不同的 p 和𝜆值,并选择一个(p, 𝜆)组合,使这个可能性最大化。这些参数值被称为最大似然估计值(MLE),代表了描述该个体的购买行为和流失概率的 "最佳 "参数。
请注意,这个个人层面的似然函数只涉及三个未知的变量,需要由数据提供。
-
x :T重复交易的数量。这也被称为(重复)的频率。 -
:客户在最后一次交易时的年龄,也就是说,他的第一次和最后一次交易之间的时间。这也被称为频度。 -
T : 客户在分析时的年龄,也就是说,从他第一次交易到分析时的时间。
有趣的是,我们可以看到,早期交易的时间并不是公式的一部分。
一个数据集,其行对应于不同的客户ID,其列表示每个客户的 x、 和 T ,被称为是 "RFM格式"。这里的 "R"和 "F"分别代表经常性和频率。同时,"M"代表货币价值;这一栏我们不会在分析中使用,因为我们不关心交易价值。RFM格式是CLV分析中经常使用的典范格式。
放大:人口层面上的可能性数学模型
作为一家拥有许多客户的公司,很多时候,我们对观察单个客户并不太感兴趣。相反,我们想把我们的客户群作为一个整体进行分析。具体来说,我们有兴趣获得描述我们整个业务表现的最佳Gamma和Beta分布。
就像我们可以用MLE来获得个体的最佳 p 和𝜆一样,我们也可以用MLE来获得群体的最佳 r, α, a,和 b。我不会在本文中推导群体水平的似然方程;它太繁琐了。然而,如果你已经理解了上面的数学,你应该可以深入研究[BG-NBD论文]中明确解释的推导。](http://brucehardie.com/papers/018/fader_et_al_mksc_05.pdf)
序幕
BG-NBD的其他应用
到目前为止,我们的讨论都是围绕着CLV计算展开的,这也是BG-NBD最初的目的。然而,BG-NBD的用途比这更广泛。事实上,它可以用来模拟任何涉及不同 "用户"重复 "交易"的现象,并预测(1)这些 "用户"未来会进行多少次 "交易",前提是他们仍然 "活跃";(2)他们在分析时间内仍然 "活跃"的概率。比如说。
-
通过探索用户的使用历史来预测一个APP的未来使用频率。 -
通过分析你那曾经定期给你打电话的远房亲戚的通话模式,计算出她仍然活着的概率,从字面上看。 -
通过查看短信频率,检查你的约会对象是否已经对你不感兴趣了。
往前走
好吧,我知道我们已经经历了很多数学运算,这可能是一个挑战。你可能会想:有没有办法跳过所有这些方程式,使用这个模型的现成实现,开始从中推导出商业价值?
我听到了! 在[[用lifetime来模拟客户的CLV]]中,我们将看看Python库 lifetimes ,它让我们使用几行代码从给定的过去交易记录中得到 r, α, a,和 b 的MLE。这个库还包含其他有用的分析和绘图功能,使我们能够从BG-NBD模型和其他相关模型中获得商业洞察力。
之后,在[[计算客户LTV-pymc3]]中,我们将检查BG-NBD的另一种实现,它从贝叶斯的角度来进行参数估计。这个贝叶斯框架将允许我们在建模过程中 "注入"我们的领域知识和/或信念。
加油!


