阿里天池数据挖掘大赛——贷款违约预测之探索性分析(可视化展示)

项目背景:

选题出自阿里天池大赛——金融风控_贷款违约预测。赛题以金融风控中的个人信贷为背景,要求选手根据贷款申请人的数据信息预测其是否有违约的可能,以此判断是否通过此项贷款。

*以下作图基于一个前提假设,认为字段中唯一值较少的特征变量离散型变量,连续性加强的特征变量为连续型变量。

主要分析内容:

第一组图

1、
*展示训练数据集中的各个字段的缺失情况。
#查看有缺失的特征属性
train_null_data=train_data[has_null.index]
train_null_data.isnull().sum().plot(kind='barh')
for x,y in enumerate(has_null):
    plt.text(y+500,x,y,fontsize=9)
plt.title('the number of queshi')
plt.savefig('tmp_pictures/queshi_fenbu.jpg',bbox_inches='tight')

在这里插入图片描述

2、

展示离散型特征变量中各个类别在不同相应变量上的分布情况

def duijizhu_hebing(data,n):
    figure,axes=plt.subplots(10,2,figsize=(12,4*n))
    count_in_feature={}
    for each in data.columns:
        if each not in ['isDefault','policyCode']:
            count_in_feature[each]=data[each].unique().shape[0]            
    #选择不同值最少的n个特征
    min_n=pd.DataFrame([count_in_feature]).T.sort_values(by=0)[:10]
    #画出这n个特征中每个值对应是否违约的分布情况
    for each in min_n.index:
        i=min_n.index.tolist().index(each)
        data.groupby(by=each).isDefault.value_counts().unstack('isDefault').plot(kind='bar',stacked=True,ax=axes[i,0])
        tmp=data.groupby(by=each).isDefault.value_counts().unstack('isDefault')
            #对临时数据集进行规格化
        tmp.div(tmp.sum(1).astype('float'),axis=0).plot(kind='bar',stacked=True,ax=axes[i,1])
    plt.savefig('tmp_pictures/aaaa.jpg')
duijizhu_hebing(train_data,10)

*此处取离散程度最强的前十个特征变量进行作图(数量可以根据自己的需求拟定),输出如下图片
在这里插入图片描述

3、

类似于第二张图,在此基础上添加数值,完整代码如下:

def biliduiji(data,list_,canzhao,path):
    for each in list_:
        #画布
        figure,axes=plt.subplots(1,1,figsize=(8,data[each].unique().shape[0]*0.3))
        #组合
        tmp=data.groupby(each)[canzhao].value_counts().unstack(canzhao)
        tmp['total']=tmp.sum(axis=1)
        tmp=tmp.drop('total',axis=1)
        #归一
        b=tmp.div(tmp.sum(1).astype('float'),axis=0)      
        b=b.round(2)
        b=b.fillna(0)
        #作图
        b.plot(kind='barh',stacked=True,ax=axes,width=0.7)
        plt.yticks(fontsize=10)
        plt.legend(loc='lower right')
        #数据
        for col in b:
            for y,x in enumerate(b[col].values):       
                if x!=0:
                    plt.text(x*0.5+sum(b.iloc[y][:b.columns.tolist().index(col)]),y-0.1,x,fontsize=10)
        plt.title(f'{each} for {canzhao}',fontsize=14)
        plt.savefig(f'{path}/{each} for {canzhao}.jpg',bbox_inches='tight')```

*此函数中一共有四个参数,分别是需要处理的数据集,需要分析的字段,选择的分类参照变量,保存路径。可以根据自己的需要输出任意数据集中的任意字段基于某特征的分类情况。
输出结果如下

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过以上三组图片已经可以对数据集中蕴含的基本规律做出描述分析。


第二组图

这部分选用数据集较小的tips数据

1、相关关系图

在这里插入图片描述

2、散点图

在这里插入图片描述

总结

两组图之间似乎没有任何衔接关系,但通过第二组图可以联想到,如果同样是seaborn绘制第一组数据中的堆积柱状图,可以一定程度上减少代码的复杂性,但第一组图的代码中包含的功能较多,对于指定的业务场景复用性较强。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值