• 项目源码链接:Github Repo
## 下载源码,请使用以下命令在你的本地上克隆repogit init
git clone [项目源码链接]

背景信息

该项目将提供一个数据集,星巴克原先使用该数据集作为面试题。该数据集共包含 120,000个数据点,按照 2:1 的比例划分为训练文件和测试文件。数据模拟的实验测试了一项广告宣传活动,看看该宣传活动能否吸引更多客户购买定价为 10 美元的特定产品。由于公司分发每份宣传资料的成本为 0.15 美元,所以宣传资料最好仅面向最相关的人群。每个数据点都有一列表示是否向某个人发送了产品宣传资料,另一列表示此人最终是否购买了该产品。每个人还有另外 7 个相关特征,表示为 V1-V7。

评估指标

  • 增量响应量(IRP)

    IRR 表示与没有收到宣传资料相比,因为推广活动而购买产品的客户增加了多少。从数学角度来说,IRR 等于推广小组的购买者人数与购买者小组客户总数的比例 (treatment) 减去非推广小组的购买者人数与非推广小组的客户总数的比例 (control)。

    I R R = p u r c h t r e a t c u s t t r e a t − p u r c h c t r l c u s t c t r l IRR = \frac{purch_{treat}}{cust_{treat}} - \frac{purch_{ctrl}}{cust_{ctrl}} IRR=custtreat​purchtreat​​−custctrl​purchctrl​​

  • 净增量收入 (NIR)

    NIR 表示分发宣传资料后获得(丢失)了多少收入。从数学角度来讲,NIR 等于收到宣传资料的购买者总人数的 10 倍减去分发的宣传资料份数的 0.15 倍,再减去没有收到宣传资料的购买者人数的 10 倍。

    N I R = ( 10 ⋅ p u r c h t r e a t − 0.15 ⋅ c u s t t r e a t ) − 10 ⋅ p u r c h c t r l NIR = (10\cdot purch_{treat} - 0.15 \cdot cust_{treat}) - 10 \cdot purch_{ctrl} NIR=(10⋅purchtreat​−0.15⋅custtreat​)−10⋅purchctrl​

项目目标

通过训练数据了解 V1-V7 存在什么规律表明应该向用户分发宣传资料从而最大化上述的两个指标。
要详细了解星巴克提供给应聘者的数据集,请参阅此处的说明。
下面是训练数据。研究数据和不同的优化策略。

如何测试你的策略?

如果你想到了优化策略,请完成要传递给 test_results 函数的 promotion_strategy 函数。
根据以往的数据,我们知道有四种可能的结果:

实际推广客户与预测推广客户表格:

实际
预测
I II
III IV

我们仅针对预测应该包含推广活动的个人比较了指标,即第一象限和第二象限。由于收到宣传资料的第一组客户(在训练集中)是随机收到的,因此第一象限和第二象限的参与者人数应该大致相同。

比较第一象限与第二象限可以知道宣传策略未来效果如何。

首先阅读以下数据。看看每个变量或变量组合与推广活动对购买率有何影响。你想到谁应该接收宣传资料的策略后,请使用在最后的 test_results 函数中使用的测试数据集测试你的策略。

# load in packages
from itertools import combinationsimport statsmodels.api as sm
from test_results import test_results, score
import numpy as np
import pandas as pd
import scipy as sp
import sklearn as skimport matplotlib.pyplot as plt
import seaborn as sb
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline# load in the data
train_data = pd.read_csv('./training.csv')
train_data.head()
D:\Anaconda3\lib\site-packages\statsmodels\tools\_testing.py:19: FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.import pandas.util.testing as tm
ID Promotion purchase V1 V2 V3 V4 V5 V6 V7
0 1 No 0 2 30.443518 -1.165083 1 1 3 2
1 3 No 0 3 32.159350 -0.645617 2 3 2 2
2 4 No 0 2 30.431659 0.133583 1 1 4 2
3 5 No 0 0 26.588914 -0.212728 2 1 4 2
4 8 Yes 0 3 28.044332 -0.385883 1 1 2 2

数据评估和清洗

