数据分析案例-基于随机森林模型探究电商网站推销商品的影响因素

简介: 数据分析案例-基于随机森林模型探究电商网站推销商品的影响因素

1.项目背景

在我们逛电商网站的时候,经常会收到一些推销活动的通知,但是我们之前也没关注过那个商品,这些电商网站推销给我们这个商品是基于哪些影响因素呢?


研究表明,电商网站,可以根据用户的年龄、性别、地址以及历史数据等等信息,将其分为,比如“年轻白领”、“一家三口”、“家有一老”、”初得子女“等等类型,然后判断你属于其中的某一类,电商网站根据这类用户的特征向其发起不同的优惠活动。电商网站是如何利用用户的这些数据将用户分为不同的类别是目前要解决的重要问题。


2.项目简介

2.1项目内容

本项目将对电商网站给客户推销活动的影响因素进行分析,帮助运营商发现并改善客户体验,以及帮助运营商根据客户的实际情况,选择最适合客户的活动产品。主要研究以下问题:


1)分析客户指标与是否购买产品的关系;


2)尝试找到合适的模型预测流失客户;


3)针对性给出增加给客户推销促销活动精准性的建议。


2.2数据说明

实验使用客户是否购买产品及自身情况数据集进行分析,该数据集有13个字段,共600条记录,每条记录包含了唯一客户的指标。我们的目标就是发现前面的指标和最后一列客户是否购买产品指标之间的关系。数据如图 1所示。



                                                        图 1原始数据信息


该数据集每个指标名称及其含义说明如表 2‑1所示。


表 1数据指标及其说明


指标名称

指标描述

值域

ID

客户识别号

[12101,12400]

Age

年龄

[18,67]

Gender

客户性别

Male 男;Female 女

Habitat

居住地点

City_center 城市中心;

Small_town 小城镇;

Rural 农村;

Suburban 郊区

Income

年收入,单位为美元

[60392,505040]

Married

婚姻状况

Yes 已婚;No 未婚

Children

儿童数量

[0,3]

Car

拥有一辆车吗?

Yes 有;No 没有

Savings_Account

拥有储蓄账户?

Yes 有;No 没有

Current_Account

拥有一个经常账户?

Yes 有;No 没有

Loan

未偿还贷款?

Yes 有;No 没有

Family_Quotient

收入与子女人数之间的比率

[20280,492400]

Product

客户购买了产品吗?

Yes 买了;No 没有购买


2.3技术工具

本项目使用jupyter notebook,以Python语言为基础,对数据集进行数据整理和统计分析,用matplotlib、seaborn进行可视化呈现.


3.项目实施步骤

3.1数据分析步骤

3.1.1导入模块

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import sklearn
from sklearn.preprocessing import LabelEncoder
from sklearn import tree
import warnings
warnings.filterwarnings("ignore")


3.1.2获取数据

fdata = pd.read_excel("电商数据.xlsx")
fdata.head()

3.2数据描述性分析

3.2.1查看数据维度

print(fdata.shape)


(600, 13)


数据共有600行,13列


3.2.2查看数据类型

Print(fdata.dtypes)



数据类型都正常,不需要进行处理


3.3数据预处理

在现实生活问题中,我们得到的原始数据往往非常混乱、不全面,机器学习模型往往无法从中有效识别并提取信息。数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已,真实的训练数据总是存在各种各样的问题:各特征(变量)的尺度(量纲)和数量级差异大、存在噪声:包含错误和异常值、存在缺失值、存在冗余特征(变量)等问题,存在上述问题的数据有时也称为“脏数据”,这些“脏数据”会影响机器学习模型预测的有效性(有时会得到相反的结论)、可重复性和泛化能力,从而影响模型的质量。因此在采集完数据后,机器学习建模的首要步骤以及主要步骤便是数据预处理。


数据预处理就是一种数据挖掘技术,本质就是为了将原始数据转换为可以理解的格式或者符合我们挖掘的格式。它可以改进数据的质量,从而有助于提高其后的挖掘过程的准确率和效率,得到高质量的数据。


查看是否有缺失值


fdata.isnull().sum()



数据没有缺失值,不需要进行处理


查看是否存在重复值


any(fdata.duplicated())


False


结果为False,说明不存在重复值,反之则存在


3.4数据可视化分析

