风控建模六:变量相关性分析及筛选方法

  • 一、变量相关性分析
  • 二、变量相关性筛选
  • 三、代码实现

不论是开发逻辑回归评分卡,还是GBM机器学习模型,变量的相关性分析和筛选都是必不可少的一步,因为这个过程会帮助我们优化模型结构、丰富模型维度、增强模型鲁棒性,也可以帮助我们在建模开始前对所有变量的维度有个整体的把握。本篇介绍的是对Applied Predictive Modeling一书中的变量相关性分析方法的实践操作。

一、变量相关性分析

变量相关性分析这里使用了pyecharts中的热力图对变量相关矩阵进行了一个展现,但为了更方便我们整体把握所有变量的相关维度,这里先使用Kmeans对所有变量进行了一个聚类(不同于常规使用Kmeans时对样本进行聚类,这里是对特征进行聚类,目的是把高相关的变量分到一类中),根据聚类结果对变量进行了排序,然后计算相关矩阵并展示,这样可以达到的效果就是相互之间高相关的变量都会被排在一起,在图中我们就可以根据高相关区块去很容易发现哪些变量之前同质性很强,而且整个变量池中大概有几个高相关区块(如图)。

二、变量相关性筛选

变量相关性剔除方法有很多,业务实操中主要使用的方法有这么几种:

  • 相关性高的两个变量,随便删除一个,保留一个;这种方法显然看着就不严谨不科学;
  • 相关性高的两个变量,删除缺失率高的那个变量;相比第一种方法有进步,但根据缺失率这个指标删变量,不一定对最后的模型效果有改善;
  • 相关性高的两个变量,删除IV值低的那个;这个方法合理,但是耗时,尤其是在变量池很大的时候,需要先对每个变量分箱计算IV。我们更希望的是相关性处理放在IV值筛选之前,这样可以大大减少我们需要计算IV值的变量数,从而优化特征处理过程;
  • 相关性高的两个变量,删除GBM模型重要性低的那个;弊端同上;
  • 相关性高的两个变量,删除和其它变量整体相关更高的那个,这个方法就是我们今天要介绍的,其目的就是在一定的相关阈值之下,尽量多地保留变量,其具体算法过程如下:
  1. 计算所有变量的相关矩阵;
  2. 挑选出相关系数最高的一对变量A和B;
  3. 分别对A和B计算其与其它变量相关系数的平均值 α \alpha α, β \beta β;
  4. 如果 α > β \alpha>\beta α>β,删除变量A,否则删除B。
  5. 重复2-4步直到所有变量两两之间的相关系数低于给定阈值。

三、代码实现

