多叉分类树 - 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语言异常值处理详见URL1、URL2
  • 数据变换(离散变量光滑化,连续变量规范化)
# 离散型(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,r语言,可视化,多叉树,分类树,精准营销)