概率預(yù)測(cè)的評(píng)估方法簡(jiǎn)介

本文鏈接個(gè)人站 | 簡(jiǎn)書(shū) | CSDN
版權(quán)聲明:除特別聲明外,本博客文章均采用 BY-NC-SA 許可協(xié)議。轉(zhuǎn)載請(qǐng)注明出處。

概率預(yù)測(cè)的目標(biāo)是在滿(mǎn)足 calibration 的前提下盡可能提高預(yù)測(cè)的 sharpness。所謂的 calibration 指的是預(yù)測(cè)分布和觀測(cè)值在統(tǒng)計(jì)上的一致性,而 sharpness 則是指預(yù)測(cè)分布的集中程度。下面介紹一些常見(jiàn)的概率預(yù)測(cè)的評(píng)估方法。

1. 概率積分變換(Probability Integral Transform,PIT)

對(duì)于觀測(cè)值 \xi_1, \cdots, \xi_n ,假設(shè)模型預(yù)測(cè)的累積分布函數(shù)分別為 F_1, \cdots, F_n。如果模型預(yù)測(cè)準(zhǔn)確,則概率積分變換 \{F_i(\xi_i)\}_{i=1}^n 應(yīng)當(dāng)服從標(biāo)準(zhǔn)的均勻分布 U(0,1)。

PIT 的優(yōu)勢(shì)之一是便于可視化。最簡(jiǎn)單的做法是畫(huà)直方圖。\cup 形的直方圖意味著預(yù)測(cè)的分布過(guò)于集中;\cap 形的直方圖意味著預(yù)測(cè)的分布過(guò)于分散;明顯不對(duì)稱(chēng)的直方圖則意味著預(yù)測(cè)的分布整體偏離真實(shí)值。

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import norm

sns.set()

obs = np.random.normal(loc=0, scale=1, size=1000)  # 觀測(cè)值
pit_1 = norm.cdf(x=obs, loc=0, scale=1)  # 準(zhǔn)確的預(yù)測(cè)
pit_2 = norm.cdf(x=obs, loc=0, scale=0.5)  # 預(yù)測(cè)過(guò)于集中
pit_3 = norm.cdf(x=obs, loc=0, scale=2)  # 預(yù)測(cè)過(guò)于分散
pit_4 = norm.cdf(x=obs, loc=1, scale=1)  # 均值偏離

plt.figure(figsize=(10, 8))

ax1 = plt.subplot(221)
sns.distplot(pit_1, bins=20, kde=False, color='g')
ax1.set_title('Histogram of PIT_1')

ax2 = plt.subplot(222)
sns.distplot(pit_2, bins=20, kde=False, color='g')
ax2.set_title('Histogram of PIT_2')

ax3 = plt.subplot(223)
sns.distplot(pit_3, bins=20, kde=False, color='g')
ax3.set_title('Histogram of PIT_3')

ax4 = plt.subplot(224)
sns.distplot(pit_4, bins=20, kde=False, color='g')
ax4.set_title('Histogram of PIT_4')

plt.tight_layout()
plt.show()
PIT 的直方圖體現(xiàn)概率預(yù)測(cè)的效果

PIT 還可以用 P-P 圖來(lái)展示。簡(jiǎn)單地說(shuō),就是畫(huà)出 PIT 的 CDF 與標(biāo)準(zhǔn)均勻分布的 CDF 的關(guān)系圖。如果預(yù)測(cè)準(zhǔn)確,得到的應(yīng)該是一條直線。反 sigmoid 曲線意味著預(yù)測(cè)的分布過(guò)于集中;sigmoid 曲線意味著預(yù)測(cè)的分布過(guò)于分散;其它曲線則意味著預(yù)測(cè)的分布可能已經(jīng)整體偏離真實(shí)值了。

from scipy.stats import uniform

def get_pp(pit, bins):
    hist, edges = np.histogram(pit, bins, range=(0,1))
    cdf = np.cumsum(hist) / np.sum(hist)
    cdf_u = uniform.cdf(x=edges[1:])
    return cdf_u, cdf

plt.figure(figsize=(10, 8))

ax1 = plt.subplot(221)
plt.plot(*get_pp(pit_1, 20), '-o')
ax1.set_title('PP plot of PIT_1')

ax2= plt.subplot(222)
plt.plot(*get_pp(pit_2, 20), '-o')
ax2.set_title('PP plot of PIT_2')

ax3 = plt.subplot(223)
plt.plot(*get_pp(pit_3, 20), '-o')
ax3.set_title('PP plot of PIT_3')

ax4 = plt.subplot(224)
plt.plot(*get_pp(pit_4, 20), '-o')
ax4.set_title('PP plot of PIT_4')

plt.tight_layout()
plt.show()
P-P 圖體現(xiàn)概率預(yù)測(cè)的效果

2. 數(shù)值評(píng)分規(guī)則

2.1 連續(xù)概率排位分?jǐn)?shù)(Continuous Ranked Probability Score,CRPS)