train_data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 84534 entries, 0 to 84533
Data columns (total 10 columns):#   Column     Non-Null Count  Dtype
---  ------     --------------  -----  0   ID         84534 non-null  int64  1   Promotion  84534 non-null  object 2   purchase   84534 non-null  int64  3   V1         84534 non-null  int64  4   V2         84534 non-null  float645   V3         84534 non-null  float646   V4         84534 non-null  int64  7   V5         84534 non-null  int64  8   V6         84534 non-null  int64  9   V7         84534 non-null  int64
dtypes: float64(2), int64(7), object(1)
memory usage: 6.1+ MB
print('重复数值个数:', train_data.duplicated(subset='ID').sum())
print('缺失值个数:',train_data.isnull().sum().sum())
重复数值个数: 0
缺失值个数: 0
for column in train_data.columns:print(column)print('---')print(train_data[column].unique())
ID
---
[     1      3      4 ... 126182 126183 126184]
Promotion
---
['No' 'Yes']
purchase
---
[0 1]
V1
---
[2 3 0 1]
V2
---
[30.4435178 32.1593501 30.4316591 ... 31.4920187 37.7661061 21.7208355]
V3
---
[-1.1650834  -0.6456167   0.13358341 -0.2127277  -0.3858833  -0.905351.08593908 -1.4248168   0.39331678  0.56647235 -1.5113946   0.739627931.60540581 -1.2516612   1.51882802  0.2201612  -0.12615    -1.6845501-0.9919278  -0.5590389   1.6919836   0.82620572  0.99936129 -0.47246110.04700562 -1.338239   -1.5979723   0.30673899 -0.0395722   1.345672450.91278351 -0.8187723   1.43225023  1.25909466  1.17251687  0.47989457-0.7321945  -1.0785056  -0.2993055   0.65305014]
V4
---
[1 2]
V5
---
[1 3 4 2]
V6
---
[3 2 4 1]
V7
---
[2 1]

有上图可以看出,V2和V3特征上是连续性变量,其他特征可能是分类型变量也可能是具有数字意义的离散型变量

显著性检验

检查不变指标

检查treat组人数与control组人数的平衡性

  • 零假设:p_treat = p_control
  • 备择假设:p_treat ≠ \neq ​= n_control
train_data.Promotion.value_counts()
Yes    42364
No     42170
Name: Promotion, dtype: int64
n_total = train_data.shape[0]
n_treat = train_data.Promotion.value_counts()['Yes']
n_control = train_data.Promotion.value_counts()['No']
actual_p_treat = n_treat/n_total
print("样本中treat组人数占总人数的比例:","%.2f"%actual_p_treat)
样本中treat组人数占总人数的比例: 0.50
import scipy.stats as statsp_treat_null = 0.5
std_treat_null = np.sqrt(p_treat_null * (1 - p_treat_null)/n_total)
null_dist = stats.norm(loc=p_treat_null, scale=std_treat_null)
p_val = (1 - null_dist.cdf(actual_p_treat)) * 2
p_val
0.5046149723893156

p_val = 0.5046 > $\alpha = 0.05 $, 所以不拒绝原假设,即treat组人数和control组人数是相等的

检验评估指标

增量响应率
I R R = p u r c h t r e a t c u s t t r e a t − p u r c h c t r l c u s t c t r l IRR = \frac{purch_{treat}}{cust_{treat}} - \frac{purch_{ctrl}}{cust_{ctrl}} IRR=custtreat​purchtreat​​−custctrl​purchctrl​​

净增量收入
N I R = ( 10 ⋅ p u r c h t r e a t − 0.15 ⋅ c u s t t r e a t ) − 10 ⋅ p u r c h c t r l NIR = (10\cdot purch_{treat} - 0.15 \cdot cust_{treat}) - 10 \cdot purch_{ctrl} NIR=(10⋅purchtreat​−0.15⋅custtreat​)−10⋅purchctrl​

检验评估指标 I R P IRP IRP是否具有统计显著性,检查 N I R NIR NIR是否具有统计功效

# 计算实际IRP
n_treat_purch =train_data.query("Promotion == 'Yes' and purchase == 1").shape[0]
n_ctrl_purch =train_data.query("Promotion == 'No' and purchase == 1").shape[0]
irp, nir = score(train_data)
irp, nir
(0.009454547819772702, -2334.5999999999995)

IRP的统计显著性检验

  • 零假设:IRP = 0
  • 备择假设:IRP > 0

由于上述样本量都大于30,所以treat组的购买率与control组的购买率的抽样分布均服从正态分布

# 使用statsmodel.proportions_ztest进行irp的显著性统计检验
zstat, p_val = sm.stats.proportions_ztest([n_treat_purch, n_ctrl_purch],[n_treat,n_control], alternative='larger')
print("p_val_irf:","%.2f"%p_val)
p_val_irf: 0.00

p_val = 0.0 <