import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from pyecharts.charts import HeatMap
import pyecharts.options as opts
from copy import copyclass cal_corr:def __init__(self, df, n_clusters=5, threshold=0.7):#对所有变量矩阵先进行处理self.df = self.handle_df(df.copy())#Kmeans聚类的时候指定聚成几类self.n_clusters = n_clusters#相关性筛选时的阈值self.threshold = threshold#变量的相关矩阵存下来self.corr = None@propertydef corr_matrix(self):#变量的相关矩阵return self.corr@propertydef corr_pairs(self):#变量两两间的相关系数对return self.pairsdef handle_df(self,df):'''先处理一下变量矩阵:类别型变量做编码处理缺失值填充为中位数所有变量做一下均一化处理'''for item in df.select_dtypes(include=["object"]):df[item] = df[item].astype('category').cat.codesdf = df.fillna(df.median())df = pd.DataFrame(StandardScaler().fit_transform(df),columns=df.columns)print(df.shape)return dfdef order_by_kmeans(self):'''根据Kmeans聚类结果对变量进行排序'''kk = KMeans(n_clusters = self.n_clusters)res = kk.fit_predict(self.df.T)self.df = self.df.append(pd.Series(res,index=self.df.columns),ignore_index=True)self.df.sort_values(by = self.df.shape[0]-1,axis=1,inplace=True)self.df.drop(self.df.shape[0]-1,inplace=True)print(self.df.shape)def corr_heat_map(self):'''计算相关矩阵,并使用pyecharts的heat_map呈现'''self.order_by_kmeans()self.corr = self.df.corr(method="pearson")self.corr = self.corr.round(3)self.corr = self.corr.apply(lambda x: abs(x))myvalues = []for i in range(len(self.corr.index)):for j in range(len(self.corr.index)):tmp = [i, j, self.corr.iloc[i, j]]myvalues.append(copy(tmp))self.__setattr__('pairs',myvalues)        heat_map = HeatMap(init_opts=opts.InitOpts(width="1440px", height="1440px"))\.add_xaxis(list(self.corr.columns))\.add_yaxis("corr", list(self.corr.index), myvalues) \.set_global_opts(title_opts=opts.TitleOpts(title="模型变量相关性"),datazoom_opts=[opts.DataZoomOpts(is_show=True, is_realtime=True), ],visualmap_opts=opts.VisualMapOpts(min_=-1.2, max_=1.2, pos_right=20),toolbox_opts=opts.ToolboxOpts(is_show=True),xaxis_opts=opts.AxisOpts(type_="category", is_scale=True, is_inverse=True, axislabel_opts=opts.LabelOpts(is_show=True, rotate=-60)),yaxis_opts=opts.AxisOpts(is_scale=True, is_inverse=False, axislabel_opts=opts.LabelOpts(is_show=True, position="right")),tooltip_opts=opts.TooltipOpts(is_show=True))\.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="insideBottom"))heat_map.render()def drop_hight_corr(self):'''根据上述算法,删除相关性高的变量'''cor_pair = self.pairscor_pair.sort(key=lambda x:x[2],reverse=True)del_pair = []del_col = []for item in cor_pair:if (item[0]==item[1])|(set(item[:2]) in del_pair)|(item[0] in del_col)|(item[1] in del_col):continueif item[2]>self.threshold:c1 = self.corr.iloc[item[0],[x for x in range(self.corr.shape[0]) if x not in del_col]].mean()c2 = self.corr.iloc[item[1],[x for x in range(self.corr.shape[0]) if x not in del_col]].mean()del_col.append(item[0] if c1>c2 else item[1])del_pair.append(set(item[:2]))else:breakdel_col_name = self.corr.iloc[:,del_col].columnsreturn list(del_col_name)if __name__ == '__main__':c = cal_c(df, n_clusters=5, threshold=0.7)#在当前路径下产生的render.html文件即为相关矩阵热力图c.corr_heat_map()del_col = c.drop_hight_corr()

最后,欢迎参看风控建模其它相关内容:
风控建模一:好坏标签定义
风控建模二:建模方案拟定
风控建模三:变量筛选原则
风控建模四:逻辑回归评分卡开发
风控建模五:GBM模型开发