CRPS 是在概率預(yù)測(cè)領(lǐng)域使用最廣泛的準(zhǔn)確度指標(biāo)之一。它的定義如下:
CRPS(F^f, F^o) = \int_{-\infty}^{+\infty}\left[F^f(x)-F^o(x)\right]^2\mathrm dx \tag 1
其中 F^f 是預(yù)測(cè)分布的 CDF,F^o 是觀測(cè)值的 CDF。注意是平方的積分,千萬(wàn)不要誤解為等于下圖兩條曲線之間的面積!?。?/strong>

真實(shí)分布已知的情況下

由定義可知,CRPS 衡量的是預(yù)測(cè)分布和真實(shí)分布的差異,當(dāng)預(yù)測(cè)分布與真實(shí)分布完全一致時(shí),CRPS 為零。預(yù)測(cè)分布過(guò)于集中、過(guò)于分散,亦或是偏離觀測(cè)值太遠(yuǎn)都會(huì)導(dǎo)致 CRPS 增大。

多數(shù)情況下,真實(shí)分布是未知的。如果對(duì)一系列的觀測(cè)值 \xi_1, \cdots, \xi_n 有各自對(duì)應(yīng)的概率預(yù)測(cè) F_1, \cdots, F_n,則可以用下式來(lái)估計(jì) CRPS:
\begin{split} CRPS(F, \xi) &=\frac 1n\sum_{i=1}^ncrps(F_i, \xi_i)\\ &= \frac 1n\sum_{i=1}^n\int_{-\infty}^{+\infty}\left[F_i(x)-\varepsilon(x-\xi_i)\right]^2\mathrm dx \end{split} \tag 2
其中
\varepsilon(t)= \begin{cases} 0, \qquad t<0\\ 1, \qquad t\geq0 \end{cases} \tag 3
為單位階躍函數(shù),如下圖所示。

真實(shí)分布未知的情況下

2.2 交叉熵(Cross Entropy)和對(duì)數(shù)分?jǐn)?shù)(Logarithmic Score)

如前所述,CRPS 衡量的是預(yù)測(cè)分布與真實(shí)分布之間的差異。我們知道,機(jī)器學(xué)習(xí)分類(lèi)問(wèn)題中常用的損失函數(shù)交叉熵也是用來(lái)比較兩個(gè)概率分布之間的差異的。

概率分布 pq 的交叉熵定義為
H(p, q) = \mathbb E_p[-\log_2q] \tag 4
其中 p 為真實(shí)分布,q 為預(yù)測(cè)分布。

pq 是離散的,則
H(p, q) = -\sum_xp(x)\log_2q(x) \tag 5
在真實(shí)分布未知的情況下,可以用下式來(lái)估計(jì)交叉熵:
H = -\frac1n\sum_{i=1}^n\log_2q(\xi_i) \tag 6
其中 \{\xi_i\}_{i=1}^n 為觀測(cè)值。

如果對(duì)一系列的觀測(cè)值 \xi_1, \cdots, \xi_n 有各自對(duì)應(yīng)的概率預(yù)測(cè) F_1, \cdots, F_n,則對(duì)數(shù)分?jǐn)?shù)(Logarithmic Score)定義為
LogS(F, \xi) = -\frac1n\sum_{i=1}^n\log_2f_i(\xi_i) \tag 7
其中 fF 對(duì)應(yīng)的 PDF??梢钥吹綄?duì)數(shù)分?jǐn)?shù)與交叉熵的估計(jì)式(6)形式上是相近的。

2.3 Brier Score

Brier Score 通常用于分類(lèi)問(wèn)題中,其定義為
BS = \frac1n\sum_{t=1}^n\sum_{i=1}^r(f_{ti}-o_{ti})^2 \tag 8
其中 n 是樣本數(shù)量,r 是類(lèi)目數(shù)量,f_{ti} 是模型預(yù)測(cè)第 t 個(gè)樣本的類(lèi)目為 i 的概率,o_{ti} 是第 t 個(gè)樣本的真實(shí)狀態(tài)(類(lèi)目為 i 則取 1,否則取 0)。

3. 需要注意的問(wèn)題

如前所述,真實(shí)分布已知的情況下,CRPS 可以直接計(jì)算。根據(jù)定義(1),預(yù)測(cè)準(zhǔn)確(即預(yù)測(cè)分布與真實(shí)分布完全一致)時(shí) CRPS 為零。但真實(shí)分布未知的情況下,CRPS 只能通過(guò)(2)估算。此時(shí)就算預(yù)測(cè)準(zhǔn)確,CRPS 也不為零。且不同的真實(shí)分布,在同樣預(yù)測(cè)準(zhǔn)確的時(shí)候,對(duì)應(yīng)的 CRPS 也不一樣。下面給出一個(gè)簡(jiǎn)單的例子:

