发表自话题:一无所有怎么贷款20万
Task1 赛题理解
Tip:本次新人赛是Datawhale与天池联合发起的0基础入门系列赛事第四场 —— 零基础入门金融风控之贷款违约预测挑战赛。 赛题以金融风控中的个人信贷为背景,要求选手根据贷款申请人的数据信息预测其是否有违约的可能,以此判断是否通过此项贷款,这是一个典型的分类问题。通过这道赛题来引导大家了解金融风控中的一些业务背景,解决实际问题,帮助竞赛新人进行自我练习、自我提高。
项目地址:https:///datawhalechina/team-learning-data-mining/tree/master/FinancialRiskControl
比赛地址:https://tianchi./competition/entrance//introduction
我们把官方提供的数据下载到本地

1.1 学习目标
理解赛题数据和目标,清楚评分体系。
完成相应报名,下载数据和结果提交打卡(可提交示例结果),熟悉比赛流程
1.2 了解赛题
赛题概况数据概况预测指标分析赛题
1.2.1 赛题概况
比赛要求参赛选手根据给定的数据集,建立模型,预测金融风险。
赛题以预测金融风险为任务,数据集报名后可见并可下载,该数据某信贷平台的贷款记录,总数据量超过120w,包含47列变量信息,其中15列为匿名变量。为了保证比赛的公平性,将会从中抽取80万条作为训练集,20万条作为测试集A,20万条作为测试集B,同时会对employmentTitle、purpose、postCode和title等信息进行脱敏。
通过这道赛题来引导大家走进金融风控数据竞赛的世界,主要针对于于竞赛新人进行自我练习、自我提高。
导入部分数据,先大概查看数据结构组成
import numpy as npimport pandas as pddata1 = pd.read_csv("testA.csv")data1.head() 5 rows × 48 columns
id loanAmnt 14000term 3interestRate 10.99installment 458.28grade BsubGrade B3employmentTitle 7027employmentLength 10+ yearshomeOwnership 0annualIncome 80000verificationStatus 0issueDate 2014-07-01purpose 0postCode 163regionCode 21dti 10.56delinquency_2years 1ficoRangeLow 715ficoRangeHigh 719openAcc 17pubRec 0pubRecBankruptcies 0revolBal 9846revolUtil 30.7totalAcc 29initialListStatus 0applicationType 0earliesCreditLine Nov-1974title 0policyCode 1n0 1n1 4n2 6n2.1 6n2.2 6n2.3 6n4 6n5 8n6 4n7 15n8 19n9 6n10 17n11 0n12 0n13 1n14 3Name: 0, dtype: object1.2.2 数据概况
一般而言,对于数据在比赛界面都有对应的数据概况介绍(匿名特征除外),列的性质特征。了解列的性质会有助于我们对于数据的理解和后续分析。 Tip:匿名特征,就是未告知数据列所属的性质的特征列。
|colunm name|represent| |:------|:-----| |-id |为贷款清单分配的唯一信用证标识| |loanAmnt | 贷款金额| |term |贷款期限(year)| |interestRate | 贷款利率 | |installment |分期付款金额 | |grade |贷款等级| |subGrade | 贷款等级之子级| |employmentTitle |就业职称 | |employmentLength | 就业年限(年)| |homeOwnership |借款人在登记时提供的房屋所有权状况| |annualIncome |年收入 | |verificationStatus |验证状态| |issueDate |贷款发放的月份| |purpose |借款人在贷款申请时的贷款用途类别| |postCode |借款人在贷款申请中提供的邮政编码的前3位数字| |regionCode |地区编码|| |dti |债务收入比 |delinquency_2years |借款人过去2年信用档案中逾期30天以上的违约事件数| |ficoRangeLow |借款人在贷款发放时的fico所属的下限范围| |ficoRangeHigh |借款人在贷款发放时的fico所属的上限范围| |openAcc |借款人信用档案中未结信用额度的数量 | |pubRec |贬损公共记录的数量 | |pubRecBankruptcies |公开记录清除的数量 | |revolBal |信贷周转余额合计 | |revolUtil |循环额度利用率,或借款人使用的相对于所有可用循环信贷的信贷金额| |totalAcc |借款人信用档案中当前的信用额度总数| |initialListStatus |贷款的初始列表状态| |applicationType |表明贷款是个人申请还是与两个共同借款人的联合申请| |earliesCreditLine |借款人最早报告的信用额度开立的月份| |title |借款人提供的贷款名称 | |policyCode |公开可用的策略代码=1新产品不公开可用的策略代码=2| |n系列匿名特征 |匿名特征n0-n14,为一些贷款人行为计数特征的处理 |
1.2.3 预测指标
竞赛采用AUC作为评价指标。AUC(Area Under Curve)被定义为 ROC曲线 下与坐标轴围成的面积。
分类算法常见的评估指标如下:
1.混淆矩阵(Confuse Matrix)
(1)若一个实例是正类,并且被预测为正类,即为真正类TP(True Positive ) (2)若一个实例是正类,但是被预测为负类,即为假负类FN(False Negative ) (3)若一个实例是负类,但是被预测为正类,即为假正类FP(False Positive ) (4)若一个实例是负类,并且被预测为负类,即为真负类TN(True Negative )
2.准确率(Accuracy) 准确率是常用的一个评价指标,但是不适合样本不均衡的情况。
$$Accuracy = \frac{TP + TN}{TP + TN + FP + FN}$$
3.精确率(Precision) 又称查准率,正确预测为正样本(TP)占预测为正样本(TP+FP)的百分比。
$$Precision = \frac{TP}{TP + FP}$$
4.召回率(Recall) 又称为查全率,正确预测为正样本(TP)占正样本(TP+FN)的百分比。
$$Recall = \frac{TP}{TP + FN}$$
5. F1 Score 精确率和召回率是相互影响的,精确率升高则召回率下降,召回率升高则精确率下降,如果需要兼顾二者,就需要精确率、召回率的结合F1 Score。
$$F1-Score = \frac{2}{\frac{1}{Precision} + \frac{1}{Recall}}$$
6. P-R曲线(Precision-Recall Curve) P-R曲线是描述精确率和召回率变化的曲线

