首页 > 其他分享 >【机器学习实战】用随机森林预测在线购物者的购买意向

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

时间:2024-09-06 22:55:31浏览次数:11  
标签:实战 购买率 特征 模型 购物者 用户 train 随机 购买

一、数据介绍

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.84,意味着模型预测的购买用户中有84%是正确的。这有助于提高营销活动的目标性和效率。
  3. 召回率:召回率为0.54,相对较低,指出模型未能识别出近一半的实际购买用户。这可能导致错失销售机会,需要通过调整模型策略或阈值来提升。
  4. AUC分数:AUC为0.93,显示模型在区分不同类别方面表现良好。然而,高AUC并不总是直接转化为高召回率,因此需要结合其他指标综合评估。
  5. 数据不平衡:模型在预测未购买用户方面表现更好,这可能是由于数据集中未购买用户样本较多,模型倾向于预测多数类。

影响因素分析:

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

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

标签:实战,购买率,特征,模型,购物者,用户,train,随机,购买
From: https://blog.csdn.net/m0_62232347/article/details/141898881

相关文章

  • Java毕业设计-基于SSM框架的高校外事管理系统项目实战(附源码+论文)
    大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。......
  • Java毕业设计-基于SSM框架的图书借阅管理系统项目实战(附源码+论文)
    大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。......
  • 生成至少2处重复的6位随机数
    生成至少2处连续重复数字的6位随机数效果:115977、107722、168833、133766、123300、165552、123322、111228、114432、112199、113335运用场景:短信验证码。不直接使用六位随机数的原因:重复数字,简便了用户的输入;同时,不降低安全性。执行结果示例:   代码:importjava.util......
  • vue.js项目实战案例源码
    关注我,持续分享逻辑思维&管理思维&面试题;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;推荐专栏《10天学会使用asp.net编程AI大模型》,目前已完成所有内容。一顿烧烤不到的费用,让人能紧跟时代的浪潮。从普通网站,到公众号、小程序,再到AI大模型网站。干货满满。学成后可......
  • QT项目实战之音乐播放器2.0版本
    该版本相较于1.0版本最主要的不同在于连接数据库实现类似于歌曲收藏和取消收藏的功能。详细情况看我的这篇文章http://t.csdnimg.cn/WS5s8。效果展示VSMyMusicShow2.0define.hUseMySQL.h musicInfo.h VSMyMusicPlayer.h ......
  • 识别并应对动态归纳类算法题:深入剖析与实战指南
    《识别并应对动态归纳类算法题:深入剖析与实战指南》在编程的世界里,算法题犹如一座座充满挑战的山峰,等待着开发者们去攀登。其中,动态归纳类算法题因其复杂性和灵活性,常常成为开发者们进阶路上的一道难关。本文将深入探讨如何识别并应对动态归纳类算法题,为大家提供一份全面的......
  • API 网关 OpenID Connect 实战:单点登录(SSO)如此简单
    作者:戴靖泽,阿里云API网关研发,Higress开源社区Member前言随着企业的发展,所使用的系统数量逐渐增多,用户在使用不同系统时需要频繁登录,导致用户体验较差。单点登录(SingleSign-On,简称SSO)正是为了解决这一问题。当用户登录一次后,即可获取所有系统的访问权限,不需要对每个单一系统逐......
  • 攻破工程级复杂缓存难题--企业实战4
    缓存技术在现代分布式系统中至关重要,不仅提升了系统性能,还减轻了后端数据库的压力。然而,缓存系统也面临着诸多挑战,如缓存穿透、缓存雪崩、缓存击穿和热点key问题。通过多种策略的综合应用,包括本地缓存、双缓存方案、多级缓存、多副本、热点key拆分和动态分散等,可以有效应对这些......
  • 攻破工程级复杂缓存难题--企业实战29
    缓存技术在现代分布式系统中至关重要,不仅提升了系统性能,还减轻了后端数据库的压力。然而,缓存系统也面临着诸多挑战,如缓存穿透、缓存雪崩、缓存击穿和热点key问题。通过多种策略的综合应用,包括本地缓存、双缓存方案、多级缓存、多副本、热点key拆分和动态分散等,可以有效应对这些......
  • API 网关 OpenID Connect 实战:单点登录(SSO)如此简单
    作者:戴靖泽,阿里云API网关研发,Higress开源社区Member前言随着企业的发展,所使用的系统数量逐渐增多,用户在使用不同系统时需要频繁登录,导致用户体验较差。单点登录(SingleSign-On,简称SSO)正是为了解决这一问题。当用户登录一次后,即可获取所有系统的访问权限,不需要对每个单一系......