🫑Python产品价格弹性生命周期和客户群利润点概率推理数学模型

关键词

Python | 概率 | 数学 | 模型 | 分布 | 建模 | 物种 | 质量 | 特征 | 预测 | 线性 | 回归 | 商品 | 营销 | 贝叶斯 | 推理 | 年度 | 多项式 | 植物 | 二氧化碳 | 大气 | 浓度 | 趋势 | 卡尔曼 | 状态空间 | 高斯 | 航班 | 似然 | 需求 | 手机 | 价格 | 体育 | 精确度 | 购买模式 | 预算 | 量化 | 论文 | 排序 | 功效 | USB | 激光 | 辐射

🏈指点迷津 | Brief

🎯要点

  1. 🎯概率推理数学模型:🖊物种质量分布线性模型 | 🖊物种特征和质量关系预测线性回归模型 | 🖊婴儿年龄与身高线性预测模型 | 🖊商品和客户交互效应销售量线性回归模型 | 🖊单日租赁单车数量多项式回归模型和贝叶斯加性回归树模型 | 🖊不同植物不同条件二氧化碳吸收量多项式回归 | 🖊大气二氧化碳浓度年度预测回归模型,趋势年度预测自回归模型,卡尔曼滤波状态空间模型,每月出生率预测推理线性高斯状态空间模型 | 🖊航班延误问题甘贝尔似然贝叶斯模型。

  2. 🎯概率推理建模分析:🖊每日销售额预测市场需求 | 🖊营销组合手段 | 🖊iPhone 手机产品生命周期预测 | 🖊商品价格弹性估计 | 🖊体育数据精确度评估 | 🖊客户预期购买模式 |🖊营销预算安排 | 🖊量化个人年度阅读计划 | 🖊论文排序预测 | 🖊根据人流量预测通勤车到站时间 | 🖊制药厂估算疫苗功效 | 🖊USB接头正确连接可能性 | 🖊朋友亲属左撇子可能性 | 🖊光电发射器激光粒子泊松分布辐射 | 🖊客户群预期利润点。

  3. 🎯概率推理神经网络图像识别、预测波形分布、图像分类、神经网络客户群预期利润增长点。

🍇Python估算营销推送购买服务效果

一项测试通过应用内购买衡量的与用户互动的推送的实验:随机选择 10000 个客户,并为每个客户分配 50% 的概率进行推送。 但是,当您执行测试时,您会注意到一些被分配接收推送的客户没有收到推送。 当你与工程师交谈时,他们说这是因为他们可能有一部旧手机,不支持营销团队设计的那种推送。

 import os
 import arviz as az
 import graphviz as gr
 import matplotlib.pyplot as plt
 import numpy as np
 import pandas as pd
 import seaborn as sns
 ​
 from linearmodels.iv import IV2SLS
 ​
 plt.style.use("bmh")
 plt.rcParams["figure.figsize"] = [12, 7]
 plt.rcParams["figure.dpi"] = 100
 plt.rcParams["figure.facecolor"] = "white"

我们直接从存储库读取 app_push.csv 数据。

 root_path = "https://raw.githubusercontent.com/data/"
 data_path = os.path.join(root_path, "app_push.csv")
 ​
 df = pd.read_csv(data_path)
 ​
 n = df.shape[0]
 ​
 df.head()
 in_app_purchase  push_assigned  push_delivered 04711143102515113491047900\begin{array}{||l|l|l|l||} \hline & \text { in\_app\_purchase } & \text { push\_assigned } & \text { push\_delivered } \\ \hline 0 & 47 & 1 & 1 \\ \hline 1 & 43 & 1 & 0 \\ \hline 2 & 51 & 51 & 1 \\ \hline 3 & 49 & 1 & 0 \\ \hline 4 & 79 & 0 & 0 \\ \hline \end{array}

这里我们有来自实验的应用内购买数据。列push_signed 和push_received 指示用户是否被分配到推送组以及用户是否实际收到推送通知。

