InterpretML: Glassbox Models and Blackbox Explanations in One Package
Fit interpretable models. Explain blackbox machine learning.
At a glance
- What is it?
- InterpretML ships the Explainable Boosting Machine alongside SHAP, LIME and partial dependence behind a single show() call. It is a strong fit when you need an editable, exact model explanation, and a poor fit when you need per-prediction explanations at low latency in production.
- Who is it for?
- Adopt InterpretML if you need a model whose explanations are the model itself, or if you want SHAP, LIME and partial dependence behind one API. Do not adopt it if you need explanations generated at request time inside a latency budget, or if your model is a deep network whose internal features you cannot map back to columns.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly C++, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
The Gap InterpretML Is Trying to Fill
Two separate problems get lumped together under explainability. The first is explaining a model you already have and cannot change, usually a gradient boosted tree or a neural network. The second is building a model whose structure is already legible, so no separate explanation step is needed. Most libraries pick one. InterpretML ships both under one import root, with glassbox models under interpret.glassbox and blackbox explainers alongside them. The README frames the motivation in terms of model debugging, feature engineering, fairness checks, human-AI cooperation and regulatory compliance, and names healthcare, finance and judicial applications as high-risk domains. That framing is honest about who the package is for: teams that have to justify a prediction to someone outside the team. If you are tuning a model purely for a leaderboard and nobody will ever ask why a specific row scored the way it did, the glassbox half of this package is dead weight. The blackbox half may still be useful, but you could get similar output from SHAP directly.
What the Explainable Boosting Machine Actually Is
EBM is the centerpiece. The README describes it as a derivative of GA2M, using bagging, gradient boosting and automatic interaction detection to extend traditional generalized additive models. The practical consequence of that structure is what matters: an additive model sums per-feature contribution functions, so the contribution of each feature to a prediction is a value you can read off directly rather than approximate. The README states that EBMs produce exact explanations and are editable by domain experts. Editable is the part that separates this from post-hoc attribution. If a learned shape for one feature contradicts what a clinician or a credit analyst knows, that shape can be corrected, and the correction is part of the model rather than a note in a slide deck. The README also notes that EBMs include pairwise interactions by default, and points to a separate notebook for 3-way and higher interactions. That default is worth knowing before you assume the model is purely additive: a pairwise term means the contribution of feature A depends on feature B, which is still inspectable but is no longer a simple per-feature bar chart.
The Accuracy Claim and What It Rests On
The README includes a benchmark table comparing EBM against logistic regression, random forest and XGBoost across five datasets: Adult Income, Heart Disease, Breast Cancer, Telecom Churn and Credit Fraud. On Adult Income the table lists EBM at .928 AUROC against XGBoost at .927, on Heart Disease .898 against .851, and on Telecom Churn .852 against .828. On Breast Cancer EBM ties logistic regression at .995, and on Credit Fraud it ties XGBoost at .981. The pattern is that EBM lands near the top on every row without winning every row outright. That is the claim worth taking seriously: not that EBM beats gradient boosted trees, but that it stays competitive while remaining inspectable. Two caveats apply. The table carries standard deviations, so several of those gaps are within noise of each other. And the numbers come from the project's own benchmark notebook, not from an independent evaluation. Reproduce them on your own data before treating the comparison as settled. The README does state that Interpret EBMs can be fit on datasets with 100 million samples in several hours, and directs larger workloads to distributed EBMs on Azure SynapseML.
Getting It Running and the Calls You Will Actually Make
Installation is a single command, with a conda alternative: pip install interpret, or conda install -c conda-forge interpret. The README states Python 3.10+ on Linux, Mac and Windows. The basic fit is three lines. Import ExplainableBoostingClassifier from interpret.glassbox, instantiate it with no required arguments, and call fit on X_train and y_train. The README notes that EBM accepts pandas dataframes, numpy arrays, and handles string data natively, which removes the one-hot encoding step that usually precedes a linear model. From there, ebm.explain_global() returns a global explanation object and show() renders it, while ebm.explain_local(X_test, y_test) does the same for individual predictions. Passing a list to show(), for example show([logistic_regression_global, decision_tree_global]), renders a comparison dashboard. The glassbox module also exposes LogisticRegression, DecisionTreeClassifier and RuleListClassifier, and the README suggests substituting any of them for the EBM line without changing the surrounding code. For privacy-sensitive data, interpret.privacy provides DPExplainableBoostingClassifier and DPExplainableBoostingRegressor, constructed with epsilon and delta arguments, and the README states the explain_global() call is identical to the standard EBM.
Where This Package Will Not Help You
The glassbox path assumes you control model training. If your organization has already deployed a vendor model or a large neural network and you cannot retrain, EBM is irrelevant to you, and you are left with the blackbox explainers: SHAP Kernel Explainer, LIME, Morris Sensitivity Analysis and Partial Dependence. Those are perturbation-based or sampling-based methods, and the README does not make performance claims about them. Kernel SHAP in particular scales poorly with the number of features because it estimates Shapley values by sampling coalitions, so a wide feature set becomes expensive. The README gives no latency figures for any explainer, and nothing in the supplied material suggests these are designed for request-time serving. Treat them as analysis tools you run offline, not as a component in a prediction endpoint. A second limitation is structural: the exactness of EBM explanations depends on the model staying additive plus pairwise. The moment you push into 3-way interactions, the explanation surface grows and the per-feature reading gets harder. A third is the platform floor. Python 3.10+ is not negotiable per the README, so environments pinned to 3.9 need an upgrade before this package is even installable.
How It Differs From Reaching for SHAP Alone
The obvious alternative is the shap package by itself. The difference is not in the algorithm, since InterpretML wraps a Kernel SHAP explainer. The difference is in what you get when the explanation is approximate versus when it is the model. With SHAP on a blackbox, every explanation is a post-hoc estimate, and two runs with different sampling budgets can disagree. With EBM, the per-feature contributions are the model's own terms, so there is no sampling variance to argue about. That matters in a review meeting where someone asks whether the explanation is stable. The trade-off runs the other way too. SHAP works on any model you can call predict on, including models you did not train and cannot retrain. EBM requires you to train a new model from scratch and accept whatever accuracy that model reaches. If your existing XGBoost model is materially better than EBM on your data, adopting EBM means giving up accuracy in exchange for explanation quality, and that is a decision only your domain can make. InterpretML's own benchmark table suggests the gap is usually small, but the table is the project's, not yours.
Maintenance, Releases and Licence Terms
The repository is MIT licensed, which permits commercial use, modification and redistribution provided the copyright notice and permission notice are retained. That is a permissive licence with no copyleft obligation, and it is the same licence family most Python ML tooling uses. This is a description of the licence text, not legal advice; if you are embedding the package in a distributed product, have counsel confirm the notice requirements. On maintenance, the release cadence visible in the supplied material is active: v0.7.6 in late February 2026, v0.7.7 in mid March, v0.7.8 a few days later, with the last push to main in September 2026. The version numbers are still in the 0.7.x line, which means no 1.0 stability promise has been made and minor releases can carry API changes. The repository is not archived. The README lists equal-credit original authors from Microsoft Research and cites the GA2M lineage, so the project has an institutional origin rather than a single maintainer. What the supplied material does not show is a deprecation policy, a support window for older 0.7.x releases, or a compatibility matrix beyond the Python 3.10+ floor. Pin your version and read the release notes before upgrading.
Editorial conclusion
Adopt InterpretML if you need a model whose explanations are the model itself, or if you want SHAP, LIME and partial dependence behind one API. Do not adopt it if you need explanations generated at request time inside a latency budget, or if your model is a deep network whose internal features you cannot map back to columns. Before committing, verify two things: that EBM accuracy on your own data holds up against your current model, and that your Python version meets the 3.10+ floor, since the package will not install below it.
Community notes