>>> import numpy as np
>>> import properscoring as ps
>>> obs1 = np.random.normal(loc=0, scale=1, size=1000) # 從均值為0,方差為1的正態(tài)分布中采樣作為觀測(cè)值
>>> crps1 = np.mean(ps.crps_gaussian(x=obs1, mu=0, sig=1)) # 預(yù)測(cè)分布同樣是均值為0,方差為1的正態(tài)分布,估算 CRPS 值
>>> crps1
0.5795829266550281
>>> obs2 = np.random.normal(loc=0, scale=10, size=1000) # 從均值為0,方差為10的正態(tài)分布中采樣作為觀測(cè)值
>>> crps2 = np.mean(ps.crps_gaussian(x=obs2, mu=0, sig=10)) # 預(yù)測(cè)分布同樣是均值為0,方差為10的正態(tài)分布,估算 CRPS 值
>>> crps2
5.326040950564251
>>>

不能因?yàn)?crps1crps2 小,就認(rèn)為前者的預(yù)測(cè)更好,事實(shí)上它們都是對(duì)各自觀測(cè)值真實(shí)分布的準(zhǔn)確預(yù)測(cè),因此是一樣好的。在真實(shí)分布未知的情況下,CRPS 只適合用來(lái)衡量對(duì)同一個(gè)分布的不同預(yù)測(cè)之間的相對(duì)好壞,而不能衡量絕對(duì)的好壞。不難驗(yàn)證交叉熵也是如此。這與點(diǎn)估計(jì)中用到的各種準(zhǔn)確率指標(biāo)是不一樣的。

怎樣才能評(píng)估絕對(duì)的好壞呢?前面說(shuō)過(guò),預(yù)測(cè)準(zhǔn)確的情況下,PIT 服從標(biāo)準(zhǔn)的均勻分布。如果計(jì)算 PIT 與標(biāo)準(zhǔn)均勻分布之間的 CRPS 或交叉熵,無(wú)論真實(shí)分布是怎樣的,只要預(yù)測(cè)準(zhǔn)確,結(jié)果都應(yīng)該是接近的。

但 PIT 本身就沒(méi)有問(wèn)題了嗎?如下圖所示。左邊兩圖中的紅色實(shí)線表示真實(shí)值,綠色陰影表示預(yù)測(cè)的分布(采用均勻分布)。右邊兩圖是對(duì)應(yīng)的 PIT。從 PIT 得出的結(jié)論應(yīng)該是上面的預(yù)測(cè)好,但上面這個(gè)真的是你需要的預(yù)測(cè)嗎?

參考文獻(xiàn)

[1] Gneiting, T., & Raftery, A. E. (2007). Strictly proper scoring rules, prediction, and estimation. Journal of the American Statistical Association, 102(477), 359–378. https://doi.org/10.1198/016214506000001437
[2] Friederichs, P., & Thorarinsdottir, T. L. (2012). Forecast verification for extreme value distributions with an application to probabilistic peak wind prediction. Environmetrics, 23(7), 579–594. https://doi.org/10.1002/env.2176
[3] Benedetti, R. (2010). Scoring Rules for Forecast Verification. Monthly Weather Review, 138(1), 203–211. https://doi.org/10.1175/2009MWR2945.1
[4] Cross entropy - Wikipedia https://en.wikipedia.org/wiki/Cross_entropy
[5] Barier score - Wikipedia https://en.wikipedia.org/wiki/Brier_score

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 文章作者:Tyan博客:noahsnail.com | CSDN | 簡(jiǎn)書(shū) 聲明:作者翻譯論文僅為學(xué)習(xí),如有侵權(quán)請(qǐng)...
    SnailTyan閱讀 5,476評(píng)論 0 8
  • 作者:Joel Grus讀者:鍋巴GG Joel Grus 是 Google 的一位軟件工程師,曾于數(shù)家創(chuàng)業(yè)公司擔(dān)...
    鍋巴GG閱讀 2,344評(píng)論 3 16
  • 當(dāng)你在認(rèn)知整個(gè)世界,換個(gè)角度而言是在認(rèn)知自己。而世界上最難的,莫過(guò)于此。 對(duì)于自由意志這件事,我并不迷信。相反,有...
    Tiger的泛零售產(chǎn)品之路閱讀 437評(píng)論 5 1
  • 十六歲那年優(yōu)步入高中,她對(duì)這個(gè)新環(huán)境充滿(mǎn)新鮮感,正式上課那天班里重新調(diào)整了位,優(yōu)由于是早上來(lái)的所以遲到了不清楚座位...
    0c64b25db2ff閱讀 157評(píng)論 0 0
  • 親愛(ài)的天使班伙伴們?cè)缟虾?!我是學(xué)委盧靜亦。今天我代表優(yōu)秀小組做一個(gè)分享。三個(gè)標(biāo)簽介紹我自己: 1、5點(diǎn)早起300天...
    心靜亦然閱讀 246評(píng)論 0 0

友情鏈接更多精彩內(nèi)容