Scikit-learn 函数roc_auc_score
可用于获取 ROC 曲线的曲线下面积 (AUC)。该分数通常用于预测结果中的数字预测值。
但是,此函数也可用于分类变量。下面是一个示例(Python 语言),其中变量sex
用于预测变量survived
,并使用此函数获得 AUC:
import seaborn, pandas, sklearn
from sklearn.metrics import roc_auc_score
tdf = seaborn.load_dataset('titanic')
print(tdf[['survived','sex']].head(10))
x = tdf['sex'].apply(lambda x: 1 if x=='female' else 0)
y = tdf['survived']
auc = roc_auc_score(y, x)
auc = round(auc, 4)
print()
print("AUC for sex to predict survived:", auc)
输出:
survived sex
0 0 male
1 1 female
2 1 female
3 1 female
4 0 male
5 0 male
6 0 male
7 0 male
8 1 female
9 1 female
AUC for sex to predict survived: 0.7669
但是,这种技术在统计上是否合理?使用这种方法获得的 AUC 是否是 2 个分类变量之间关系的有效值?谢谢你的帮助。
编辑:我已将性别编码反转为 0 和 1,因此 AUC 现在为 0.7669
Edit2:从下面给出的非常有趣的答案来看,以下几点似乎很重要:
只要解释正确,AUC 也可以与分类变量一起使用。
需要强调的是,AUC离0.5越大越好,不一定越高。因此,0.1 的 AUC 比 0.7 的 AUC 更具预测性,尽管方向相反
可以通过以下简单的 Python 代码报告“绝对 AUC”:
Abs_AUC = AUC if (AUC>0.5) else (1-AUC)
因此,对于 0.1 的 AUC,绝对 AUC 为 0.9;这将有助于比较不同变量的 AUC,而不会遗漏 ROC 曲线对角线另一侧的 AUC。注意:这建议用于只有 2 个类别的预测变量。