3.4.1客户产品购买情况分析

#客户购买产品的人数情况
ProductDf=fdata['Product'].value_counts().to_frame()
x=ProductDf.index
y=ProductDf['Product']
plt.bar(x,y,width = 0.5,color = 'b')
plt.title('Product(Yes/No) Num')
plt.show()


        通过柱状图可以查看在被调研的电商客户中,购买了产品和没购买产品的电商客户数量。如图 6所示,大约有350左右的客户没有购买电商网站推销的产品,说明推销的产品并没有对客户进行精准的定位。

# 客户购买产品比例饼图  
fig = plt.figure(figsize=(8,8))
plt.pie(fdata['Product'].value_counts(),
        labels=fdata['Product'].value_counts().index,
        autopct='%1.2f%%',explode=(0.1,0))
plt.title('Product(Yes/No) Ratio')
plt.show()


        接下来通过饼图查看没购买产品的客户在所调研的客户中所占的比例,如图7所示。通过下图可知,没购买产品的电商客户在选取的客户中所占的比例要远大于购买了产品的客户,没购买产品的客户占比达54.33%。


3.4.2客户属性分析

客户属性包括Gender(性别)、Habitat(居住地)、Income(收入)、Married(婚姻状况)、Children(儿童数量)、Car(是否有车)、Savings_Account(是否有储蓄银行)、Loan(是否有未偿还贷款)八项指标。


1.性别、居住地和是否购买产品的关系分别如图8、图9所示


                                                图8性别与购买产品与否的关系



                                                        图9居住地与购买产品与否的关系


2.婚姻状况和是否购买产品的关系



                                        图10婚姻状况与购买产品与否的关系


3.孩子数量和是否购买产品的关系



                                                图11孩子数量与购买产品与否的关系


4.是否有车和是否购买产品的关系



                                               图12是否有车与购买产品与否的关系


5.是否有储蓄账户和是否购买产品的关系



                                        图13是否有储蓄账户与购买产品与否的关系


6.是否有未偿还贷款和购买产品与否的关系



                                                        图14是否偿还贷款与购买产品与否的关系


通过对客户属性的分析,得到以下结论:


  1. 客户是否购买产品与性别关系不大;
  2. 居住在郊区的客户购买产品比例相比较居住在城市中心、小城镇、农村的客户而言要高,居住在城市中心和小城镇购买产品的比例大致相等,而居住在农村的客户购买产品的比例最低;
  3. 已婚的客户与未婚的客户相比,购买产品的人数明显较少;
  4. 孩子数量的多少与客户是否购买产品存在着正向相关关系。孩子数量越多,购买产品的客户人数就会减少,而没有孩子的客户数量与家里有两个孩子的客户购买产品的数量大致持平;
  5. 是否有车和是否有未偿还贷款与客户是否购买产品的关系结论一样。是否有车和是否有未偿还贷款与客户买不买产品没有关系;
  6. 有储蓄账户的客户相较于没有储蓄账户的客户而言,购买产品的人数相对较少。

3.5建立模型

3.5.1特征工程

# 对数据进行编码处理
fdata['Gender'] = fdata['Gender'].apply(lambda x:0 if x=='F' else 1)
fdata['Married'] = fdata['Married'].apply(lambda x:0 if x=='No' else 1)
fdata['Car'] = fdata['Car'].apply(lambda x:0 if x=='No' else 1)
fdata['Savings_Account'] = fdata['Savings_Account'].apply(lambda x:0 if x=='No' else 1)
fdata['Current_Account'] = fdata['Current_Account'].apply(lambda x:0 if x=='No' else 1)
fdata['Loan'] = fdata['Loan'].apply(lambda x:0 if x=='No' else 1)
fdata['Product'] = fdata['Product'].apply(lambda x:0 if x=='No' else 1)
fdata['Habitat'] = fdata['Habitat'].replace(to_replace={'Rural':0,'Small_town':1,'Suburban':2,'City_center':3})
fdata.head()


# 对Income和Family_Quotient标准化处理
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
ss.fit(fdata[['ID','Age','Income','Family_Quotient']])
result = ss.transform(fdata[['ID','Age','Income','Family_Quotient']])
result_data = pd.DataFrame(result,columns=['ID','Age','Income','Family_Quotient'])
fdata['Income'] = result_data['Income']
fdata['Family_Quotient'] = result_data['Family_Quotient']
fdata['Age'] = result_data['Age']
fdata['ID'] = result_data['ID']
fdata.head()

