Machine learning ROC AUC得分较低,但精确度较高
在版本的上使用Machine learning ROC AUC得分较低,但精确度较高,machine-learning,scikit-learn,classification,logistic-regression,auc,Machine Learning,Scikit Learn,Classification,Logistic Regression,Auc,在版本的上使用scikit learn中的LogisticRegression类 我使用pandas选择一些列: df=df[[“月”、“月中日”、“周中日”、“起点”、“终点”、“终点时间”、“到达日期15”] 我用0填写NaN值: df=df.fillna({'ARR_DEL15':0}) 确保分类列标记有“类别”数据类型: df[“ORIGIN”]=df[“ORIGIN”].astype('category') df[“DEST”]=df[“DEST”].astype('categor
scikit learn
中的LogisticRegression
类
我使用pandas
选择一些列:
df=df[[“月”、“月中日”、“周中日”、“起点”、“终点”、“终点时间”、“到达日期15”]
我用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_假人(df)
现在我训练并测试我的数据集:
来自sklearn.linear\u模型导入逻辑回归
lr=逻辑回归()
测试集,测试集=测试集拆分(df,测试大小=0.2,随机状态=42)
列车组x=列车组下降('ARR\U DEL15',轴=1)
列车组y=列车组[“ARR_DEL15”]
测试集x=测试集落下('ARR_DEL15',轴=1)
test_set_y=test_set[“ARR_DEL15”]
lr.配合(列车组x、列车组y)
一旦我调用score
方法,我得到大约0.867。然而,当我调用roc_auc_score
方法时,我得到的数值要低得多,大约为0.583
probabilities=lr.预测概率(测试集)
roc auc得分(测试集,概率[:,1])
ROC AUC比
评分法提供的低很多,有什么原因吗?首先,说0.583的AUC比0.867的分数“低”,就像苹果和桔子比较一样
[*我认为你的意思是准确的,但这对本次讨论并不重要——原则上可能是其他任何问题]
至少根据我的经验,大多数ML从业者认为AUC分数衡量的是与实际不同的东西:常见的(也是不幸的)用法与其他用法一样,越高越好,比如准确性,这自然会导致像你表达自己一样的困惑
事实是,粗略地说,AUC衡量的是在所有可能的决策阈值上平均的二进制分类器的性能
二元分类中的(决策)是我们决定将样本标记为1的值(回想一下概率分类器实际上返回[0,1]中的值p
,通常解释为概率-在scikit中,它是predict\u proba
返回的值)
现在,在scikit learnpredict
等返回标签(1/0
)的方法中,这个阈值是,但这不是唯一的可能性,在将来的情况下甚至可能不可取(例如,不平衡的数据)
要带回家的要点是:
- 当您要求
评分时(在引擎盖下,即标签而非概率),您还隐式地将该阈值设置为0.5
- 当您询问AUC(与之相反,它使用随
predict\u probama
返回的概率)时,不涉及阈值,您得到(类似于)所有可能阈值的平均精度
鉴于这些澄清,您的特定示例提供了一个非常有趣的例子:
我用我的模型获得了足够高的准确率~87%;根据AUC为0.58的数据,我的分类器只比单纯的随机猜测稍好一点,我是否应该在意这一点
假设数据中的类表示是合理平衡的,那么现在的答案应该是显而易见的:不,你不应该在意;对于所有实际情况,您关心的是使用特定阈值部署的分类器,并且当在所有可能的阈值上求平均值时,该分类器在纯理论和抽象情况下所做的工作应该不会引起从业者的兴趣(一位研究人员提出了一种新算法,这确实引起了他的兴趣,但我认为这不是你的情况)
(对于不平衡数据,参数改变;这里的精度实际上是无用的,并且应该考虑精度、回忆和混淆矩阵)。
因此,AUC已开始在文献中受到严重批评(不要误读——ROC曲线本身的分析信息丰富且有用);其中提供的参考文献是强烈建议阅读的:
因此,AUC度量的实际价值受到了质疑,这增加了AUC实际上可能在机器学习分类精度比较中引入比分辨率更多的不确定性的可能性
[……]
最近对ROC AUC问题的一种解释是,将ROC曲线减少到单个数字忽略了一个事实,即它是关于不同系统或绘制的性能点之间的权衡,而不是单个系统的性能
强调我的-另请参见…我不知道确切的AIR\u DEL15
是什么,您使用它作为标签(它不在原始数据中)。我的猜测是,这是一个不平衡的特征,即0远多于1;在这种情况下,作为度量的准确性没有意义,您应该使用精度、召回率和混淆矩阵-另请参见)
作为一个极端的例子,如果87%的标签是0,那么通过将所有样本分类为0,您可以简单地(天真地)获得87%的“分类器”;在这种情况下,您的AUC也会很低(相当接近于0.5,就像您的情况一样)
有关AUC到底是什么的更一般(我认为这是非常必要的)讨论,请参阅我的另一个答案。关于AUC是什么的文章写得非常好!肯定能让我更了解它。谢谢我希望我也能把这当作一个答案。我之前确实注意到数据集中有更多的0。这也解释了高准确度的原因。再次感谢!