ConformalizedQuantileCalibrator#

class openstef_models.transforms.postprocessing.ConformalizedQuantileCalibrator(**data: Any) None[source]

Bases: BaseModel, Transform[ForecastDataset, ForecastDataset]

Apply asymmetric split-conformal corrections to forecast quantiles.

Lower quantiles are corrected using lower-tail scores and upper quantiles using upper-tail scores. The median is left unchanged by default.

Parameters:
  • quantiles (list[Quantile] | None) – Quantiles to calibrate. If None, all input quantiles are used.

  • conformalize_median (bool) – Whether to apply the upper-tail correction to P50.

  • min_calibration_samples (int) – Minimum number of valid calibration pairs required before fitting a correction for a quantile. Quantiles with fewer valid pairs are left unchanged; if all quantiles are skipped, fitting becomes a no-op calibrator.

  • data (Any)

quantiles: list[Quantile] | None
conformalize_median: bool
min_calibration_samples: int
property is_fitted: bool

Return whether calibration corrections have been fitted.

fit(data: ForecastDataset) None[source]

Estimate one-sided conformal corrections from forecast errors.

Parameters:

data (ForecastDataset)

Return type:

None

transform(data: ForecastDataset) ForecastDataset[source]

Apply fitted corrections without changing quantile ordering.

Parameters:

data (ForecastDataset)

Return type:

ForecastDataset

model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_post_init(context: Any, /) None

This function is meant to behave like a BaseModel method to initialize private attributes.

It takes context as an argument since that’s what pydantic-core passes when calling it.

Parameters:
  • self (BaseModel) – The BaseModel instance.

  • context (Any) – The context.

  • self

  • context

Return type:

None