3.5.2准备数据

# 准备数据
from sklearn.model_selection import train_test_split
X = fdata.drop('Product',1)
y = fdata['Product']
x_train,x_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=42)

3.5.3构建模型

1.决策树模型

# 决策树模型
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import confusion_matrix,accuracy_score,classification_report
tree = DecisionTreeClassifier()
tree.fit(x_train,y_train)
y_pred = tree.predict(x_test)
print('模型准确率',accuracy_score(y_test,y_pred))
print('混淆矩阵',confusion_matrix(y_test,y_pred))
print('分类报告',classification_report(y_test,y_pred))

2.逻辑回归模型


# 逻辑回归模型
from sklearn.linear_model import LogisticRegression
lg = LogisticRegression()
lg.fit(x_train,y_train)
y_pred = lg.predict(x_test)
print('模型准确率',accuracy_score(y_test,y_pred))
print('混淆矩阵',confusion_matrix(y_test,y_pred))
print('分类报告',classification_report(y_test,y_pred))

3.随机森林模型

# 随机森林模型
from sklearn.ensemble import RandomForestClassifier
import numpy as np
rfc = RandomForestClassifier()
rfc.fit(x_train,y_train)
y_pred = rfc.predict(x_test)
print('模型准确率',accuracy_score(y_test,y_pred))
print('混淆矩阵',confusion_matrix(y_test,y_pred))
print('分类报告',classification_report(y_test,y_pred))
#打印特征重要性评分
feat_labels = x_train.columns[0:]
importances = rfc.feature_importances_
indices = np.argsort(importances)[::-1]
print('特征重要程度排名')
for f,j in zip(range(x_train.shape[1]-1),indices):
    print(f + 1, feat_labels[j], importances[j])


        从三个模型的结果中,我们看出随机森林模型的准确率最高,且从得出的特征重要程度排名中,我们看出收入与子女人数之间的比率、儿童数量、收入等特征因素的重要程度较大,即电商网站推销商品的影响因素中,收入与子女人数之间的比率、儿童数量、收入影响最大。


4.实验总结

4.1结果分析

根据以上分析,得到不会购买产品客户的指标:


  1. 居住在农村的客户购买产品较少;
  2. 对于已婚客户而言,除了自己的开销以外,还要兼顾家庭的开销,这使得这部分客户购买产品会考虑到更多的因素,已婚客户购买产品的可能性较未婚客户而言较小;
  3. 对于与孩子的客户而言,养孩子平常的开销非常大,孩子越多,花销越大。但没有孩子的客比有孩子的客户购买产品的可能性更小,这是因为多了一个孩子需要给孩子买各种各样的东西,比如玩具、孩子衣服这类的东西;
  4. 有储蓄账户的客户对自己的存款和开销平常有一个较为清楚的概念,因此这类客户购买产品大多不会冲动消费,会从自身实际进行考虑,购买推销产品的可能性较小;

4.2改善建议

       为了使客户购买推销活动的产品,就要根据不同的人群,推销给他们真正需要的产品,给出如下建议:


  1. 客户方面:针对已婚、有孩子的客户可以推出定制服务如优惠套餐、实惠套餐等,即买回家全家人都可以使用的一套产品,;一方面家庭购买不仅量大而且更实惠,另一方对这类客户提供个性化服务。
  2. 对于居住在郊外的客户,外出购买东西不太方便,然而一些生活必需品又是不得不买的,网上购物是个不错的选择。针对这类客户,电商推销活动产品可以更倾向于生活必需品这类产品的推荐。

