首页 > 解决方案 > 如何手动计算 ROC 的 AUC?

问题描述

我有一个如下所示的数据集:

ID    Class    Predicted Probabilities
1       1              0.592
2       1              0.624
3       0              0.544
4       0              0.194
5       0              0.328
6       1              0.504
.       .              .
.       .              .

我的任务是手动计算 AUC……但不确定如何计算!

我知道如何计算 TPR 和 FPR 来创建 ROC 曲线。我将如何使用这些数据来计算 AUC?不允许使用 scikit-learn 之类的库。我到处寻找,但似乎找不到正确的答案。感谢大家!

标签: pythonrocauc

解决方案


您需要使用您的预测类别和真实类别计算真阳性率和假阳性率,同时改变您的类别阈值 (T),即您用来预测观察结果是属于 0 类还是 1 类的截止值。

您需要一个数据集,其标题看起来像......

ID、预测概率、预测类、真类、阈值、真阳性标志、假阳性标志

(有关详细信息,请参阅https://en.wikipedia.org/wiki/Receiver_operating_characteristic)。如果您查看 Wiki 页面,您会注意到它们甚至在“曲线下面积”中提供了快速简便的离散估计。

AUC 代表“曲线下面积”,因此您可能需要执行某种数值积分。在这种情况下,TPR 将是您的 Y,FPR 将是您在每个 T 值处的 X。

如果你想保持简单,你可以尝试使用梯形规则 ( https://en.wikipedia.org/wiki/Trapezoidal_rule )。

如果您不想自己实现,可以使用 numpy.trapz (参见:https ://docs.scipy.org/doc/numpy/reference/generated/numpy.trapz.html),但构建起来并不困难从头开始(请参阅:Python 中的梯形规则)。

您应该能够很容易地仅使用数学和 numpy 在 Python 中为这些函数编写函数。事实上,您可能根本不需要任何库。


推荐阅读