R语言keras实现MLP二分类(风控金融诈骗识别)

背景:

用kaggle 的 give me some credits数据集做一个MLP分类
一般情况下,风控评分卡是不会用到深度学习的,毕竟xgboost是风控算法的天花板。
本篇目的为方法的探索,与准确率(auc)的对比

#调包
library(keras)
#导入数据集
df <- read.csv("cs-training.csv",header = TRUE)
#去除不必要变量及变量重命名
df <- df[2:12]
colnames(df) <- c("y","x1","x2","x3","x4","x5","x6","x7","x8","x9","x10")

处理缺失值

#看一下变量情况
summary(df)
#查看缺失
colSums(is.na(df))
#对x5用中位数填充
x5_mean <- mean(df$x5,na.rm =TRUE)
df[which(is.na(df$x5)),"x5"] <- x5_mean
#对x10用0填充
df[which(is.na(df$x10)),"x10"] <- 0

处理异常值

采用盖帽法,用1%处的数据覆盖分布在1%以下的数据,用99%处的数据覆盖分布在99%以上的数据。
这里的1%和99%取值有些片面,实际项目一般需要基于业务理解对其异常值进行处理,部分多分类变量需根据其实际意义进行处理

#定义切片,将上极值设为99%超出部分按照99%值计算,同理设置下极值
block<-function(x,lower=T,upper=T){
  if(lower){
    q1<-quantile(x,0.01)
    x[x<=q1]<-q1
  }
  if(upper){
    q99<-quantile(x,0.99)
    x[x>q99]<-q99
  }
  return(x)
}
#运行盖帽
features <- c("x1","x2","x3","x4","x5","x6","x7","x8","x9","x10")
for (i in features){
  df[i]=sapply(df[i],block)
}

标准中心化处理

神经网络对于特征的要求不高,

for (i in features){
  df[i]=scale(df[i],center = TRUE, scale = TRUE)
}
##划分训练集与测试集,按照7:3比例
set.seed(1)
sub<-sample(1:nrow(df),round(nrow(df)*0.7))
length(sub)
train<-df[sub,]
test<-df[-sub,]
#将训练集与测试集矩阵化
x_train <- as.matrix(train[features])
y_train <- as.matrix(train$y) 
x_test <- as.matrix(test[features])
y_test <- as.matrix(test$y)

基于keras构建神经网络,并进行训练



# 创建模型
model <- keras_model_sequential()

# 定义连接损失函数、优化器和评估指标
model %>% 
  layer_dense(units = 64, activation = 'relu', input_shape = c(10)) %>% 
  layer_dropout(rate = 0.5) %>% 
  layer_dense(units = 64, activation = 'relu') %>% 
  layer_dropout(rate = 0.5) %>% 
  layer_dense(units = 1, activation = 'sigmoid') %>% 
  compile(
    loss = 'binary_crossentropy',
    optimizer = 'rmsprop',
    metrics = metric_binary_accuracy
  )
# 训练
model %>% fit(x_train, y_train, epochs = 20, batch_size = 128)

由于数据集比较简单loss早早开始收敛
R语言keras实现MLP二分类(风控金融诈骗识别)_第1张图片

#测试集预测
score = model %>% evaluate(x_test, y_test, batch_size=128)
y_pred <- model %>% predict(x_test)
#绘制roc计算auc
library(pROC)
roc1 <- roc(y_test,y_pred,plot = TRUE, print.auc=TRUE)

R语言keras实现MLP二分类(风控金融诈骗识别)_第2张图片

结论

神经网络的强大在于你几乎不用了解变量的实际意义就可以取得不错的训练成果,但在模型的部署上有很高的代价。
深度学习在互联网公司的反欺诈中有很重要的地位。
但大部分金融机构,尤其在申请,催收等场景中,更追求模型的稳定性,所以对变量的解释性与监控也是必不可少的。关于风控模型的稳定性及监控日后另开一章总结。

你可能感兴趣的:(R语言keras实现MLP二分类(风控金融诈骗识别))