skfolio.model_selection.CovarianceForecastComparison#

class skfolio.model_selection.CovarianceForecastComparison(evaluations, names=None)[source]#

Side-by-side comparison of covariance forecast evaluations.

Aggregates multiple CovarianceForecastEvaluation instances and provides combined summary tables and overlay plots for comparing estimator performance.

Parameters:
evaluationslist of CovarianceForecastEvaluation

Evaluation results to compare.

nameslist of str or None, default=None

Override display names. When provided, must have the same length as evaluations. When None, defaults to each evaluation’s name (falling back to "Estimator 0", "Estimator 1", etc. when the name is unset).

Attributes:
names

Methods

bias_statistic_summary()

Cross-portfolio bias statistic distribution for all estimators.

exceedance_summary([confidence_levels])

Exceedance rate summary for all estimators.

plot_calibration([diagnostics, window, title])

Rolling calibration diagnostics comparison.

plot_exceedance([confidence_level, window, ...])

Rolling exceedance rate comparison at a fixed confidence level.

plot_qlike_loss([window, title])

Rolling portfolio QLIKE loss comparison.

summary()

Consolidated summary statistics for all estimators.

Examples

>>> from skfolio.model_selection import (
...     CovarianceForecastComparison,
...     online_covariance_forecast_evaluation,
... )
>>> from skfolio.moments import EWCovariance
>>>
>>> evaluatio_30 = online_covariance_forecast_evaluation(
...     EWCovariance(half_life=30), X, warmup_size=252,
... )
>>> evaluatio_60 = online_covariance_forecast_evaluation(
...     EWCovariance(half_life=60), X, warmup_size=252,
... )
>>> comparison = CovarianceForecastComparison(
...     [evaluatio_30, evaluatio_60],
...     names=["EWCov(30)", "EWCov(60)"],
... )
>>> comparison.summary()
>>> comparison.plot_calibration()
bias_statistic_summary()[source]#

Cross-portfolio bias statistic distribution for all estimators.

Returns a DataFrame indexed by estimator name with percentile columns and portfolio count.

Returns:
summaryDataFrame
exceedance_summary(confidence_levels=(0.95, 0.99))[source]#

Exceedance rate summary for all estimators.

Returns a DataFrame with confidence levels as rows and a column-level MultiIndex (estimator, stat) where stat is observed_rate or deviation.

Parameters:
confidence_levelstuple of float, default=(0.95, 0.99)

Confidence levels used to define the upper chi-squared thresholds.

Returns:
summaryDataFrame
plot_calibration(diagnostics=('mahalanobis', 'diagonal', 'bias'), window=50, title=None)[source]#

Rolling calibration diagnostics comparison.

Overlays calibration diagnostics from all estimators on one figure. Each (estimator, diagnostic) pair gets a distinct auto-assigned color.

Parameters:
diagnosticstuple of str, default=(“mahalanobis”, “diagonal”, “bias”)

Which diagnostics to include. Valid values are "mahalanobis", "diagonal", and "bias".

windowint, default=50

Rolling window length.

titlestr, optional

Custom figure title.

Returns:
figgo.Figure
plot_exceedance(confidence_level=0.95, window=50, title=None)[source]#

Rolling exceedance rate comparison at a fixed confidence level.

Overlays exceedance rates from all estimators at a single confidence level on one figure.

Parameters:
confidence_levelfloat, default=0.95

Confidence level used to define the upper chi-squared threshold.

windowint, default=50

Rolling window length.

titlestr, optional

Custom figure title.

Returns:
figgo.Figure
plot_qlike_loss(window=50, title=None)[source]#

Rolling portfolio QLIKE loss comparison.

Overlays QLIKE loss from all estimators on one figure. For evaluations with multiple portfolios, the median across portfolios is shown with a P5-P95 band.

Parameters:
windowint, default=50

Rolling window length.

titlestr, optional

Custom figure title.

Returns:
figgo.Figure
summary()[source]#

Consolidated summary statistics for all estimators.

Returns a DataFrame with metrics as rows and a column-level MultiIndex (estimator, stat) where stat is one of mean, median, std, p5, p95, mad_from_target, target.

Returns:
summaryDataFrame