39丨数据挖掘实战(1):信用卡违约率分析
该思维导图由 AI 生成,仅供参考
构建随机森林分类器
- 深入了解
- 翻译
- 解释
- 总结
本文详细介绍了数据挖掘实战中的信用卡违约率分析项目,重点讨论了在数据挖掘过程中常见的问题和关键步骤。作者首先探讨了选择分类器和优化参数的问题,然后围绕创建各种分类器、使用GridSearchCV工具优化算法模型参数以及使用Pipeline管道机制进行流水线作业展开。具体涉及了构建随机森林分类器、使用GridSearchCV工具对模型参数进行调优以及使用Pipeline管道机制进行流水线作业的详细步骤和代码示例。最后,通过信用卡违约率分析项目为例,展示了整个项目的流程,包括数据加载、数据探索、特征选择、构造各种分类器等步骤。通过对数据集进行分析和分类器的比较,最终找到了最适合该项目的分类器和参数。文章还介绍了如何使用GridSearchCV做参数调优,以及提出了使用AdaBoost分类器做分类的问题。整体而言,本文以实际项目为例,详细介绍了数据挖掘实战中的关键步骤和技术特点,对读者进行了全面而深入的指导。
《数据分析实战 45 讲》,新⼈⾸单¥59
全部留言(34)
- 最新
- 精选
- 西湖晨曦我是银行信用卡部的从业人员,也很喜欢数据分析。 但是看了这个案例,感觉这个案例能够给信用卡的数据分析带来什么呢?我的意思是,能够分析出什么问题吗?银行信用卡部应该在持卡人用卡的什么阶段开始开始要采取措施防止诈骗?什么类型的客户容易诈骗?---感觉这个案例就是从数字到数字,没有能够给真实业务带来什么帮助。 -----也想对从事数据分析的人员提个醒,数据分析不是从纯数字到纯数字的纯学术研究,应该是联系实际工作,能够给实际工作带来帮助的啊!联系到此案例,应该是能够给银行信用卡部的防欺诈工作带来提升的啊~分析了什么出来?银行的哪个环节应该提升以防止欺诈?
作者回复: 用数据分析做分类预测,也就是遇到了其他的用户数据,通过模型进行分类预测,我们有多少准确率可以预测出来他是否是欺诈用户。
2019-09-03828 - vortual老师,实际工作中数据量大的话跑个模型应该要不少时间,应该不允许这么去试所有参数和那么多算法吧?还有一个疑问是数据量超过一定量是不是要用深度学习了?希望老师能解惑下
作者回复: 深度学习 是帮你发现一些不太明显(线性情况下不容易)发现的规律。有时候 你可以先用机器学习得到一个baseline,然后再考虑用 NN模型,毕竟深度模型计算量大,有时候还需要GPU
2019-03-1315 - 王彬成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-1326 - CR77在做的时候又如下问题,我觉得需要注意: 第一、PAY_0到PAY_6经典指标性的特征,但是具体什么意义不知道,个人认为不应该草草的归一化。 第二,每月账单金额体现的是客户的消费水平,每月的还款金额体现的是客户的实际经济情况(当然不排除那些,有钱但是不还款的情况),所以我想能不能将(每月的账单金额 - 每月的还款金额)设置为一个新的特征,可能能更加贴近用户的实际经济情况。 第三,是否需要采用下采样?因为毕竟正负样本的比例是有一定的差距的,我们模型训练出来的效果并不是很好是不是有关系 第四,问题的实际意义的分析,这是一个违约率的数据挖掘,更多的可以说是一种分析,我们得到的结果是什么,是一个新的客户在产生种种交易之后,他违约的可能,这是我能想到的意义,放到商业上的话我们实际上是要做出怎么样的决策呢?
作者回复: 1. 是否需要归一化,取决于所使用的模型。如果是树模型,只在意他们的相对大小不在意实际距离,其实可以不归一化。 2. 不错的想法,可以尝试下。 3. 下采样是解决样本极度不均衡的常用方法,有同学也确实得到了不错的效果,可以尝试下。 4. 在实际应用中,可以利用该模型对高风险客户的额度进行限制,也可以用来限制他们的贷款等等。
2020-04-0525 - 跳跳1.对GridSearchCV的理解:就是在之前的经验的基础上选择了一些较好的取值备选,然后分别去试,得到一个好的性能。比直接选择参数多了一些保障,但是也增加一些计算负担。 2.在老师代码的基础上添加了adaboost分类,使用adaboost默认的分类器,结果是在n_estimators=10的时候取得最优性能,准确率是0.8187 GridSearch 最优参数: {'AdaBoostClassifier__n_estimators': 10} GridSearch 最优分数: 0.8187 准确率 0.8129
作者回复: 对的 给一个范围让GridSearchCV 利用穷举找到最优
2019-03-135 - third提问:老是出现futureWarning,是什么情况 GridSearch最优参数: {'n_estimators': 10} GridSearch最优分数: 0.8187 准确率 0.8129
作者回复: 可以屏蔽 warning
2019-03-2024 - 王彬成使用 Pipeline 管道机制的优势,参考资料: https://www.jianshu.com/p/9c2c8c8ef42d https://blog.csdn.net/qq_41598851/article/details/80957893 个人理解: Pipeline是将数据处理流程的共同部分提取出来,简化代码。 以本文最后的编程案例为例,共同部分是“数据规范化”和“使用数据分类算法”,将俩部分封装。 在每一次循环“算法”时,pipeline里头完成算法更新。GridSearchCV引用固定的pipeline,实则算法已经更新了。这样减少了多余代码的书写。
作者回复: 感谢分享
2019-03-134 - 白夜三万条,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-1333 - 小晨用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-1521 - 一纸书勉勉强强看懂,但心知若让我在一片空白的python文件中,完全独立完成这个项目;我做不到;
作者回复: 慢慢来啊~ 大家都是逐渐积累起来的,加油
2019-11-221