当前位置:   article > 正文

python 预测平方误差_小红书营销渠道效果预测分析

营销渠道平均误差例子

任务背景

本周的任务是协助小红书分析不同的业务决策所带来的销售额变化。说到小红书,是目前非常热门的电商平台。

和其他电商平台不同,小红书是从社区起家。在小红书社区,用户通过文字、图片、视频笔记的分享,记录了这个时代年轻人的正能量和美好生活。

小红书通过机器学习对海量信息和人进行精准、高效匹配,已累积海量的海外购物数据,分析出最受欢迎的商品及全球购物趋势,并在此基础上把全世界的好东西,以最短的路径、最简洁的方式提供给用户。

任务说明

本周你的任务就是根据用户数据以及消费行为数据,完成以下事项:

• 使用Python建立线性回归模型

• 预测用户的消费金额变化

• 找到对用户消费影响较大的因素


一、数据概况分析

1、业务问题

• 使用Python建立线性回归模型

• 预测用户的消费金额变化

• 找到对用户消费影响较大的因素

2、数据收集与评估

需要的数据支持:

• 使用Python建立线性回归模型

• 预测用户的消费金额变化

• 找到对用户消费影响较大的因素

数据收集来源:小红书数据(此数据由小灶能力派提供)

51bc83fc7ffa33e1e582bb3b1d8bd3a8.png

3、数据整理与清洗

查看数据

red.head()

0dbd6a5915898b92349bfeaa5976caa4.png

预测目标:revenue用户下单金额

用户自然属性:gender性别

                       age年龄

用户行为特征:lifecycle生命周期 (A注册6个月内,B注册1年内,C注册2年内)

                      engaged_last_30最近30天在APP上参与重要活动

                      days_since_last_order 最近一次下单距今天数(小于1代表当天下单)

                      previous_order_amount 用户以往累积购买金额

                    3rd_party_stores用户过往在第三方APP购买的数量(0代表只在自营产品中购买)

检查数据是否有缺失值:可看到数据共29452行,字段gender、age、engaged_last_30存在缺失值;且字段gender、engaged_last_30数据类型错误,应该为object类型

48840a60d123347cf41fea7302fad9b5.png

检查数据是否有异常值:可以看出字段revenue和previous_order_amount的标准差都比较大,数据或许有离群值

red.describe()

20b263fe0ae5398d46285c43e0c647ab.png

数据清洗:

对于字段gender、age、engaged_last_30存在缺失值进行统计,缺失值占比约为40%,不能直接删除缺失值,否则会损失非常多的数据

red.isnull().sum()/len(red)

de7c3819529bb30214d76da96942e668.png

缺失值的处理:先处理连续变量,再处理类别型变量,会使得整个处理变得很简单

连续型变量:均值填充、中位数填充或者数据模型填充等方法

red.loc[~red['age'].isna(),'age'].describe()#注意:看age去除缺失值外的统计值,筛选用loc,判断是否是缺失值用isna,否定条件用~
0dbf37186202ebd56b00eea5088e72f8.png

对于数字型变量字段age存在的缺失值采用均值填补的方式进行

red.age=red.age.fillna(red.age.mean())red.age.describe()
5dcb53d68140620723f535e20c54a88f.png

类别型变量:如gender,可以拆解为gender_0、gender_1、gender_2,每个变量用0和1表示, 相当于是先把缺失值填充为unknown,再生成哑变量;engaged_last_30也一样

#了解具体值red.gender.unique()#1=M,0=FM
e9752c5f0cc920ee8073a839e025242b.png
#同时处理gender和engaged_last_30red=red.fillna('unknown')

生成哑变量,把gender、engaged_last_30变成object类型

red_dummis=pd.get_dummies(red)

二、单变量分析

1、数字型变量分析

(1)数值型变量:可以describe()函数查看描述指标,均值,最大值,最小值,标准差等

