多叉分类树 - R语言项目总结

项目背景:应对双十一促销,对目标用户精细划分
项目目标:利用精准营销提高转化,业绩体现为高转化率和低费用率

前期数据准备

CRM用户购买或者搜索RFMTK数据,RFM详解见URL

程序逻辑

一、数据预处理

  • 分类变量因子化
  • 日期变量处理
  • 数据集分层随机抽样
library(sampling)
#计算应抽取测试样本数
a=round(1/4*sum(data[,D]=="0"))
b=round(1/4*sum(data[,D]=="1"))
sub=strata(data,stratanames="isBuy",size=c(a,b),method="srswor")
Train=data[-sub$ID_unit,]
Test=data[sub$ID_unit,]
nrow(Train);nrow(Test)
  • 不平衡数据集平衡处理(人工合成方法)
# 人工合成数据
library(ROSE)
Train_rose <- ROSE(formula, data = Train, N=1000, seed = 1)$data
table(Train_rose$isBuy)

二、特征选择

  • 粗略查看变量情况
names(data)
str(data)
summary(data)
library(Hmisc)
describe(data)
library(fBasics)
basicStats(data$R_visit)
  • 离散、连续变量分别画图看趋势
#离散型(city_tier,R,F,...)
tbcity_tier <- with(data,table(city_tier))
tbcity_tier
barplot(tbcity_tier,xlab="Improvement",ylab="Frequency")
#连续型(regTime,birthday,...)
par(mfrow=c(2,2))
h <- hist(data$birthday,breaks=12,freq=FALSE,density=20)
  • 缺失值处理(暂时省去,利用sql原始数据处理)
    R语言缺失值处理详见URL
  • 异常值处理(暂时省去)
    R语言异常值处理详见URL1URL2
  • 数据变换(离散变量光滑化,连续变量规范化)
# 离散型(T_weekday)
# a <- c(data$T_weekday)
# n=length(a)
# la=rep(0,n)
# la[which(a>0.5)]=1
# 连续型(regTime,birthday)
data$regTime <- scale(data$regTime)
data$birthday <- scale(data$birthday)
  • 变量检验(协方差矩阵、相关系数矩阵)
# 协方差矩阵
cov <- cov(data[,2:20])
cov
# 相关系数矩阵
cor <- cor(data[,2:21])
cor

三、主成分分析(暂时没有用到)

四、建立最优分类模型

使用多种分类方法,并给每种方法写入M、A、P、R、MSE,进行比较取适合模型。

# 选取最大值
c <- c(resultRP$P, resultSVM$P, resultKSVM$P, resultRF$P)
selectMaxFunc = function(c) {
  temp <- c[1]
  t = 1
  for (i in 1:length(c)) {
    if (temp >= c[i])
      temp
    else{
      t = i
      temp <- c[i]
    }
  }
  print(t)
  print(temp)
}
compareFunc(c)
# 选取最小值
c <- c(resultRP$MSE, resultSVM$MSE, resultKSVM$MSE, resultRF$MSE)
selectMinFunc = function(c) {
  temp <- c[1]
  t = 1
  for (i in 1:length(c)) {
    if (temp <= c[i])
      temp
    else{
      t = i
      temp <- c[i]
    }
  }
  print(t)
  print(temp)
}
compareFunc(c)

五、使用分类器进行预测

对预测数据集进行处理,使用训练模型预测数据,并写入数据库。

# 先删后插,提高数据库更新速度
sqlQuery(channel,
         "TRUNCATE TABLE result_CRM_buy_201611")
sqlSave(channel,
        cfPred,
        "result_CRM_buy_201611",
        rownames = FALSE,
        append = TRUE)

多叉树可视化展示(返回平衡前的概率)

利用a1/b1=a2/b2,在训练数据集上,返回训练数据集平衡前概率

  • 记录训练数据集平衡前的购买错误率
##原始概率
probnull=table(data$isBuy)[1]/sum(table(data$isBuy))
probnull
  • 平衡训练数据集
library(ROSE)
data <- ROSE(formula,
             data = data,
             N = dim(data)[1]*0.8,
             seed = 1)$data
table(data$isBuy)
  • 利用训练数据集训练模型
library("CHAID")
set.seed(290875)
ctrl <- chaid_control(minsplit = 1 , minprob = 0.2,maxheight = 4)
chaidUS <- chaid(formulaModel, data = data,control=ctrl  )
print(chaidUS)
plot(chaidUS)
  • 记录训练数据集平衡后的购买错误率
prob=table(data$isBuy)[1]/sum(table(data$isBuy))
  • 根据a1/b1=a2/b2还原每个节点平衡前的正确率、错误率,并利用a/(a+b)进行归一化处理
  • 最终可视化结果展示见百度脑图,密码: BIbi
R语言中,可以使用决策模型进行多分类任务的建模。其中,常用的决策算法有CART、C4.5和C5.0等。 下面以CART算法为例,介绍R语言中如何使用决策进行多分类任务的建模。 首先,需要安装并加载rpart包,该包提供了决策相关的函数和数据集。 ```R install.packages("rpart") library(rpart) ``` 接下来,我们使用iris数据集进行演示。该数据集包含了三种不同品种的鸢尾花(setosa、versicolor和virginica),每种品种各有50个样本,共计150个样本。每个样本包含了4个特征(花萼长度、花萼宽度、花瓣长度和花瓣宽度),目标变量为品种。 ```R data(iris) head(iris) ``` 接着,我们将数据集拆分成训练集和测试集,其中训练集占总样本数的70%。 ```R set.seed(123) train_idx <- sample(1:nrow(iris), 0.7*nrow(iris), replace=FALSE) train_data <- iris[train_idx, ] test_data <- iris[-train_idx, ] ``` 然后,我们使用rpart函数建立决策模型。 ```R model <- rpart(Species ~ ., data=train_data, method="class") ``` 其中,Species为目标变量,.表示使用所有特征进行建模,method="class"表示进行多分类任务的建模。 最后,我们使用predict函数在测试集上进行预测,并计算模型的准确率。 ```R pred <- predict(model, test_data, type="class") accuracy <- sum(pred == test_data$Species) / nrow(test_data) ``` 完整代码如下: ```R # 安装并加载rpart包 install.packages("rpart") library(rpart) # 加载数据集 data(iris) # 拆分数据集 set.seed(123) train_idx <- sample(1:nrow(iris), 0.7*nrow(iris), replace=FALSE) train_data <- iris[train_idx, ] test_data <- iris[-train_idx, ] # 建立决策模型 model <- rpart(Species ~ ., data=train_data, method="class") # 在测试集上进行预测,并计算准确率 pred <- predict(model, test_data, type="class") accuracy <- sum(pred == test_data$Species) / nrow(test_data) ``` 以上就是在R语言中使用决策进行多分类任务的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值