【机器学习实战】用随机森林预测在线购物者的购买意向

一、数据介绍

1、背景与来源

本次数据集来自UCI机器学习库中的在线购物者购买意向数据集。

该数据集是从某个在线零售商数据库中随机收集的。数据都来自于一年期间的不同用户,以避免对特定活动、特殊日子、用户档案或时间段的任何倾向性。

通过收集用户行为数据、选择关键特征、建立预测模型、评估和优化模型等步骤,帮助企业了解在线购物者的行为模式,并采取相应措施来最大程度地提高转化率、增加销售额。

2、数据说明

该数据集总共有12330行数据,每行代表一个客户,包含 18 列的信息。

数据集的输入变量为17个特征,包含数值特征和分类特征。输出变量为Revenue(y) 。

 Administrative 管理类页面访问次数
Administrative_Duration管理类页面浏览时长
Informational 信息类页面访问次数
Informational_Duration信息类页面浏览时长
ProductRelated 产品相关类页面访问次数
ProductRelated_Duration产品相关类页面浏览时长
BounceRates跳出率,即用户进入网站后没有进一步浏览就离开的比率
ExitRates  退出率,即用户在查看了某特定页面后离开的概率
PageValues用户在完成交易之前访问的网页的平均价值
SpecialDay   表示网站访问时间与特定特殊日子(例如母亲节、情人节)的接近程度
Month访问发生在一年中的哪个月份
OperatingSystems 用户使用的操作系统
Browser用户使用的浏览器
Region  用户所在的地区
TrafficType流量类型,即用户是如何到达网站的
VisitorType 用户类型,区分为新访客还是回访客
Weekend 访问是否发生在周末
Revenue购买意向,用户是否进行了购买

由下图可以看出,数据集类别不均衡。

二、数据清洗

1、数据读取

import numpy as np
import pandas as pd

data=pd.read_csv("online_shoppers_intention.csv")
data.head()

通过info函数了解数据集信息。

2、缺失值重复值处理 

#检查缺失值
data.isnull().sum()
data.describe()
 
#删除重复行
data.duplicated().sum()
data=data.drop_duplicates()

 数据集已经经过处理,没有缺失值,只需删除重复行。

三、影响因素分析

了解特征与购买行为之间的相关性可以帮助企业更好地理解市场动态,优化运营策略,并提高整体的业务绩效。

1、可视化分析

(1)用户行为特征分析

箱线图展示的是,数据集数值特征的分布情况,通过区别购买/未购买的数据,可以更直观的体会到该特征对用户购买意向的影响。 

从这些图表中可以推测:

1、以上特征除ExitRates(退出率) 外,其他特征和用户购买意向相关性可能不大。

2、未进行购买的用户ExitRates(退出率)相较于购买用户更高。高退出率可能意味着页面上可能有一些促使用户离开的因素。

(2)用户信息特征分析

柱状图是比较分类特征的不同类别中购买用户的占比 。

从这些图表中可以推测:

1、购买用户的PageValues(网页价值)相较于未购买用户的更高,PageValues和用户购买意向有一定的相关性。

2、从设备上来看:

  • 使用OperatingSystems (操作系统)为8的用户相较于其他操作系统购买率更高,为22.67%;
  • 使用Browser(浏览器)为12和13的用户相较于其他浏览器购买率更高,分别为30%和28.57%。
  • 可能这些用户群体具有某些特征,使得他们更倾向于在网站上进行购买,需要从他们的购物偏好进一步分析。也可能是设备提供了更好的用户体验,例如更快的加载速度、更流畅的导航或更优质的视觉展示。

3、不同地区的用户购买率相差不大,比率之间不超过5%,Region可能和用户购买意向相关性不大。

4、TrafficType(流量类型)中,16和7这两类购买率更高,分别为33.33%和30%。标记为16和7的流量类型可能来源于特定的营销渠道或活动,这些渠道或活动更有效地吸引了有购买意向的用户。

5、新用户的购买率比老用户高10.84%。

  • 可能存在针对新用户的特别优惠、折扣或激励措施,这些激励措施有效地促进了新用户的购买行为。
  • 老用户购买率比新用户低,可能原因有缺乏新产品、较差的购物体验或优惠力度没有优势等。

(3)访问时间特征分析

从这些图表中可以推测:

1、SpecialDay 可能和用户购买意向相关性不大。

2、11月份用户的购买率最高,为25.35%;2月份用户的购买率最低,为1.63%。

3、是否为周末对购买意向影响不大,两者的购买率相差不大。

2、相关性分析

这些可视化发现需要通过更多的测试和验证来确认发现的可靠性。

在绘制热力图前,已经对分类特征进行编码,即分类特征数值化。

从热力图可以看出:

  1. ProductRelated和ProductRelated_Duration的相关系数为0.86,高度正相关。
  2. Bounce Rate和Exit Rate的相关系数为 0.9,高度正相关。
  3. VisitorType里的Returning_Visitor和New_Visitor相关系数为-0.97,高度负相关。

根据算法的选择从而决定是否对这些高度相关的特征进行处理。随机森林对特征相关性不敏感。所以本次没有对这些特征进行处理。

将Revenue重新命名为y,用条形图呈现其他特征和y的相关系数,使结果更直观。

 从条形图可以看出:

  1. PageValues(网页价值)和ExitRates(退出率)与y的相关系数分别为0.49和0.20,和y有相关关系。
  2. 尽管之前可视化里分类特征不同类别的购买率有所差异,但是整体购买率都偏低,大多在10%~30%间,从相关系数结果也可以看出,其他特征和y相关关系很弱。

四、特征工程

1、特征编码

