首页 文章

获得较低的ROC AUC分数,但准确度较高

提问于
浏览
4

flight delay dataset的版本中使用 LogisticRegression 中的 LogisticRegression 类 .

我使用 pandas 来选择一些列:

df = df[["MONTH", "DAY_OF_MONTH", "DAY_OF_WEEK", "ORIGIN", "DEST", "CRS_DEP_TIME", "ARR_DEL15"]]

我用0填写 NaN 值:

df = df.fillna({'ARR_DEL15': 0})

确保分类列标有“类别”数据类型:

df["ORIGIN"] = df["ORIGIN"].astype('category')
df["DEST"] = df["DEST"].astype('category')

然后从 pandas 调用 get_dummies()

df = pd.get_dummies(df)

现在我训练和测试我的数据集:

from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()

test_set, train_set = train_test_split(df, test_size=0.2, random_state=42)

train_set_x = train_set.drop('ARR_DEL15', axis=1)
train_set_y = train_set["ARR_DEL15"]

test_set_x = test_set.drop('ARR_DEL15', axis=1)
test_set_y = test_set["ARR_DEL15"]

lr.fit(train_set_x, train_set_y)

一旦我调用 score 方法,我就会得到0.867左右 . 但是,当我调用 roc_auc_score 方法时,我得到的数字大约低于0.583

probabilities = lr.predict_proba(test_set_x)

 roc_auc_score(test_set_y, probabilities[:, 1])

有没有理由说ROC AUC比 score 方法提供的要低得多?

2 回答

  • 12

    首先,说0.583的AUC低于0.867的得分*,就像比较苹果和橙子一样 .

    [*我假设你的score是准确的,但这对于这个讨论并不重要 - 原则上它可能是其他任何东西]

    根据我的经验,至少大多数ML从业者认为AUC分数测量的东西与实际不同:普通(和不幸)使用就像任何其他更高更好的度量,如准确性,可能自然会导致像你自己表达的谜题 .

    事实是,粗略地说,AUC衡量的是在所有可能的决策阈值中平均的二元分类器的性能 .

    二进制分类中的(决定)threshold是我们决定将样本标记为1的值(回想一下,概率分类器实际上返回[0,1]中的值 p ,通常被解释为概率 - 在scikit中 - 学习它是什么 predict_proba 返回) .

    现在,这个阈值,在像scikit-learn predict 这样返回标签( 1/0 )的方法中,是set to 0.5 by default,但这不是唯一的可能性,并且在一些情况下甚至可能不需要(例如,不 balancer 的数据) .

    带回家的重点是:

    • 当你要求 score (引擎盖uses predict,即标签而非概率)时,你也隐含地将此阈值设置为0.5

    • 当您要求AUC(相反,使用 predict_proba 返回的概率)时,不涉及阈值,并且您获得(类似)所有可能阈值的平均准确度

    鉴于这些澄清,您的特定示例提供 a very interesting case in point

    我的模型得到了足够的准确率~87%;我是否应该关心这一点,根据0.58的AUC,我的分类器仅仅比随机猜测稍微好一点?

    如果你的数据中的类表示是 reasonably balanced ,那么现在的答案应该是显而易见的:不,你不应该关心;对于所有实际案例,你关心的是一个使用特定阈值部署的分类器,以及这个分类器在纯粹的理论和抽象情况下所做的事情,当在所有可能的阈值中取平均值时,对于从业者来说应该没什么兴趣(它确实对一位研究人员提出了一种新的算法,但我认为这不是你的情况) .

    (对于不 balancer 的数据,参数会发生变化;此处的准确性实际上是无用的,您应该考虑精度,召回和混淆矩阵) .

    出于这个原因,AUC已经开始在文献中受到严厉的批评(不要误读这一点 - 对ROC曲线本身的分析具有很高的信息量和实用性); Wikipedia entry及其中提供的参考资料强烈推荐阅读:

    因此,AUC测量的实际 Value 受到质疑,这增加了AUC实际上可能在机器学习分类准确性比较中引入更多不确定性而不是分辨率的可能性 . [...]最近对ROC AUC问题的一个解释是,将ROC曲线减少到单个数字忽略了这样一个事实:它是关于不同系统或性能点之间的权衡,而不是单个系统的性能

    强调我的 - 请参阅On the dangers of AUC ...

  • 3

    我不知道究竟是什么 AIR_DEL15 ,你用它作为你的标签(它不在原始数据中) . 我的猜测是它是一个不 balancer 的特征,即还有更多的东西 . 在这种情况下,作为度量的准确性没有意义,您应该使用精度,召回和混淆矩阵 - 参见this thread) .

    就像一个极端的例子,如果87%的标签是0,你可以简单地获得87%的准确度“分类器”(和通过将所有样本分类为0;在这种情况下,你的AUC也很低(非常接近0.5,就像你的情况一样) .

    对于更一般的(在我看来非常需要)讨论AUC究竟是什么,请参阅我的其他答案 .

相关问题