4.3实验心得

       通过做这次报告,我学习到了很多的新知识,之前学习的时候感觉到这门课程非常的难学,做完报告之后,对之前学习的知识有了更深刻的理解。现在体会到了老师上课讲的要想学好这门课程重在练习,通过写代码、运行程序才能找到问题所在,才能理解每一行代码实际的意思。


       在写报告的过程中,不仅让我学会把书本中的东西应用于实践,而且提高了我独立思考问题、自己动手操作的能力,也学会了更好的运用网络解决问题。在写代码的时候,有的时候运行不出来出现报错,就通过在网上查找资料直到程序运行成功,实实在在地掌握到了一些实践应用的技巧。


       这次报告使我意识到,我们现在处于一个信息爆炸的时代,各种各样的的数据层出不穷,这就要求我们在选择数据的时候要学会筛选与处理,要想高效率的完成工作,掌握Python技能就显得尤为重要。


       通过此次报告,我深刻地意识到学习还是要靠自学,老师起到的是指引和启蒙的作用,要想真正掌握一门技能只有通过自己主动学习,遇到不会的东西,通过自己先查资料自己解决,这样印象会更加深刻,逐渐总结经验,这样一定会取得收获与成就。


       总而言之,通过这次报告,使我学会了把在课上学习到的理论知识应用于实践,在以后的学习乃至工作中继续学习,不断进步。


目录
打赏
0
0
0
0
38
分享
相关文章
【优秀python数据分析案例】基于Python书旗网小说网站数据采集与分析的设计与实现
本文介绍了一个基于Python的书旗网小说网站数据采集与分析系统,通过自动化爬虫收集小说数据,利用Pandas进行数据处理,并通过Matplotlib和Seaborn等库进行数据可视化,旨在揭示用户喜好和市场趋势,为图书出版行业提供决策支持。
510 6
【优秀python数据分析案例】基于Python书旗网小说网站数据采集与分析的设计与实现
电商数据分析的方法
电商数据分析涵盖从业务需求理解到数据呈现的全流程。初学者应循序渐进,掌握数据清洗、转换等技能,Python是重要工具。社交媒体营销分析关注用户参与度和KOL影响。实战教程如《2019电商数据分析师实战项目》提供Excel、SQL及Tableau应用案例,帮助巩固理论知识。代码示例展示了如何使用Pandas和SQLAlchemy进行销售数据分析,计算转化率。 (注:联系方式和感谢语已省略以符合要求)
电商数据分析的方法
数据分析经典案例重现:使用DataWorks Notebook 实现Kaggle竞赛之房价预测,成为数据分析大神!
Python是目前当之无愧的数据分析第一语言,大量的数据科学家使用Python来完成各种各样的数据科学任务。本文以Kaggle竞赛中的房价预测为例,结合DataWorks Notebook,完成数据加载、数据探索、数据可视化、数据清洗、特征分析、特征处理、机器学习、回归预测等步骤,主要Python工具是Pandas和SKLearn。本文中仅仅使用了线性回归这一最基本的机器学习模型,读者可以自行尝试其他更加复杂模型,比如随机森林、支持向量机、XGBoost等。
常用电商商品数据API接口(item get)概述,数据分析以及上货
电商商品数据API接口(item get)是电商平台上用于提供商品详细信息的接口。这些接口允许开发者或系统以编程方式获取商品的详细信息,包括但不限于商品的标题、价格、库存、图片、销量、规格参数、用户评价等。这些信息对于电商业务来说至关重要,是商品数据分析、价格监控、上货策略制定等工作的基础。
Pandas实战(1):电商购物用户行为数据分析
Pandas实战(1):电商购物用户行为数据分析
195 1
Pandas实战(3):电商购物用户行为数据分析
Pandas实战(3):电商购物用户行为数据分析
185 1
Pandas实战(2):电商购物用户行为数据分析
Pandas实战(2):电商购物用户行为数据分析
111 1
淘宝商品详情数据接口:解锁电商数据分析新密码
在数字化时代,电商竞争激烈,精准的数据分析成为制胜关键。淘宝商品详情数据接口如同一把神奇的钥匙,为商家提供商品名称、价格、销量、评价等详细信息,助力洞察市场趋势、优化商品策略、提升运营效率。通过实时更新的数据,商家可以及时调整定价、促销和库存管理,增强竞争力。未来,该接口将带来更多智能化的数据分析工具和精准的市场预测模型,助力电商从业者在竞争中脱颖而出。
【python】美妆类商品跨境电商数据分析(源码+课程论文+数据集)【独一无二】
【python】美妆类商品跨境电商数据分析(源码+课程论文+数据集)【独一无二】
145 3
【python】美妆类商品跨境电商数据分析(源码+课程论文+数据集)【独一无二】
案例 | 用pdpipe搭建pandas数据分析流水线
案例 | 用pdpipe搭建pandas数据分析流水线
63 2