首先,我们进行初始探索性数据分析以了解数据。首先,我们比较两组之间的 in_app_purchase 分布。

 fig, ax = plt.subplots(
     nrows=2, ncols=1, figsize=(9, 7), sharex=True, sharey=True, layout="constrained"
 )
 sns.histplot(x="in_app_purchase", hue="push_assigned", kde=True, data=df, ax=ax[0])
 sns.histplot(x="in_app_purchase", hue="push_delivered", kde=True, data=df, ax=ax[1])
 fig.suptitle("Histogram of in-app purchases", fontsize=16);
 ​

我们清楚地看到差异! 在筛选收到推送通知的用户时,我们发现 in_app_purchase 的值高于分配组中的用户。 这对于实验来说将是一个快速的胜利! 但我们也不应忽视不合规机制! 它可能隐藏实验中未控制的混杂因素。 我们来看看不合规的程度有多大。

 fig, ax = plt.subplots(figsize=(10, 6))
 df.query("push_assigned == 1")["push_delivered"].value_counts().plot(kind="bar", ax=ax)
 ax.set(title="Push Delivered Count Among Push Assigned", xlabel="Push delivered", ylabel="Count");

我们发现大约 30% 分配给推送的用户没有收到推送。 可能是什么原因? 嗯,这可能与使用旧手机的用户不太可能收到推送通知有关。 如果我们通过仅过滤掉那些收到推送通知的用户来分析推送通知对购买的影响,这自然会产生偏差,因为这些用户更有可能拥有比对照更高的收入(新手机)。

这是我们将用来对问题进行建模的有向无环图。

 g = gr.Digraph()
 ​
 g.edge("push assigned", "push delivered")
 g.edge("push delivered", "in app purchase")
 g.edge("income", "in app purchase")
 g.edge("income", "push delivered")
 g.node("income", color="blue")

未被观察到的收入混杂因素打开了一条我们无法直接关闭的路径(它是一个分叉!)。

让我们以最后一张图作为更定量分析的起点。我们将运行普通最小二乘回归来估计推送通知对购买的影响。我们从作业组开始。首先,我们简单地计算一些统计数据。

 df.groupby("push_assigned").agg({"in_app_purchase": ["mean", "std"]})
 in_app_purchase  mean  std  push_assigned 069.29167525.771624171.65527026.310248\begin{array}{||c||l|l|} \hline & \text { in\_app\_purchase } \\ \hline \hline & \text { mean } & \text { std } \\ \hline \hline \text { push\_assigned } & & \\ \hline \hline 0 & 69.291675 & 25.771624 \\ \hline \hline 1 & 71.655270 & 26.310248 \\ \hline \hline \end{array}

平均差异似乎相对较小。我们可以通过普通最小二乘回归来量化它。

 ols_formula = "in_app_purchase ~ 1 + push_assigned"
 ols = IV2SLS.from_formula(formula=ols_formula, data=df).fit()
 ols.summary.tables[1]

我们对收到推送通知的用户进行了类似的分析。

 df.groupby("push_delivered").agg({"in_app_purchase": ["mean", "std"]})
 in_app_purchase  mean  std  push_delivered 065.51851925.111324179.44995825.358723\begin{array}{|c||l|l||} \hline & \text { in\_app\_purchase } \\ \hline \hline & \text { mean } & \text { std } \\ \hline \hline \text { push\_delivered } & & \\ \hline \hline 0 & 65.518519 & 25.111324 \\ \hline \hline 1 & 79.449958 & 25.358723 \\ \hline \hline \end{array}
 ols_formula = "in_app_purchase ~ 1 + push_delivered"
 ols = IV2SLS.from_formula(formula=ols_formula, data=df).fit()
 ols.summary.tables[1]

我们甚至可以尝试通过将分配组作为协变量纳入回归来控制分配组。

 ols_formula = "in_app_purchase ~ 1 + push_assigned + push_delivered"
 ols = IV2SLS.from_formula(formula=ols_formula, data=df).fit()
 ols.summary.tables[1]

总之,问题在于与作业和结果相关的未观察到的混杂因素。我们可以使用工具变量来获得更好的估计

  • 我们将 in_app_purchase (y) 建模为 Push_delivered t 和误差项 εy\varepsilon_y 的函数。

  • 同时,我们将处理模型化为push_assigned z 和误差项εt\varepsilon_t 的函数。

我们假设误差的联合分布可以通过均值为零和协方差矩阵Σ\Sigma​的多元正态分布来参数化。

Last updated