您的位置:首页 > 其它

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

2016-11-22 14:11 197 查看
项目背景:应对双十一促销,对目标用户精细划分

项目目标:利用精准营销提高转化,业绩体现为高转化率和低费用率

前期数据准备

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]
}

4000
}
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息