美文网首页程序员
金融风控AI—评分卡模型算法(1)

金融风控AI—评分卡模型算法(1)

作者: hexter | 来源:发表于2020-07-08 20:33 被阅读0次

    一、概述

    办理过信用卡的朋友知道,开卡需要先申请(筛选好坏用户),可能还会根据你的信用情况会有不同的额度。这就是银行的信用风险计量体系。对于信用卡有4类评分卡:

    1)申请评分卡(A卡)

    2)行为评分卡(B卡)

    3)催收评分卡(C卡)

    4)欺诈评分卡(F卡)

    这些评分卡算法一样,只是训练的数据不同,所用的参数也就不同。

    蚂蚁金服的芝麻信用也是这样的。

    二、模型开发

    模型的开发主要包含以下几大部分工作:数据获取、数据预处理、探索分析、特征选择、模型训练、模型评估、建立评分系统。

    1、数据获取

     本项目数据来源于kaggle竞赛Give Me Some Credit。有训练数据共计15万条。

    打开数据文件大概这个样子:

    数据

    字段描述如下

    字段含义

    2、数据预处理

    这部分主要做2个事情:缺失值处理和异常值处理。

    a、缺失值处理

    pd的describe()函数,可以了解数据集的缺失值情况。

    #载入数据

    data = pd.read_csv('cs-training.csv')

    #数据集确实和分布情况

    data.describe(include='all').to_csv('DataDescribe.csv')#了解数据集的分布情况

    打开DataDescribe.csv

    我们可以看大部分数据有15万条,其中月收入只有12万条,缺了近3万条,家属数量14.6万条。

    对于缺失值,根据不同的情况我们分类处理:

    (1) 如果缺失的不多,比如家属数量缺失不多,可以直接删除含有缺失值的样本。用dropna()

    (2) 如果缺失较多,不宜直接全部删除,根据样本之间的相似性填补缺失值。比如用平均值

    (3)如果缺失较多,不宜直接全部删除, 根据变量之间的相关关系填补缺失值。比如用随机森林法填补。

      (4)如果缺失巨大,就失去分析意义,可以将整个字段删除

    平均值填补只要一句话:

    data=data.fillna({'MonthlyIncome':data['MonthlyIncome'].mean()})

    随机森林法填补:

    # 用随机森林对缺失值预测填充函数

    def set_missing(df):

        # 把已有的数值型特征取出来

        process_df = df.iloc[:,[5,0,1,2,3,4,6,7,8,9]]

        # 分成已知该特征和未知该特征两部分

        known = process_df[process_df.MonthlyIncome.notnull()].values

        unknown = process_df[process_df.MonthlyIncome.isnull()].values

        # X为特征属性值

        X = known[:, 1:]

        # y为结果标签值

        y = known[:, 0]

        # fit到RandomForestRegressor之中

        rfr = RandomForestRegressor(random_state=0, n_estimators=200,max_depth=3,n_jobs=-1)

        rfr.fit(X,y)

        # 用得到的模型进行未知特征值预测

        predicted = rfr.predict(unknown[:, 1:]).round(0)

        print(predicted)

        # 用得到的预测结果填补原缺失数据

        df.loc[(df.MonthlyIncome.isnull()), 'MonthlyIncome'] = predicted

        return df

    调用随机森林:

    data=set_missing(data)#用随机森林填补比较多的缺失值

    data=data.dropna()#删除比较少的缺失值

    b、异常值处理

    异常值是指明显偏离大多数抽样数据的数值,或者直接违背常识的数据,比如年龄是负数。对于违背常识的记录直接删除,而对于其他异常数据需要具体分析:

    删除。先取出异常记录,看看数据,如果不太多,也没有特别的可以删除。因为异常值可能会影响结论。如果取出的异常记录有明显的相关性,那么这些记录可以总结出一个规则。

    放任不管。也许异常值代表的是真实的情况,这些值即使异常,也不会影响模型。

    视为缺失值进行填充。如果删除数据可能会损失信息,而如果放任不管可能又影响我们的模型,所以可以考虑用均值、临近值进行填充。

    具体采用哪种方式其实最好都试一下,看看最后得到的模型怎么样。因为所有这些操作都是有假设条件的,而你的数据是否满足这些条件,试过才知道。

    从图看有异常值不少,不过一般只把异常的0值去掉。

    对于RevolvingUtilizationOfUnsecuredLines及DebtRatio都是百分数类型。其中第一项肯定不能大于100%而且统计一下这部分异常数据不多,果断删掉。第二项债务百分比不敢确定是否可债务大于100%,统计了一下有3w多条,而且取出来看了一下不是很特别,同样可以试一下删除或者放入不管或者填充看看最后不同的效果。

    这3个逾期不还次数指标意义相似放一起看,发现有2个数据特别显眼,是96,98。虽然按箱型图的含义所有圆圈都是异常值,但仔细分析这三个指标发现正常值绝大部分是0,这就导致了箱型图的1/4线和3/4线都是0,所以我们通常把头顶2个值作为异常值。我把这部分异常值取出来发现数量不多,只有200多条,理论上可以直接删除或者放在里面置之不理。但是我看了这部分数据发现非常异常。这208条数据有125条是违约用户,违约占比62%,而全量数据里面违约占比7%不到,所以我觉得应该把这部分数据作为一条规则来处理,遇到这三个指标有超过90的数值,直接报告警。那么是否可以把这部分数据留着置之不理呢,后面我试了,发现会对变量之间的相关性有很大影响(后面会详细讲)。

    同样这个指标我们把50以上作为异常值。

    这个指标pass

    月收入可以去掉特别高的数据

    家庭成员可以剔除特别高的

    第一篇完

    相关文章

      网友评论

        本文标题:金融风控AI—评分卡模型算法(1)

        本文链接:https://www.haomeiwen.com/subject/cznaqktx.html