区間予測の評価指標

区間予測の評価指標#

D2 pinball score#

\(D^2\)は決定係数\(R^2\)の一般化

\[ D^2(y, \hat{y}) = 1 - \frac{\text{dev}(y, \hat{y})}{\text{dev}(y, y_{\text{null}})} \]

ここで\(y_{\text{null}}\)は切片のみのモデルの最適解(例:二乗誤差なら\(y\)の平均値、絶対誤差なら\(y\)の中央値、pinball lossなら\(y\)の指定されたquantile)

この\(D^2\)

\[\begin{split} \text{dev}(y, \hat{y}) = \text{pinball}(y, \hat{y}) = \begin{cases} (\tau - 1) (y - \hat{y}) & \text{ if } (y - \hat{y}) \leq 0\\ \tau (y - \hat{y}) & \text{ if } (y - \hat{y}) > 0\\ \end{cases} \end{split}\]

を代入したものが\(D^2\) pinball score

(参考:3.3. Metrics and scoring: quantifying the quality of predictions — scikit-learn 1.4.1 documentation

interval score#

Gneiting, T., & Raftery, A. E. (2007). Strictly proper scoring rules, prediction, and estimation. Journal of the American statistical Association, 102(477), 359-378.

\((1 - \alpha)\times 100\text{%}\)予測区間を\([l, u]=[\frac{\alpha}{2}, 1 - \frac{\alpha}{2}]\) quantileで構築したとする。

interval scoreは真の値を\(x\)として

\[ S_{\alpha}(l, u; x) = (u - l) + \frac{2}{\alpha} (l - x) \mathbb{1}\{ x < l \} + \frac{2}{\alpha} (x - u) \mathbb{1}\{ x > u \} \]

となる。(スコアが小さいほうが良いモデルを意味する)

import numpy as np

def interval_score(l, u, x, alpha):
    return (u - l) + (2 / alpha) * (l - x) * (x < l) + (2 / alpha) * (x - u) * (x > u)

alpha = 0.05
true_values = 5

# 予測1
lower, upper = (1, 10)
s1 = interval_score(lower, upper, true_values, alpha)
# 予測2
lower, upper = (4, 6)
s2 = interval_score(lower, upper, true_values, alpha)
print(f"{s1=}, {s2=}")
s1=9.0, s2=2.0

Calibration#