Interpret
Fit interpretable models. Explain blackbox machine learning.
Install / Use
/learn @interpretml/InterpretREADME
InterpretML
<a href="https://githubtocolab.com/interpretml/interpret/blob/main/docs/interpret/python/examples/interpretable-classification.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/></a>
<br/>
In the beginning machines learned in darkness, and data scientists struggled in the void to explain them.
Let there be light.
InterpretML is an open-source package that incorporates state-of-the-art machine learning interpretability techniques under one roof. With this package, you can train interpretable glassbox models and explain blackbox systems. InterpretML helps you understand your model's global behavior, or understand the reasons behind individual predictions.
Interpretability is essential for:
- Model debugging - Why did my model make this mistake?
- Feature Engineering - How can I improve my model?
- Detecting fairness issues - Does my model discriminate?
- Human-AI cooperation - How can I understand and trust the model's decisions?
- Regulatory compliance - Does my model satisfy legal requirements?
- High-risk applications - Healthcare, finance, judicial, ...

Installation
Python 3.7+ | Linux, Mac, Windows
pip install interpret
# OR
conda install -c conda-forge interpret
Introducing the Explainable Boosting Machine (EBM)
EBM is an interpretable model developed at Microsoft Research<sup>*</sup>. It uses modern machine learning techniques like bagging, gradient boosting, and automatic interaction detection to breathe new life into traditional GAMs (Generalized Additive Models). This makes EBMs as accurate as state-of-the-art techniques like random forests and gradient boosted trees. However, unlike these blackbox models, EBMs produce exact explanations and are editable by domain experts.
| Dataset/AUROC | Domain | Logistic Regression | Random Forest | XGBoost | Explainable Boosting Machine | |---------------|---------|:-------------------:|:-------------:|:---------------:|:----------------------------:| | Adult Income | Finance | .907±.003 | .903±.002 | .927±.001 | .928±.002 | | Heart Disease | Medical | .895±.030 | .890±.008 | .851±.018 | .898±.013 | | Breast Cancer | Medical | .995±.005 | .992±.009 | .992±.010 | .995±.006 | | Telecom Churn | Business| .849±.005 | .824±.004 | .828±.010 | .852±.006 | | Credit Fraud | Security| .979±.002 | .950±.007 | .981±.003 | .981±.003 |
Notebook for reproducing table
Supported Techniques
| Interpretability Technique | Type | |-----------------------------|--------------------| | Explainable Boosting | glassbox model | | APLR | glassbox model | | Decision Tree | glassbox model | | Decision Rule List | glassbox model | | Linear/Logistic Regression | glassbox model | | SHAP Kernel Explainer | blackbox explainer | | LIME | blackbox explainer | | Morris Sensitivity Analysis | blackbox explainer | | Partial Dependence | blackbox explainer |
Train a glassbox model
Let's fit an Explainable Boosting Machine
from interpret.glassbox import ExplainableBoostingClassifier
ebm = ExplainableBoostingClassifier()
ebm.fit(X_train, y_train)
# or substitute with LogisticRegression, DecisionTreeClassifier, RuleListClassifier, ...
# EBM supports pandas dataframes, numpy arrays, and handles "string" data natively.
Understand the model
from interpret import show
ebm_global = ebm.explain_global()
show(ebm_global)

Understand individual predictions
ebm_local = ebm.explain_local(X_test, y_test)
show(ebm_local)

And if you have multiple model explanations, compare them
show([logistic_regression_global, decision_tree_global])

