多叉分类树 - R语言项目总结
2016-11-22 14:11
197 查看
项目背景:应对双十一促销,对目标用户精细划分
项目目标:利用精准营销提高转化,业绩体现为高转化率和低费用率
日期变量处理
数据集分层随机抽样
不平衡数据集平衡处理(人工合成方法)
离散、连续变量分别画图看趋势
缺失值处理(暂时省去,利用sql原始数据处理)
R语言缺失值处理详见URL
异常值处理(暂时省去)
R语言异常值处理详见URL1、URL2
数据变换(离散变量光滑化,连续变量规范化)
变量检验(协方差矩阵、相关系数矩阵)
记录训练数据集平衡前的购买错误率
平衡训练数据集
利用训练数据集训练模型
记录训练数据集平衡后的购买错误率
根据a1/b1=a2/b2还原每个节点平衡前的正确率、错误率,并利用a/(a+b)进行归一化处理
最终可视化结果展示见百度脑图,密码: BIbi
项目目标:利用精准营销提高转化,业绩体现为高转化率和低费用率
前期数据准备
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] } 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
相关文章推荐
- Java 7新特性总结 - Coin项目新语言特性
- Java 7新特性总结 - Coin项目新语言特性
- C语言项目开发小小总结
- Java 7新特性总结 - Coin项目新语言特性
- java web项目答辩答辩题总结(书本网上语言答辩+自己的语言答辩)
- 项目开发总结报告(GB8567——88)
- 个人项目总结------珠宝管理系统
- 个人项目总结----进销存管理系统
- 项目管理经验总结
- 影响项目的因素及经验总结
- 项目总结
- 作好项目总结,提高项目管理能力
- 基于.Net Remoting的项目总结报告
- 项目总结
- 项目开发总结(v1.0)
- 项目总结(1)--集中处理上下文
- 教你怎样做项目开发总结报告[转]
- 项目总结 模板
- 由PPP项目总结的几点项目经验
- 大项目研发经验总结之摩西十戒