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

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

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天前
|
机器学习/深度学习 自然语言处理 数据挖掘
使用Python和大模型进行数据分析和文本生成
Python语言以其简洁和强大的特性,成为了数据科学、机器学习和人工智能开发的首选语言之一。随着大模型(Large Language Models, LLMs)如GPT-4的崛起,我们能够利用这些模型实现诸多复杂任务,从文本生成到智能对话、数据分析等等。在这篇文章中,我将介绍如何用Python连接和使用大模型,并通过示例展示如何在实际项目中应用这些技术。
|
10天前
|
存储 数据挖掘 索引
Python streamlit框架开发数据分析网站并免费部署
使用Python的Streamlit框架,开发了一个在线数据分析工具,替代Excel查看设备温度CSV数据。通过pandas读取数据,matplotlib绘制图表。程序处理CSV,提取所需列,计算最大最小平均值,用户可多选查看特定数据。[GitHub](https://github.com/yigedaigua/MGHB)上有完整代码,应用已部署至Streamlit Cloud。
|
13天前
|
数据采集 机器学习/深度学习 数据可视化
数据挖掘实战:Python在金融数据分析中的应用案例
Python在金融数据分析中扮演关键角色,用于预测市场趋势和风险管理。本文通过案例展示了使用Python库(如pandas、numpy、matplotlib等)进行数据获取、清洗、分析和建立预测模型,例如计算苹果公司(AAPL)股票的简单移动平均线,以展示基本流程。此示例为更复杂的金融建模奠定了基础。【6月更文挑战第13天】
48 3
|
3天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的电商数据分析的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的电商数据分析的详细设计和实现(源码+lw+部署文档+讲解等)
8 0
|
1月前
|
SQL 数据采集 存储
Hive实战 —— 电商数据分析(全流程详解 真实数据)
关于基于小型数据的Hive数仓构建实战,目的是通过分析某零售企业的门店数据来进行业务洞察。内容涵盖了数据清洗、数据分析和Hive表的创建。项目需求包括客户画像、消费统计、资源利用率、特征人群定位和数据可视化。数据源包括Customer、Transaction、Store和Review四张表,涉及多个维度的聚合和分析,如按性别、国家统计客户、按时间段计算总收入等。项目执行需先下载数据和配置Zeppelin环境,然后通过Hive进行数据清洗、建表和分析。在建表过程中,涉及ODS、DWD、DWT、DWS和DM五层,每层都有其特定的任务和粒度。最后,通过Hive SQL进行各种业务指标的计算和分析。
307 1
Hive实战 —— 电商数据分析(全流程详解 真实数据)
|
1月前
|
数据采集 数据可视化 数据挖掘
利用 DataFrame 进行数据分析:实战案例解析
【5月更文挑战第19天】DataFrame是数据分析利器,本文通过一个销售数据案例展示其使用:读取数据创建DataFrame,计算产品总销量,分析月销售趋势,找出最畅销产品,并进行数据可视化。此外,还提及数据清洗和异常处理。DataFrame为数据处理、分组计算和可视化提供便利,助力高效数据分析。
55 3
|
21天前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的电商数据分析附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的电商数据分析附带文章和源代码部署视频讲解等
20 0
|
1月前
|
JSON 搜索推荐 数据挖掘
电商数据分析的利器:电商关键词搜索API接口(标题丨图片丨价格丨链接)
淘宝关键词搜索接口为电商领域的数据分析提供了丰富的数据源。通过有效利用这一接口,企业和研究人员可以更深入地洞察市场动态,优化营销策略,并提升用户体验。随着电商平台技术的不断进步,未来的API将更加智能和个性化,为电商行业带来更多的可能性。
|
1月前
|
机器学习/深度学习 数据采集 数据可视化
R语言电影数据分析:随机森林探索电影受欢迎程度因素、参数调优可视化
R语言电影数据分析:随机森林探索电影受欢迎程度因素、参数调优可视化
|
1月前
|
JSON 安全 API
解锁淘宝商品评论API接口:电商数据分析的新视角
淘宝商品评论API接口是淘宝开放平台提供的一组API接口,允许开发者通过编程方式获取淘宝商品评论数据。这些接口可以获取到商品的详细信息、用户评论、评分等数据,为电商数据分析提供了丰富的素材。

热门文章

最新文章