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

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

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技能就显得尤为重要。


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


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


目录
相关文章
|
2月前
|
机器学习/深度学习 数据采集 数据挖掘
实战派教学:掌握Scikit-learn,轻松实现数据分析与机器学习模型优化!
【10月更文挑战第4天】Scikit-learn凭借高效、易用及全面性成为数据科学领域的首选工具,简化了数据预处理、模型训练与评估流程,并提供丰富算法库。本文通过实战教学,详细介绍Scikit-learn的基础入门、数据预处理、模型选择与训练、评估及调优等关键步骤,助你快速掌握并优化数据分析与机器学习模型。从环境搭建到参数调优,每一步都配有示例代码,便于理解和实践。
99 2
|
4月前
|
数据采集 存储 数据挖掘
【优秀python数据分析案例】基于Python书旗网小说网站数据采集与分析的设计与实现
本文介绍了一个基于Python的书旗网小说网站数据采集与分析系统,通过自动化爬虫收集小说数据,利用Pandas进行数据处理,并通过Matplotlib和Seaborn等库进行数据可视化,旨在揭示用户喜好和市场趋势,为图书出版行业提供决策支持。
349 6
【优秀python数据分析案例】基于Python书旗网小说网站数据采集与分析的设计与实现
|
4月前
|
供应链 数据挖掘 Serverless
【python】美妆类商品跨境电商数据分析(源码+课程论文+数据集)【独一无二】
【python】美妆类商品跨境电商数据分析(源码+课程论文+数据集)【独一无二】
【python】美妆类商品跨境电商数据分析(源码+课程论文+数据集)【独一无二】
|
4月前
|
数据采集 数据可视化 关系型数据库
【优秀python 数据分析案例】基于python的穷游网酒店数据采集与可视化分析的设计与实现
本文介绍了一个基于Python的穷游网酒店数据采集与可视化分析系统,通过爬虫技术自动抓取酒店信息,并利用数据分析算法和可视化工具,提供了全国主要城市酒店的数量、星级、价格、评分等多维度的深入洞察,旨在为旅行者和酒店经营者提供决策支持。
117 4
【优秀python 数据分析案例】基于python的穷游网酒店数据采集与可视化分析的设计与实现
|
4月前
|
JSON 数据挖掘 API
案例 | 用pdpipe搭建pandas数据分析流水线
案例 | 用pdpipe搭建pandas数据分析流水线
|
4月前
|
数据采集 机器学习/深度学习 算法
"揭秘数据质量自动化的秘密武器:机器学习模型如何精准捕捉数据中的‘隐形陷阱’,让你的数据分析无懈可击?"
【8月更文挑战第20天】随着大数据成为核心资源,数据质量直接影响机器学习模型的准确性和效果。传统的人工审查方法效率低且易错。本文介绍如何运用机器学习自动化评估数据质量,解决缺失值、异常值等问题,提升模型训练效率和预测准确性。通过Python和scikit-learn示例展示了异常值检测的过程,最后强调在自动化评估的同时结合人工审查的重要性。
103 2
|
4月前
|
机器学习/深度学习 数据采集 数据可视化
【python】python母婴数据分析模型预测可视化(数据集+论文+PPT+源码)【独一无二】
【python】python母婴数据分析模型预测可视化(数据集+论文+PPT+源码)【独一无二】
|
4月前
|
机器学习/深度学习 搜索推荐 数据挖掘
【深度解析】超越RMSE和MSE:揭秘更多机器学习模型性能指标,助你成为数据分析高手!
【8月更文挑战第17天】本文探讨机器学习模型评估中的关键性能指标。从均方误差(MSE)和均方根误差(RMSE)入手,这两种指标对较大预测偏差敏感,适用于回归任务。通过示例代码展示如何计算这些指标及其它如平均绝对误差(MAE)和决定系数(R²)。此外,文章还介绍了分类任务中的准确率、精确率、召回率和F1分数,并通过实例说明这些指标的计算方法。最后,强调根据应用场景选择合适的性能指标的重要性。
517 0
|
4月前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
在数字化时代,数据分析至关重要,而Python凭借其强大的数据处理能力和丰富的库支持,已成为该领域的首选工具。Python作为基石,提供简洁语法和全面功能,适用于从数据预处理到高级分析的各种任务。Pandas库则像是神兵利器,其DataFrame结构让表格型数据的处理变得简单高效,支持数据的增删改查及复杂变换。配合Matplotlib这一数据可视化的魔法棒,能以直观图表展现数据分析结果。掌握这三大神器,你也能成为数据分析领域的高手!
86 2
|
4月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
198 4