【信用评分预测模型(四)】Python随机森林模型

article/2025/8/3 10:53:39

文章目录

  • 前言
  • 一、随机森林介绍
  • 一、定义函数
  • 二、模型建立
    • 1.模型参数设置
    • 2.模型训练集和测试集拆分
    • 3.模型训练
    • 4.特征值
  • 总结


前言

https://blog.csdn.net/m0_65157892/article/details/129523883这篇文章中已经对数据进行了标准化和异常值处理。得到了一个新的数据集,且数据集是不受极端值影响的数据集。
在另外一篇文章中讲解了普遍情况下的随机森林预测模型,在这篇文章将运用在信用评分预测上。


一、随机森林介绍

首先了解一下集成学习,集成学习(ensemble)思想是为了解决单个模型或者某一组参数的模型所固有的缺陷,从而整合起多个模型,取长补短,避免局限性。
集成时一般用到bootstrap方法(自助法,随机抽样),bagging方法(自助抽样集成,多个模型,使用投票或其他方法来整合模型,分类问题一般类似投票,回归问题一般均值)
随机森林就是集成学习思想下的产物,将许多棵决策树整合成森林,合并用来预测最终结果。实际上是一种特殊的bagging方法,将决策树用作bagging中的模型。
用bootstrap方法生成m个训练集,然后,对于每个训练集,构造一颗决策树。不同的是选择特征时是随机抽取部分特征取最优解来分裂。预测阶段,采用的是bagging的策略,分类问题就是投票(回归问题则为均值)。
随机森林算法可被用于很多不同的领域,如银行,股票市场,医药和电子商务。在银行领域,它通常被用来检测那些比普通人更高频率使用银行服务的客户,并及时偿还他们的债务。同时,它也会被用来检测那些想诈骗银行的客户。在金融领域,它可用于预测未来股票的趋势。在医疗保健领域,它可用于识别药品成分的正确组合,分析患者的病史以识别疾病。除此之外,在电子商务领域中,随机森林可以被用来确定客户是否真的喜欢某个产品。

一、定义函数


def list_add(a, b):# 这个函数实现列表a与列表b相加,同时相加后的值存到列表a中assert len(a) == len(b)for i in range(len(a)):a[i] += b[i]def list_div(a, num):# 这个函数将列表a的各值除以num,同时将处理后的值存到列表a中for i in range(len(a)):a[i] /= numreturn a

这个定义的函数是为了在后面模型训练打下基础的。

二、模型建立

1.模型参数设置

acc_mean = 0
acc_mean_10test = 0
feature_mean = [0] * len(df.columns[:-1])
n = 1000
max_acc = 0;
index_of_max = 0  # 何时的acc最大,以及对应的index
min_acc = 1;
index_of_min = 0  # 何时的acc最小,以及对应的index
max_arg_acc = 0;
index_of_max_acc2 = 0  # 何时的acc最大,以及对应的index
# 树的个数
trees = 10
  1. 我们在这里是将循环次数设置为n = 1000
  2. 即在随机划分训练集和测试集时,穷举随机数种子为1-1000时的情况
  3. trees = 10随机森林数量设置为10

2.模型训练集和测试集拆分

 x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.6, random_state=i + 1)x_test2, x_check, y_test2, y_check = train_test_split(x_test, y_test, train_size=0.25, random_state=i + 1)

3.模型训练

在这里我们需要先定义一个函数train_test(),通过这个函数我们可以训练随机森林模型,不断地迭代直到出现最合适的解出现。

