首页 > 编程语言 >R语言LASSO特征选择、决策树CART算法和CHAID算法电商网站购物行为预测分析

R语言LASSO特征选择、决策树CART算法和CHAID算法电商网站购物行为预测分析

时间:2024-02-04 22:56:35浏览次数:31  
标签:Buy 特征选择 模型 30 df2 算法 电商 决策树

全文链接:http://tecdat.cn/?p=32275

原文出处:拓端数据部落公众号

本文通过分析电子商务平台的用户购物行为,帮助客户构建了一个基于决策树模型的用户购物行为预测分析模型。该模型可以帮助企业预测用户的购物意愿、购物频率及购买金额等重要指标,为企业制定更有针对性的营销策略提供参考。

数据来源和处理

本研究所使用的数据来自某电子商务平台的用户购物历史记录。

image.png

读取数据

   
head(data)

image.png

模型构建

在本文中,我们选择了决策树和LASSO模型作为分析工具。决策树是一种常见的机器学习算法,它能够根据数据的特征变量将数据分成不同的类别,并找到最佳的划分方式。LASSO模型通过构造一个惩罚函数得到一个较为精炼的模型,使得它压缩一些回归系数,即强制系数绝对值之和小于某个固定值;同时设定一些回归系数为零。因此保留了子集收缩的优点,是一种处理具有复共线性数据的有偏估计。

决策树

   
df2$Is_Buy_30

image.png

变量类型设置

   
df2$Is_Buy_30 =as.factor(df2$Is_Buy_30 )  
df2$T_weekday =as.factor(df2$T_weekday)  
df2$T_hour=as.numeric(df2$T_hour)  
df2$city_tier=as.numeric(df2$city_tier)

image.png

设置权重

   
df2$weight[df2$Is_Buy_30==1]=7
df2$weight[df2$Is_Buy_30==0]=4

建立决策树:是否购买

   
result=list(0)  
CARTmodelfunc=function(model){  
  CARTmodel = rpart(model, data=df2 , method="class",weights = df2$weig



## 绘制决策树  
## 输出决策树cp值
  
  
  prune(CARTmodel, cp= CARTmodel$cptable[which.min(CARTmodel$cptable[,"xerror"]),"CP"])  #剪枝  
   
  CARTmodel2 <- prune(CARTmodel, cp=cp); #对树进行剪枝
  
  #对数据进行预测  
   
   
  set.seed(1)  
  #获得训练集  
  df2.train <- df2[train, ]  
  #测试集  
  df2.test <- df2[-train, ]  
  #预测数据  
  tree.pred= (predict(CARTmodel2,df2.test ,type = "class"))
  
  
  confusionmatrix=table(tree.pred,df2.test$Is_Buy_30),#得到训练集混淆矩阵
  
  
  MSE=mean((as.numeric(tree.pred) - as.numeric(df2.test$Is_Buy_30))^
  

使用lasso算法进行筛选变量

   
#获得训练集

train <- sample(1:nrow(df2), nrow(df2)*0.8)

t)]), alpha = 1)  
plot(cv.lasso)

image.png

   
coef(cv.lasso,s="lambda.1se")

image.png

根据lasso筛选出最优的变量

image.png

