連続順位付け確率スコア (CRPS) または「連続順位付け確率スコア」は、分布予測を真の値と比較する関数または統計です。
#機械学習ワークフローの重要な部分はモデルの評価です。プロセス自体は常識であると考えられます。データをトレーニング セットとテスト セットに分割し、トレーニング セットでモデルをトレーニングし、スコアリング関数を使用してテスト セットでのパフォーマンスを評価します。
スコアリング関数 (またはメトリック) は、真の値とその予測を単一の比較可能な値にマッピングします [1]。たとえば、継続的な予測の場合、RMSE、MAE、MAPE、R-squared などのスコアリング関数を使用できます。予測がポイントごとの推定ではなく、分布である場合はどうなるでしょうか?
ベイジアン機械学習では、予測は通常、点ごとの推定ではなく、値の分布です。たとえば、予測は分布の推定パラメーター、またはノンパラメトリックの場合は MCMC メソッドからのサンプルの配列にすることができます。
この場合、従来のスコアリング関数は統計設計には適していません。予測分布を平均値または中央値に集約すると、予測分布の分散と形状に関するかなりの情報が失われます。
連続段階的確率スコア (CRPS) は、単一の真の値を累積分布関数 (CDF) と比較する分数関数です。
##これは 1970 年代に初めて導入され [4]、主に天気予報を目的としており、現在では文献や業界で再び注目を集めています [1] [6]。これは、ターゲット変数が連続であり、モデルがターゲットの分布を予測する場合に、モデルのパフォーマンスを評価するためのメトリクスとして使用できます。例には、ベイズ回帰またはベイズ時系列モデルが含まれます [5]。CRPS は、CDF を使用することでパラメトリック予測とノンパラメトリック予測の両方に役立ちます。多くの分布に対して、CRPS [3] には分析式があり、ノンパラメトリック予測に対しては、CRPS は経験的累積分布関数 (eCDF) を使用します。 )。
テスト セット内の各観測値の CRPS を計算した後、結果を 1 つの値に集計する必要もあります。 RMSE および MAE と同様に、これらは (おそらく加重された) 平均を使用して要約されます。
単一値を分布と比較する際の主な課題は、個々の値をどのように変換するかです。分布の表現。 CRPS は、指標関数を使用してグラウンド トゥルースを縮退分布に変換することで、この問題を解決します。たとえば、真の値が 7 の場合、次のように使用できます。 インジケーター関数は有効な CDF であり、CDF のすべての要件を満たすことができます。次に、予測された分布を真の値の縮退分布と比較できます。予測された分布をできる限り現実に近づけたいと考えているため、これは次の 2 つの CDF の間の (二乗) 面積を測定することで数学的に表現できます: MAE からMAE の関係CRPS は、有名な MAE (平均絶対誤差) と密接に関連しています。ポイントごとの予測を使用し、それを縮退 CDF として扱い、CRPS 方程式に注入すると、次の結果が得られます。
したがって、予測分布が縮退分布 (ポイントごとの推定など) の場合、CRPS は MAE に減らされます。これは、別の観点から CRPS を理解するのに役立ちます。つまり、MAE を分布の予測に一般化したものとして見ることも、MAE は予測分布が縮退した場合の CRPS の特殊なケースであると見ることもできます。モデルの予測がパラメトリック分布である場合 (たとえば、分布パラメーターを予測する必要がある場合)、CRPS にはいくつかの一般的な分布に対する分析式があります [3]。モデルが正規分布のパラメーター μ と σ を予測する場合、CRPS は次の式を使用して計算できます。
このソリューションは、ベータ、ベータなどの既知の分布を解くことができます。ガンマ分布、ロジスティック分布、対数正規分布など [3]。予測がノンパラメトリックである場合、つまり予測が一連のシミュレーションである場合、eCDF の計算は面倒な作業になります。ただし、CRPS は次のように表すこともできます:
ここで、X、X' は F に独立しており、同一に分散されています。これらの式は計算が簡単ですが、それでもある程度の計算が必要です。
import numpy as np # Adapted to numpy from pyro.ops.stats.crps_empirical # Copyright (c) 2017-2019 Uber Technologies, Inc. # SPDX-License-Identifier: Apache-2.0 def crps(y_true, y_pred, sample_weight=None): num_samples = y_pred.shape[0] absolute_error = np.mean(np.abs(y_pred - y_true), axis=0) if num_samples == 1: return np.average(absolute_error, weights=sample_weight) y_pred = np.sort(y_pred, axis=0) diff = y_pred[1:] - y_pred[:-1] weight = np.arange(1, num_samples) * np.arange(num_samples - 1, 0, -1) weight = np.expand_dims(weight, -1) per_obs_crps = absolute_error - np.sum(diff * weight, axis=0) / num_samples**2 return np.average(per_obs_crps, weights=sample_weight)
CRPS 関数は NRG 形式 [2] に従って実装されます。 pyroppl[6]
import numpy as np def crps(y_true, y_pred, sample_weight=None): num_samples = y_pred.shape[0] absolute_error = np.mean(np.abs(y_pred - y_true), axis=0) if num_samples == 1: return np.average(absolute_error, weights=sample_weight) y_pred = np.sort(y_pred, axis=0) b0 = y_pred.mean(axis=0) b1_values = y_pred * np.arange(num_samples).reshape((num_samples, 1)) b1 = b1_values.mean(axis=0) / num_samples per_obs_crps = absolute_error + b0 - 2 * b1 return np.average(per_obs_crps, weights=sample_weight)
から引用 上記のコードは、PWM 形式 [2] に基づいて CRPS を実装しています。
連続順位付け確率スコア (CRPS) は、単一の真の値をその予測分布と比較するスコアリング関数です。この特性により、モデルは通常、点ごとの推定ではなく分布予測を出力するベイジアン機械学習に関連します。これは、分布予測用のよく知られた MAE を一般化したものと見ることができます。
パラメトリック予測の分析式があり、ノンパラメトリック予測の簡単な計算を実行できます。 CRPS は、継続的な目標を持つベイジアン機械学習モデルのパフォーマンスを評価するための新しい標準手法となる可能性があります。
以上がCRPS: ベイジアン機械学習モデルのスコアリング関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。