一、分析背景
根据小红书的部分用户数据以及消费行为数据,使用Python建立线性回归模型,找到对用户消费影响较大的因素,预测用户的消费金额变化。根据模型,确定销售额较高用户的相关特征,并由此提出营销方案建议。
二、数据分析的流程
数据分析的整体流程如图所示:
(一)数据概况分析
1、调用基本包和读取数据
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
df = pd.read_csv('小红书数据.csv')
2、数据概况分析
使用info/describe/head这3个函数查看数据的基本情况
# 使用head函数查看前5行数据
df.head()
共有8个数据变量,为了后续分析方便,下面对这8个变量进行简单的分类和含义说明:
# 使用info函数查看数据总体情况,包括行数、列数、各列名称、数据类型等
df.info()
# 使用describe函数查看所有数值型变量的描述统计,包括均值,最大值,最小值,标准差等
df.describe()
发现:gender、age和engaged_last_30这3个字段中都存在很多缺失值,而且gender和engaged_last_30的数据类型不对,它们应该是类别型变量。
3、缺失值处理
先查看缺失值在整个数据集中的占比情况,发现缺失值的占比很大接近40%,因此不能直接删除,需要根据情况进行数据的填充;
df.isnull().sum()/len(df)
这里先处理数值型变量,再处理类别型变量;
对于数值型变量的缺失处理,可以使用均值填充、中位数填充或数据模型填充等方法;
# 对age进行均值填充
df.age = df.age.fillna(df.age.mean())
对于类别型变量,要先把缺失值填充成unknown,再生成哑变量,对gender和engaged_last_30进行同样的处理;
# 生成哑变量,并查看处理后的前5行数据
df_dummies = pd.get_dummies(df)
df_dummies.head()部分字段截图
(二)单变量分析
1、数字型变量
使用df.describe(),查看数字型变量的描述指标,均值,最大值,最小值,标准差等;
发现:用户下单金额和用户以往累计购买金额的极差都非常大,可能存在离群值;
用户年龄分布在14~45岁之间,平均年龄29岁;
这些用户最近一次下单距今的天数都比较小,也就是说这些用户的购买记录都比较新,最长的也只有23天,说明复购率比较高;
用户过往在第三方APP购买的数量较少,大部分用户只购买自营产品,用户忠诚度较高;
2、类别型变量
主要分析类别型变量中有多少个分类,各自的占比,以及这些类别对应的revenue(销售额)是怎样的情况;
(1)gender:1-男性,0-女性
df.groupby('gender').revenue.describe()
发现:女性用户数远超过男性用户,这与小红书的定位用户群体也是相符的;
相比女性用户,男性用户的平均消费额反而更高,值得引起注意;
未知性别用户所占的比例也很高,而且他们的平均消费额比男性更高,在实际业务中需要进一步分析这部分用户群体中是否有更大比例的女性用户;
(2)engaged_last_30:最近30天有在APP上参与重要活动
df.groupby('engaged_last_30').revenue.describe()
发现:最近30天有在APP上参与重要活动的用户量虽然很少,但是他们的平均消费额明显更高;
这里未知用户的比例也很高,猜测可能是因为这部分用户没有参与任何活动,因此也就没有这个字段的信息记录;
营销建议:可以通过一些手段提高用户参与重要活动的积极性,会有助于提升销售业绩;
(3)lifecycle:生命周期,A-注册后6个月内,B-注册后1年内,C-注册后2年内
df.groupby('lifecycle').revenue.describe()
发现:注册后6个月之内的用户,平均消费额最多,说明新用户的消费力比较高;
这里大部分用户都是注册后2年内的,说明老用户的复购率比较高,平台黏性较高;
营销建议:(1)通过拉新,增加新用户的数量来提升销售额;(2)做好老用户的留存,可以通过发放消费券给老用户,刺激老用户继续消费;
(三)相关与可视化
分析revenue与其他变量的相关分析;
df_dummies.corr()[['revenue']].sort_values('revenue',ascending=False)
可以看出,除了previous_order_amount,其他变量与revenue的相关性都很小;
通过散点图发现,revenue中存在一些离群值,可能会影响模型效果;
# 散点图
sns.regplot('previous_order_amount','revenue',df)
(四)回归模型
1、模型建立
使用sklearn包中的线性回归模型,因变量y是revenue,这里自变量选择与revenue相关性最高的变量previous_order_amount进行建模;
from sklearn.linear_model import LinearRegression
model=LinearRegression()
y=df['revenue']
x=df[['previous_order_amount']]
model.fit(x,y)
查看自变量系数和模型截距;
2、模型评估
评估模型的常用指标为MAE(平均绝对误差)与RMSE(均方根误差),使用这2个指标对模型效果进行评估;
# 模型的评估
score=model.score(x,y)#x和y打分
print(score)
predictions=model.predict(x)#计算y预测值
error=predictions-y#计算误差
rmse=(error**2).mean()**.5#计算rmse
mae=abs(error).mean()#计算mae
print(rmse)
print(mae)
发现模型的打分并不高;
也可以通过标准的模型输出表,直接训练模型并查看模型参数;
# 标准的模型输出表
from statsmodels.formula.api import ols
model_ols=ols('y~x',df).fit()
#观察coef-系数,P值显著性
print(model_ols.summary())
结果:revenue=237.1796+0.0684*previous_order_amount,即用户以往累计的购买金额每增加1000元,它本次的的销售额就会增加68元;但R方非常低,需要寻找更好的模型。
3、模型优化
模型优化的方向有:模型中增加变量,缺失值的填充调整,离群值的处理,数据分组等;
这里仅对revenue的离群值进行优化处理,使用直方图查看revenue的分布情况:
sns.distplot(df['revenue'])
这里打算取revenue<=2000的值,先查看这部分数据在整体数据中的占比,发现超过98%,对整个数据集的影响较小;
df1=df[df['revenue']<=2000]
sns.distplot(df1['revenue'])
结果显示,评分的变化不大,但均方根误差有明显下降,从之前的946下降到现在的372。
三、营销建议
分析发现,最近30天有在APP上参与重要活动的用户、注册后6个月之内的新用户、以往累计购买金额较多的用户,他们的平均消费额更高;对此提出以下营销建议:
1、针对新用户,可以举办拉新活动,增加新用户的数量来提升销售额的增长;
2、针对老用户,进行重要活动的消息推送,来吸引老用户多参与活动以提升销售额;
3、做好老用户的留存和促活,比如对于超过1个月没有消费的用户,可以发放消费券,刺激老用户回到平台进行消费;
4、数据显示男性用户的购买力也不可小觑,因此针对男性用户可以推送他们感兴趣的内容。