金融风控训练营赛题理解(task 1)学习笔记
金融风控训练营赛题理解(task 1)学习笔记
这份学习笔记属于阿里云天池龙珠计划 Docker 训练营的课程内容。学习链接为 https://github.com/datawhalechina/team-learning-data-mining/tree/master/FinancialRiskControl。
该竞赛基于金融风控领域的个人信贷评估设计。所有参赛者需利用贷款申请者的各项数据指标来预判其信用风险状况,并在此基础上决定该笔贷款是否予以发放。这一任务本质上属于分类模型的应用范畴。以下是我的学习笔记
一、学习知识概要
1.混淆矩阵
2.准确率
3.精确率
4.召回率
5.F1-score
6.P-R曲线
7.ROC
8.ACU
二、学习内容
2.1 混淆矩阵
- (1)当一个实例属于该类别并且被分类器识别出来时,则该实例被称为真正例TP。
- (2)如果一个实例属于该类别但却被认为是假阴性FN。
- (3)当将实际非阴性的样本错误地标记为阳性时,则称其为假阳性FP。
- (4)对于真实属于阴性的样本且正确分类的结果则被称为真阴性TN。
混淆矩阵(基于预测结果的列与真实结果的行)
## 混淆矩阵
import numpy as np #sklearn.metrics是度量指标模块,主要用于分类、回归和聚类任务
from sklearn.metrics import confusion_matrix #confusion_matrix是混淆矩阵模块
import matplotlib.pyplot as plt
y_pred = [0, 1, 0, 1]
y_true = [0, 1, 1, 0]
print('混淆矩阵:\n',confusion_matrix(y_true, y_pred))
输出结果
混淆矩阵:
[[1 1]
[1 1]]
图形理解

#画混淆矩阵图
data=confusion_matrix(y_true, y_pred)
plt.matshow(data,cmap=plt.cm.Greens) #矩阵图像风格
plt.colorbar()#颜色标签
#标签备注
for x in range(len(data)):
for y in range(len(data)):
plt.annotate(data[x,y],xy=(y,x),horizontalalignment='center',verticalalignment='center')
plt.ylabel('True label')
plt.xlabel('Predicted label')
plt.show()

2.2 准确率(Accuracy)
正确率是一种常见的评估标准,在样本分布不均衡的情况下其表现存在局限性。
Accuracy = \frac{TP + TN}{TP + TN + FP + FN}
#准确率
from sklearn.metrics import accuracy_score
print('ACC:',accuracy_score(y_true, y_pred))
输出结果
ACC: 0.75
3、精确率(Precision)
也被称作准确率,在信息检索中表示真实正确地被预测为正样本的数量占总预测的正样本数量的百分比。
4、召回率(Recall)
也被称作精确率,在信息检索中表示将实际正类样本正确分类的数量(TP)相对于所有被分类为正的样本数量(TP+FN)所占的比例。
5、F1 Score
精准度与召回能力相互制约,在此情况下若需同时兼顾二者,则应综合考量精准度与召回能力的F1分数
## 精确率、召回率、F1-score
from sklearn import metrics
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.5
Recall 0.5
F1-score: 0.5
6、P-R曲线(Precision-Recall Curve)
P-R曲线是描述精确率和召回率变化的曲线

## P-R曲线
import matplotlib.pyplot as plt
from sklearn.metrics import precision_recall_curve
y_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) #x轴为precison,y轴为recall
可以看出召回率和精确率成负相关

7、ROC(Receiver Operating Characteristic)
ROC空间将假正例率(FPR)定义为 X 轴,真正例率(TPR)定义为 Y 轴。
TPR:对于每一个真实属于阳性类的对象而言,在系统识别过程中能够正确分类的比例即为此处提到的真阳率。
TPR = \frac{TP}{TP + FN}
FPR:对于每一个真实属于阴性类的对象而言,在系统识别过程中由于误判而被分类到阳性类的比例即为此处提到的假阳率。
FPR = \frac{FP}{FP + TN}

## ROC曲线
from sklearn.metrics import roc_curve
y_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')

8、AUC(Area Under Curve)
AUC(Area Under Curve)被称为ROC曲线下方区域与坐标轴所围成的面积值。显然该面积值不会超过1。同时由于ROC曲线通常位于这条直线之上(y=x),因此其数值范围在0.5至1之间。当AUC趋近于1.0时检测方法的有效性越高;当其等于或低于0.5时则有效性显著下降无实际应用价值
## AUC
import numpy as np
from sklearn.metrics import roc_auc_score
y_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.75
9、对于金融风控预测类常见的评估指标
Kolmogorov-Smirnov统计量在风控领域中被广泛应用于评估模型的风险排序能力(ranking ability)。当其表现越佳,则说明该方法的风险排序能力就越强。与常见的ROC曲线相比,在计算方式上存在显著差异。
- ROC曲线采用真实正例率与虚假正例率分别作为横向和纵向坐标轴。
- K-S曲线则以真实正例率与虚假正例率为纵向坐标轴,并以选定的阈值点作为横向坐标。
公式如下:
KS=\max(TPR-FPR)
通常情况下,K-S值越大,模型的区分能力越强,但并非K-S值越大越好,因为当出现较大的K-S值时,可能提示模型存在异常,建议重新评估模型设计。
以下是对K-S值对应的不同情况进行了总结(具体对应关系仅供参考)。
- K-S曲线则以真实正例率与虚假正例率为纵向坐标轴,并以选定的阈值点作为横向坐标。

## KS值 在实际操作时往往使用ROC曲线配合求出KS值
from sklearn.metrics import roc_curve
y_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.5238095238095237
三、学习问题与解答
暂时没有遇到程序错误的问题
学习思考与总结
面对不熟悉的专业技术文档和算法实现细节时,请确保全面掌握相关知识以便深入理解和应用它们的核心原理。为了加深理解,请在学习过程中主动实践操作并反复推敲每一步骤的具体实现细节和用途。无需过分担心无法立即记住所有内容;核心在于准确理解每行代码的功能以及它们之间的相互关系。当需要开发类似功能时,请根据已有经验进行适当修改和完善现有的解决方案,并替换必要的数值或变量名以适应新的需求环境。
