以产品调价需求为例,谈谈决策树分类算法

决策树算法:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/23/2605208.html

实例应用:

某网站在不同的城市(city)不同的类目(category)卖一款产品,不同的城市和类目价格是不同的,现需要甄别出哪些城市的哪些类目产品的价格需要做调整,需要涨价,降价,或不调整?

方法:

决策树

衡量指标:

变量名称

变量类型

说明

City

分类型

城市

Category

分类型

类目

Price

连续型

价格

order5_num

连续型

普通产品订单量

Order28_num

连续型

中端产品订单量

Orde33_num

连续型

高端产品订单量

ji_ratio

连续型

(中高端产品订单量)/普通

total_order

连续型

总订单量

ratio_gezi14

连续型

n天至前1天订单和/2n天至前n+1

注:n=14,28,42

ratio_gezi28

连续型

ratio_gezi42

连续型

avg_order_month

连续型

去年月均订单量

gap_month

连续型

总订单量-去年月均订单量

avg_order_year

连续型

去年年均订单量

gap_year

连续型

总订单量-去年年均订单量

User_num

连续型

付费用户数

Adjust_2015

分类型

近一个月来是否调价:是1/0

Adjust_2014

分类型

去年同期未来一个月是否调价:是1/0

New_category

分类型

是否为新类目:是1/0

ratio_gezi14_2014

连续型

去年同期前n天至前1天订单和/2n天至前n+1

注:n=14,28,42

ratio_gezi28_2014

连续型

ratio_gezi42_2014

连续型

Max_order_2014

分类型

去年同期未来一个月是否达到order顶峰:是1/0

Click/ad-2014

连续型

去年购买付费产品获得点击量

Click/ad-2015

连续型

今年购买付费产品获得点击量

Contact/ad-2014

连续型

去年购买付费产品获得contact

Contact/ad-2014

连续型

今年购买付费产品获得contact

建立决策树模型:涨/降价两个模型

setwd("C:\\Users\\msy\\Documents\\work\\tiaojia-test")
modeldata<-read.csv("model-tiaojia-data.csv",stringsAsFactors=FALSE)

setwd(paste("C:\\Users\\msy\\Documents\\work\\tiaojia-test\\",Sys.Date(),sep=""))
testdata0<-read.csv("testdata.csv",stringsAsFactors=FALSE)
yitiao<-read.csv("yitiao.csv",stringsAsFactors=FALSE)
head(testdata0)
head(yitiao)

testdata0[is.na(testdata0)]<-0
testdata=testdata0
#######creat tree model for asc##############
modelasc<-modeldata
str(modelasc)
table(modelasc$mark)
modelasc$ascmark[modelasc$mark==1]<-"1"
modelasc$ascmark[modelasc$mark<1]<-"0"
#data$cash_ratio14<-as.numeric(data$ratio_gezi14)
#data$cash_ratio28<-as.numeric(data$ratio_gezi14)
table(modelasc$ascmark)
modelasc$mark=NULL
modelasc$cc=NULL
str(modelasc)
library(rpart)
library(rpart.plot)
asctree<-rpart(ascmark~asc_tiaojia+price+order5_num+order28_num+order33_num+ji_ratio+total_order+ratio_gezi14+ratio_gezi28+ratio_gezi42,modelasc)
#modeltree<-rpart(ascmark~yitiao+price+total_order+ji_ratio,data)
prp(asctree)
###accuraty#####




#####tiaojia-asc###########
testdata=testdata0
asc_yitiao<-subset(yitiao,mark==1)
testdata$asc_tiaojia<-asc_yitiao[match(testdata$cc,asc_yitiao$cc),5]
testdata$date<-asc_yitiao[match(testdata$cc,asc_yitiao$cc),4]
head(testdata)
str(testdata)
testdata[is.na(testdata)]<-0
predicttree<-predict(asctree,testdata,type="class")
testdata$pred<-predicttree
table(testdata$pred)
filename3<-paste(Sys.Date(),"asc_pred.csv",sep="-")
write.csv(testdata,filename3,row.names = FALSE)
testdata_mark<-subset(testdata,pred==1)
filename3<-paste(Sys.Date(),"asc_gezi.csv",sep="-")
str(testdata_mark)
#testdata_mark$cc=NULL
write.csv(testdata_mark,filename3,row.names = FALSE)

#######creat tree model for desc##############
modeldesc<-modeldata
str(modeldesc)
table(modeldesc$mark)
modeldesc$descmark[modeldesc$mark==-1]<-"1"
modeldesc$descmark[modeldesc$mark>-1]<-"0"
#data$cash_ratio14<-as.numeric(data$ratio_gezi14)
#data$cash_ratio28<-as.numeric(data$ratio_gezi14)
table(modeldesc$descmark)
modeldesc$mark=NULL
modeldesc$cc=NULL
str(modeldesc)
library(rpart)
library(rpart.plot)
desctree<-rpart(descmark~desc_tiaojia+price+order5_num+order28_num+order33_num+ji_ratio+total_order+ratio_gezi14+ratio_gezi28+ratio_gezi42,modeldesc)
#modeltree<-rpart(ascmark~yitiao+price+total_order+ji_ratio,data)
prp(desctree)
###accuraty#####



#####tiaojia-desc###########
testdata=testdata0
desc_yitiao<-subset(yitiao,mark==-1)
testdata$desc_tiaojia<-desc_yitiao[match(testdata$cc,desc_yitiao$cc),5]
testdata$date<-desc_yitiao[match(testdata$cc,desc_yitiao$cc),4]
head(testdata)
str(testdata)
testdata[is.na(testdata)]<-0
predicttree<-predict(desctree,testdata,type="class")
testdata$pred<-predicttree
table(testdata$pred)
filename4<-paste(Sys.Date(),"desc_pred.csv",sep="-")
write.csv(testdata,filename4,row.names = FALSE)
testdata_mark<-subset(testdata,pred==1)
filename4<-paste(Sys.Date(),"desc_gezi.csv",sep="-")
str(testdata_mark)
testdata_mark<-testdata_mark[order(-testdata_mark[,3]),]
head(testdata_mark)
write.csv(testdata_mark,filename4,row.names = FALSE)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值