chaid 树

   
ctreemodelfucntion=function(modelformula){  
  index=sample(1:nrow(df2),nrow(df2)*0.6)  
  df2.train=df2[index,]  
  df2.test=df2[index,]
  
  
  confusionmatrix=table(tree.pred2,df2.test$Is_Buy_30)#得到训练集混淆矩阵
  
  
  #预测为1类的正确率  
    presicion=tab[2,2]/sum(tab[,2]),  
    # [1] 0.3993589  
    #预测为1类的召回率  
    recall=tab[2,2]/sum(tab[2,]),  
    # [1] 0.6826484  
     
    #mse  
    MSE=mean((as.numeric(tree.pred2) - as.numeric(df2.test$Is_Buy_30))^2),

chaid tree LASSO 算法

可视化树状图:

image.png

image.png

模型结果

混淆矩阵就是分别统计分类模型归错类,归对类的观测值个数,然后把结果放在一个表里展示出来。这个表就是混淆矩阵。

定义

以分类模型中最简单的二分类为例,对于这种问题,我们的模型最终需要判断样本的结果是0还是1,或者说是positive还是negative。

我们通过样本的采集,能够直接知道真实情况下,哪些数据结果是positive,哪些结果是negative。同时,我们通过用样本数据跑出分类器模型的结果,也可以知道模型认为这些数据哪些是positive,哪些是negative。

image.png

image.png

将x表写进数据库里

   
sqlSave(channel,result2_loss22,rownames = "result2_loss22",addPK = TRUE)

CART 决策树 LASSO 算法

Cart模型是一种决策树模型,它即可以用于分类,也可以用于回归,其学习算法分为下面两步:

(1)决策树生成:用训练数据生成决策树,生成树尽可能大

(2)决策树剪枝:基于损失函数最小化的剪枝,用验证数据对生成的数据进行剪枝。

分类和回归树模型采用不同的最优化策略。Cart回归树使用平方误差最小化策略,Cart分类生成树采用的基尼指数最小化策略。

   
resultlasso2=CARTmodelfunc(modelformulalasso)

image.png

image.png

image.png

image.png

202003281439369701.png

   
resultlasso2

混淆矩阵是机器学习中总结分类模型预测结果的情形分析表,以矩阵形式将数据集中的记录按照真实的类别与分类模型预测的类别判断两个标准进行汇总。

image.png

image.png

   
# 将x表写进数据库里  
sqlSave(channel,result_rfm,rownames = "result_rfm",addPK = TRUE)

federal-financial-management-how-governments-can-do-more-with-the-budgets-they-have-1334236378-thumb-1536x1536.webp 最受欢迎的见解

1.PYTHON用户流失数据挖掘:建立逻辑回归、XGBOOST、随机森林、决策树、支持向量机、朴素贝叶斯模型和KMEANS聚类用户画像

2.R语言基于树的方法:决策树,随机森林

3.python中使用scikit-learn和pandas决策树

4.机器学习:在SAS中运行随机森林数据分析报告

5.R语言用随机森林和文本挖掘提高航空公司客户满意度

6.机器学习助推快时尚精准销售时间序列

7.用机器学习识别不断变化的股市状况——隐马尔可夫模型的应用

8.python机器学习:推荐系统实现(以矩阵分解来协同过滤)

9.python中用pytorch机器学习分类预测银行客户流失

标签:Buy,特征选择,模型,30,df2,算法,电商,决策树
From: https://www.cnblogs.com/tecdat/p/18007162

相关文章

  • r语言有限正态混合模型EM算法的分层聚类、分类和密度估计及可视化|附代码数据
    原文链接:http://tecdat.cn/?p=23825最近我们被客户要求撰写关于有限正态混合模型EM算法的研究报告,包括一些图形和统计输出。简介本文介绍了基于有限正态混合模型在r软件中的实现,用于基于模型的聚类、分类和密度估计。提供了通过EM算法对具有各种协方差结构的正态混合模型进行参......
  • 2024牛客寒假算法基础集训营1 J 又鸟之亦心 题解
    Question2024牛客寒假算法基础集训营1J又鸟之亦心Solution挺好的一个题,给了我很多启发显然,先二分最大值\(D\),关键在于\(check\)怎么写考虑到两个人是相对的,第\(i\)次之后肯定有一个人在\(a_i\),具体是谁不重要,也不需要关注是怎么走过来的,我们需要去维护另外一个人可......
  • 莫队算法
    简要介绍:莫队算法是先进行分块,然后按照分块来排序,然后对已知区间进行增减以达到所求区间,记录下答案,最后按照所询问的顺序进行输出答案。如对于已知区间[l,r]要求[l-1,r],[l-2,r],[l-3,r],[l-4,r],则将已知区间向左移,同时进行add添加操作;而对于要求[l,r+1],[l,r+2],[l,r+3],[l,r+......
  • 文心一言 VS 讯飞星火 VS chatgpt (193)-- 算法导论14.3 1题
    一、用go语言,写出作用于区间树的结点且在〇(1)时间内更新max属性的过程LEFT-ROTATE的伪代码。文心一言:以下是一个简单的LEFT-ROTATE的伪代码,它对一个二叉搜索树进行左旋转操作。这个操作的作用是更新节点的max属性,使其在O(1)时间内完成。LEFT-ROTATE(T,x)://T是树,x......
  • 2024牛客寒假算法基础集训营1 K 牛镇公务员考试 题解
    Question2024牛客寒假算法基础集训营1K牛镇公务员考试给出一张试卷有\(n\)道单选题,每道题用一个整数\(a_i\)和一个长度为\(5\)的字符串\(s_i\)表示,其中第\(i\)道题的题面为:第\(a_i\)道题的答案是()A.\(s_1\)B.\(s_2\)C.\(s_3\)D.\(s_4\)E.\(s_5\)问:正......
  • 【算法专题】排序详解
    各种排序快速排序、归并排序、桶排序、堆排序1、快速排序(quick_sort)时间复杂度:\(O(nlogn)\)//快速排序模版voidquick_sort(intq[],intl,intr)//数组,左端点,右端点{if(l>=r)return;//“>>”:右移运算符,相当于除以2intx=q[l+r>>1],......
  • 代码随想录算法训练营第一天 | 27. 移除元素 | 704. 二分查找
     704.二分查找 已解答简单 相关标签相关企业 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例1:输入:numstarget输出:解释:nums......
  • 代码随想录算法训练营第十一天 | 20. 有效的括号 | 1047. 删除字符串中的所有相邻重
     有效的括号 已解答简单 相关标签相关企业 提示 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应......
  • 【算法】树分治
    1.算法简介树分治(Treedivision),是处理树上路径类问题的算法。树分治又可以分为点分治与边分治。考虑这样一个问题:给定一棵有\(n\)个点的树,询问树上距离为\(k\)的点对是否存在。暴力的做法就是枚举两个点然后计算距离,统计答案。这样显然\(O(n^2)\)的。我们发现瓶颈在于......
  • 基础算法(十四)离散化+二分 ---以题为例
    假定有一个无限长的数轴,数轴上每个坐标上的数都是 0。现在,我们首先进行 n 次操作,每次操作将某一位置 x 上的数加 c。接下来,进行 m 次询问,每个询问包含两个整数 l 和 r,你需要求出在区间 [l,r] 之间的所有数的和。输入格式第一行包含两个整数 n 和 m。接下来 ......