关于星巴克推广活动的实验测试相关推荐

  1. 【全球数字化转型企业实录】“70后”星巴克,零售餐饮业数字化“先驱”

    不管你多么成功,如果你只满足现状,你会落入死亡的陷阱. --星巴克集团前CEO霍华德•舒尔茨(Howard Schultz) 用每一杯咖啡传递星巴克独特的咖啡体验--星巴克(Starbucks)从来不 ...

  2. 互联网晚报 | 1月19日 星期三 | 支付宝“集五福”活动正式开启;星巴克全面上线美团外卖;微软正式收购动视暴雪...

    ‍ 今日看点 ✦ 统计局:2021年全国居民人均可支配收入35128元,人均消费支出24100元 ✦ 支付宝"集五福"活动正式开启,超1000个商家机构成发福卡主角 ✦ 百度:集度 ...

  3. 如何使用ADLab搭建活动目录实验环境来练习渗透测试技术

    关于ADLab PowerShell模块 ADLab是一个功能强大的PowerShell模块,该工具可以自动化实现一个活动目录实验环境,以帮助广大研究人员更好地学习和研究内部网络环境内的渗透测试技术. ...

  4. APP推广案例之星巴克APP营销方式

    Starbucks-星巴克作为覆盖全球超级连锁咖啡店,其品牌知名度对于广大群众尤其是都市白领来讲并不陌生,更甚者星巴克早已成为他们生活的一部分.星巴克售给顾客的并不仅仅是咖啡,还有在其他店里享受不到到 ...

  5. 互联网晚报 | 2月17日 星期四 | 小鹏汽车回应总裁年薪超4亿;B站将上线开播前人脸认证功能;星巴克再次涨价...

    今日看点 ✦ Redmi K50电竞版正式发布:搭载高通骁龙8Gen1,售价3299元起 ✦ 小鹏汽车回应"总裁年薪超4亿":系误解,实为多年累积的股权激励 ✦ B站直播新规:开播 ...

  6. 情怀再次输给现实!中国式星巴克,如今亏到连租金都交不起

    本文经授权转载自公众号金错刀(ID:ijincuodao),作者:Zoe 雕刻时光要关门了! 就是那个第一代国内咖啡品牌.文化空间的领军者倒下了!! 北京市海淀区人民法院的封条贴在它紧闭的玻璃门上,店 ...

  7. 可口可乐发布全新品牌理念;百胜中国要开1000家Lavazza咖啡店;全球“最绿”星巴克门店开业 | 食品饮料新品...

    沃尔玛.联合利华.百胜中国.麦当劳中国.可口可乐.百事公司.星巴克.SHAKE SHACK.和府"小面小酒".别样肉客.美国New Age Meats等企业最新动态. 新店开业 麦 ...

  8. Tapestry携旗下蔻驰等三大品牌再赴进博会;星巴克连续第三年成为进博会支持企业 | 美通企业日报...

    今日看点 Tapestry亮相第三届进博会,携旗下三大品牌再赴"进博之约".连续第二年参展的现代奢华配饰及生活方式类品牌公司Tapestry, Inc.(泰佩思琦)携旗下三大品牌C ...

  9. 星巴克中国“共享空间”全新门店上海开业;百胜中国新增餐厅经理百万医疗险 | 食品饮料新品...

    星巴克中国.奈雪的茶.百胜中国.苏格兰威士忌投资.尊尼获加等企业最新动态. 新店开业 星巴克中国内地首家共享空间概念店诞生 星巴克中国于近日宣布,中国内地首家星巴克共享空间概念店已于上海来福士广场办公 ...

最新文章

  1. 在VirtualBox下安装linux操作系统
  2. Java并发_volatile实现可见性但不保证原子性
  3. python 笔记:读取mat文件
  4. JavaScript操作DOM元素
  5. IIS错误与解决方法
  6. .NET 6 使用 string.Create 提升字符串创建和拼接性能
  7. MySQL索引背后的数据结构及算法原理(转)
  8. 课程 | 《知识图谱》第二期重磅来袭!
  9. Web前端小例子——简单导航栏
  10. 如何无信用卡申请谷歌云
  11. rtl8111gr服务器系统,6款主板板载网卡对比
  12. 阿里电话面试面试题总结,附答案!
  13. 盘古搜索:上市是既定策略 寻求股权多元化
  14. 【高等数学】(底数>1和底数<1的)幂函数的图像
  15. Android /assets
  16. 便利vector_你好,C++!(57)9.2 vector容器是数组的最佳替代者
  17. Qt:创建文件夹QDir
  18. C++基础入门(超详细)
  19. 模仿天猫数据的一些语句分析
  20. Linux多人聊天室之前篇

热门文章

  1. vue 日历签到组件
  2. 直播APP源码iOS 调用系统铃声震动
  3. 做技术应该持有什么样的工作态度?
  4. aect17定义_美AECT日前发布新的教育技术定义
  5. 体验论文新神器!AMiner人工智能工具,自动溯源论文来龙去脉
  6. 十大编程语言黑客向,学会一个不怕没工作,全部学会随便秀操作
  7. word点击退出时未保存怎么办?
  8. mysql按时间段统计_mysql按照时间段内 每天统计
  9. MT6771平台简要了解
  10. python--异常捕获