• 房屋信贷违约风险竞争(kaggle)系列2-数据清理和格式化


    一. ROC和AUC

    ROC(受试者工作特征曲线)
    AUC(ROC曲线下的面积)

    在诸如逻辑回归或者神经网络的分类器中,模型给出的结果并不是直接的分类结果,而是对样本属于某类的概率。此时可以选择某一个概率阈值,当预测概率超过此阈值时,认为样本属于欺诈,否则属于正常样本,进而形成混淆矩阵。由于阈值有很多种可能,于是我们有很多个混淆矩阵。如何综合判断多个混淆矩阵的结果呢?

    ROC曲线(Receiver operating characteristic curve)是多个混淆矩阵的结果组合,如果在上述模型中我们没有定好阈值,而是将模型预测概率从高到低排序,将每个概率值依次作为阈值,那么就有多个混淆矩阵。

    对于每个混淆矩阵,我们计算两个指标
    TPR(True positive rate)= TPR=TP/(TP+FN)=Recall
    FPR(False positive rate)=FP/(FP+TN)

    TPR就是召回率,FPR即为实际为正常样本中,预测为欺诈占比。我们以FPR为x轴,TPR为y轴画图,就得到了ROC曲线。

    image.png

    AUC(Area Under Curve)的值为ROC曲线下面的面积,若如上所述模型十分准确,则AUC为1。但现实工作中不会有如此完美的模型,一般AUC均在0.5到1之间,AUC越高,模型的区分能力越好,上图AUC为0.81。若AUC=0.5,即与上图中红线重合,表示模型的区分能力与随机猜测没有差别。若AUC真的小于0.5,表明模型很差。

    KS(Kolmogorov-Smirnov)值:KS=max(TPR-FPR),即为TPR与FPR的差的最大值,KS可以反映模型的最优区分效果。KS也是评分卡模型的常用度量指标。
    特别地,反欺诈领域的欺诈预测模型,由于模型结果会对识别的坏人进行一定的处置措施,FPR过高会对好人有一定干扰,造成误杀,影响客户体验,因此模型需保证在低于一定FPR的基础上尽量增加TPR。

    二. 读取数据

    2.1 导入基本模块

    # 导入基本处理模块
    import numpy as np
    import pandas as pd 
    from sklearn.preprocessing import LabelEncoder
    import os
    import warnings
    warnings.filterwarnings('ignore')
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.2 显示可用列表

    # 显示可用列表
    print(os.listdir("E:/home_credit_default_risk"))
    
    • 1
    • 2

    image.png

    2.3 训练dataframe

    # 导入基本处理模块
    import numpy as np
    import pandas as pd
    from sklearn.preprocessing import LabelEncoder
    import os
    import warnings
    warnings.filterwarnings('ignore')
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    # 显示可用列表
    # print(os.listdir("E:/home_credit_default_risk"))
    
    # 训练dataframe
    app_train = pd.read_csv('E:/home_credit_default_risk/application_train.csv')
    print('Training data shape: ', app_train.shape)
    print(app_train.head())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    image.png

    训练数据有307511个观察数据(每一个单独的贷款)和122个特征(变量),包括目标(我们想预测的标签)

    2.4 测试dafaframe特征

    # 导入基本处理模块
    import numpy as np
    import pandas as pd
    from sklearn.preprocessing import LabelEncoder
    import os
    import warnings
    warnings.filterwarnings('ignore')
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    # 显示可用列表
    # print(os.listdir("E:/home_credit_default_risk"))
    
    # 训练dataframe
    #app_train = pd.read_csv('E:/home_credit_default_risk/application_train.csv')
    #print('Training data shape: ', app_train.shape)
    #print(app_train.head())
    
    # 测试dafaframe特征
    app_test = pd.read_csv('E:/home_credit_default_risk//application_test.csv')
    print('Testing data shape: ', app_test.shape)
    print(app_test.head())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    在这里插入图片描述

    由此可见测试集比训练集小很多,而且缺少目标列

    参考:

    1. https://www.kaggle.com/c/home-credit-default-risk/data?select=application_test.csv
    2. https://aistudio.baidu.com/aistudio/datasetdetail/105246
    3. https://www.jianshu.com/p/c494a3a92af5
    4. https://wangjh.blog.csdn.net/article/details/81121122
  • 相关阅读:
    浅谈估值模型:估值幻觉
    【Vivado使用】从0开始 综合后生成门级网表
    赚钱
    外包干了2个月,技术退步明显...
    「C++小游戏教程」基本技巧(3)——发声函数 Beep()
    pytorch中detach()函数以及data属性的区别+梯度求导计算
    【Java面试】HashMap死循环问题
    点云地面滤波--布料模拟滤波(CSF)
    tACS恢复老年人认知控制能力的EEG功能和DTI结构网络机制
    Node.js精进(2)——异步编程
  • 原文地址:https://blog.csdn.net/u010520724/article/details/126400806