Evalml: рд▓реЛрдЪрджрд╛рд░ рдиреЗрдЯ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдЕрдиреБрдорд╛рдирдХ рдХреЗ рд╕рд╛рде SHAP рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 17 рдордИ 2021  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: alteryx/evalml

рдЗрд╕ рдкреАрдЖрд░ рдореЗрдВ , рд╣рдо test_algoritthms.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╢реЗрдк рдЯреЗрд╕реНрдЯ (test_shap) рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ENC рдХреЗ рд▓рд┐рдП init params рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВред рдХреЗ рд░реВрдк рдореЗрдВ init рдкреИрд░рд╛рдореАрдЯрд░ рдЫреЛрдбрд╝рдХрд░ alpha = 0.0001 рдФрд░ l1_ratio=0.15 рд╡рдЬрд╣ рд╕реЗ рдПрдХ ZeroDivisionError shap, рдЬреЛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╕рдордп рдпрд╣ ред

рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХреНрдпреЛрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рддреНрд░реБрдЯрд┐ рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджрд░реНрдЬ рдХрд░рдирд╛ред

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╢реЗрдк рдЗрд╢реНрдпреВ рд╣реИред рдореИрдВрдиреЗ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП https://github.com/slundberg/shap/issues/2000 рджрд╛рдпрд░ рдХрд┐рдпрд╛ред рдЕрд▓реНрдкрд╛рд╡рдзрд┐ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • рд░реИрдЦрд┐рдХ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП KernelExplainer рдореЗрдВ рд▓рд┐рдВрдХ = "рдкрд╣рдЪрд╛рди" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
  • рд▓реЙрдЧрд┐рдЯ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде explainer = shap.LinearExplainer(classifier, X, link=shap.links.logit)

рдПрдХ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдЬреЛ рд╡рд┐рдлрд▓ рд░рд╣рд╛:

, рдореБрдЦреНрдп рдкреНрд░рдпреЛрдЧ рдкрд░ alpha=0.5, l1_ratio=0.5 , рдЬреЛ рд╣реИ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реИ рдЗрд╕ рд╣реИ, рд╣рдо рдореЗрдВ рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдЕрдЧрд░ 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

рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:
image

рдЕрдЧрд░ рд╣рдо рдЕрд▓реНрдлрд╛ рдФрд░ l1_ratio рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рднреА рдпрд╣ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред

рдареАрдХ рд╣реИ @ bchen1116 , рдЬрд╛рдУ рдЗрд╕реЗ рдХрд░реЛред

рдЗрд╕ рдЬрдирд╕рдВрдкрд░реНрдХ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкрди

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

bchen1116 picture bchen1116  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dsherry picture dsherry  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

SydneyAyx picture SydneyAyx  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dsherry picture dsherry  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dsherry picture dsherry  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