• 主页
  • 课程

    关于课程

    • 课程归档
    • 成为一名讲师
    • 讲师信息
    教学以及管理操作教程

    教学以及管理操作教程

    ¥1,000.00 ¥100.00
    阅读更多
  • 特色
    • 展示
    • 关于我们
    • 问答
  • 事件
  • 个性化
  • 博客
  • 联系
  • 站点资源
    有任何问题吗?
    (00) 123 456 789
    weinfoadmin@weinformatics.cn
    注册登录
    恒诺新知
    • 主页
    • 课程

      关于课程

      • 课程归档
      • 成为一名讲师
      • 讲师信息
      教学以及管理操作教程

      教学以及管理操作教程

      ¥1,000.00 ¥100.00
      阅读更多
    • 特色
      • 展示
      • 关于我们
      • 问答
    • 事件
    • 个性化
    • 博客
    • 联系
    • 站点资源

      R语言

      • 首页
      • 博客
      • R语言
      • 【机器学习】决策树算法识别信贷风险

      【机器学习】决策树算法识别信贷风险

      • 发布者 weinfoadmin
      • 分类 R语言
      • 日期 2018年7月17日
      测试开头

      【机器学习】决策树算法识别信贷风险


      笔者邀请您,先思考:

      1 如何利用机器学习算法做风险识别?

      本文基于决策树算法设计和构建一个简洁的信贷审批模型,实现自动化和智能化量化和识别风险。

      【机器学习】决策树算法识别信贷风险

      第一步:收集数据

      本文使用UCI公开数据集German Credit Data。

      这份数据集包括1000个样本,每个样本包括信贷和信贷人相关的数值和类别特征,目标变量表示这笔信贷是否违约。

      第二步:探索数据

      1 利用read.csv()加载数据集

      # 加载数据集
      credit <- read.csv("raw_data/credit.csv")

      2 数据检视

      dim(credit)
      names(credit)
      str(credit)
      【机器学习】决策树算法识别信贷风险

      结论:

      • 1 数据集拥有1000个样本和17个特征

      • 2 特征集是数值型和因子型的组合

      • 3 特征集源自信贷或者信贷人

      3 类别变量分布

      table(credit$checking_balance)
      table(credit$savings_balance)
      【机器学习】决策树算法识别信贷风险

      4 数值变量摘要

      summary(credit$months_loan_duration)
      summary(credit$amount)
      【机器学习】决策树算法识别信贷风险

      结论:

      • 贷款期限跨越4个月到72个月,中位数是18个月

      • 贷款金额从250DM到18424DM,中位数是2320DM

      5 目标变量分布

      table(credit$default)
      【机器学习】决策树算法识别信贷风险

      结论:

      • 30%的违约率

      第三步:数据准备

      1 数据集划分

      数据集划分为训练集和测试集。

      • 训练集:训练模型

      • 测试集:评价模型性能

      利用随机抽样函数sample(),随机抽取90%数据集为训练集,剩余的数据集为测试集。

      set.seed(123)
      train_index <- sample(nrow(credit), 0.9*nrow(credit))
      str(train_index)
      credit_train <- credit[train_index,]
      credit_test <- credit[-train_index,]
      prop.table(table(credit_train$default))
      【机器学习】决策树算法识别信贷风险

      或者
      利用caret包的createDataPartition()函数,进行分层抽样,90%为训练集,10%为测试集。

      set.seed(123)
      train_index1 <- createDataPartition(
        y = credit$default,
        p = .9,
        list = FALSE
      )
      credit_train1 <- credit[train_index1,]
      credit_test1 <- credit[-train_index1,]
      prop.table(table(credit_train1$default))
      prop.table(table(credit_test1$default))
      【机器学习】决策树算法识别信贷风险

      第四步:建立模型

      使用C50包里面的C5.0决策树算法。

      C50_model <- C5.0(
        credit_train[-17],
        credit_train$default
      )
      C50_model
      summary(C50_model)

      决策树规则集部分结果,如下图:

      【机器学习】决策树算法识别信贷风险

      ** 结论**:

      决策树规则集前三行(见红色方框)的规则策略:

      • 如果checking account balance 是大于 200DM或者 Unknown,则可能不违约

      • 如果checking account balance 是小于 0DM 或者 在1-200DM之间,并且credit history 是perfect 或者very good,则可能违约

      summary(C50_model)会显示混淆矩阵,还会指明训练模型的错误率,如下图所示:

      【机器学习】决策树算法识别信贷风险

      结论:

      • 训练模型的错误率:14.8%

      决策树算法通常存有过拟合问题。因此,需要对模型做优化处理,然后在测试数据集上面评估模型性能。

      第五步:评估模型

      测试数据集评估模型性能。

      credit_pred <- predict(
        C50_model,
        credit_test
      )
      CrossTable(
        credit_test$default,
        credit_pred,
        prop.chisq = FALSE,
        prop.c = FALSE,
        prop.r = FALSE,
        dnn = c("实际违约情况", "预测违约情况")
      )
      【机器学习】决策树算法识别信贷风险

      结论 :

      • 测试数据集100个样本,错误率是27%。测试数据集上面模型表现的性能比训练数据集上要差

      • 测试集上面对于违约情况的召回率是42%,这类错误是严重的错误,会导致银行损失

      解决方案:

      模型性能调优

      第六步:优化模型性能

      1 超参数调优

      C5.0算法通过自适应提升改进C4.5算法。在C5.0函数里面,通过超参数trials设置。

      credit_boost10 <- C5.0(
        credit_train[-17],
        credit_train$default,
        trials = 10
      )
      summary(credit_boost10)
      【机器学习】决策树算法识别信贷风险

      结论:

      • 训练模型的错误率:3.8%,相对于前面的模型性能,改善了13.9%的错误率

      credit_boost10_pred <- predict(
        credit_boost10,
        credit_test
      )
      CrossTable(
        credit_test$default,
        credit_boost10_pred,
        prop.chisq = FALSE,
        prop.c = FALSE,
        prop.r = FALSE,
        dnn = c("实际违约情况", "预测违约情况")
      )
      【机器学习】决策树算法识别信贷风险

      结论:

      • 测试数据集的错误率是18%,相对于前面模型,改善了9%的错误率

      • 测试集上面对于违约情况的召回率是61%,相对于前面的模型,提升了19%的命中率

      2 错误类型的代价分析

      对不同类型的错误,赋予不同的代价值

      • 设计错误代价矩阵

      matrix_dimensions <- list(c("no", "yes"), c("no", "yes"))
      names(matrix_dimensions) <- c("predicted", "actual")
      matrix_dimensions
      error_cost <- matrix(
        c(0, 1, 4, 0),
        nrow = 2,
        dimnames = matrix_dimensions
      )
      error_cost
      【机器学习】决策树算法识别信贷风险
      • 构建模型和评价模型性能

      credit_cost <- C5.0(
        credit_train[-17],
        credit_train$default,
        costs = error_cost
      )
      credit_cost_pred <- predict(
        credit_cost,
        credit_test
      )

      CrossTable(
        credit_test$default,
        credit_cost_pred,
        prop.chisq = FALSE,
        prop.c = FALSE,
        prop.r = FALSE,
        dnn = c("实际违约情况", "预测违约情况")
      )
      【机器学习】决策树算法识别信贷风险

      结论:

      • 测试集上面对于违约情况的召回率是79%

      参考资料:

      1 书籍 Machine learning with R 第五章
      2 https://www.r-bloggers.com/how-to-identify-risky-bank-loans-using-c-50-decision-trees/
      3 https://www.kaggle.com/uciml/german-credit/discussion/26658

      版权声明:作者保留权利,严禁修改,转载请注明原文链接。

      数据人网是数据人学习、交流和分享的平台http://shujuren.org 。专注于从数据中学习到有用知识。
      平台的理念:人人投稿,知识共享;人人分析,洞见驱动;智慧聚合,普惠人人。
      您在数据人网平台,可以1)学习数据知识;2)创建数据博客;3)认识数据朋友;4)寻找数据工作;5)找到其它与数据相关的干货。
      我们努力坚持做原创,聚合和分享优质的省时的数据知识!
      我们都是数据人,数据是有价值的,坚定不移地实现从数据到商业价值的转换!

      加入数据人圈子或者商务合作,请添加笔者微信。

      【机器学习】决策树算法识别信贷风险


      点击阅读原文,进入数据人网,获取数据知识。

      公众号推荐:

      链达君,专注于分享区块链内容。

      【机器学习】决策树算法识别信贷风险

      艾鸽英语,专注于分享有趣味的英语内容。

      【机器学习】决策树算法识别信贷风险


      数据工作

      我们公司大数据风控中心部门诚招:

      1 风险分析和建模工程师(信用评分模型,反欺诈模型,额度模型|熟练常用ML算法|熟练使用R或者Python)

      2 数据开发工程师(大数据平台开发,数据采集,数据预处理)

      3 爬虫工程师(掌握爬虫技术,掌握反爬策略)

      4 数据分析或者建模实习生(研究生学历|统计学,数学,计算机专业|熟悉R或者Python|有金融数据项目可以加分)

      工作地点:深圳大冲商务中心

      薪资待遇:面议

      感兴趣者,请加小编微信。

      【机器学习】决策树算法识别信贷风险







      测试结尾

      请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!

      • 分享:
      作者头像
      weinfoadmin

      上一篇文章

      花花读文献第三天--蛋白纯化之超滤
      2018年7月17日

      下一篇文章

      花花读文献第四天--
      2018年7月17日

      你可能也喜欢

      3-1665801675
      R语言学习:重读《R数据科学(中文版)》书籍
      28 9月, 2022
      6-1652833487
      经典铁死亡,再出新思路
      16 5月, 2022
      1-1651501980
      R语言学习:阅读《R For Everyone 》(第二版)
      1 5月, 2022

      搜索

      分类

      • R语言
      • TCGA数据挖掘
      • 单细胞RNA-seq测序
      • 在线会议直播预告与回放
      • 数据分析那些事儿分类
      • 未分类
      • 生信星球
      • 老俊俊的生信笔记

      投稿培训

      免费

      alphafold2培训

      免费

      群晖配置培训

      免费

      最新博文

      Nature | 单细胞技术揭示衰老细胞与肌肉再生
      301月2023
      lncRNA和miRNA生信分析系列讲座免费视频课和课件资源包,干货满满
      301月2023
      如何快速批量修改 Git 提交记录中的用户信息
      261月2023
      logo-eduma-the-best-lms-wordpress-theme

      (00) 123 456 789

      weinfoadmin@weinformatics.cn

      恒诺新知

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      链接

      • 课程
      • 事件
      • 展示
      • 问答

      支持

      • 文档
      • 论坛
      • 语言包
      • 发行状态

      推荐

      • iHub汉语代码托管
      • iLAB耗材管理
      • WooCommerce
      • 丁香园论坛

      weinformatics 即 恒诺新知。ICP备案号:粤ICP备19129767号

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      要成为一名讲师吗?

      加入数以千计的演讲者获得100%课时费!

      现在开始

      用你的站点账户登录

      忘记密码?

      还不是会员? 现在注册

      注册新帐户

      已经拥有注册账户? 现在登录

      close
      会员购买 你还没有登录,请先登录
      • ¥99 VIP-1个月
      • ¥199 VIP-半年
      • ¥299 VIP-1年
      在线支付 激活码

      立即支付
      支付宝
      微信支付
      请使用 支付宝 或 微信 扫码支付
      登录
      注册|忘记密码?