用户存续期价值评估CLV(二) BG/NBD Model python模拟

BG/NBD Model

…继续

想象每一个客户有两个硬币,一个“Buy Coin"控制客户购买的概率;一个"Die Coin"控制客户流失、不再购买的概率。

  1. 前面假设了客户的交易次数服从泊松过程:
    在这里插入图片描述
    在一年中的每个月,客户都以抛硬币的方式来决定是否购买。我们所观察到的购买次数取决与泊松分布的参数 𝜆。
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import poisson,expon,nbinom

poisson_lambda = 4.3
p_arr = []

distribution = poisson(poisson_lambda)
for transactions in range(0,10):
     p_arr.append(distribution.pmf(transactions))

plt.ylabel('Probability')
plt.xlabel('Number of Transactions')
plt.xticks(range(0, 10))
plt.title('Poisson Probability Mass Function')
plt.plot(p_arr, color='black', linewidth=0.7, zorder=1)
plt.scatter(range(0, 10), p_arr, color='purple', edgecolor='black', linewidth=0.7, zorder=2)
plt.show()

在这里插入图片描述
上图展示了以 𝜆=4.3 建模的购买概率的分布情况

  1. 假设交易率服从Gamma分布
    这也就是说,每个客户有自己的Buy Coin,每个Coin的正反面出现的概率是不一样的。
gamma_shape = 9
gamma_scale = 0.5

for customer in range(0, 100):
    distribution = poisson(np.random.gamma(shape=gamma_shape, scale=gamma_scale))
    p_arr = []
    for transactions in range(0,9):
        p_arr.append(distribution.pmf(transactions))
    plt.plot(p_arr, color='black', linewidth=0.7, zorder=1)
    
plt.ylabel('Probability')
plt.xlabel('Number of Transactions')
plt.xticks(range(0,9))
plt.title('Poisson Probability Distribution Curves 100 Customers')
plt.show()

在这里插入图片描述
上图模拟了以形状参数为9,尺度参数为0.5的Gamma分布建模的100个客户的泊松分布

  1. 在任意一个交易后,一个客户会以概率 𝑝 流失
    因此,客户失效点在交易中呈几何分布。
    在这里插入图片描述
    任何交易之后,客户都会以扔"Die Coin"来确定是否留存
p = 0.52
p_arr = []

for i in range(0,10): 
    proba_inactive = p*(1-p)**(i-1)
    p_arr.append(proba_inactive)
p_arr = np.array(p_arr)
p_arr /= p_arr.sum()

plt.plot(range(0, 10), p_arr, color='black', linewidth=0.7, zorder=1)
plt.ylabel('Probability inactive')
plt.xlabel('Number of Transactions')
plt.xticks(range(0, 10))
plt.title('(Shifted) Geometric Probability Mass Function')
plt.show()

在这里插入图片描述
上图展示了,以 𝑝=0.52 为流失概率建模,可以看到客户的交易次数越多,其流失率越低。

  1. 𝑝 服从Beta分布
    每个客户的"Die Coin"不同,每个都有自己的失效率,下面以 𝛼=2,𝛽=3 的贝塔分布建模
beta_a = 2
beta_b = 3

for customer in range(0, 10):
  p_arr = []
  beta = np.random.beta(a=beta_a, b=beta_b)
  for transaction in range(1,10): 
    proba_inactive = beta*(1-beta)**(transaction-1)
    p_arr.append(proba_inactive)
  p_arr = np.array(p_arr)
  plt.plot(p_arr, color='black', linewidth=0.7, zorder=1)

plt.ylabel('Probability Inactive')
plt.xlabel('Number of Transactions')
plt.xticks(range(1, 10))
plt.title('Geometric Probability Mass Function 10 customers')
plt.show()

在这里插入图片描述
模型输出
最后,通过以历史数据来拟合前面的模型可以为每一个客户导出:

  • 𝑃(𝑋(𝑡)=𝑥|𝜆,𝑝), 在长度为 𝑡 的时间内观测到 𝑥 个交易的概率
  • 𝐸(𝑋(𝑡)|𝜆,𝑝), 在长度为 𝑡 的时间内观测到 𝑥 个交易的期望值
  • 𝑃(𝜏>𝑡), 客户在期间 𝜏 流失概率
    拟合的参数可以用来预测未来某段时间长度 𝑡 的期望购买量,作者论文中的公式形如:
    a + b + x − 1 a − 1 [ 1 − ( α + T α + T + t ) r + x 2 F 1 ( r + x , b + x ; a + b + x − 1 ; t α + T + t ) ] 1 + δ x > 0 a b + x − 1 ( α + T α + t x ) r + x \frac{\frac{a+b+x-1}{a-1}[1-(\frac{\alpha+T}{\alpha+T+t})^{r+x}2^{F_1(r+x,b+x;a+b+x-1;\frac{t}{\alpha+T+t})}]}{1+\delta_{x>0}\frac{a}{b+x-1}(\frac{\alpha+T}{\alpha+t_x})^{r+x}} 1+δx>0b+x1a(α+txα+T)r+xa1a+b+x1[1(α+T+tα+T)r+x2F1(r+x,b+x;a+b+x1;α+T+tt)]
    其中, x x x=历史交易次数; t x t_x tx=上一次购买时间; T T T=客户的存续时间; 2 F 1 ( . ) 2^{F_1(.)} 2F1(.)为高斯超几何函数。

下一节我们将使用Python来实现整个模型, 未完待续…

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值