Conformalized Quantile Regression은 예측 불확실성을 정량화한다.

Conformalized Quantile Regression은 예측 불확실성을 정량화한다.
Photo by Katie Moum / Unsplash

CQR is

  • **Conformalized Quantile Regression(CQR)**은 예측 불확실성을 정량화하기 위해 개발된 방법으로, 회귀 문제에서 신뢰 가능한 예측 구간을 생성하는 데 사용됩니다.
  • 전통적인 **Quantile Regression(분위수 회귀)**과 **Conformal Prediction(적합 예측)**을 결합한 기법으로, 데이터의 분포 가정 없이 사후적 예측 구간을 제공합니다.

Motivation

  • 기존의 예측 방법은 보통 점 예측(point prediction)을 제공하며, 이는 데이터의 불확실성을 다루기 어렵습니다.
  • 예를 들어, 특정 값에 대한 신뢰 구간(confidence interval)을 생성하려면 데이터가 정규분포와 같은 특정 가정을 만족해야 합니다. 하지만 현실 세계의 데이터는 이러한 가정을 벗어나는 경우가 많습니다.
  • CQR은 데이터 분포에 대한 강한 가정 없이도 **유효(valid)**하고 **적응형(adaptive)**인 예측 구간을 생성할 수 있도록 설계되었습니다.

How it Works

  • CQR은 다음 두 가지 핵심 아이디어를 결합합니다.
    • Quantile Regression
      • 특정 분위수(예: 10%, 90%)에 해당하는 값을 추정하여 예측 구간을 생성합니다.
      • 하지만 단독으로는 예측이 데이터에 얼마나 적합한지 보장하지 못합니다.
  • Conformal Prediction
    • 예측값의 신뢰도를 평가하고, 데이터 적합성을 보장하는 보정 과정을 제공합니다.
    • 이는 예측값의 오차를 평가하여 예측 구간의 크기를 조정합니다.
    • 이를 통해, CQR은 특정 신뢰 수준(예: 90%)을 만족하는 예측 구간을 생성합니다.

Pros & Cons

Pros

  • 분포 가정 없음: 데이터가 정규분포와 같은 특정 분포를 따르지 않아도 동작합니다.
  • 유효한 예측 구간: 지정된 신뢰 수준을 만족하는 구간을 보장합니다.
  • 적응형: 데이터의 특성에 따라 구간 크기를 조정하여, 더 신뢰할 수 있는 예측 구간을 생성합니다.

Cons

  • 계산 비용: Quantile Regression과 Conformal Prediction을 결합하기 때문에 계산량이 많습니다.
  • 극단값에 민감: 매우 드문 값이나 이상치가 있을 경우, 예측 구간이 지나치게 넓어질 수 있습니다.
  • 모델 복잡성: 기존 회귀 모델보다 구현과 해석이 복잡할 수 있습니다.

Sample

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.linear_model import QuantileRegressor

# 데이터 생성
np.random.seed(42)
X = np.random.uniform(0, 10, size=(1000, 1))
y = 2 * X[:, 0] + np.random.normal(0, 1, size=1000)

# 학습 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 분위수 회귀 모델 정의
lower_quantile = 0.1
upper_quantile = 0.9

model_lower = QuantileRegressor(quantile=lower_quantile, alpha=0)
model_upper = QuantileRegressor(quantile=upper_quantile, alpha=0)

# 모델 학습
model_lower.fit(X_train, y_train)
model_upper.fit(X_train, y_train)

# 예측 및 신뢰 구간 계산
y_pred_lower = model_lower.predict(X_test)
y_pred_upper = model_upper.predict(X_test)

# 시각화
plt.scatter(X_test, y_test, alpha=0.5, label="True Data")
plt.plot(X_test, y_pred_lower, color="red", label=f"{int(lower_quantile * 100)}% Quantile")
plt.plot(X_test, y_pred_upper, color="blue", label=f"{int(upper_quantile * 100)}% Quantile")
plt.fill_between(X_test.ravel(), y_pred_lower, y_pred_upper, color="gray", alpha=0.2, label="Prediction Interval")
plt.legend()
plt.title("Conformalized Quantile Regression")
plt.xlabel("X")
plt.ylabel("y")
plt.show()

Alternative

  • Bootstrap Prediction Interval: 부트스트랩을 활용해 여러 모델을 생성하고, 신뢰 구간을 계산합니다. CQR보다 구현이 단순하지만, 데이터 크기가 작은 경우 불안정할 수 있습니다.
  • Bayesian Regression: 사후분포를 기반으로 신뢰 구간을 계산하며, 모델의 불확실성을 직접 다룹니다. 하지만 계산 비용이 매우 높습니다
  • Gaussian Process Regression: 신뢰 구간 계산에 매우 강력하지만, 대규모 데이터에서는 비효율적입니다.

References