当前位置: 首页 > 后端技术 > Python

原理+代码|Python基于主成分分析的客户信用评级实战

时间:2023-03-25 21:26:54 Python

文章来源:EarlyPython作者:萝卜本文为Python商业数据挖掘实战第五篇算法实现智能推荐3——随机森林预测宽带客户离网4-多元线性回归模型实战5-PCA实现客户信用5C评级前言大样本数据集虽然提供了丰富的信息,但也在一定程度上增加了问题的复杂性。如果对每个指标单独分析,往往得出孤立的结论,不能充分利用数据中包含的信息。但是一味地减少我们分析的指标,会丢失很多有用的信息。因此,我们需要找到一种合适的方法,一方面可以减少分析指标,另一方面可以最大限度地减少原始指标信息的损失。变量压缩的方法很多,但都是密不可分的。其实最根本的就是“主成分分析”(PCA)。本文的目标是能够理解PCA的基本原理并将代码应用到实际的业务案例中。本文将详细介绍如何使用Python实现基于主成分分析的5c信用评级。主要分为两部分:详细原理介绍Python代码实战简介在正式开始原理分析之前,我们先从两个生活场景入手,以更好地理解为什么需要进行变量压缩。场景一:你的老板想让你这个搞数据分析的,只用短短的两句话概括下面几组数据所反映的经济现象。几句长句未必能很好地描述数据集的价值,更不用说高度了简明扼要的两句话,光是九个指标就已经很麻烦了。如果表格更宽,例如二十或三十个变量怎么办?情景2大学生注重德、智、体、艺、劳全面发展。学校计划从某学院选派一到两名学生出国留学。数据分析需要综合考虑学生素质。部分考生个人情况如下:首先,仍然存在与情景一类似的问题,这些指标只是冰山一角,并未统计学生在其他领域的成绩。对于看似无关紧要的变量,比如我们猜测老板只会关注GDP和人均GDP这两个指标,那么场景2的背景已经明确说明变量需要综合考虑,而“运动”不能直截了当地去掉。手术。信息压缩如果把信息压缩这四个词分成信息和压缩两部分,就会出现下面的问题:“信息压缩中的信息是什么?”事实上,各种数据和变量都可以称为信息,统计学家通常将方差称为信息。其实在做描述性统计分析的时候,只要是能够代表我们数据变异的统计量都可以称为信息,比如方差,极差等,只是极差更容易计算而已。以方差为例,方差变化越大,数据分布越分散,涵盖的信息越多。“什么样的信息/变量可以被压缩?”只有高度相关的变量才能被压缩。比如场景2中的数学建模和科技节活动都是学生科学思维的体现,那么可以考虑把两者组合成一个新的变量,叫做“科学思维”,这样就没有必要了用这两个变量来描述需要很长时间,但关键是数学建模和科技节这两个老变量在“科学思维”这个新变量中各自的比例。(因为这里没有因变量,所以这两个旧变量的权重系数不能简单的用多元线性回归来做)如果变量之间的关系几乎是独立的但仍然强制压缩(比如运动和演讲),则将是大大加剧了信息缺失的程度,这也是为什么“压缩”其实是有必要感的,都是建立在尽可能少丢失信息的前提下。主成分分析只能对连续变量进行压缩,不能对分类变量进行压缩。因为分类变量可以说是完全独立的,不存在正相关或负相关,比如性别、男性和女性是完全独立的。如果还必须对分类变量进行压缩,一般会对其进行WOE转换(后续推文中提到),然后就可以愉快地进行压缩了。所以分类变量不能单独压缩,因为没有对应的算法。有些人可能会直接在分类变量之间进行卡方检验,然后删除一些p值较大的变量。这其实应该归为人工范畴,而不是算法范畴。“有哪些压缩方式?”总的来说,降维有两种方法,一种是特征剔除,一种是特征抽取特征剔除:如上一题所述,使用卡方检验等非算法,或者直接拍脑袋并决定需要删除哪些变量,但这可能会使我们丢失这些特征中的大量信息。特征提取:通过组合现有特征来创建新变量,可以在特征中保留尽可能多的信息。PCA是一种常用的特征提取方法,它用尽可能少的新创建的变量替换密切相关的变量,使这些新变量不相关。这使得可以使用更少的综合指标来表示每个变量中的各种类型的信息。因此,多元压缩思想的基础其实是相关性分析。“压缩后的信息与原始信息有何不同?”我们需要明确的是,无论是主成分还是后续推文的稀疏主成分分析,都存在一个问题:他们得到的主成分没有商业意义。如果希望得到的压缩变量是有意义的,那么可以考虑变量聚类。压缩过程下图是两个正态分布变量之间三种可能关系的示意图。正态分布和0.9的相关系数用于从更理想化的角度解释变量压缩的步骤。可以看出,如果两个变量之间的关系是强正负相关,如果用铅笔圈出散点图的范围,会呈现扁平的椭圆;否则,两个完全自变量的分布更像一个胖胖的圆形。关于压缩过程,我们还是针对以下常见问题进行说明。“如何通过散点图理解信息压缩?”直接看散点图只能判断是否值得压缩。毕竟,只有变量之间存在一定的相关性,才值得压缩。接下来会涉及到PCA中一个很重要的知识点:坐标轴的旋转《旋转坐标轴的作用?》旋转后的坐标轴与原坐标轴相同,都是正交(垂直)的。这样的旋转方式可以充分反映两个相关变量在坐标轴上的信息(如果以范围作为信息,则点在X1上的投影范围最长)。然后可以从短轴方向压缩。当椭圆被压扁到一定程度时,可以忽略短轴上的信息,达到信息压缩的目的。“如果有三个变量怎么压缩?”三维也是一样,只是从椭圆变成了椭球(三个变量都有关系)。步骤还是一样的。找到最长的轴后,在轴上制作切割面。一旦得到切面,就会回到二维的情况。这时可以找到第二长的轴和最短的轴,依次提取即可。当我们认为最短轴可以忽略不计的时候,它也起到了信息压缩的作用。需要注意的是,如果分布是球形的,说明变量之间没有相关性,不需要做主成分分析,也不能做变量压缩。建模分析如前所述,PCA后得到的压缩主成分是没有意义的,比如5个变量被压缩成两个主成分P1和P2。这两个主成分中的组成方程为:其中,方程右边的系数是正还是负没有多大意义,通常只看绝对值即可。在第一主成分P1中,五个变量的影响程度无显着差异,权重在0.42~0.47之间。主成分P2受第一个变量影响最大,权重系数为0.83,受第三个变量影响最小。权重是0.14,那么怎么知道应该压缩成多少个主成分呢?PCA的作用是压缩信息,压缩后的每个主成分可以解释一部分信息的变异程度(统计学家喜欢用方差来表示信息的变异程度),所以只需要满足解释信息达到一定的值。能。计算每个成分因子,加上不同成分因子可以解释的变异百分比3.得到的值称为累积变异百分比4.在PCA过程中,我们会选择能够使这个值最接近的维数到1可以清楚地看到,随着成分数量的增加,变异的累积百分比逐渐增加。不建议让累积百分比等于1,这会导致一些主成分带来冗余信息,通常等于0.85。当然,我们也可以选择两个主成分,因为当我们增加第三个主成分因子时,我们会发现增加它对累积变异的百分比影响不大。Python实战在正式开始Python代码实战之前,非常有必要简单了解一下主成分分析的应用场景。综合打分:日常生活中经常会遇到这种情况,比如高考成绩总和,员工绩效排名总和。在这种情况下,只需要一个综合得分,那么主成分分析就更合适了。与简单求和个人得分的方法相比,主成分分析法对区分度高的个人得分赋予更高的权重,得分取值也更合理。但是,当主成分分析不支持只有一个主成分时,就不能使用这种方法了。数据描述:描述产品情况,如著名的波士顿矩阵、子公司业务发展状况、区域投资潜力等,需要将多个变量压缩成几个主成分进行描述,理想的是压缩成两个主成分。这种分析一般做主成分分析不够,做因子分析比较好。为聚类或回归等分析提供变量压缩:消除数据分析中的共线性问题。常用的消除共线性的方法有3种,即:保留同类中最有代表性的一个变量;保留主要成分或因素;从业务理解的角度修改变量。?案例背景:某金融服务公司为了了解贷款客户的信用程度,评估客户的信用等级,采用信用评级常用的5C(Character、Capacity、Capital、Collat??eral、Condition)方法来说明客户的默认可能性。?本次实战将着重于综合评分,即只选择一个主成分来实现客户信用评级。数据探索先导入相关包,进行探索性分析`importpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltplt.style.use('seaborn-whitegrid')plt.rc('font',**{'family':'MicrosoftYaHei,SimHei'})设置中文字体的支持df=pd.read_csv('loan_apply.csv')df`参数说明:字符:指客户的口碑;能力:指客户的还款能力;资金:指客户的财务实力和财务状况;担保:指贷款申请担保的覆盖程度;环境:指外部经济政策环境对客户的影响。变量不能用于PCA`#求解相关系数矩阵证明主成分分析的必要性丢弃无用的ID列data=df.drop(columns='ID')importseabornassnssns.heatmap(data.corr(),annot=True)annot=True:显示相关系数矩阵的具体值。发现变量之间的相关性比较高,大于0.7,对PCA有必要的数据标准化。在PCA建模之前,需要对数据进行标准化。通常使用中心标准化。就是将所有的变量转化为Zscore的形式,即偏离均值的标准差的个数,以防止量纲问题对建模的影响。比如1.78-59和178-60的身高体重维度在散点图上会有很大的不同!`#PCA通常由中心标准化,即从sklearn.preprocessingimportscaledata=scale(data)转换成Z分数形式`PCA建模使用sklearn进行PCA分析,注意:最好设置n_components参数较大的第一次(保留主成分)观察explained_variance_ratio_的值变化,即每个主成分可以解释原始数据变异的百分比`fromsklearn.decompositionimportPCApca=PCA(n_components=5)#主成分直接用和pca.fit(data)一样的变量个数`累积解释变异的结果分析,很明显第一主成分已经可以解释84%的信息变异度了!重新建模,重新选择建模的主成分个数主成分中各变量的权重分析第一个主成分(解释84%变异的那个)和5个自变量的系数关系可以是理解为:“第一主成分=0.413*人品+0.47*能力+0.46*资本+0.45*安全感+0.42*环境”。因此,生成的主成分除了降维外,没有其他意义,不好解释。做决定。这里的new_data就是上面代码pca.fit_transform(data)生成的降维数据,然后按照综合评分从高到低排序。根据结果??我们可以发现,贷给7号客户的风险最低,贷给9号客户的风险最高!总结本文通过实例介绍为什么要对信息进行压缩和提炼,讲解PCA的原理和使用时的注意事项,并用Python演示了完整的建模过程,提供给读者参考和参考。此外,PCA作为数据分析师,在人脸识别、手写数字识别等图像处理等机器学习领域也有着广泛的应用,值得深思和掌握。