数据科学与机器学习案例之汽车目标客户销售策略研究
识别数据中的异常值与缺失值
数据中的0类与1类严重失衡,具体的解决方法可参考链接中的文章。
> library(data.table)
> library(Hmisc)
> library(readxl)
> library(caret)
> library(car)
> df.train <- data.table(read_excel('目标客户体验数据.xlsx'))
> df.test <- data.table(read_excel('待判定的数据.xlsx'))
>
> df.train$a1[which(df.train$a1 > 100)] = mean(df.train$a1[-which(df.train$a1 > 100)])
> df.train$a3[which(df.train$a3 > 100)] = mean(df.train$a3[-which(df.train$a3 > 100)])
> df.train$a5[which(df.train$a5 > 100)] = mean(df.train$a5[-which(df.train$a5 > 100)])
> df.train[,B3 := recode(B3,'1=1;2=2;3=3;4=4;5=5;6=5')]
> df.train$B7[is.na(df.train$B7)] = 0
> df.train[,B8 := 2022 - B8 + 1]
> df.train[,IS := ifelse(B13 > B14,0,1)]
> View(df.train[which(df.train$IS == 1),.(B13,B14)]) # 删除这些异常值
> df.train = df.train[-which(df.train$IS == 1),]
> df.train[,IS := NULL]
>
>
> df.train$B17[which(df.train$B17 > 100)] = quantile(
+ df.train$B17[-which(df.train$B17 > 100)],0.5,na.rm = T)
>
>
> continous = c(paste('a',1:8,sep = ''),
+ 'B2', 'B4', 'B5', 'B7', 'B8', 'B10'
+ , 'B13', 'B14', 'B15', 'B16', 'B17')
> category = colnames(df.train)[which(!colnames(df.train) %in% continous)]
>
> apply(df.train[,continous,with = FALSE],2,e1071::skewness)
可视化
相关系数图
通过相关系数图可以看到连续性变量间存在较大的相关性。
雷达图

脸谱图

glmnet模型
> glmnetGrid = expand.grid(.alpha = c(0,.1),
+ .lambda = seq(.01,.1,length = 10))
>
> ctrl <- trainControl(method = 'cv',number = 10,classProbs = TRUE,
+ summaryFunction = twoClassSummary,
+ verboseIter = TRUE)
>
> set.seed(1024)
> glmnet.fit = train(x = df.train[,2:27],y = df.train$y,
+ method = 'glmnet',
+ tuneGrid = glmnetGrid,
+ trControl = ctrl,
+ metric = 'ROC')
> plot(glmnet.fit,plotType = 'level')
>
ROC曲线下面积图
总结:汽车目标客户销售策略研究仍然为类失衡问题,类失衡问的具体解决方法参考上一篇博客,这里对于其问题不做过多的赘述!