Source code for openstef_models.explainability.plotters.feature_importance_plotter
# SPDX-FileCopyrightText: 2025 Contributors to the OpenSTEF project <openstef@lfenergy.org>
#
# SPDX-License-Identifier: MPL-2.0
"""Interactive treemap visualization for feature importance scores.
Creates color-coded treemaps showing relative importance of features in
forecasting models.
"""
import pandas as pd
import plotly.graph_objects as go
from openstef_core.base_model import BaseConfig
from openstef_core.datasets.validation import validate_required_columns
from openstef_core.types import Q, Quantile
[docs]
class FeatureImportancePlotter(BaseConfig):
"""Creates treemap visualizations of feature importance scores."""
[docs]
@staticmethod
def plot(scores: pd.DataFrame, quantile: Quantile = Q(0.5)) -> go.Figure:
"""Generate interactive treemap showing feature importance.
Creates a color-coded treemap where each box size and color intensity
represents the relative importance of a feature. Useful for quickly
identifying which features contribute most to model predictions.
Args:
scores: Feature importance scores with feature names as index and
quantiles as columns (e.g., 'q0.5', 'q0.95'). Values should be
normalized to sum to 1.0.
quantile: Which quantile column to visualize. Defaults to median (0.5).
Returns:
Plotly Figure containing interactive treemap with hover information.
Larger boxes and darker green colors indicate higher importance.
"""
quantile_column = quantile.format()
validate_required_columns(scores, required_columns=[quantile_column])
return go.Figure(
go.Treemap(
labels=scores.index,
parents=pd.Series(data=["Feature importance"] * len(scores), index=scores.index),
values=scores[quantile_column],
marker={"colors": scores[quantile_column], "colorscale": "greens"},
hovertemplate=("<b>%{label}</b><br>importance: %{value:.1%}<extra></extra>"),
),
layout={
"margin": {
"t": 0,
"r": 0,
"b": 0,
"l": 0,
}
},
)