Source code for openstef_models.utils.xgboost
# SPDX-FileCopyrightText: 2025 Contributors to the OpenSTEF project <openstef@lfenergy.org>
#
# SPDX-License-Identifier: MPL-2.0
"""XGBoost-specific utility helpers."""
import numpy as np
import pandas as pd
from openstef_core.types import Quantile
try:
import xgboost as xgb
except ImportError as e:
from openstef_core.exceptions import MissingExtraError
raise MissingExtraError("xgboost", "openstef-models") from e
[docs]
def get_median_shap_contribs(
booster: xgb.Booster,
input_data: pd.DataFrame,
quantiles: list[Quantile],
) -> np.ndarray:
"""Compute SHAP contributions and return the median-quantile slice.
Args:
booster: Fitted XGBoost Booster.
input_data: Feature matrix for which to compute contributions.
quantiles: Quantiles the model was trained on.
Returns:
Array of shape ``(n_samples, n_features + 1)`` where the last column is
the model bias.
"""
dmatrix = xgb.DMatrix(input_data)
contribs_raw: np.ndarray = booster.predict(dmatrix, pred_contribs=True)
n_samples = len(input_data)
n_quantiles = len(quantiles)
contribs_3d = contribs_raw.reshape(n_samples, n_quantiles, -1)
median_idx = min(range(n_quantiles), key=lambda i: abs(float(quantiles[i]) - 0.5))
return contribs_3d[:, median_idx, :].copy()
__all__ = ["get_median_shap_contribs"]