def train_test():global acc_mean, acc_mean_10test, max_acc, max_arg_acc, min_acc, index_of_max, index_of_max_acc2, index_of_minfor i in range(50):# print('*'*150)print('第 %d 次 test' % (i + 1))# x_test,x_train,y_test,y_train=train_test_split(x,y,random_state=i+1)x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.6, random_state=i + 1)x_test2, x_check, y_test2, y_check = train_test_split(x_test, y_test, train_size=0.25, random_state=i + 1)forest = RandomForestClassifier(n_estimators=trees, random_state=100)#y_train改成y_train.astype('int')forest.fit(x_train, y_train.astype('int'))# 经测试,random_state=594时验证集上精度最高# n_estimators表示树的个数,测试中10颗树足够# print('*'*100)# print('start')test_score = forest.score(x_check, y_check.astype('int'))  # 300条数据得到的score# print("random forest with %d trees:"%trees)print("accuracy on the training subset:{:.3f}".format(forest.score(x_train, y_train.astype('int'))))print("accuracy on the test subset:{:.3f}".format(test_score))# print("avg accuracy on the test subset:{:.3f}".format(acc_mean/(i+1)))# print('Feature importances:{}'.format(forest.feature_importances_))if (max_acc <= test_score):max_acc = test_scoreindex_of_max = i + 1if (min_acc >= test_score):min_acc = test_scoreindex_of_min = i + 1acc_mean += test_score  # check subset meanprint("i times avg accuracy on the check subset:{:.3f}".format(acc_mean / (i + 1)))acc_mean2 = 0  # 临时的acc_mean2 += test_scoreprint('10 check score')for j in range(10):# x_test2,x_train2,y_test2,y_train2=train_test_split(x,y,random_state=j+1)# x_train2,x_test2,y_train2,y_test2=train_test_split(x,y,random_state=j+1)# x_train2,x_test2,y_train2,y_test2=train_test_split(x,y,train_size=0.4,test_size=0.4,random_state=j+1)# x_train2,x_test2,y_train2,y_test2=train_test_split(x,y,test_size=0.4,random_state=j+1)x_test2, x_check, y_test2, y_check = train_test_split(x_test, y_test, train_size=0.25,random_state=j + 1)  # 划分10次check集acc_mean2 += forest.score(x_check, y_check.astype('int'))print(forest.score(x_test2, y_test2.astype('int')), end=' ')print()print("avg accuracy on the 11 check subset:{:.3f}".format(acc_mean2 / 11))  # 在此模型下多次划分check集合得到一个平均精度acc_mean2 = acc_mean2 / 11# 得到最大时的indexif (max_arg_acc <= acc_mean2):max_arg_acc = acc_mean2index_of_max_acc2 = i + 1list_add(feature_mean, forest.feature_importances_)acc_mean_10test += acc_mean2print("all-avg accuracy on the 10 check subsets:{:.3f}".format(acc_mean_10test / (i + 1)))# 得到一千次训练的平均精度# 然后暂时可以先用最高精度构造出分类器后测试其在不同测试集上的精度# print()print('Final :')print("avg accuracy on the check subset:{:.3f}".format(acc_mean / n))# print('avg Feature importances:{}'.format(list_div(feature_mean,n)))print('max_acc on the check subset: %f' % max_acc)print('index : %d' % index_of_max)print('min_acc on the check subset: %f' % min_acc)print('index : %d' % index_of_min)print('max_arg_acc on 11 check subsets: %f' % max_arg_acc)print('index : %d' % index_of_max_acc2)train_test()

4.特征值

train_test()# x_train,x_test,y_train,y_test=train_test_split(x,y,train_size=0.4,test_size=0.4,random_state=index_of_max_acc2)
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.4, random_state=index_of_max_acc2)
x_test2, x_check, y_test2, y_check = train_test_split(x_test, y_test, train_size=0.25, random_state=index_of_max_acc2)
# x_test,x_train,y_test,y_train=train_test_split(x,y,random_state=index_of_max_acc2)
forest = RandomForestClassifier(n_estimators=trees, random_state=100)
forest.fit(x_train, y_train.astype('int'))
result_acc = 0
result_acc += forest.score(x_check, y_check.astype('int'))
for j in range(10):x_test2, x_check, y_test2, y_check = train_test_split(x_test, y_test, train_size=0.25, random_state=j + 1)print(forest.score(x_check, y_check.astype('int')), end=' ')# print(forest.predict(x_check))result_acc += forest.score(x_check, y_check.astype('int'))
print()
print("avg accuracy on the 11 check subsets:{:.3f}".format(result_acc / 11))# 做出特征重要性的图
n_features = x.shape[1]
plt.barh(range(n_features), forest.feature_importances_, align='center')
plt.yticks(np.arange(n_features), names)
plt.title("random forest with %d trees:" % trees)
plt.xlabel('Feature Importance')
plt.ylabel('Feature')
plt.show()