风控建模六:变量相关性分析及筛选方法相关推荐

  1. ML之FE:机器学习算法/数据挖掘中特征选取(变量筛选)的简介、常用方法(单变量分析并筛选—Filter/Wrapper/Embedded、多变量间相关性分析并筛选—PCC/MIC/IV)之详细攻略

    ML之FE:机器学习算法/数据挖掘中特征选取(变量筛选)的简介.常用方法(单变量分析并筛选-Filter/Wrapper/Embedded.多变量间相关性分析并筛选-PCC/MIC/IV)之详细攻略 ...

  2. R语言的Copula变量相关性分析

    在工程.水文和金融等各学科的研究中,总是会遇到很多变量,研究这些相互纠缠的变量间的相关关系是各学科的研究的重点.虽然皮尔逊相关.秩相关等相关系数提供了变量间相关关系的粗略结果,但这些系数都存在着无法克 ...

  3. 分类变量、有序变量与数值变量相关性分析方法总结及 R 语言应用

    文章目录 一.分类 & 分类·相关性分析 二.有序 & 有序·相关性分析 三.数值 & 数值·相关性分析 四.分类 & 有序·相关性分析 五.分类 & 数值·相 ...

  4. 特征选择 | MATLAB实现特征变量相关性分析(Pearson相关系数,Kendall相关系数和Spearman相关系数)

    特征选择 | MATLAB实现特征变量相关性分析(Pearson相关系数,Kendall相关系数和Spearman相关系数) 目录 特征选择 | MATLAB实现特征变量相关性分析(Pearson相关 ...

  5. tvpvar模型的建模步骤_风控建模六部曲

    这期开始咱们聊聊风控建模的事情.在借贷这个场景下,建立风控模型的目的大都是为了预测某个客户未来逾期的概率.主要的逻辑就是根据过去预测未来,逾期客户的行为是相似的.先收集历史上已经逾期到一定阶段的客户, ...

  6. python分类变量相关性分析_Python数据科学:相关分析

    目前手上有两本书,一本<利用Python进行数据分析>,一本<Python数据科学>.app 对于学习什么东西,都有它的「道」和「术」.「道」即原理,「术」即技巧.dom 经过 ...

  7. 基于R语言的Copula变量相关性分析及应用

    在工程.水文和金融等各学科的研究中,总是会遇到很多变量,研究这些相互纠缠的变量间的相关关系是各学科的研究的重点.虽然皮尔逊相关.秩相关等相关系数提供了变量间相关关系的粗略结果,但这些系数都存在着无法克 ...

  8. 数学建模学习笔记——相关性分析

          spss-->分析-->相关-->双变量-->(皮尔逊,双尾)   置信水平95%   显著性水平5%(alpha) 显著=显著差异=拒绝原假设 皮尔逊相关系数-- ...

  9. python分类变量相关性分析_如何在python中检查连续变量和分类变量之间的相关性?...

    将分类变量转换为伪变量here,并将变量放入numpy.array中.例如: data.csv:age,size,color_head 4,50,black 9,100,blonde 12,120,b ...

最新文章

  1. 从企业发展的四个问题,理解OKR的价值所在
  2. 软硬兼施极限轻量BERT!能比ALBERT再轻13倍?!
  3. windows7安dns服务器_在Windows 7 上安装DNS服务器bind9方法详解
  4. Java之线程安全的几种方式
  5. mysql 备份大表 存储过程_mysql批量备份表的存储过程写法
  6. deepin深度启动盘制作工具下载地址
  7. c# uri.host_C#| 具有示例的Uri.Host属性
  8. 微擎乐慧云智慧农场源码V1.0.1
  9. oracle 的 dml,Oracle——DML
  10. HUAS 1482 lsy的后宫(DP+矩阵快速幂)
  11. Silverlight的资源
  12. 基于IAR for RH850的瑞萨RH850 FCL库用法介绍(二)
  13. 组态王bitset用法_组态王使用问题解答6
  14. Selenium_python 断言
  15. AUTOSAR —— CAN网络管理(CanNm)
  16. JDBC(Java数据库连接) 学习笔记 第四天
  17. 计算机组成CPU最佳配置,计算机组成原理--CPU
  18. 5nm计算机cpu,芯片14nm、10nm、7nm、7nm、7nm、7nm有什么差别?
  19. Linux系统命令(电子邮件新闻组)
  20. 如何理解GWAS中Manhattan plot和QQ plot所传递的信息

热门文章

  1. 韩国性感美女盛恩(Sungeun)
  2. html5 调起电话、短信、qq临时会话
  3. 2011年新年英语祝福短信
  4. 用python实现提高自己博客访问量
  5. 树莓派-系统安装连接无线远程连接
  6. 怎样把XPS文件转换成Word文档?XPS转Word方法分享
  7. spring 如何解决循环依赖
  8. android开发书籍推荐!知乎上已获千赞,已拿offer附真题解析
  9. 什么是连通图,(强)连通图详解
  10. Introduction to Graphic Design 平面设计简介 Lynda课程中文字幕