银行客户流失预测交叉验证[关闭]

Posted

技术标签:

【中文标题】银行客户流失预测交叉验证[关闭]【英文标题】:Bank customer churn prediction cross-validation [closed] 【发布时间】:2021-04-24 18:39:08 【问题描述】:

给定反映客户特征的银行客户样本以及银行是否继续与他们合作(流失)。样本涉及 10,000 名客户,而文件“Train.Data”和“Test.Data”包含我们需要的信息。

我的数据:

火车数据:

> dput(head(Train.Data))
structure(list(datetime_utc = c("2010-01-04 00:00:00", "2010-01-04 01:00:00", 
"2010-01-04 02:00:00", "2010-01-04 03:00:00", "2010-01-04 04:00:00", 
"2010-01-04 05:00:00"), Generation_BE = c(13143.7, 13143.7, 13143.7, 
13143.7, 13143.7, 13143.7), Generation_FR = c(63599, 62212, 62918, 
62613, 62432, 63411), Prices.BE = c(37.15, 33.47, 28, 21.29, 
16.92, 28), holidaysBE = c(0L, 0L, 0L, 0L, 0L, 0L)), row.names = c(NA, 
6L), class = "data.frame")

测试数据:

> dput(head(Test.Data))
structure(list(datetime_utc = c("2016-10-24 00:00:00", "2016-10-24 01:00:00", 
"2016-10-24 02:00:00", "2016-10-24 03:00:00", "2016-10-24 04:00:00", 
"2016-10-24 05:00:00"), Generation_BE = c(9615.7075, 9626.865, 
9648.0025, 9668.42, 9681.805, 9688.425), Generation_FR = c(45605L, 
44629L, 44073L, 44359L, 44056L, 44799L), Prices.BE = c(44.6, 
40.92, 37.39, 36.4, 33.01, 37.89), holidaysBE = c(0L, 0L, 0L, 
0L, 0L, 0L)), row.names = c(NA, 6L), class = "data.frame")

“Train.Data”必须用于客户流失分析和模型训练,并且 “Test.Data”最初被认为是未知的,只能用于 对早期开发的模型进行最终评估。

我必须使用分类方法来预测流失率。我决定建立一个分类树。 我面临的问题是我可以构建一个分类树,但我不能添加交叉验证来衡量我的模型的准确性。我需要在交叉验证中构建一个 for 循环!

欢迎提出任何建议。

【问题讨论】:

【参考方案1】:

我已经使用循环为您绘制了一个代码。由于您只能使用训练数据,您可以将其拆分为训练集和测试集,并将结果存储在向量中。在这里,我将使用逻辑回归,但其他学习技术的过程是相同的。我使用 AUROC 来评估性能,但如果需要,您可以更改为其他指标。结果将保存在度量的向量中,模型的结果将保存在列表中。这里是代码,请根据您的数据完成因变量:

library(ROCR)
#Vectors
auroc <- c()
models <- list()
#Loop
for (i in c(1:10))

  print(i)
  d = sort(sample(nrow(Train.Data), nrow(Train.Data)*0.6)) 
  train<-Train.Data[d,] 
  test<-Train.Data[-d,] 
  # PASOS SUCESIVOS
  Model <- glm(DependentVarHere~.,data=train,family=binomial)
  test$score<-predict(Model,type='response',test)
  pred<-prediction(test$score,test$GoodBad)
  discr=performance(pred,"auc")
  AUROC=as.numeric(discr@y.values)
  #Save auroc
  auroc[i] <- AUROC
  #Save model
  models[[i]] <- Model

#Print values
auroc
#Print mode
models[which(auroc==max(auroc))]

【讨论】:

以上是关于银行客户流失预测交叉验证[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

分类预测,交叉验证调超参数

如何在 WEKA 中打印出交叉验证后的预测类

如何在 scikit-learn 中使用交叉验证获得预测概率

您是不是预测交叉验证后的测试数据(gridsearchcv w/KFold)以及如何预测?

如何通过 Prophet 交叉验证获得更好的预测结果?

在执行 K 折交叉验证后,我们如何在初始数据集/数据帧中包含预测列?