混淆矩阵
对于二分类问题,用0和1表示两种类别。
TP:真实为1且预测正确的样本个数
FN:真实为1但预测错误的样本个数
FP:真实为0但预测错误的样本个数
TN:真实为0且预测正确的样本个数
可以直接用sklearn库得到混淆矩阵,下面是之前数模写的代码(数据不在了,就只有运行结果)
from sklearn import metrics
print("Confusion matrix")
print(metrics.confusion_matrix(y_test,y_predict))
可以用seaborn库可视化混淆矩阵(数据是三分类的,随便设的):
import seaborn as sns
from sklearn import metrics
import pandas as pd
cm = metrics.confusion_matrix(y_test,y_predict)
df = pd.DataFrame(cm)
ax = sns.heatmap(df,cmap="Blues",annot=True)
ax.set_title('confusion matrix')
ax.set_xlabel('predict')
ax.set_ylabel('true')
Out:
matplotlib也是可以画出的,只不过没有seaborn画图的代码简便,还有seaborn的配色还是蛮好看的,可以通过cmap自己调色,也可以set_palette
设置调色板。
precision、recall、F1 score、support
precision精度:
precision = TP/(TP+FP)
recall召回率:
recall = TP/(TP+FN)
F1-score:
F1 Score = 2*(precision * recall) / (precision + recall)
from sklearn.metrics import classification_report
report = classification_report(y_test,ly_predict)
print(report)
AUC和ROC曲线
真正率TPR:预测为正且实际为正的样本占所有正例样本的比例
TPR=TP/(TP+FN)
假正率FPR:预测为正且实际为负的样本占所有负例样本的比例
FPR=FP/(FP+TN)
ROC曲线的横坐标为假正率FPR,纵坐标为真正率TPR。
AUC代表ROC曲线下方区域的面积,值越大说明模型相对越好。(很多竞赛的指标值就是AUC)
import matplotlib.pyplot as plt
from sklearn.metrics import roc_auc_score
#用metrics.roc_curve()求出 fpr, tpr, threshold
fpr, tpr, threshold = metrics.roc_curve(y_test, lly_predict)
#用metrics.auc求出roc_auc的值
roc_auc = metrics.auc(fpr,tpr)
#将plt.plot里的内容填写完整
plt.plot(fpr, tpr, label = 'AUC = %0.2f' % roc_auc)
#将图例显示在右下方
plt.legend(loc = 'lower right')
#画出一条红色对角虚线
plt.plot([0, 1], [0, 1],'r--')
#设置横纵坐标轴范围
plt.xlim([-0.01, 1.01])
plt.ylim([-0.01, 1.01])
#设置横纵名称以及图形名称
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.title('Receiver Operating Characteristic Curve')
plt.show()
Out:
计算AUC值:
from sklearn.metrics import roc_auc_score
score_auc = roc_auc_score(y_test, y_predict)
print("score",score_auc)
KS曲线
KS指标:
KS = max|TPR - FPR|
PSI群体稳定性指标
前面的指标都是评估模型准确性的,PSI指标是用来评估稳定性的。PSI是最常见的模型稳定性评估指标,它可以衡量测试样本及模型开发样本预测概率的分布差异,其值越小模型越稳定。
PSI的计算方法如下:
若模型更稳定,那么P1和P2上各区间样本占比应该是相近的,不会变动很大。