在这里插入图片描述

通过模型的迭代求出最佳取值,将所求出的最佳值用来特征值选取,从而求得哪个变量的影响因素最大。

总结

通过随机森林模型,我们可以求出特征变量的特征值,银行在进行信用评分时,可以根据这些变量来对决策进行修改。如上图所示即特征值得分,通过这个特征值我们可以看到,第八个变量的特征值得分最高,最低的得分是第五个变量,因此在进行信用赋分时,我们可以按照不同的特征值,赋予不同的权重,使预测更加准确。


http://chatgpt.dhexx.cn/article/m8md78qu.shtml

相关文章

GiveMeSomeCredit——信用评分卡模型

如今在银行、消费金融公司等各种贷款业务机构,普遍使用信用评分,对客户实行打分制,以期对客户有一个优质与否的评判。评分卡分为三类分别为: A卡(Application score card)申请评分卡 B卡(Behavior score card)行为评分卡 C卡(Collection score card)催收评分卡 评…

[机器学习] 信用评分卡中的应用 | 干货

背景介绍与评分卡模型的基本概念 如今在银行、消费金融公司等各种贷款业务机构&#xff0c;普遍使用信用评分&#xff0c;对客户实行打分制&#xff0c;以期对客户有一个优质与否的评判。交易对手未能履行约定契约中的义务而造成经济损失的风险,即受信人不能履行还本付息的责任…

信用卡评分模型

一、数据准备 1、 问题的准备 • 目标&#xff1a;要完成一个评分卡&#xff0c;通过预测某人在未来两年内将会经历财务危机的可能性来提高信用评分的效果&#xff0c;帮助贷款人做出最好的决策。 • 背景&#xff1a; – 银行在市场经济…

建立信用评分模型

读取数据 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from sklearn.linear_model import LogisticRegression as LR from sklearn.ensemble import RandomForestRegressor as rfr from sklearn.model_selection import t…

信用评分模型开发(FICO评分)

以支付宝的芝麻信用为例&#xff0c;其分值范围在350-950分。一般认为分值越高&#xff0c;信用越好&#xff0c;个人业务的违约率越低。这里用的也是与FICO评分类似的个人信用评分工具。 FICO评分的只要思路是&#xff1a;多大量拥有多个属性的用户数据进行收集/分析/转换&am…

【评分卡开发】信用评分模型构建流程

本课程&#xff0c;将从信用评分模型的发展、应用、类型及开发流程等多个方面展开介绍&#xff0c;旨在让初学者全面了解其在信贷金融领域里的可靠性及重要性&#xff0c;并且掌握一定的开发能力。 文章目录 1.评分卡简介1.1 简介1.2 种类1.2.1 依预测目的分1.2.2 依发展主体分…

基于Python的信用评分卡模型建立和分析,万字阐述,收藏

和所有金融信贷业务一样,信用风险credit risk也是企业贷款面临的最主要风险&#xff0c;特别是中小微企业。随着微小企业信贷业务的迅速发展,客户群体的不断扩大,诸多大型企业&#xff08;恒大&#xff0c;融创&#xff0c;st上市公司&#xff09;暴雷&#xff0c;银行在大数据…

基于Python的信用评分卡模型分析

我们每天都在用支付宝&#xff0c;蚂蚁金服风险识别速度可达到100毫秒&#xff0c;比眨眼一次的时间还要快四倍。在全球数字经济时代&#xff0c;有一种金融优势&#xff0c;那就是基于消费者大数据的纯信用&#xff01; 我们不妨称之为数据信用&#xff0c;它比抵押更靠谱&…

基于python的信用卡评分模型

基于python的信用卡评分模型 1. 项目背景介绍 1.1 信用风险和评分卡模型的基本概念 信用风险指的是交易对手未能履行约定合同中的义务造成经济损失的风险&#xff0c;即受信人不能履行还本付息的责任而使授信人的预期收益与实际收益发生偏离的可能性&#xff0c;它是金融风险…

