数据分析实战 45 讲
陈旸
清华大学计算机博士
123928 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
第二模块:数据分析算法篇 (20讲)
第四模块:数据分析工作篇 (2讲)
数据分析实战 45 讲
15
15
1.0x
00:00/00:00
登录|注册

39丨数据挖掘实战(1):信用卡违约率分析

参数调优
使用AdaBoost分类器
参数调优
分类器构建
数据规范化
数据集划分
数据可视化
数据探索
分享和交流
提出问题
项目中使用的分类器
使用GridSearchCV做参数调优
分类算法选择困难
结合工具进行项目实践
参数调优工具GridSearchCV
随机森林概念及工具使用
参数调优
分类器构建
特征选择
数据探索
数据加载
数据规范化
Pipeline概念
使用Pipeline进行流水作业
参数自动搜索
GridSearchCV使用方法
对模型参数进行调优
使用随机森林分类
随机森林概念
构建随机森林分类器
分类阶段
准备阶段
加载数据
总结
信用卡违约率分析
Pipeline管道机制
GridSearchCV工具
随机森林分类器
数据挖掘项目流程
数据挖掘实战(1):信用卡违约率分析
参考文章

该思维导图由 AI 生成,仅供参考

今天我来带你做一个数据挖掘的项目。在数据挖掘的过程中,我们经常会遇到一些问题,比如:如何选择各种分类器,到底选择哪个分类算法,是 SVM,决策树,还是 KNN?如何优化分类器的参数,以便得到更好的分类准确率?
这两个问题,是数据挖掘核心的问题。当然对于一个新的项目,我们还有其他的问题需要了解,比如掌握数据探索和数据可视化的方式,还需要对数据的完整性和质量做评估。这些内容我在之前的课程中都有讲到过。
今天的学习主要围绕下面的三个目标,并通过它们完成信用卡违约率项目的实战,这三个目标分别是:
创建各种分类器,包括已经掌握的 SVM、决策树、KNN 分类器,以及随机森林分类器;
掌握 GridSearchCV 工具,优化算法模型的参数;
使用 Pipeline 管道机制进行流水线作业。因为在做分类之前,我们还需要一些准备过程,比如数据规范化,或者数据降维等。

构建随机森林分类器

