阿里云天池 金融风控训练营 · Task 1 赛题理解学习笔记)

阿里云天池 金融风控训练营 · Task 1 赛题理解学习笔记

  • 1、学习知识点概要
    • 1.1 比赛赛题理解理解
    • 1.2 数据集
  • 2、学习内容
    • 2.1 预测指标
      • 2.1.1混淆矩阵
      • python代码实现混淆矩阵[^4]
      • 混淆矩阵(Confuse Matrix)科学定义[^3]
      • 2.1.2准确率(Accuracy)
      • 2.1.3精确率(Precision)
      • 2.1.4召回率(Recall)
      • 2.1.5F1 Score 精确率和召回率是相互影响
    • 2.2P-R曲线(Precision-Recall Curve)
    • 2.3 ROC(Receiver Operating Characteristic)
    • 2.4 AUC(Area Under Curve)
  • 3、学习问题与解答
  • 4、学习思考与总结
    • 参考

本学习笔记为阿里云天池金融风控训练营的学习内容,学习链接为:https://tianchi.aliyun.com/specials/activity/promotion/aicampdocker

1、学习知识点概要

1.1 比赛赛题理解理解

  1. 本次比赛赛题是十分典型的金融建模题目,以贷款是否违约为背景,通过机器学习的xgboost等方法预测金融风险给决策提供依据
  2. 相比较于一般的金融建模比赛,本次比赛更加注重对数据的挖掘,并且提供了已经收集好的原始数据集
  3. 通过这样基础的比赛,能够很好的引导像我这样的新人走进金融和数据挖掘的世界,运用python工具,发现数据带给我们的世界,这就是大数据时代

1.2 数据集

  1. 本次比赛提供的数据的特征非常多,可以在后续的不断优化算法过程不断筛选和提取特征值,从而得到最符合算法的特征
  2. 数据量对于像我们这样的学生来说也是十分可观的

2、学习内容

2.1 预测指标

采用AUC作为评价指标,AUC(Area Under Curve)被定义为 ROC曲线 下与坐标轴围成的面积。

2.1.1混淆矩阵

在机器学习领域,混淆矩阵(confusion matrix),又称为可能性表格或是错误矩阵。它是一种特定的矩阵用来呈现算法性能的可视化效果,通常是监督学习(非监督学习,通常用匹配矩阵:matching matrix)。其每一列代表预测值,每一行代表的是实际的类别。这个名字来源于它可以非常容易的表明多个类别是否有混淆(也就是一个class被预测成另一个class)。1

混淆矩阵是评判模型结果的指标,属于模型评估的一部分。此外,混淆矩阵多用于判断分类器(Classifier)的优劣,适用于分类型的数据模型,如分类树(Classification Tree)、逻辑回归(Logistic Regression)、线性判别分析(Linear Discriminant Analysis)等方法。2
在分类型模型评判的指标中,常见的方法有如下三种:
1.混淆矩阵(也称误差矩阵,Confusion Matrix)
2.ROC曲线
3.AUC面积

举一个生动形象的例子:假设有一个用来对猫(cats)、狗(dogs)、兔子(rabbits)进行分类的系统,混淆矩阵就是为了进一步分析性能而对该算法测试结果做出的总结。假设总共有 27 只动物:8只猫, 6条狗, 13只兔子。结果的混淆矩阵如下图:
阿里云天池 金融风控训练营 · Task 1 赛题理解学习笔记)_第1张图片
由图中可知,在这个混淆矩阵中,实际有 8只猫,但是算法实现过程中将其中3只预测成了狗;对于 6条狗,其中有 1条被预测成了兔子,2条被预测成了猫。从混淆矩阵中我们可以看出系统对于区分猫和狗存在一些问题,但是区分兔子和其他动物的效果还是不错的。所有正确的预测结果都在对角线上,所以从混淆矩阵中可以很方便直观的看出哪里有错误,因为他们呈现在对角线外面。

python代码实现混淆矩阵3

sklearn.metrics.confusion_matrix(y_true, y_pred, labels=None, sample_weight=None)

y_true:是样本真实分类结果
y_pred 是样本预测分类结果
labels是所给出的类别,通过这个可对类别进行选择
sample_weight 是样本权重
用confusion_matrix生成矩阵数据,然后用seaborn的热度图绘制出混淆矩阵数据:

import seaborn as sns
from sklearn.metrics import confusion_matrix
import matplotlib.pyplot as plt
sns.set()
y_true = ["cat", "dog", "cat", "cat", "dog", "rebit"]
y_pred = ["dog", "dog", "rebit", "cat", "dog", "cat"]
C2= confusion_matrix(y_true, y_pred, labels=["dog", "rebit", "cat"])
sns.heatmap(C2,annot=True)

阿里云天池 金融风控训练营 · Task 1 赛题理解学习笔记)_第2张图片

混淆矩阵(Confuse Matrix)科学定义4

(1)若一个实例是正类,并且被预测为正类,即为真正类TP(True Positive )
(2)若一个实例是正类,但是被预测为负类,即为假负类FN(False Negative )
(3)若一个实例是负类,但是被预测为正类,即为假正类FP(False Positive )
(4)若一个实例是负类,并且被预测为负类,即为真负类TN(True Negative )
混淆矩阵图示:
阿里云天池 金融风控训练营 · Task 1 赛题理解学习笔记)_第3张图片

2.1.2准确率(Accuracy)

解释 公式
准确率是常用的一个评价指标,但是不适合样本不均衡的情况。 在这里插入图片描述