信用标准评分卡模型开发及实现

一、信用风险评级模型的类型 信用风险计量体系包括主体评级模型和债项评级两部分。主体评级和债项评级均有一系列评级模型组成&#xff0c;其中主体评级模型可用“四张卡”来表示&#xff0c;分别是A卡、B卡、C卡和F卡&#xff1b;债项评级模型通常按照主体的融资用途&#xf…

我眼中的信用评分模型

关于信用风险 之前工作中涉及到信用风险&#xff0c;接下来几天就分享些我在信用风险建模领域的一些经验吧~ 推荐一本比较好的资料书-《信用风险评分卡研究-基于SAS的开发与实施》&#xff0c;书的核心内容为以逻辑回归为基础构建信用评分模型&#xff0c;如果将这本书的内容理…

信用卡评分模型(数据获取+数据预处理+探索分析+变量选择+模型开发+模型评估+信用评分+建立评分系统)

最近两次遇到关于信用卡评分的题目&#xff0c;遂了解一波。 Reference: 基于python的信用卡评分模型(超详细&#xff01;&#xff01;&#xff01;) https://www.jianshu.com/p/f931a4df202c https://blog.csdn.net/zs15321583801/article/details/81234446 https://blo…

信用评分模型详解(下)之 信用评分系统搭建

信用评分问题中一般使用逻辑回归作为主要的模型。过程主要包括变量分箱、变量的WOE&#xff08;证据权重&#xff09;变换和变量选择&#xff08;IV值&#xff09;、逻辑回归估算。 一个完整的评分卡流程主要包括以下几个步骤&#xff1a; 数据准备数据探索性分析数据预处理&…

【信用评分预测模型(一)】信用评分预测模型简介

文章目录 前言一、数据准备1.文章所使用的数据都是基于下面这两个网站&#xff1a;2.观察期和表现期 二、数据处理1.缺失值和异常值2.筛选数据 三、相关性检验四、特征工程1.特征变量 五、模型构建1.随机森林模型2.决策树模型3.AHP分析 总结 前言 在传统的信用风险预测的模型中…

大数据分析案例-基于多元线性回归算法构建用户信用评分模型

🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章 大数据分析案例合集…

【综合案例】信用评分模型开发

目录 一、案例背景二、前置知识2.1 数据分箱2.2 属性选择2.3 回归方程 三、数据处理3.1 数据清洗3.2 因素分析 四、模型训练五、模型预测六、结语后记 一、案例背景 在上一篇文章网络贷款违约预测案例中&#xff0c;我们在分析属性关系时发现&#xff1a;FICO信用评分与分类标…

信用评分模型(R语言)

信用评分 2016年1月10日 本文详细的介绍了信用评分卡的开发流程,开发语言为R语言,python版本请见:一行代码搞定信用评分模型(python) python版实例和数据请见我的github:https://github.com/chengsong990020186/CreditScoreModel,如觉得实用就点下star,欢迎大家一起…

信用评分卡模型分析(基于Python)--理论部分

信用风险计量体系包括主体评级模型和债项评级两部分。主体评级和债项评级均有一系列评级模型组成&#xff0c;其中主体评级模型可用“四张卡”来表示&#xff0c;分别是A卡、B卡、C卡和F卡&#xff1b;债项评级模型通常按照主体的融资用途&#xff0c;分为企业融资模型、现金流…

企业信用评分卡模型实战(python,附代码)

企业信用评级在全球金融领域有广泛应用。它涉及到公司管理&#xff0c;企业债发行&#xff0c;企业融资&#xff0c;企业上市&#xff0c;企业并购&#xff0c;个人炒股和购买公司债券等多个场景。企业债发行 企业主体信用评级越高&#xff0c;意味着该企业抗风险能力、盈利能力…

银行信用卡评分模型(一)| python

文章目录 背景介绍题目分析一、申请者评级模型二、欺诈评级模型三、行为评级模型四、催收评级模型总结 背景介绍 信用风险和评分卡模型的基本概念&#xff1a;信用风险指的是交易对手未能履行约定合同中的义务造成经济损失的风险&#xff0c;即受信人不能履行还本付息的责任而使…