一、学习知识点概要
- 分类问题:理解分类问题的实质及求解思路
- AUC指标:掌握AUC指标的意义
- KS统计量:理解KS统计量的含义
- 应用Python代码实现
二、学习内容
2.1 分类问题
分类即通过分析由属性描述的数据集元组(即样本、实例或对象)来构造模型,用于对未知数据类别的预测和分析。
在分类模型求解过程中会涉及到训练集和测试集,其定义及作用如下。
1)每个训练元组都有一个特定的类标签与之对应,即对于样本数据X,其中x是其训练元组,y是对应的类标签,X就可以记为X(x,y),其中x一般包含多个属性,是多维向量。用于建模的数据元组的集合形成了训练集,通过匹配一些参数来建立一个分类器,主要用于训练模型。
2)对于建立好的分类模型,由于该模型是根据训练集中的数据进行修正、拟合,对于其他数据集可能存在偏差,因此需要通过测试集来测试模型的准确性。主要用于检验模型的性能。
2.2 AUC指标
AUC是机器学习内的一种模型评估指标,被定义为ROC曲线下与坐标轴围成的面积,而ROC曲线又与混淆矩阵相关。
-
混淆矩阵(通常每一行代表实际值,每一列代表预测值)
如图所示,TP表示实际为正,预测也为正的样例数;FN表示实际为正,预测为负的样例数;FP表示实际为负,预测为正的样例数;TN表示实际为负,预测也为负的样例数。
为得到AUC指标,在混淆矩阵基础上给出了准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1_Score、PR曲线、ROC曲线,其定义如下:
- 准确率:即预测正确的样本所占的比例。准确率是分类中最常见的很直观的评价指标,通常来说,准确率越高,分类模型越好。
- 精确率(查准率):即在预测为正的样本中,预测正确的正样本所占的比例。
- 召回率(查全率):即在实际为正的样本中,预测正确的正样本所占的比例。
- F1_Score:权衡精确率和召回率的指标。一般来说,精确率高则召回率低,召回率高则精确率低。
- P-R曲线:描述精确率和召回率变化的曲线。根据精确率与召回率的关系可知P-R曲线的大致趋势如下,一般精确率越高、召回率越高,即曲线越靠右上,模型越好。
- ROC曲线:
首先需要引入两个概念:真正例率(TPR)表示在实际为正的样本中,正确预测为正样本所占的比例、假正例率(FPR)表示在实际为负的样本中,错误预测为正样本所占的比例。
以FPR为横坐标,TPR为纵坐标,可以得到ROC曲线大致趋势如下:
我们会希望在所有实际为正的样本中,正确预测为正的样本数越多越好,即TPR越大越好;在所有实际为负的样本中,错误预测为正的样本数越少越好,即FPR越小越好。曲线越靠左上,模型越好。此时,ROC曲线一般处于直线y=x上方,AUC作为ROC曲线下方与坐标轴围成的面积,其取值范围必然在(0.5,1),AUC的评判标准可参考如下:
AUC | 效果 |
0.5-0.7 | 较差 |
0.7-0.85 | 一般 |
0.85-0.95 | 很好 |
0.95-1 | 非常好 |
2.3 KS统计量
在风控中,KS常用于评估模型区分度。区分度越大,说明模型的风险排序能力越强。假设对于一个样本x=(0.2,0.5,0.6,0.1,0.3),定义大于某个阈值为正,否则为负,若取0.4为阈值,则该样本存在2个正样本,3个负样本,若取0.7为阈值,则该样本均为负样本。由此可见,对于不同的阈值,对于正负的划分也会不同,需要引入KS值将正负样本很好地区分开来,公式如下
一般来说,KS值越大,模型的区分能力越强,其评判标准可参考如下:
KS | 区分度 |
<0.2 | 不建议采用 |
0.2-0.4 | 较好 |
0.4-0.5 | 良好 |
0.5-0.6 | 很好 |
0.6-0.75 | 非常好 |
>0.75 | 过高,可能存在问题 |
2.4 Python代码实现
- 读取数据:可先将数据源下载至电脑(路径C://Users//Administrator//Desktop//train.csv)
import pandas as pd
train=pd.read_csv("C://Users//Administrator//Desktop//train.csv")
- 分类指标运算实例(混淆矩阵、精确率、准确率、召回率、F1_Score、P-R曲线、ROC曲线、KS值、AUC值)
## 混淆矩阵
import numpy as np
from sklearn.metrics import confusion_matrix
y_pred = [0, 1, 0, 1]
y_true = [0, 1, 1, 0]
print('混淆矩阵:\n',confusion_matrix(y_true, y_pred))
## accuracy
from sklearn.metrics import accuracy_score
print('ACC:',accuracy_score(y_true, y_pred))
## Precision,Recall,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))
## P-R曲线
import matplotlib.pyplot as plt
from sklearn.metrics import precision_recall_curve
precision, recall, thresholds = precision_recall_curve(y_true, y_pred)
plt.plot(precision, recall)
## ROC曲线
from sklearn.metrics import roc_curve
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')
KS=abs(FPR-TPR).max()
print('KS值:',KS) ## KS值
## 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))
三、学习问题与解答
- 分类模型(分类器)有哪些?
分类器常见的构造方法可以分为3大类:数理统计方法、机器学习方法和神经网络方法等。
数理统计方法:包括贝叶斯法和非参数法。常见的临近学习或基于事例的学习(Instance-Based Learning,IBL)属于非参数方法。k-最邻近算法(k-Nearest Neighborhors,简称kNN)就是属于非参数方法。
机器学习方法:决策树法和规则归纳法。
神经网络方法:BP算法。
四、学习思考与总结
本次学习充分理解了分类问题的实质及其模型的评估方法,掌握了关于分类模型的评估标准,对于题目也有了大致理解,但是具体需要应用什么模型以及各类模型的优缺点还不太了解,需要后续继续进行研究。