Evalml: Le test SHAP échoue avec l'estimateur Elastic Net Classifier

Créé le 17 mai 2021  ·  4Commentaires  ·  Source: alteryx/evalml

Dans ce PR , nous modifions les paramètres d'initialisation pour ENC afin de réussir les tests de shap (test_shap) dans le fichier test_algoritthms.py . Laisser les paramètres d'initialisation à alpha = 0.0001 et l1_ratio=0.15 causé un ZeroDivisionError lors du calcul de shap, ce qui est probablement lié à ce .

Déposer ce problème pour déterminer pourquoi le test échoue et trouver un bon moyen d'éviter cette erreur.

bug

Tous les 4 commentaires

Je pense que c'est un problème de forme. J'ai déposé https://github.com/slundberg/shap/issues/2000 pour discussion. À court terme, je pense que nous pouvons faire ce qui suit :

  • Utilisez link="identity" dans le KernelExplainer pour les modèles linéaires
  • Utilisez LinearExplainer avec le lien logit, explainer = shap.LinearExplainer(classifier, X, link=shap.links.logit)

Un autre test qui a échoué :

Sur main, en utilisant alpha=0.5, l1_ratio=0.5 , ce que nous avons avant cela , si nous ajoutons ce test dans evalml/tests/model_understanding_tests/prediction_explaination_tests/test_explainers.py :

@pytest.mark.parametrize("estimator", ["Extra Trees Classifier", "Elastic Net Classifier"])
def test_elastic_net(estimator, fraud_100):
    pytest.importorskip('imblearn', reason='Skipping test because imblearn not installed')
    X, y = fraud_100
    pipeline = BinaryClassificationPipeline(component_graph=["Imputer", "One Hot Encoder", "DateTime Featurization Component", estimator])
    pipeline.fit(X=X, y=y)
    pipeline.predict(X)
    importance = explain_predictions(pipeline, X, y, indices_to_explain=[0], top_k_features=4)
    assert report['feature_names'].isnull().sum() == 0
    assert report['feature_values'].isnull().sum() == 0

Le test échoue :
image

Si nous modifions l'alpha et le l1_ratio, cela échoue toujours.

Ok @bchen1116 , vas-y.

Clôture avec ce PR

Cette page vous a été utile?
0 / 5 - 0 notes