如何找到具有重复购买行为的用户和潜在用户

企业如何找到具有重复购买行为的用户,减少损失成本,比如企业预算有限,使用短信触达1000名用户,一条短信0.2毛,如果前期有过相关测试数据,找到对短信作出回应的用户特征,通过分析,这类精准用户为500人,那么就可以节省100元,获得比较高的产出比。
一、数据处理逻辑
1、首先要把我们的数据处理成机器语言可以识别的数据。重复购买用户肯定是有多次购买记录的,所以就要用到交易表的数据,那么多少次算是重复购买的用户呢?这个数值可以根据企业实际情况去定,这里小栈为了说明方法,把有2次以上购买的用户定义为重复购买用户。
2、当数据处理完成,就需要进行编码,将具有重复购买行为的用户编码为1,不具有的编码为0,其他类型数据也需要进行编码,在下面的案例中会进行讲解。
3、模型训练,这边使用了Logistics模型进行回归和预测,对于模型不过多的展开,更多的是和大家分享应用。
二、案例分析
本案例拿到了某天猫的买家信息表,与上一篇的交易明细表上的用户是可以对上的。买家信息表里有买家ID,性别,年龄,省份,城市和信用等级
在这里插入图片描述
1、进行数据处理与整合

import pandas as pd
from sklearn.linear_model import LogisticRegression
df = pd.read_excel(r'C:\Users\didi\Desktop\卖家交易表.xlsx')
df1 = pd.read_excel(r'C:\Users\didi\Desktop\买家表信息表.xls')
df = df.groupby('buyer_id').agg({'price':'count'})
df.reset_index()
df2 = pd.merge(df1,df,on = 'buyer_id',how = 'left')
df2.rename({'price':'count'},inplace =True,axis = 1)

在这里插入图片描述
可以看到这个数据里面具有缺失值,需要进行处理,大家为了方便也可以直接删除。

df2.fillna(method = 'ffill',inplace =True)

在这里插入图片描述
另外可以看到省、城市和信用等级都是属于名义字段,需要进行特征编码。
为了让机器进行识别,不是连续性变量,如名义变量一般使用one-hot独热编码;可以比较大小的名义变量可以使用label进行编码,如信用等级。

#get_dummmies独热编码,也叫哑变量变换
data = pd.get_dummies(df2,columns= ['buy_prov','buy_city'],prefix = ['buy_prov','buy_city'],drop_first= True)
#label编码
label = dict(zip(data['buy_cred'].unique(),[2.1,1.3,1.2,1.5,1.4,2.2,2.3,2.4,1.1,0,0,2.5,3.1]))
list =[]
for  i  in data['count'].unique():
    if i == 1:
        list.append(0)
    else:
        list.append(1)
label1 = dict(zip(data['count'].unique(),list))
data['buy_cred'] = data['buy_cred'].map(label)
data['count'] = data['count'].map(label1)
#将类别和特征分开
list1 = data['count'].astype('category')
data.drop(['buyer_id','count'],inplace = True,axis = 1)

在这里插入图片描述
2、模型建立与预测
使用Logistics进行模型的学习与预测。
补充知识:混淆矩阵是分类模型评判指标之一,一般来说会去看准确度,精确度和灵敏度(也叫召回率)
在这里插入图片描述

#先将数据分成训练和测试数据
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
import sklearn.metrics as metrics
import seaborn as sns
import matplotlib.pyplot as plt
xtrain,xtest,ytrain,ytest = train_test_split(data,list1,random_state =1)
#由于数据样本的类别为0的量特别多,会影响预测结果,所以对数据进行权重分配
model = LogisticRegression(C=0.3,solver='sag',class_weight='balanced')
model.fit(xtrain,ytrain)
ypre = model.predict(xtest)
d = metrics.confusion_matrix(ytest,ypre,)#混淆矩阵
fig = plt.figure()
ax1 = fig.add_subplot()
sns.heatmap(d,annot =True,ax =ax1)
a = metrics.recall_score(ytest,ypre)#召回率
b = metrics.accuracy_score(ytest,ypre)#准确度
print(a,b,d)

在这里插入图片描述
其实可以看到这个模型准确率不高,可以试着调整模型的参数,另外可以看到召回率为50.83%,这个值在企业中算是挺高的了,在实际中会把这个值叫作响应率,针对这些预测为重复行为的用户,发一次活动或策略出去,会有50.83%的用户进行响应。在企业来看,那么这个响应率多少合适呢,这边有一个公式:响应率>= 获客成本/获客利润。
同时我们也可以去看每个用户成为类别0和1的概率有多少,作为筛选精准用户的另一个参考指标,为什么会有这种类型概率指标存在呢?,这是和Logistics模型使用sigmod核函数有关。

pd.DataFrame(model.predict_proba(xtest),columns=[0,1])

在这里插入图片描述
三、总结
最主要的问题是如何对数据预处理,处理成机器可以识别的编码;模型来说,可根据大家的选择来做,哪个模型比较切合实际业务,就用哪个,模型越简单越好。
另外,对于潜在用户的分析,逻辑思维差不多,首先需要有初步的测试数据,找到具有响应用户的特征,然后进行模型模拟和预测。
已开通微信账号,欢迎关注数据分析小栈交流,如需本案例的数据可以联系:
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值