0%

Brier Score

我的知乎版本, 貌似知乎的latex公式反馈更好

Brier Score (mean squared error) 感觉这个 跟L2 loss 很像。但是因为我最近在做比较多survival analysis,所以经常接触 brier score。所以看到很少有人整理这块,我先简单整理,以后会多次更新修改。
1 - Brier Score
Brier Score 最原始的公式:

$ BS = \frac{1}{N} \sum_{t=1}^N(\hat y_t - y_t)^2 $,

L2 loss 对比

$ \text{L2 loss} = {\sum_{t=1}^N (y_t - \hat y_t)^2} $

N: 是总共检测的样本数目
y_hat: 是 probability of y, 也就是 预测的概率
y: 是 ground truth 也就是 真实的y
Brier Score 的出来的范围 是 [0,1] 之间,然后Brier Score 越小则模型准确率越高。
Code:

1
2
3
4
5
6
import numpy as np
from sklearn.metrics import brier_score_loss
y_true = np.array([0, 0, 1, 1, 1])
y_prob = np.array([0.2, 0.1, 0.8, 0.9, 0.5])

brier_score_loss(y_true, y_prob) # 0.07

2 - Brier Score 在生存测试 (without censor) [1]
在生存测试中,我们预测的是每个独立的病人的生存概率。

添加图片注释,不超过 140 字(可选)
也就是在时间点T = t’,病人A的生存概率 S(t’, X_A).
那么在每个时间点T 的生存概率就可以与病人的真实生存情况得出 Brier Score 在时间点T = t.

$ \mathbb{1} = T_i > t $

$ BS(t) = \frac{1}{N} \sum_{i=1}^{N} (\mathbb{1} - \hat S (t, \vec x_i))^2 $

$\mathbb{1}$:indicator function 也就是 $T_i > t$ 就是1 不然就是0

$\vec x_i$ :因为每个病人其实是feature vector

bench_mark: 当所有的 S(x) = 0.5, BS = 1/N (N x 0.5^2 ) = 0.25
3 - Brier Score 在生存测试 (with censor)
censor 就是删失病人。在某个时间点 Ti 之后,病人数据消失了,我们只知道病人在Ti 之前是活着的。
这个时候我们引入了一个新的概念IPCW
$\hat G(t) = \prod_j \frac{n_j - d^{\star}_j}{n_j}: j \in {V_j < t} $ 用来转移censor 病人的weight 到 uncensor 到病人去评估准确度。

$n_j$: 所有 在 t 时有censor的可能性的 病人

$d^{\star}_j$: 在 t 时censor 的病人
例子

PatientId Time(t) censor bit(δ) \hat{G}(t) Weight 1/(\hat{G}(t)) KM(t)
0 1 1
S1 1 u 1 0.8
S2 2 c 3/4 0
S3 3 u 4/3 0.533
S4 4 c 3/4 x 1/2 0
S5 5 u 8/3 0

这里有个很有意思的发现,组里一个phd 大佬点醒了我们
我们会发现在算S3 的 Brier Score 的时候 weight 是 4/3,是因为除了他本身的 1,还加了 S2的 1/3。而算S5的 Brier Score 的时候 weight 是 8/3,除了S5 的1 以外 还加了 S4 的1 以及 S3的 2/3,也就是说 S2 的weight 有1/3 给了 S3, 有2/3 给了S5.
当时疑惑了好久,然后后来他发现 并不是 S2的weight 1/3 给了S5 而是S2的weight uniform 给了后面所有的 S (S3, S4, S5 各有1/3)。然而 因为 S4 本身也是 删失的情况,所以S4 连带着 S2的1/3 一起给了S5 所以才导致 S5的weight 是8/3。
然后我们提出了几个疑问,
1:万一最后全是censor 删失病人怎么办,后面的删失病人 的weight 没办法transfer 到最后一个 uncensor 病人上。(后来我们查论文得知 最后一个病人一定是uncensor 病人)
2:会不会导致越往后的病人 weight 越重要,当censor 病人足够多的时候,最后一个病人的预测情况可以左右结果。(这个好像的确是一个问题 但不知道这个是好是坏)

在融入 $ \hat G(t) $ 之后, BS 可以更新为

$ BS(t) = \frac{1}{N} \sum_{i = 1}^{N} \left( \frac{\left( 0 - \hat{S}(t, \vec{x}i)\right)^2 \cdot \mathbb{1}{T_i \leq t, \delta_i = 1}}{ \hat{G}(T_i^-)} + \frac{ \left( 1 - \hat{S}(t, \vec{x}i)\right)^2 \cdot \mathbb{1}{T_i > t}}{ \hat{G}(t)} \right) $

$ BS(t) = \frac{1}{N} \sum_{i = 1}^N \left{ \begin{array}{lr} \frac{0-\hat S(t|Z_i)^2}{\hat G(t_i)} & \text{if } t_i \leq t, \delta_i = 1 \ \frac{(1 - \hat S(t|Z_i))^2}{\hat G(t} & \text{if } t_i > t \ 0 & \text{ if } t_i = t, \delta_i = 0 \end{array} \right. $

4 - integral Brier Score [2]
因为 BS(t) 是只考虑在 时间点 t 的时候 BS 是多少,但是生存概率是一个 时间范围内,如果我们想知道整个时间段的生存概率是否正确,我们可以用IBS
当我们只考虑 uncensor 病人,也就是有event的病人:

$ IBS(\tau, V_U, \hat S(\cdot | \cdot)) = \frac{1}{\tau} \int_{0}^{\tau} BS_t (V_U, \hat S(t| \cdot)) dt $

如果我们要加上 censor 的病人,我们就要用我们之前的IPCW 的weight 了

$ IBS(\tau, V, \hat S(\cdot | \cdot)) = \frac{1}{\tau} \int_{0}^{\tau} \left( \frac{\left( 0 - \hat{S}(t, \vec{x}i)\right)^2 \cdot \mathbb{1}{T_i \leq t, \delta_i = 1}}{ \hat{G}(T_i^-)} + \frac{ \left( 1 - \hat{S}(t, \vec{x}i)\right)^2 \cdot \mathbb{1}{T_i > t}}{ \hat{G}(t)} \right) dt $

Reference:
[1] Graf, Erika, Claudia Schmoor, Willi Sauerbrei, and Martin Schumacher. 1999. “Assessment and Comparison of Prognostic Classification Schemes for Survival Data.”Statistics in Medicine18 (17-18): 2529–45.
[2] Haider, H., Hoehn, B., Davis, S., & Greiner, R. (2020). Effective ways to build and evaluate individual survival distributions.Journal of Machine Learning Research,21(85), 1-63.