red.describe()
de52d3fbc12093443888af1999a13722.png

用户的下单购买金额和以往累积的用户购买金额,极差非常大;

用户年龄在14-45岁,是比较年轻化的app

用户过往在第三方app购买的数量较少,大部分用户只购买自营产品;

这些用户最近一次下单距今的天数都比较小,也就是说这些用户的购买记录比较新,最远也发生在一个月之内,复购率较高

2、类别型变量分析

red.groupby('engaged_last_30').revenue.describe()

9d296244092f80bf8f57ea163263027e.png

由上表可知,最近30天有在app上参与重要活动的顾客量很少,但平均创造的销售额明显更多;同时有很大比例是未知的。

建议:提高用户参与重要活动的积极性,有助于提升销售业绩

red.groupby('lifecycle').revenue.describe()

49baf611f916b39446ff517fd6c06c80.png

由上表可知,小红书有大量老用户(C类用户。注册两年内),然而老用户在小红书的平均消费低于新用户(A类,注册6个月内)。

建议:1、小红书可以给予老用户福利,刺激老用户消费

2、同时,小红书也应该多吸引新用户注册,提高新用户数量


三、相关与可视化分析

1、查看revenue和其他变量之间的相关性

red_dummis.corr()[['revenue']].sort_values('revenue',ascending=False)

c11b4167fd9502d980c6a642ec8e7781.png

可以看出,除了previous_order_amount,其他变量与revenue的相关性都很小

2、查看previous_order_amount与revenue的相关性分布

sns.regplot('previous_order_amount','revenue',red)

323bebbc8a0f1ecadda4bd81f2515716.png


四、回归模型

1、模型建立

# 调用sklearn中的线性回归工具包from sklearn.linear_model import LinearRegression# LinearRegression()设置模型为线性回归model=LinearRegression()# 设定自变量和因变量y=red['revenue']x=red[['previous_order_amount']]model.fit(x,y)#查看自变量系数model.coef_# 查看截距model.intercept_print('查看自变量系数:',model.coef_)print('查看截距:',model.intercept_)

c692a598f1ee2d6ad9c6b1406990e295.png

2、模型评估

• predictions=model.predict(x),输入测试数据x,得出预测结果y

• 误差error=预测结果y-实际y

• MAE(Mean Absolute Error)

绝对平均误差,是绝对误差的平均值

把每个数据点的预测值和真实值相减,将所有数据点加总求平均

可以更好地反映预测值误差的实际情况

• RMSE(Root Mean Square Error)

均方根误差,将每个数据点的误差取平方后开方

RMSE比起MAE放大了误差,对误差的惩罚更重

常用来作为机器学习模型预测结果衡量的标准

#模型评估score=model.score(x,y)#x和y打分predictions=model.predict(x)#计算y预测值error=predictions-y#计算误差rmse=(error**2).mean()**.5#计算rmsemae=abs(error).mean()#计算maeprint(rmse)print(mae)
b9205297ec10d3dab63b7403cf370b26.png

3、查看标准的模型输出表

# 查看标准的模型输出表from statsmodels.formula.api import olsmodel_ols=ols('y~x',red).fit()#观察coef系数,显著性print(model_ols.summary())
5429a8c6c2d618a695b7ec7110772cb4.png

得到模型为revenue=237.1796+0.0684*previous_order_amount

业务解读:以往积累的购买金额每增加1000个单位,小红书的销售额就增加68.4个单位

但R方非常低,需要寻找更好的模型


五、模型优化

优化思路1:检查先前填充的缺失值变量数据情况

1、在填充缺失值的时候发现字段gender、age、engaged_last_30缺失的数量是一样的,查看是否存在联系

查看gender=='unknown'时,engaged_last_30的情况,发现engaged_last_30也是unknown

red.loc[red.gender=='unknown','engaged_last_30'].unique()
112f2ff06034bb808589d8083e0ee137.png