If you need to keep your data private, use Differentially Private EBMs (see DP-EBMs)
from interpret.privacy import DPExplainableBoostingClassifier, DPExplainableBoostingRegressor
dp_ebm = DPExplainableBoostingClassifier(epsilon=1, delta=1e-5) # Specify privacy parameters
dp_ebm.fit(X_train, y_train)
show(dp_ebm.explain_global()) # Identical function calls to standard EBMs
<br/>
<br/>
For more information, see the documentation.
<br/>EBMs include pairwise interactions by default. For 3-way interactions and higher see this notebook: https://interpret.ml/docs/python/examples/custom-interactions.html
<br/>Interpret EBMs can be fit on datasets with 100 million samples in several hours. For larger workloads consider using distributed EBMs on Azure SynapseML: classification EBMs and regression EBMs
<br/> <br/>Acknowledgements
InterpretML was originally created by (equal contributions): Samuel Jenkins, Harsha Nori, Paul Koch, and Rich Caruana
EBMs are fast derivative of GA2M, invented by: Yin Lou, Rich Caruana, Johannes Gehrke, and Giles Hooker
Many people have supported us along the way. Check out ACKNOWLEDGEMENTS.md!
We also build on top of many great packages. Please check them out!
plotly | dash | scikit-learn | lime | shap | salib | skope-rules | treeinterpreter | gevent | joblib | pytest | jupyter
<a name="citations">Citations</a>
<details open> <summary><strong>InterpretML</strong></summary> <hr/> <details open> <summary> <em>"InterpretML: A Unified Framework for Machine Learning Interpretability" (H. Nori, S. Jenkins, P. Koch, and R. Caruana 2019)</em> </summary> <br/> <pre> @article{nori2019interpretml, title={InterpretML: A Unified Framework for Machine Learning Interpretability}, author={Nori, Harsha and Jenkins, Samuel and Koch, Paul and Caruana, Rich}, journal={arXiv preprint arXiv:1909.09223}, year={2019} } </pre> <a href="https://arxiv.org/pdf/1909.09223.pdf">Paper link</a> </details> <hr/> </details> <details> <summary><strong>Explainable Boosting</strong></summary> <hr/> <details> <summary> <em>"Intelligible models for healthcare: Predicting pneumonia risk and hospital 30-day readmission" (R. Caruana, Y. Lou, J. Gehrke, P. Koch, M. Sturm, and N. Elhadad 2015)</em> </summary> <br/> <pre> @inproceedings{caruana2015intelligible, title={Intelligible models for healthcare: Predicting pneumonia risk and hospital 30-day readmission}, author={Caruana, Rich and Lou, Yin and Gehrke, Johannes and Koch, Paul and Sturm, Marc and Elhadad, Noemie}, booktitle={Proceedings of the 21th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining}, pages={1721--1730}, year={2015}, organization={ACM} } </pre> <a href="https://www.microsoft.com/en-us/research/wp-content/uploads/2017/06/KDD2015FinalDraftIntelligibleModels4HealthCare_igt143e-caruanaA.pdf">Paper link</a> </details> <details> <summary> <em>"Accurate intelligible models with pairwise interactions" (Y. Lou, R. Caruana, J. Gehrke, and G. Hooker 2013)</em> </summary> <br/> <pre> @inproceedings{lou2013accurate, title={Accurate intelligible models with pairwise interactions}, author={Lou, Yin and Caruana, Rich and Gehrke, Johannes and Hooker, Giles}, booktitle={Proceedings of the 19th ACM SIGKDD international conference on Knowledge discovery and data mining}, pages={623--631}, year={2013}, organization={ACM} } </pre> <a href="https://www.cs.cornell.edu/~yinlou/papers/lou-Related Skills
YC-Killer
2.7kA library of enterprise-grade AI agents designed to democratize artificial intelligence and provide free, open-source alternatives to overvalued Y Combinator startups. If you are excited about democratizing AI access & AI agents, please star ⭐️ this repository and use the link in the readme to join our open source AI research team.
groundhog
398Groundhog's primary purpose is to teach people how Cursor and all these other coding agents work under the hood. If you understand how these coding assistants work from first principles, then you can drive these tools harder (or perhaps make your own!).
last30days-skill
13.8kAI agent skill that researches any topic across Reddit, X, YouTube, HN, Polymarket, and the web - then synthesizes a grounded summary
000-main-rules
Project Context - Name: Interactive Developer Portfolio - Stack: Next.js (App Router), TypeScript, React, Tailwind CSS, Three.js - Architecture: Component-driven UI with a strict separation of conce