2.1.3精确率(Precision)

解释 公式
又称查准率,正确预测为正样本(TP)占预测为正样本(TP+FP)的百分比 在这里插入图片描述

2.1.4召回率(Recall)

解释 公式
又称为查全率,正确预测为正样本(TP)占正样本(TP+FN)的百分比 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210422222304977.png

2.1.5F1 Score 精确率和召回率是相互影响

解释 公式
F1 Score 精确率和召回率是相互影响的,精确率升高则召回率下降,召回率升高则精确率下降,如果需要兼顾二者,就需要精确率、召回率的结合F1 Score 在这里插入图片描述

2.2P-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)

阿里云天池 金融风控训练营 · Task 1 赛题理解学习笔记)_第4张图片

2.3 ROC(Receiver Operating Characteristic)

ROC空间将假正例率(FPR)定义为 X 轴,真正例率(TPR)定义为 Y 轴。

TPR FPR
在所有实际为正例的样本中,被正确地判断为正例之比率 在所有实际为负例的样本中,被错误地判断为正例之比率
$1600 在这里插入图片描述
## 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')

阿里云天池 金融风控训练营 · Task 1 赛题理解学习笔记)_第5张图片

2.4 AUC(Area Under Curve)

AUC(Area Under Curve)定义为 ROC曲线 下与坐标轴围成的面积,显然这个面积的数值不会大于1。又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围在0.5和1之间。AUC越接近1.0,检测方法真实性越高;等于0.5时,则真实性最低,无应用价值。

对于金融风控预测类常见的评估指标如下:
1、KS(Kolmogorov-Smirnov) KS统计量由两位苏联数学家A.N. Kolmogorov和N.V. Smirnov提出。在风控中,KS常用于评估模型区分度。区分度越大,说明模型的风险排序能力(ranking ability)越强。 K-S曲线与ROC曲线类似,不同在于

1.ROC曲线将真正例率和假正例率作为横纵轴
2.K-S曲线将真正例率和假正例率都作为纵轴,横轴则由选定的阈值来充当。 公式如下: 在这里插入图片描述

## 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

## 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

3、学习问题与解答

1. python语法不熟,需要看着代码来亲自敲才有可能记住

2. 对DSW环境不熟,以往都是集成开发的软件,这次是网站,需要网络保持畅通
阿里云天池 金融风控训练营 · Task 1 赛题理解学习笔记)_第6张图片
遇到上面这种问题一般是正在运行状态,需要保持网络畅通
3. DSW与jupyter Notebook类似,可用相同的快捷键
Enter : 转入编辑模式
Shift-Enter : 运行本单元,选中下个单元
Ctrl-Enter : 运行本单元
Alt-Enter : 运行本单元,在其下插入新单元
Y : 单元转入代码状态
M :单元转入markdown状态
R : 单元转入raw状态
1 : 设定 1 级标题
2 : 设定 2 级标题
3 : 设定 3 级标题
编辑模式 ( Enter 键启动)
Tab : 代码补全或缩进
Shift-Tab : 提示
Ctrl-] : 缩进
Ctrl-[ : 解除缩进
Ctrl-A : 全选
Ctrl-Z : 复原
Ctrl-Shift-Z : 再做
Ctrl-Y : 再做
Ctrl-Home : 跳到单元开头
Ctrl-Up : 跳到单元开头
Ctrl-End : 跳到单元末尾
Ctrl-Down : 跳到单元末尾
4. 数据量大时运行速度慢
可能跟电脑cpu有关,但只要耐心等待一定有你想要看到的结果
5. 运行出现问题时不要急

  1. 遇到bug不要急,慢慢排查,可以上CSDN或者知乎找寻答案
  2. 虽然本次Task1运行代码时没有遇到什么比较大的bug
  3. 正是由于python语法相较于其他语言更为简洁,这才有那句“人生苦短,我用python

4、学习思考与总结

一、 首先python代码语法的简洁,其次是DSW平台已经做的非常好,相比较与anaconda的jupyte notebook有像pycharm一样的目录的界面,这在管理数据的时候更加方便,并且容易查找数据,和加载数据
其次是运行界面正的有想jupyter一般丝滑,比起pycharm又如此轻便,这也是我对阿里云DSW平台如此赞叹,不得不感叹国内已经有阿里大佬可以做出这样的界面

二、机器学习三要素,算法,算力,数据,在这个金融风控训练赛中我们已经有最后一项了,尽管还需要我们去做数据清洗等等。不过这一步并没有想象中的那么难,最难的前两步的算法和算力,算法需要不断的优化代码,算力是我们现在不需要担心的,因为相较于公司的大数据运行,我们手中的电脑已经足够撑起我们的算力。

三、也让我加深理解了所谓的数据挖掘,一直听说过这个词,但是只有真正去尝试才知道它究竟是什么,并且像我这种刚刚接触的人一开始就是觉得代码太难更换了,东拼西凑的代码老是出错。作为已经有差不多两个月公司数据运营经验的我来说,有点好奇更加高深的金融数据挖掘到底能给我们的生活带来什么,这也是我接下来会去探索的~

参考


  1. 混淆矩阵(Confusion Matrix)分析 ↩︎

  2. 4.4.2分类模型评判指标(一) - 混淆矩阵(Confusion Matrix) ↩︎

  3. 混淆矩阵含义及python代码实现 ↩︎

  4. 阿里云天池 金融风控-Task1 ↩︎

你可能感兴趣的:(python,机器学习)