Skip to content

check_coverage_rates_validation

yohou.testing.interval.check_coverage_rates_validation(forecaster, y, X_actual=None, X_future=None, X_forecast=None)

Check invalid coverage_rates raise ValueError during fit and predict.

Parameters

Name Type Description Default
forecaster BaseIntervalForecaster

Unfitted interval forecaster instance

required
y DataFrame

Training target data

required
X_actual DataFrame

Training features

None

Raises

Type Description
AssertionError

If invalid coverage_rates don't raise ValueError

Source Code

Show/Hide source
def check_coverage_rates_validation(
    forecaster,
    y: pl.DataFrame,
    X_actual: pl.DataFrame | None = None,
    X_future: pl.DataFrame | None = None,
    X_forecast: pl.DataFrame | None = None,
) -> None:
    """Check invalid coverage_rates raise ValueError during fit and predict.

    Parameters
    ----------
    forecaster : BaseIntervalForecaster
        Unfitted interval forecaster instance
    y : pl.DataFrame
        Training target data
    X_actual : pl.DataFrame, optional
        Training features

    Raises
    ------
    AssertionError
        If invalid coverage_rates don't raise ValueError

    """
    # Test rate = 1.5 (above 1 - invalid)
    forecaster_clone = clone(forecaster)
    try:
        forecaster_clone.fit(
            y, X_actual, forecasting_horizon=3, coverage_rates=[1.5], X_future=X_future, X_forecast=X_forecast
        )
        raise AssertionError(f"{forecaster_clone.__class__.__name__} should raise ValueError for coverage_rates=[1.5]")
    except ValueError as e:
        assert "coverage" in str(e).lower() or "1" in str(e).lower(), (
            f"ValueError should mention coverage_rates, got: {e}"
        )

    # Test negative rate (invalid)
    forecaster_clone = clone(forecaster)
    try:
        forecaster_clone.fit(
            y, X_actual, forecasting_horizon=3, coverage_rates=[-0.5], X_future=X_future, X_forecast=X_forecast
        )
        raise AssertionError(f"{forecaster_clone.__class__.__name__} should raise ValueError for coverage_rates=[-0.5]")
    except ValueError as e:
        assert "coverage" in str(e).lower() or "negative" in str(e).lower(), (
            f"ValueError should mention coverage_rates, got: {e}"
        )

    # Test predict_interval also validates
    forecaster_clone = clone(forecaster)
    forecaster_clone.fit(
        y, X_actual, forecasting_horizon=3, coverage_rates=[0.95], X_future=X_future, X_forecast=X_forecast
    )

    try:
        forecaster_clone.predict_interval(forecasting_horizon=3, coverage_rates=[1.5])
        raise AssertionError(
            f"{forecaster_clone.__class__.__name__}.predict_interval() should raise ValueError for coverage_rates=[1.5]"
        )
    except ValueError as e:
        assert "coverage" in str(e).lower(), f"ValueError should mention coverage_rates, got: {e}"