在算法篇中,我主要讲了数据挖掘十大经典算法。实际工作中,你也可能会用到随机森林。
随机森林的英文是 Random Forest,英文简写是 RF。它实际上是一个包含多个决策树的分类器,每一个子分类器都是一棵 CART 分类回归树。所以随机森林既可以做分类,又可以做回归。当它做分类的时候,输出结果是每个子分类器的分类结果中最多的那个。你可以理解是每个分类器都做投票,取投票最多的那个结果。当它做回归的时候,输出结果是每棵 CART 树的回归结果的平均值。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了数据挖掘实战中的信用卡违约率分析项目,重点讨论了在数据挖掘过程中常见的问题和关键步骤。作者首先探讨了选择分类器和优化参数的问题,然后围绕创建各种分类器、使用GridSearchCV工具优化算法模型参数以及使用Pipeline管道机制进行流水线作业展开。具体涉及了构建随机森林分类器、使用GridSearchCV工具对模型参数进行调优以及使用Pipeline管道机制进行流水线作业的详细步骤和代码示例。最后,通过信用卡违约率分析项目为例,展示了整个项目的流程,包括数据加载、数据探索、特征选择、构造各种分类器等步骤。通过对数据集进行分析和分类器的比较,最终找到了最适合该项目的分类器和参数。文章还介绍了如何使用GridSearchCV做参数调优,以及提出了使用AdaBoost分类器做分类的问题。整体而言,本文以实际项目为例,详细介绍了数据挖掘实战中的关键步骤和技术特点,对读者进行了全面而深入的指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《数据分析实战 45 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(34)

  • 最新
  • 精选
  • 西湖晨曦
    我是银行信用卡部的从业人员,也很喜欢数据分析。 但是看了这个案例,感觉这个案例能够给信用卡的数据分析带来什么呢?我的意思是,能够分析出什么问题吗?银行信用卡部应该在持卡人用卡的什么阶段开始开始要采取措施防止诈骗?什么类型的客户容易诈骗?---感觉这个案例就是从数字到数字,没有能够给真实业务带来什么帮助。 -----也想对从事数据分析的人员提个醒,数据分析不是从纯数字到纯数字的纯学术研究,应该是联系实际工作,能够给实际工作带来帮助的啊!联系到此案例,应该是能够给银行信用卡部的防欺诈工作带来提升的啊~分析了什么出来?银行的哪个环节应该提升以防止欺诈?

    作者回复: 用数据分析做分类预测,也就是遇到了其他的用户数据,通过模型进行分类预测,我们有多少准确率可以预测出来他是否是欺诈用户。

    2019-09-03
    8
    28
  • vortual
    老师,实际工作中数据量大的话跑个模型应该要不少时间,应该不允许这么去试所有参数和那么多算法吧?还有一个疑问是数据量超过一定量是不是要用深度学习了?希望老师能解惑下

    作者回复: 深度学习 是帮你发现一些不太明显(线性情况下不容易)发现的规律。有时候 你可以先用机器学习得到一个baseline,然后再考虑用 NN模型,毕竟深度模型计算量大,有时候还需要GPU

    2019-03-13
    15
  • 王彬成
    GridSearch最优参数: {'n_estimators': 10} GridSearch最优分数: 0.8187 准确率 0.8129 -----代码------ # -*- coding: utf-8 -*- # 信用卡违约率分析 import pandas as pd from sklearn.model_selection import learning_curve, train_test_split,GridSearchCV from sklearn.preprocessing import StandardScaler from sklearn.pipeline import Pipeline from sklearn.metrics import accuracy_score from sklearn.ensemble import AdaBoostClassifier from matplotlib import pyplot as plt import seaborn as sns # 数据加载 data=data=pd.read_csv('./credit_default-master/UCI_Credit_Card.csv') # 数据探索 print(data.shape) # 查看数据集大小 print(data.describe()) # 数据集概览 # 查看下一个月违约率的情况 next_month = data['default.payment.next.month'].value_counts() print(next_month) df = pd.DataFrame({'default.payment.next.month': next_month.index,'values': next_month.values}) plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 plt.figure(figsize = (6,6)) plt.title('信用卡违约率客户\n (违约:1,守约:0)') sns.set_color_codes("pastel") sns.barplot(x = 'default.payment.next.month', y="values", data=df) locs, labels = plt.xticks() plt.show() # 特征选择,去掉ID字段、最后一个结果字段即可 data.drop(['ID'], inplace=True, axis =1) #ID这个字段没有用 target = data['default.payment.next.month'].values columns = data.columns.tolist() columns.remove('default.payment.next.month') features = data[columns].values # 30%作为测试集,其余作为训练集 train_x, test_x, train_y, test_y = train_test_split(features, target, test_size=0.30, stratify = target, random_state = 1) #分类器 ada=AdaBoostClassifier( random_state=1) #需要调整的参数 parameters={'n_estimators':[10,50,100]} # 使用 GridSearchCV 进行参数调优 clf=GridSearchCV(estimator=ada,param_grid=parameters,scoring = 'accuracy') clf.fit(train_x,train_y) print("GridSearch最优参数:", clf.best_params_) print("GridSearch最优分数: %0.4lf" %clf.best_score_) predict_y=clf.predict(test_x) print("准确率 %0.4lf" %accuracy_score(test_y, predict_y))

    作者回复: Good Job

    2019-03-13
    2
    6
  • CR77
    在做的时候又如下问题,我觉得需要注意: 第一、PAY_0到PAY_6经典指标性的特征,但是具体什么意义不知道,个人认为不应该草草的归一化。 第二,每月账单金额体现的是客户的消费水平,每月的还款金额体现的是客户的实际经济情况(当然不排除那些,有钱但是不还款的情况),所以我想能不能将(每月的账单金额 - 每月的还款金额)设置为一个新的特征,可能能更加贴近用户的实际经济情况。 第三,是否需要采用下采样?因为毕竟正负样本的比例是有一定的差距的,我们模型训练出来的效果并不是很好是不是有关系 第四,问题的实际意义的分析,这是一个违约率的数据挖掘,更多的可以说是一种分析,我们得到的结果是什么,是一个新的客户在产生种种交易之后,他违约的可能,这是我能想到的意义,放到商业上的话我们实际上是要做出怎么样的决策呢?

    作者回复: 1. 是否需要归一化,取决于所使用的模型。如果是树模型,只在意他们的相对大小不在意实际距离,其实可以不归一化。 2. 不错的想法,可以尝试下。 3. 下采样是解决样本极度不均衡的常用方法,有同学也确实得到了不错的效果,可以尝试下。 4. 在实际应用中,可以利用该模型对高风险客户的额度进行限制,也可以用来限制他们的贷款等等。

    2020-04-05
    2
    5
  • 跳跳
    1.对GridSearchCV的理解:就是在之前的经验的基础上选择了一些较好的取值备选,然后分别去试,得到一个好的性能。比直接选择参数多了一些保障,但是也增加一些计算负担。 2.在老师代码的基础上添加了adaboost分类,使用adaboost默认的分类器,结果是在n_estimators=10的时候取得最优性能,准确率是0.8187 GridSearch 最优参数: {'AdaBoostClassifier__n_estimators': 10} GridSearch 最优分数: 0.8187 准确率 0.8129

    作者回复: 对的 给一个范围让GridSearchCV 利用穷举找到最优

    2019-03-13
    5
  • third
    提问:老是出现futureWarning,是什么情况 GridSearch最优参数: {'n_estimators': 10} GridSearch最优分数: 0.8187 准确率 0.8129

    作者回复: 可以屏蔽 warning

    2019-03-20
    2
    4
  • 王彬成
    使用 Pipeline 管道机制的优势,参考资料: https://www.jianshu.com/p/9c2c8c8ef42d https://blog.csdn.net/qq_41598851/article/details/80957893 个人理解: Pipeline是将数据处理流程的共同部分提取出来,简化代码。 以本文最后的编程案例为例,共同部分是“数据规范化”和“使用数据分类算法”,将俩部分封装。 在每一次循环“算法”时,pipeline里头完成算法更新。GridSearchCV引用固定的pipeline,实则算法已经更新了。这样减少了多余代码的书写。

    作者回复: 感谢分享

    2019-03-13
    4
  • 白夜
    三万条,25个字段就要运算几分钟了,数据上亿。。。 ''' GridSearch最优参数: {'svc__C': 1, 'svc__gamma': 0.01} GridSearch最优分数: 0.8174 准确率 0.8172 68.59484457969666 s GridSearch最优参数: {'decisiontreeclassifier__max_depth': 6} GridSearch最优分数: 0.8186 准确率 0.8113 1.8460278511047363 s GridSearch最优参数: {'randomforestclassifier__n_estimators': 6} GridSearch最优分数: 0.7998 准确率 0.7994 2.297856330871582 s GridSearch最优参数: {'kneighborsclassifier__n_neighbors': 8} GridSearch最优分数: 0.8040 准确率 0.8036 154.36387968063354 s GridSearch最优参数: {'adaboostclassifier__n_estimators': 10} GridSearch最优分数: 0.8187 准确率 0.8129 13.483576774597168 s '''

    作者回复: Good Job

    2019-03-13
    3
    3
  • 小晨
    用32位的python在执行kneighborsclassifier分类器时,会报内存错误:numpy.core._exceptions.MemoryError: Unable to allocate 1.00 GiB for an array with shape (6391, 21000) and data type float64 老师有无办法将numpy数据类型float64改为float16或float32呢?或是其他办法解决 ///重装64位,全部库需要重装///

    作者回复: arr.astype(np.float32) 可以将数组从float64修改为float32的数据类型,float16同理

    2021-03-15
    2
    1
  • 一纸书
    勉勉强强看懂,但心知若让我在一片空白的python文件中,完全独立完成这个项目;我做不到;

    作者回复: 慢慢来啊~ 大家都是逐渐积累起来的,加油

    2019-11-22
    1
收起评论
显示
设置
留言
34
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部