7. ROC空间将假正例率(FPR)定义为 X 轴,真正例率(TPR)定义为 Y 轴。
TPR:在所有实际为正例的样本中,被正确地判断为正例之比率。
$$TPR = \frac{TP}{TP + FN}$$
FPR:在所有实际为负例的样本中,被错误地判断为正例之比率。 $$FPR = \frac{FP}{FP + TN}$$

1.3 代码示例
本部分为对于数据读取和指标评价的示例。
1.3.1数据读取pandas
import pandas as pdtrain = pd.read_csv('train.csv')testA = pd.read_csv('testA.csv')print('Train data shape:',train.shape)print('TestA data shape:',testA.shape)train.head()Train data shape: (, 47)TestA data shape: (, 48) 5 rows × 47 columns
1.3.2 分类指标评价计算示例
混淆矩阵
## 混淆矩阵import numpy as npfrom sklearn.metrics import confusion_matrixy_pred = [0, 1, 0, 1]y_true = [0, 1, 1, 0]print('混淆矩阵:\n',confusion_matrix(y_true, y_pred))混淆矩阵: [[1 1] [1 1]]# !pip install sklearn准确率(Accuracy)
from sklearn.metrics import accuracy_scorey_pred = [0, 1, 0, 1]y_true = [0, 1, 1, 0]print('ACC:',accuracy_score(y_true, y_pred))ACC: 0.5F1 Score
from sklearn import metricsy_pred = [0, 1, 0, 1]y_true = [0, 1, 1, 0]print('Precision',metrics.precision_score(y_true, y_pred))print('Recall',metrics.recall_score(y_true, y_pred))print('F1-score:',metrics.f1_score(y_true, y_pred))Precision 0.5Recall 0.5F1-score: 0.5精确率(Precision)召回率(Recall)
# !pip install matplotlibimport matplotlib.pyplot as pltfrom sklearn.metrics import precision_recall_curvey_pred = [0, 1, 1, 0, 1, 1, 0, 1, 1, 1]y_true = [0, 1, 1, 0, 1, 0, 1, 1, 0, 1]precision, recall, thresholds = precision_recall_curve(y_true, y_pred)plt.plot(precision, recall)[]
from sklearn.metrics import roc_curvey_pred = [0, 1, 1, 0, 1, 1, 0, 1, 1, 1]y_true = [0, 1, 1, 0, 1, 0, 1, 1, 0, 1]FPR,TPR,thresholds=roc_curve(y_true, y_pred)plt.title('ROC')plt.plot(FPR, TPR,'b')plt.plot([0,1],[0,1],'r--')plt.ylabel('TPR')plt.xlabel('FPR')Text(0.5, 0, 'FPR')
AUC(Area Under Curve)
import numpy as npfrom sklearn.metrics import roc_auc_scorey_true = np.array([0, 0, 1, 1])y_scores = np.array([0.1, 0.4, 0.35, 0.8])print('AUC socre:',roc_auc_score(y_true, y_scores))AUC socre: 0.75KS(Kolmogorov-Smirnov) KS统计量
from sklearn.metrics import roc_curvey_pred = [0, 1, 1, 0, 1, 1, 0, 1, 1, 1]y_true = [0, 1, 1, 0, 1, 0, 1, 1, 1, 1]FPR,TPR,thresholds=roc_curve(y_true, y_pred)KS=abs(FPR-TPR).max()print('KS值:',KS)KS值: 0.1.4 经验总结
赛题理解是开始比赛的第一步,赛题的理解有助于对竞赛全局的把握。通过赛题理解有助于对赛题的业务逻辑把握,对于后期的特征工程构建和模型选择都尤为重要。
在开始比赛之前要对赛题进行充分的了解。 比赛什么时候开始,什么时候结束,什么时候换B榜数据。 和该比赛有没有类似的比赛可以参考借鉴。 线上提交结果的次数往往是有限的,提前了解每日可以提交的次数。 比赛使用的是什么评价指标,可以选择相同的评价指标作为线下验证的方式。
1.5拓展知识——评分卡
评分卡是一张拥有分数刻度会让相应阈值的表。信用评分卡是用于用户信用的一张刻度表。以下代码是一个非标准评分卡的代码流程,用于刻画用户的信用评分。评分卡是金融风控中常用的一种对于用户信用进行刻画的手段!
#评分卡 不是标准评分卡def Score(prob,P0=600,PDO=20,badrate=None,goodrate=None): P0 = P0 PDO = PDO theta0 = badrate/goodrate B = PDO/np.log(2) A = P0 + B*np.log(2*theta0) score = A-B*np.log(prob/(1-prob)) return scorehttps://tianchi./notebook-ai/detail?postId= https:///datawhalechina/team-learning-data-mining/blob/master/FinancialRiskControl/Task1%20%E8%B5%9B%E9%A2%98%E7%90%86%E8%A7%A3.md https://zhuanlan./p/240 标签组:[auc]
上一篇:每卖一台G350,奔驰至少比G500能多赚20万,问你服不服?_卫士
下一篇:丰田:不好意思各位,我马甲都不换,有钱的,没钱的都通吃_车型