CRPS(연속 순위 확률 점수) 또는 "연속 순위 확률 점수"는 분포 예측을 실제 값과 비교하는 함수 또는 통계입니다.
머신러닝 워크플로의 중요한 부분은 모델 평가입니다. 프로세스 자체는 상식으로 간주될 수 있습니다. 데이터를 훈련 세트와 테스트 세트로 분할하고, 훈련 세트에서 모델을 훈련하고, 채점 기능을 사용하여 테스트 세트에서 성능을 평가합니다.
채점 함수(또는 측정항목)는 실제 값과 그 예측을 비교 가능한 단일 값으로 매핑합니다[1]. 예를 들어 연속 예측의 경우 RMSE, MAE, MAPE 또는 R-제곱과 같은 점수 함수를 사용할 수 있습니다. 예측이 점별 추정이 아니라 분포라면 어떨까요?
베이지안 기계 학습에서 예측은 일반적으로 점별 추정이 아니라 값의 분포입니다. 예를 들어 예측은 분포의 추정된 매개변수이거나 비모수적 경우 MCMC 방법의 샘플 배열일 수 있습니다.
이 경우 기존 채점 기능은 통계 설계에 적합하지 않습니다. 예측 분포를 평균 또는 중앙값으로 집계하면 예측 분포의 분산 및 형태에 대한 상당한 정보가 손실됩니다.
CRPS(Continuous Graded Probability Score)는 단일 실제 값을 누적 분포 함수(CDF)와 비교하는 분수 함수입니다.
1970년대에 처음 소개되었으며[4] 주로 사용됩니다. 일기예보는 이제 문헌과 산업계에서 새로운 주목을 받고 있습니다[1][6]. 이는 목표 변수가 연속적이고 모델이 목표의 분포를 예측할 때 모델 성능을 평가하는 측정항목으로 사용할 수 있습니다. 예로는 베이지안 회귀 또는 베이지안 시계열 모델이 있습니다[5].
CRPS는 CDF를 사용하여 모수적 및 비모수적 예측 모두에 유용합니다. 많은 분포의 경우 CRPS [3]에는 분석 표현식이 있고 비모수적 예측의 경우 CRPS는 경험적 누적 분포 함수(eCDF)를 사용합니다.
테스트 세트의 각 관찰에 대한 CRPS를 계산한 후 결과를 단일 값으로 집계해야 합니다. RMSE 및 MAE와 유사하게 (가중치 가능) 평균을 사용하여 요약됩니다.
단일 값을 분포와 비교할 때의 주요 과제는 단일 값을 분포 표현으로 변환하는 방법입니다. CRPS는 지표 함수를 사용하여 Ground Truth를 퇴화된 분포로 변환하여 이 문제를 해결합니다. 예를 들어 참값이 7이면 다음을 사용할 수 있습니다.
표시기 함수는 유효한 CDF이며 CDF의 모든 요구 사항을 충족할 수 있습니다. 그런 다음 예측된 분포를 실제 값의 퇴화된 분포와 비교할 수 있습니다. 우리는 예측 분포가 가능한 한 현실에 가깝기를 원합니다. 따라서 이는 두 CDF 사이의 (제곱) 면적을 측정하여 수학적으로 표현할 수 있습니다.
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)
NRG 형식 [2]에 따라 구현된 CRPS 기능. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!