Machine Learning

Null importances: is the importance significant?

Fifty models trained on a shuffled target build the null distribution of each feature's importance: only a real importance that exceeds the 95th null percentile proves genuine signal.

Prerequisites

lightgbm, pandas, numpy

Python
import numpy as np
import pandas as pd
from lightgbm import LGBMClassifier

def importances(X, y_arr, seed=42):
    m = LGBMClassifier(n_estimators=200, random_state=seed, verbose=-1)
    return m.fit(X, y_arr).feature_importances_

imp_reelle = importances(X_train, y_train.values)

rng = np.random.default_rng(0)
null_imps = np.array([
    importances(X_train, rng.permutation(y_train.values), seed=i)
    for i in range(50)
])  # 50 modèles sur cible mélangée

p95_null = np.percentile(null_imps, 95, axis=0)
bilan = pd.DataFrame({
    "imp_reelle": imp_reelle,
    "p95_null": p95_null,
    "significative": imp_reelle > p95_null,
}, index=X_train.columns).sort_values("imp_reelle", ascending=False)
print(bilan.head(6).round(1).to_string())
print("features significatives :", int(bilan["significative"].sum()))

Result

                imp_reelle  p95_null  significative
nb_incidents        1842.0     201.4           True
montant_moy         1311.0     188.2           True
anciennete           987.0     214.7           True
code_region          611.0     688.9          False
freq_connexion       604.0     177.3           True
age                  371.0     169.8           True
features significatives : 9

code_region a une grosse importance MÊME quand la cible est mélangée
(pure cardinalité) : son score réel ne prouve donc rien — retirée.
C'est le piège que l'importance native seule ne détecte jamais.
Null importanceSignificativitéSélection de features

Related snippets

Back to the Data Lab