前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python实战:利用Uplift模型识别营销敏感用户提升市场策略(二)

Python实战:利用Uplift模型识别营销敏感用户提升市场策略(二)

作者头像
数据万花筒
发布2021-08-25 16:37:26
1.1K0
发布2021-08-25 16:37:26
举报
文章被收录于专栏:数据万花筒数据万花筒

利用Uplift模型识别营销敏感用户提升转化率

上篇

1.数据基本情况探索

2.数据预处理及相关性分析

3.样本平衡性验证

下篇

1.构建营销增益模型

2.营销增益模型效果评价

完整数据集和代码已经上传知识星球,获取连接

https://t.zsxq.com/AMBAa2F

继上周的内容继续分享,上周内容回顾见 https://mp.weixin.qq.com/s/BtA6JyEMQ32QgNJ8XBx3eg,或者点击阅读原文查看!

1

构建营销增益模型

经过上述过程的处理,数据集已经处理成营销增益模型所需的输入形式了。下面正式开始构建营销增益模型,和其他有监督模型一样,营销增益模型也需要划分训练集和验证集。我们通过如下的代码实现数据特征与数据标签的分离,同时按照7:3的比例划分训练集和测试集。

代码语言:javascript
复制
from sklearn.model_selection import train_test_split
import xgboost as xgb
def uplift_split(df_model:pd.DataFrame):
    #数据集划分,按照7:3比例划分数据集
    X = df_model.drop(['target','target_class'],axis=1)
    y = df_model.target_class
    X_train, X_test, \
y_train, y_test = train_test_split(X,
                                                  y,
                                test_size=0.3,
                                random_state=42,
                                 stratify=df_model['treatment'])
    return X_train,X_test, y_train, y_test

数据集划分完成后,我们通过xgboost构建营销增益模型。营销增益模型实现过程如下代码所示,主要可以分为三个步骤。首先,在测试数据集上,通过xgboost算法训练模型;其次,在验证数据集上计算营销增益得分,即营销增益响应率(Incremental Response Rate ,IRR);最后,绘制混淆矩阵评价模型效果。

代码语言:javascript
复制
def uplift_model(X_train:pd.DataFrame,
                 X_test:pd.DataFrame,
                 y_train:pd.DataFrame,
                 y_test:pd.DataFrame):
    #使用XGB模型训练数据集
  
    result = pd.DataFrame(X_test).copy()   
    uplift_model =xgb.XGBClassifier().fit(X_train.drop('treatment', axis=1), y_train)
   
    # 预测测试集的结果
    uplift_proba \
    =uplift_model.predict_proba(X_test.drop('treatment', axis=1))
    result['proba_CN'] = uplift_proba[:,0]
    result['proba_CR'] = uplift_proba[:,1]
    result['proba_TN'] = uplift_proba[:,2]
    result['proba_TR'] = uplift_proba[:,3]
    result['uplift_score'] = result.eval('、
    proba_CN/(proba_CN+proba_CR) 、
    + proba_TR/(proba_TN+proba_TR) 、
    - proba_TN/(proba_TN+proba_TR) 、
    - proba_CR/(proba_CN+proba_CR)') 
 
    #输出绘制混淆矩阵,评判模型效果
    valid_pred =uplift_model.predict(X_test.drop('treatment', axis=1))
    cm = sk.metrics.confusion_matrix(y_test,valid_pred)
 
    fig, ax= plt.subplots(figsize=(10,10))
    sns.heatmap(cm, annot=True, fmt='g',cmap="YlGnBu",ax = ax); #annot=True to annotate cells
 
    #轴标签、图名
    ax.set_xlabel('Predicted labels');
    ax.set_ylabel('True labels');
    ax.set_title('Confusion Matrix');
    ax.xaxis.set_ticklabels(['CN', 'CR','TN','TR']);
ax.yaxis.set_ticklabels(['CN', 'CR', 'TN','TR']);
 
result['target_class'] = y_test
    return result

此处对营销增益响应率做一个说明,营销增益响应率是描述与未受到促销干预的用户相比,其购买比率提升的程度,计算公式如下所示。

参考:https://www.worldscientific.com/doi/abs/10.1142/S0219622019500172

公式(1)中T表示受到干预的全部用户,即(TR + TN);C表示未受到干预的全部用户。

最后将数据集分割函数和建模函数整合到一起构建营销整合模型,实现代码如下。

代码语言:javascript
复制
def uplift(df_model:pd.DataFrame):
    # 整合数据集分割函数以及建模函数
    X_train, X_test, y_train, y_test =uplift_split(df_model)
    result = uplift_model(X_train, X_test,y_train, y_test)
return result

2

营销增益模型效果评价

完成建模之后的工作就是评价模型效果,这一节我们通过混淆矩阵、增益值分布以及Qini曲线评价营销增益模型效果。

1.混淆矩阵

第一部分已经完成营销增益模型的构建,如下代码实现对“买一送一”营销策略的用户转化分类,并在验证集上通过混淆矩阵检验模型效果,混淆矩阵结果如图1所示。

代码语言:javascript
复制
bogo_uplift = uplift(df_model_bogo)

图1 “买一送一”营销策略的混淆矩阵

同样地,对于“打折促销”策略也是用营销增益模型识别营销敏感人群,实现代码如下,混淆矩阵结果如图2所示。

代码语言:javascript
复制
discount_uplift = uplift(df_model_discount)

图2 “打折促销”策略的混淆矩阵

2.增益值分布

除了混淆矩阵外,增益值也是直观衡量营销策略的指标。对于“买一送一”策略,我们通过如下代码绘制了营销增益分数的分布。

代码语言:javascript
复制
plt.figure(figsize= (10,6))
plt.xlim(-.05,.1)
plt.hist(bogo_uplift.uplift_score,bins=1000, color=['#2077B4'])
plt.xlabel('Upliftscore')
plt.ylabel('Numberof observations in bogo')
plt.title("Upliftscore of bogo")

如图3展示了实施“买一送一”带来的用户转化提升。相比于没有任何营销策略,“买一送一”策略能够对用户转化带来积极的作用,当然对于部分用户也会出现反作用。

图3 “买一送一”策略增益值分布

同样地,对于“打折促销”策略我们也使用同样的方法对营销增益值进行可视化,实现代码如下所示。

代码语言:javascript
复制
plt.figure(figsize= (10,6))
plt.xlim(-.05,.1)
plt.hist(discount_uplift.uplift_score,bins=1000, color=['#2077B4'])
plt.xlabel('Upliftscore')
plt.ylabel('Numberof observations in discount')
plt.title("Upliftscore of discount")

结果如图4所示,“打折促销”策略对于用户的转化同样存在积极作用和消极作用,但是与“买一送一”策略相比,“打折促销”策略对用户转化的积极影响更胜一筹。

图4 “打折促销”策略增益值分布

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-08-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据万花筒 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 继上周的内容继续分享,上周内容回顾见 https://mp.weixin.qq.com/s/BtA6JyEMQ32QgNJ8XBx3eg,或者点击阅读原文查看!
  • 构建营销增益模型
  • 营销增益模型效果评价
    • 1.混淆矩阵
      • 2.增益值分布
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档