查看gender=='unknown'时,age的情况,发现age是刚开始填充的均值

red.loc[red.gender=='unknown','age'].unique()
04360f5ad11fb4fd3669d5f40f460a76.png

三个包含缺失值的变量,出奇一致,可能是系统性的误差,尝试把这部分数据去除后建立模型

red_keep=red[red.gender!='unknown']

去除后查看相关性,发现previous_order_amount和revenue的相关性提高了,其他的变量也是

red_keep_dummies=pd.get_dummies(red_keep)red_keep_dummies.corr()[['revenue']].sort_values('revenue',ascending=False)

135549300b0f4622ddb6a711394e76a1.png

优化思路2:对变量进行分组

2、查看revenue的区间值分布情况

bins=[0,50,150,200,500,1000,5000,10000,30000]#创建分组red_keep_dummies['revenue_level']=pd.cut(red_keep_dummies.revenue,bins,right=False)red_keep_dummies.groupby(['revenue_level']).revenue.describe()
afa779a2b5919152ef6bed20d0b5a774.png

发现revenue<5000的数量只有30个,可以去除这部分的数据

red_keep_dummies2=red_keep_dummies[red_keep_dummies.revenue<5000]

去除后查看相关性,发现previous_order_amount和revenue的相关性提高一点点,其他的变量也是

red_keep_dummies2.corr()[['revenue']].sort_values('revenue',ascending=False)

c46811d2d1ca6c4038a390df05a1a441.png

3、选取previous_order_amount为自变量,建立模型

y=red_keep_dummies2['revenue']x=red_keep_dummies2[['previous_order_amount']]model_ols=ols('y~x',red_keep_dummies2).fit()#观察coef系数,值显著性print(model_ols.summary())
0cf3529c9b96016c7104ca62ad008299.png

发现R方由原来的0.028提升到0.047

4、增加其他与revenue相关性相对比较高一点的自变量

y=red_keep_dummies2['revenue']x=red_keep_dummies2[['previous_order_amount',' days_since_last_order ','engaged_last_30_1.0','3rd_party_stores']]model_ols=ols('y~x',red_keep_dummies2).fit()#观察coef系数,怕值显著性print(model_ols.summary())
f4d70fb0f05393d9cb4df7cc13a2c339.png

发现R方由提升到了0.062


六、最终模型方案

# 调用sklearn中的线性回归工具包from sklearn.linear_model import LinearRegression# LinearRegression()设置模型为线性回归model=LinearRegression()# 设定自变量和因变量y=red_keep_dummies2['revenue']x=red_keep_dummies2[['previous_order_amount',' days_since_last_order ','engaged_last_30_1.0','3rd_party_stores']]model.fit(x,y)#查看自变量系数model.coef_# 查看截距model.intercept_print('查看自变量系数:',model.coef_)print('查看截距:',model.intercept_)#模型评估score=model.score(x,y)#x和y打分predictions=model.predict(x)#计算y预测值error=predictions-y#计算误差rmse=(error**2).mean()**.5#计算rmsemae=abs(error).mean()#计算maeprint(rmse)print(mae)
e25ade7d112a659954edc76266c9bac1.png

R方提升,均方根误差和绝对平均误差都减小

模型 :revenue=200.60+0.0417*previous_order_amount+9.765*days_since_last_order+68.919*engaged_last_30_1.0-6.923*3rd_party_stores

5af2e2f4965809391bdaa63e76598d7e.png

业务解读:

以往积累的购买金额每增加1000个单位,小红书的销售额就增加41.7个单位

用户最近一次下单距今的天数每提升1天,小红书的销售额就增加9.765个单位

用户在最近30天内参加过活动比起不参加活动,小红书的销售额就增加68.919个单位

用户过往在第三方APP每购买过1次,小红书的销售额就减少6.923个单位

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/367785
推荐阅读
相关标签
  

闽ICP备14008679号