对于二分类特征Weekend 、y取值为0和1。

对于三分类特征VisitorType 进行独热编码。

对于多类别分类特征OperatingSystems,Browser,Region,TrafficType,Month进行Bin-Counting编码。

Bin-Counting编码的核心思想是利用分类特征在数据集中的分布情况(如出现次数或条件概率)来创建新的数值特征。所以在进行Bin-Counting编码前需要进行数据集划分,防止数据泄露。

#Bin-Counting编码
multi_class_var=['OperatingSystems','Browser','Region','TrafficType','Month']

def bin_counting(data_encoder):
    for feature in multi_class_var:
        # 计算每个特征值对应的正例和负例的计数
        feature_counts = pd.crosstab(X_train[feature],y_train)
        # 计算条件概率
        smoothing_factor = 1e-10 
        prob_positive = (feature_counts[1] + smoothing_factor) / (feature_counts[1] + feature_counts[0] + 2 * smoothing_factor)
        prob_negative = 1 - prob_positive
        # 计算对数优势比,对数优势比(Log Odds)是一种将概率转换为对数形式的方法,有助于处理概率接近0或1的情况。
        log_odds = np.log(prob_positive / prob_negative)
        log_odds_map = dict(zip(feature_counts.index, log_odds))
        default_log_odds = 0
        data_encoder[feature] = data_encoder[feature].map(log_odds_map).fillna(default_log_odds) 
    return data_encoder

2、特征选择 

进行特征选择时,可以选择算法构建简单模型,然后通过对比分数来选择最佳特征。

简单模型

from sklearn.ensemble import RandomForestClassifier 
from sklearn.model_selection import GridSearchCV,cross_val_score

RF = RandomForestClassifier(random_state = 66)
RF.fit(X_train_bin_counted,y_train)

score = cross_val_score(RF,X_train_bin_counted,y_train,cv=5).mean()
print('交叉验证得分: %.4f'%score)

 

交叉验证递归特征消除法

因为有的特征之间存在高度相关性,选择一个对特征相关性不敏感的基模型:随机森林

#交叉验证递归特征消除法
from sklearn.feature_selection import RFECV
from sklearn.ensemble import RandomForestClassifier

#选择基模型 
model = RandomForestClassifier()

#使用RFECV进行特征选择
rfecv= RFECV(model, step=1,cv=5)   
rfecv.fit(X_train_bin_counted,y_train)
X_train_select=rfecv.transform(X_train_bin_counted)

feature_list=np.array(X_train.columns)[rfecv.get_support()]
print("最佳特征数量 : %d" % rfecv.n_features_)
print("选择特征: ",feature_list)

经过特征选择,发现特征数量没有变化。

 使用验证集进行预测得分为

五、模型调整

1、参数调整

特征选择后,结合网格搜索来寻找模型的最佳超参数。

随机森林中主要用来调参的参数有5个:
n_estimators
max_features
max_depth
min_samples_split
min_samples_leaf

from sklearn.model_selection import GridSearchCV

#经过调整的参数
RF_params = {"n_estimators":np.arange(91,94,1),'max_features':np.arange(2,6,1),'max_depth':np.arange(6,9,1),
             'min_samples_split':np.arange(2,4,1),'min_samples_leaf':np.arange(2,6,1)}

#实例化模型
RF = RandomForestClassifier(random_state = 66)

grid=GridSearchCV(RF,RF_params,cv=5)
grid.fit(X_train_select,y_train)

print("最佳准确率: %.4f" %grid.best_score_)
print("最佳参数:",grid.best_params_)

2、模型验证

使用验证集对该模型进行验证。

将未优化模型和优化后的模型评估进行对比。

六、最终结果

1、最终模型评估

常见指标分数

 混淆矩阵

分类报告

2、总结分析

基于模型评估结果和业务数据,以下是分析与建议:

模型性能分析:

  1. 准确率:模型的准确率为0.91,表明模型在大多数情况下能够正确预测用户的购买意向。这是一个积极的指标,显示模型具有较高的可靠性。
  2.  精确率:精确率为0.79,意味着模型预测的购买用户中有79%是正确的。这有助于提高营销活动的目标性和效率。
  3. 召回率:召回率为0.54,相对较低,指出模型未能识别出近一半的实际购买用户。这可能导致错失销售机会,需要通过调整模型策略或阈值来提升。
  4. AUC分数:AUC为0.93,显示模型在区分不同类别方面表现良好。
  5. 数据不平衡:模型在预测未购买用户方面表现更好,这可能是由于数据集中未购买用户样本较多,模型倾向于预测多数类。

影响因素分析:

  1. 用户行为:高退出率可能指示页面存在用户体验问题,需要进一步分析用户交互数据以识别和改进这些问题。
  2. 设备和浏览器:特定操作系统和浏览器的用户购买率较高,可能与设备性能或用户群体的特性有关。针对这些用户群体的营销策略可能更为有效。
  3. 流量类型:流量类型(如16和7)的购买率较高,表明这些渠道可能更有效地吸引潜在购买者。优化这些渠道的营销活动可能提高整体转化率。
  4. 用户类型:新用户的购买率高于老用户,可能需要针对老用户设计特定的激励措施以提高其购买意愿。
  5. 时间因素:购买率在不同月份有显著差异,可能与季节性促销活动或用户购买习惯有关。制定基于时间的营销策略有助于提高特定时期的销售。
  6. 网页价值和退出率:网页价值和退出率与购买意向有中等程度的相关性,表明这些指标对预测购买行为有一定的指导意义。

通过这些分析和建议,企业可以更有效地利用模型预测结果,优化营销策略,提高用户购买率,并推动业务增长。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值