概率评分方法

概率评分方法

一般来说,评估预测概率准确性的方法被称为评分规则或评分函数。下面将介绍三种评分方法,可用于评估分类预测建模问题的预测概率。

Log Loss Score

Log loss, also called “logistic loss,” “logarithmic loss,” or “cross entropy” can be used as a measure for evaluating predicted probabilities.

将每个预测概率与实际类输出值(0或1)进行比较,并计算出一个分数,该分数根据与预期值的距离来惩罚概率。惩罚是对数的,小差异的分数小和大差异的分数大。

对于带有真实标签的单个样品 y{0,1}y \in \{0,1\} 和概率估计 p=Pr(y=1)p = \operatorname{Pr}(y = 1), log loss 是:

Llog(y,p)=(ylog(p)+(1y)log(1p))L_{\log}(y, p) = -(y \log (p) + (1 - y) \log (1 - p))

Log loss图像

缺点

Log loss的结果对数据集取平均,在平衡数据集的情况下,分数将是合适的,在不平衡数据集的情况下,分数将具有误导性。

平衡数据集Log Loss预测的折线图

平衡数据集Log Loss预测的折线图

不平衡数据集(0多)Log Loss预测的折线图

不平衡数据集Log Loss预测的折线图

实现

1
sklearn.metrics.log_loss(y_true, y_pred, *, eps='auto', normalize=True, sample_weight=None, labels=None)

https://scikit-learn.org/stable/modules/generated/sklearn.metrics.log_loss.html

Brier Score

Brier Score衡量的是预测概率和实际结果之间的均方差。分数汇总了概率预测中误差的大小。错误分数始终在0.0和1.0之间,其中完美的模型的分数为0。

Brier Score图像

实现

1
sklearn.metrics.brier_score_loss(y_true, y_prob, *, sample_weight=None, pos_label=None)

https://scikit-learn.org/stable/modules/generated/sklearn.metrics.brier_score_loss.html

与Log loss一样,在不平衡数据集的情况下,分数将具有误导性。

ROC AUC Score

ROC(Receiver Operating Characteristic)曲线是一种用于表示分类模型性能的图形工具。它通过将真阳性率(True Positive Rate,TPR)假阳性率(False Positive Rate,FPR)作为横纵坐标来描绘分类器在不同阈值下的性能。

真阳性率(True Positive Rate,TPR)是指分类器正确识别正例的能力,可以理解为所有阳性群体中被检测出来的比率,TPR越接近1越好。

假阳性率(False Positive Rate,FPR)是指在所有实际为负例的样本中,模型错误地预测为正例的样本比例,FPR越接近0越好。

TPR=TPP=TPTP+FNTPR=\frac{TP}{P}=\frac{TP}{TP+FN}

FPR=FPN=FPFP+TNFPR=\frac{FP}{N}=\frac{FP}{FP+TN}

混淆矩阵图

ROC曲线

sklearn LogisticRegression 的ROC曲线:

LogisticRegression的ROC曲线

AUC(Area Under roc Curve)是ROC曲线下的面积,用于衡量分类器性能。AUC值越接近1,表示分类器性能越好;反之,AUC值越接近0,表示分类器性能越差。在实际应用中,我们常常通过计算AUC值来评估分类器的性能。

ROC曲线围成的面积 (即AUC)可以解读为:从所有正例中随机选取一个样本A,再从所有负例中随机选取一个样本B,分类器将A判为正例的概率比将B判为正例的概率大的可能性。

AUC的一般判断标准:

0.5 - 0.7:效果较低,但用于预测股票已经很不错了

0.7 - 0.85:效果一般

0.85 - 0.95:效果很好

0.95 - 1:效果非常好,但一般不太可能

优点

TPR用到的TP和FN同属P列,FPR用到的FP和TN同属N列,所以即使P或N的整体数量发生了改变,也不会影响到另一列。也就是说,即使正例与负例的比例发生了很大变化,ROC曲线也不会产生大的变化,而像Precision使用的TP和FP就分属两列,则易受类别分布改变的影响。

缺点

在类别不平衡的背景下,负例的数目众多致使FPR的增长不明显,ROC曲线的横轴采用FPR,根据FPR=FPN=FPFP+TNFPR=\frac{FP}{N}=\frac{FP}{FP+TN},当负例N的数量远超正例P时,FP的大幅增长只能换来FPR的微小改变。结果是虽然大量负例被错判成正例,在ROC曲线上却无法直观地看出来。

实现

  1. roc_curve函数

    1
    2
    fpr, tpr, thresholds = sklearn.metrics.roc_curve(y_true, y_score)
    pyplot.plot(fpr, tpr)

    https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_curve.html

  2. roc_auc_score函数

    1
    auc_score = sklearn.metrics.roc_auc_score(y_true, y_score)

    https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html

参考资料

  1. https://machinelearningmastery.com/how-to-score-probability-predictions-in-python/
  2. https://zhuanlan.zhihu.com/p/616190701
  3. https://zhuanlan.zhihu.com/p/352271971
  4. https://zhuanlan.zhihu.com/p/34655990

概率评分方法
https://wangyinan.cn/概率评分方法
作者
yinan
发布于
2023年8月5日
许可协议