我们在建模过程需要通过KS,AUC等指标评估模型的效果,关于KS,AUC怎么来的这里就不介绍了,网上有大量的资料介绍。本篇博文重点介绍AUC值怎么快速计算得到。
我们一般计算AUC的时候是根据混淆矩阵先计算出tpr,fpr,通过tpr和fpr可以得到ROC曲线,类似下面的ROC图。
AUC值就是ROC曲线下面的面积,问题是怎么计算呢?可以采用积分方法求得,不过未免有些麻烦。Python的skearn库中也有计算AUC的函数,sklearn.metrics.roc_auc_score,不过需要通过预测概率来计算的,如果只有评分和好坏标签该怎么快速计算呢?
这里有一个近似计算的方法,大概的思想就是:AUC的含义是模型预测正确大于预测错误的概率,从概率的角度出发,统计给出的数据(好坏标签和预测概率或分数)中预测正确比预测错误大的概率是多大。具体的介绍可以参考AUC近似计算,这里虽然是近似计算,但经过验证计算结果跟实际差别非常小,我验证的差别是千分位的级别,可以说非常准确了。
下面直接给出Python代码吧:
import pandas as pd
import numpy as np
def auc(df, label='label', predict='predict', prob=False):
"""
功能:根据样本实际标签和预测概率(分数)快速计算auc值。
参数:
df: pd.DataFrame,至少包含标签号预测结果列;
label: 样本实际标签(0, 1);
predict: 预测结果(分数或概率均可);
prob: predict是否为概率,根据实际情况设置,默认False;
输出:auc值。
"""
if prob:
df.sort_values(by=predict, ascending=False, inplace