class: center, middle, inverse, title-slide .title[ #
An Overview of Visualization Techniques for Explainable Machine Learning ] .author[ ### Katherine Goode - ISU Graphics Group - April 10, 2020 ] --- <style> /* colors: #ffa41b, #000839, #005082, #00a8cc */ a, a > code { color: #ffa41b; text-decoration: none; } .remark-slide-content { background-color: #FFFFFF; border-top: 80px solid #005082; font-size: 20px; font-weight: 300; line-height: 1.5; padding: 1em 2em 1em 2em } .inverse { background-color: #000839; border-top: 80px solid #000839; text-shadow: none; background-position: 50% 75%; background-size: 150px; } .remark-slide-content > h1 { font-family: 'Skia'; font-weight: normal; font-size: 45px; margin-top: -95px; margin-left: -00px; color: #FFFFFF; } .title-slide { background-color: #FFFFFF; border-top: 80px solid #FFFFFF; background-image: none; } .title-slide > h1 { color: #111111; font-size: 40px; text-shadow: none; font-weight: 400; text-align: left; margin-left: 15px; padding-top: 80px; } .title-slide > h2 { margin-top: -25px; padding-bottom: -20px; color: #111111; text-shadow: none; font-weight: 300; font-size: 35px; text-align: left; margin-left: 15px; } .title-slide > h3 { color: #111111; text-shadow: none; font-weight: 300; font-size: 25px; text-align: left; margin-left: 15px; margin-bottom: -30px; } body { font-family: 'Skia'; } .remark-slide-number { font-size: 13pt; font-family: 'Skia'; color: #272822; opacity: 1; } .inverse .remark-slide-number { font-size: 13pt; font-family: 'Skia'; color: #FAFAFA; opacity: 1; } </style> <style type="text/css"> .tiny{font-size: 30%} .small{font-size: 50%} .medium{font-size: 75%} .left-code { color: #777; width: 40%; height: 92%; float: left; } .right-plot { width: 59%; float: right; padding-left: 1%; } </style> # Machine Learning Machine learning models may provide magical predictions,... <img src="./figures/wizard-cat.jpg" width="50%" style="display: block; margin: auto;" /> --- # Black Box Models ...but being able to explain how many machine learning models produce the predictions is not an easy task. <img src="./figures/confused-cat.jpg" width="60%" style="display: block; margin: auto;" /> --- # The Importance of Explanability <img src="./figures/nn.png" width="600px" style="display: block; margin: auto;" /> <img src="./figures/patient.jpeg" width="33%" /><img src="./figures/self-driving-car.jpg" width="33%" /><img src="./figures/court.jpg" width="33%" /> --- # Literature on Explanability **General trends I've noticed:** - Many recent papers - Often machine learning and computer science perspectives - Lots of European authors - [General Data Protection Regulation](https://en.wikipedia.org/wiki/General_Data_Protection_Regulation) (GDPR) implemented in 2018 - [Goodman and Flaxman (2016)](https://arxiv.org/abs/1606.08813): "It is reasonable to suppose that any adequate explanation would, at a minimum, provide an account of how input features relate to predictions, allowing one to answer questions such as: Is the model more or less likely to recommend a loan if the applicant is a minority?" **Key resources for this talk:** - [Interpretable Machine Learning](https://christophm.github.io/interpretable-ml-book/) by [Christoph Molnar](https://www.compstat.statistik.uni-muenchen.de/people/molnar/) - Corresponding R package: [iml](https://github.com/christophM/iml) - [Computational statistics working group](https://www.compstat.statistik.uni-muenchen.de/) at Ludwig-Maximilians-University in Munich led by [Bernd Bischl](https://www.compstat.statistik.uni-muenchen.de/people/bischl/) ([mlr](https://mlr.mlr-org.com/) and [mlr3](https://mlr3.mlr-org.com/) R packages) --- # The Plan... **Setting the Stage** - Definitions and Philosophical Aspects **Methods** - Model Agnostic - Random Forest Specific - Neural Network Specific **Concluding Thoughts** - Additional Methods and Resources - A Cautionary Conclusion --- class: inverse, middle, center # Definitions and Philosophical Aspects --- # Explainability versus Interpretability There are not agreed upon definitions... .medium[**[Interpretable Machine Learning (Molnar 2020)](https://christophm.github.io/interpretable-ml-book/)** - "I will use both the terms **interpretable** and **explainable** interchangeably" - "I will use “**explanation**” for explanations of individual predictions." **[Methods for Interpreting and Understanding Deep Neural Networks (Montavon, Samek, and Muller 2017)](https://arxiv.org/pdf/1706.07979.pdf)** - "**post-hoc interpretability**, i.e. a trained model is given and our goal is to understand what the model predicts (e.g. categories) in terms what is readily interpretable (e.g. the input variables)" - "Post-hoc interpretability should be contrasted to incorporating **interpretability directly** into the structure of the model..." - "...when using the word “**understanding**”, we refer to a functional understanding of the model, in contrast to a lower-level mechanistic or algorithmic understanding of it." - also distinguish between **interpretation** and **explanation** **[The Mythos of Model Interpretability (Lipton 2017)](https://arxiv.org/pdf/1606.03490.pdf)** - Paper dedicated to the philosophical discussion of what interpretability is in machine learning **[Explaining Explanations: An Overview of Interpretability of Machine Learning (Gilpin et. al. 2019)](https://arxiv.org/pdf/1806.00069.pdf)** - "We take the stance that **interpretability** alone is insufficient. In order for humans to trust black-box methods, we need **explainability** – models that are able to summarize the reasons for neural network behavior, gain the trust of users, or produce insights about the causes of their decisions" - Implies that you need both interpretability and explainability? ] --- # Explainability versus Interpretability My definitions (based on a conversation with **[Nick Street](https://tippie.uiowa.edu/people/nick-street)** (University of Iowa))... .pull-left[ **Interpretability** = the ability to directly use the parameters of a model to understand the mechanism of how the model makes predictions - a linear model coefficient: indicates the amount the response variable changes based on a change in the predictor variable <br> $$\hat{y}=\hat{\beta}_0+\hat{\beta}_1x_1+\cdots+\hat{\beta}_px_p $$ ] .pull-right[ **Explainability** = the ability to use the model in an indirect manner to understand the relationships in the data captured by the mode - LIME: model agnostic method that uses a surrogate model <div class="figure"> <img src="./figures/lime.png" alt="Figure from LIME paper (Ribeiro 2016)" width="276" /> <p class="caption">Figure from LIME paper (Ribeiro 2016)</p> </div> ] --- # Should we explain black-box models? [**Stop Explaining Black Box Machine Learning Models for High Stakes Decisions and Use Interpretable Models Instead**](https://arxiv.org/pdf/1811.10154.pdf) by [**Cynthia Rudin**](https://users.cs.duke.edu/~cynthia/): - Debunks the “accuracy-interpretability trade-off” myth <img src="./figures/trade-off.png" width="25%" style="display: block; margin: auto;" /> - "Explanations must be wrong. They cannot have perfect fidelity with respect to the original model. If the explanation was completely faithful to what the original model computes, the explanation would equal the original model..." - "...it is possible that the explanation leaves out so much information that it makes no sense." - Rudin has worked on developing machine learning models with direct interpretability --- class: inverse, middle, center # Model Agnostic Methods --- # Overview of Model Agnostic Methods .pull-left[ **Advantages** - Can be applied to any model - Convenient if comparing various types of predictive models <br> **Disadvantages** - Must work with any model ] .pull-right[ <div class="figure"> <img src="./figures/agnostic.png" alt="From Interpretable Machine Learning (Molnar)" width="150%" /> <p class="caption">From Interpretable Machine Learning (Molnar)</p> </div> ] --- # Washington D.C. Bike Rentals Example data in Interpretable Machine Learning - can be accessed [here](https://github.com/christophM/interpretable-ml-book/blob/master/data/bike.RData) ```r bike <- load("data/bike.RData") data(bike) # Fit a random forest bike_mod = randomForest::randomForest(x = bike %>% dplyr::select(-cnt), y = bike$cnt) ```
--- class: inverse, center, middle # Model Agnostic Methods: ## .center[Prediction Visualizations] --- # Partial Dependence Plots .tiny[[Friedman 2001](https://projecteuclid.org/euclid.aos/1013203451)] **Purpose**: Visualize marginal relationship between one (or two) predictors and model predictions **Estimated partial dependence function:** `$$\hat{f}_{x_{int}}(x_{int})=\frac{1}{n}\sum_{i=1}^n\hat{f}(x_{int},x^{(i)}_{other})$$` - `\(\hat{f}=\)` machine learning model fit using predictor variables - `\(x_{int}=\)` value of the predictor of interest - `\(x^{(i)}_{other}=\)` vector of training data values of other predictors in the model for observation `\(i\)` ![](slides_files/figure-html/unnamed-chunk-11-1.png)<!-- --> --- # Partial Dependence Plots in iml .pull-left[ ```r # Create a "predictor" object that # holds the model and the data bike_pred = * Predictor$new( model = bike_mod, data = bike) # Compute the partial dependence # function for temp and windspeed pdp = * FeatureEffect$new( predictor = bike_pred, feature = c("hum", "temp"), method = "pdp") # Create the partial dependence plot *pdp$plot() + viridis::scale_fill_viridis( option = "D") + labs(x = "Humidity", y = "Temperature", fill = "Prediction") ``` ] .pull-right[ **Partial dependence plot with two variables** ![](slides_files/figure-html/unnamed-chunk-13-1.png)<!-- --> ] --- # Interactive PDPs .tiny[[Krause, Perer, and Ng 2016](https://josuakrause.github.io/info/prospector.html)] <img src="./figures/prospector.png" width="100%" /> --- # Individual Conditional Expectation .tiny[[Goldstein et. al. 2013](https://arxiv.org/pdf/1309.6392.pdf)] **Purpose**: Similar to partial dependence plots, but consider each observation separately instead of taking an average. **Estimated individual conditional expectation function:** `$$\hat{f}^{(i)}_{x_{int}}(x_{int})=\hat{f}(x_{int},x^{(i)}_{other})$$` - `\(\hat{f}=\)` machine learning model fit using predictor variables - `\(x_{int}=\)` value of the predictor of interest - `\(x^{(i)}_{other}=\)` vector of training data values of other predictors in the model for observation `\(i\)` ![](slides_files/figure-html/unnamed-chunk-15-1.png)<!-- --> --- # ICE Plots in iml .left-code[ ```r # Compute the ICE function ice = * FeatureEffect$new( predictor = bike_pred, feature = "temp", method = "ice") # Create the plot *plot(ice) ``` ] .right-plot[ .center[**ICE plot for temperature**] ![](slides_files/figure-html/unnamed-chunk-17-1.png)<!-- --> ] --- # Centered ICE Plots "Sometimes it can be hard to tell whether the ICE curves differ between individuals because they start at different predictions. A simple solution is to center the curves at a certain point in the feature and display only the difference in the prediction to this point." - Molnar .left-code[ ```r # Center the ICE function for # temperature at the # minimum temperature and # include the pdp ice_centered = * FeatureEffect$new( predictor = bike_pred, feature = "temp", center.at = min(bike$temp), method = "pdp+ice") # Create the plot *plot(ice_centered) ``` ] .right-plot[ ![](slides_files/figure-html/unnamed-chunk-19-1.png)<!-- --> ] --- # Addressing Correlation and Interactions .pull-left[ **Accumulated Local Effects (ALE) Plots** [Apley and Zhu (2016)](https://arxiv.org/pdf/1612.08468.pdf) - Similar to PDPs: consider how a feature influences predictions on average - In contrast to PDPs: faster to create and account for correlation ![](slides_files/figure-html/unnamed-chunk-20-1.png)<!-- --> ] .pull-right[ **Feature Interaction Plots** - Metrics that measure effect of interactions on the predictions - H-statistic [Friedman and Popescu (2008)](https://projecteuclid.org/euclid.aoas/1223908046) - Variable Interaction Networks (VIN) [Hooker (2004)](http://faculty.bscb.cornell.edu/~hooker/VIN-kdd.pdf) - PDPs based on interactions [Greenwell et. al. (2018)](https://arxiv.org/pdf/1805.04755.pdf) ![](slides_files/figure-html/unnamed-chunk-21-1.png)<!-- --> ] --- # ALE and Interaction Plots in iml Code for the plots on the previous slide .pull-left[ **Accumulated Local Effects (ALE) Plot** ```r # Compute the ALEs *ale = FeatureEffect$new( predictor = bike_pred, feature = c("hum", "temp"), method = "ale", grid.size = 40) # Plot the ALEs *plot(ale) + scale_x_continuous( "Relative Humidity") + scale_y_continuous( "Temperature")+ viridis::scale_fill_viridis( option = "D") + labs(fill = "ALE") ``` ] .pull-right[ **Feature Interaction Plot** ```r # Compute the interaction metrics int = * Interaction$new( predictor = bike_pred, grid.size = 100, feature = "season") # Plot the interaction metrics *plot(int) + scale_x_continuous( "2-way interaction strength") ``` ] --- # Parallel Coordinate Plots Provide a nice overview of the predictions across **PCP plot with bike data** (made with [ggpcp](https://github.com/yaweige/ggpcp)) ![](slides_files/figure-html/unnamed-chunk-24-1.png)<!-- --> --- # Parallel Coordinate Plots in ggpcp Code for the plot on the previous slide ```r # Determine order of features bike_ft_ordered = bike_vi %>% arrange(desc(IncNodePurity)) %>% pull(var) # Create the pcp bike %>% mutate(rf_pred = predict(bike_mod)) %>% ggplot(aes(color = rf_pred)) + * ggpcp::geom_pcp(aes(vars = dplyr::vars(all_of(bike_ft_ordered))), alpha = 0.4) + viridis::scale_color_viridis(option = "D") + labs(x = "Featured ordered by feature importance (left to right)", y = "Standardized Feature Value", color = "Random Forest Prediction") + theme(legend.position = "bottom") + guides(color = guide_colourbar(barwidth = 15)) ``` --- # Interactive Parallel Coordinate Plots .tiny[[Beckett (2018)](https://digitalcommons.usu.edu/gradreports/1335/)] R package [Rfviz] for interactive parallel coordinate plots with random forest models, but it could be extended to other machine learning models. <img src="./figures/rfviz.png" width="95%" /> --- class: inverse, center, middle # Model Agnostic Methods: ## .center[Feature Importance] --- # Permutation Feature Importance **Background** - Idea originally proposed by [Breiman (2001)](https://www.stat.berkeley.edu/~breiman/randomforest2001.pdf) for random forests - Adapted to be used with all models by [Fisher, Rudin, and Dominici (2018)](https://arxiv.org/pdf/1801.01489v1.pdf) - Call this measure the model class reliance **Concept** - Measure feature importance by seeing how much the prediction error is affected when a feature is permuted - important feature: one that affects the prediction error when changed - non-important feature: one that does not affect the prediction error when changed --- # Permutation Feature Importance in iml **Permutation feature importance of bike data random forest** .left-code[ ```r # Create the predictor # (seemingly FeatureImp # requires y) bike_pred = * Predictor$new( model = bike_mod, data = bike, y = bike$cnt) # Compute the feature # importance values bike_imp = * FeatureImp$new( predictor = bike_pred, loss = 'mae') # Plot the feature # importance values *plot(bike_imp) ``` ] .right-plot[ ![](slides_files/figure-html/unnamed-chunk-28-1.png)<!-- --> Point = median permutation importance Bars = 5th and 95th permutation importance quantiles ] --- # Permutation FI with p-values .tiny[[Altmann et. al. (2010)](https://academic.oup.com/bioinformatics/article/26/10/1340/193348)] - Permutation based feature importance method that returns p-values - Example from the paper comparing Gini importance values to their permutation feature importance method with p-values <img src="./figures/pfip.png" width="885" /> --- # More Feature Importance .tiny[[Casalicchio, Molnar, and Bischl (2019)](https://arxiv.org/pdf/1804.06620.pdf)] .pull-left[ Three additional measures for feature importance: **Individual Conditional Importance (ICI)** - "local" permutation feature importance metric - similar to ICE plots but "visualize the expected (conditional) feature importance instead of the expected (conditional)" prediction" **Partial Importance (PI)** - aggregate of ICI values **Shapley Feature Importance (SFIMP)** - based on Shapley values ] .pull-right[ <img src="./figures/ici.png" width="333" /> ICI and PI available in the [featureImportance](https://github.com/giuseppec/featureImportance) R package ] --- class: inverse, center, middle # Model Agnostic Methods: ## .center[Surrogate Models] --- # Global Surrogate Models .pull-left[ **Idea**: Use an interpretable model to explain a black-box model **Procedure**: 1. Train a black-box model 2. Obtain predictions from black-box model on a set of data (training data or other) 3. Fit an interpretable model (linear regression model, tree, etc) .center[black-box predictions ~ predictor variables] **Cautions**: How to know if the global surrogate is a good enough approximation of the complex model? ] .pull-right[ ![](slides_files/figure-html/unnamed-chunk-31-1.png)<!-- --> ] --- # Using a Tree as the Global Surrogate Using a classification tree as the global surrogates for the random forest model fit to the sine data .left-code[ ![](slides_files/figure-html/fit-tree-1.png)<!-- --> ] .right-plot[ ![](slides_files/figure-html/tree-boundaries-1.png)<!-- --> ] --- # Local Surrogate Model: LIME .tiny[[Ribeiro, Singh, Guestrin (2016)](https://arxiv.org/pdf/1602.04938.pdf)] **LIME** = Local Interpretable Model-Agnostic Explanations - Consider one prediction of interest - Use a surrogate model to explain the black-box model in a "local" region about a point of interest <img src="./figures/concept-plot-good-1.png" width="100%" style="display: block; margin: auto;" /> --- # LIME in R .pull-left[ **[lime](https://github.com/thomasp85/lime)** - written by Thomas Pedersen - package for implementing LIME ![](slides_files/figure-html/unnamed-chunk-33-1.png)<!-- --> ] .pull-right[ **[limeaid](https://github.com/goodekat/limeaid)** - written by me 😄 - package for visually understanding and assessing LIME ![](slides_files/figure-html/unnamed-chunk-34-1.png)<!-- --> ] --- class: inverse, center, middle # Model Agnostic Methods: ## .center[Game Theory Based Method] --- # Shapley Values .tiny[[Štrumbelj and Kononenko (2014)](https://link.springer.com/article/10.1007/s10115-013-0679-x)] **Idea**: Use game theory to determine contributions of predictor variables to one prediction of interest **Game Theory Connection**: [Shapley values](https://www.rand.org/content/dam/rand/pubs/research_memoranda/2008/RM670.pdf) are "a method for assigning payouts to players depending on their contribution to the total payout." | Game Theory Term | Machine Learning Meaning | | ----------- | ---------------- | | collaborative game | machine learning model prediction for one prediction | | players | predictor variables | | payout | contribution of a predictor variable to the prediction | | gain | actual prediction - average prediction for all instances | <img src="./figures/Shapley.png" width="50%" style="display: block; margin: auto;" /> --- # Shapley Values in iml **Interpretation**: "The value of the `\(j\)`th feature contributed `\(\phi_j\)` to the prediction of this particular instance compared to the average prediction for the dataset." .pull-left[ ```r # Select obs of interest and perpare data x_int = bike[names(bike) != 'cnt'][285,] # Compute prediction values avg_pred = mean(predict(bike_mod)) actual_pred = predict(bike_mod, newdata = bike[names(bike) != 'cnt'][285,]) diff_pred = actual_pred - avg_pred # Compute shapley values predictor = Predictor$new(model = bike_mod, data = bike[names(bike) != 'cnt']) shapley = * Shapley$new(predictor = predictor, * x.interest = x_int) # Create the plot plot(shapley) + scale_y_continuous("Feature value contribution") + ggtitle(sprintf("Actual prediction: %.0f\nAverage prediction: %.0f\nDifference: %.0f", actual_pred, avg_pred, diff_pred)) ``` ] .pull-right[ **Shapley values for one observation from the bike rental random forest** ![](slides_files/figure-html/unnamed-chunk-37-1.png)<!-- --> ] --- class: inverse, middle, center # Random Forest Specific Techniques --- # Quick intro to random forests **Idea**: Aggregation of many trees (bootstrap data and randomly select predictors for each tree) <img src="./figures/rf.png" width="90%" style="display: block; margin: auto;" /> --- # Feature Importance Plot **Mean decrease in impurity (gini importance)**: measures the average improvement in node purity for a predictor variable .pull-left[ ```r # Extract the importance values bike_rfimp <- bike_mod$importance # Put the feature importance in a df bike_vi <- data.frame(var = rownames(bike_rfimp), bike_rfimp) %>% arrange(IncNodePurity) # Create a feature importance plot bike_vi %>% mutate(var = factor(x = var, levels = bike_vi$var)) %>% ggplot(aes(x = var, y = IncNodePurity)) + geom_col() + coord_flip() + labs(x = "Feature") ``` ] .pull-right[ **Bike random forest feature importance plot** ![](slides_files/figure-html/unnamed-chunk-40-1.png)<!-- --> ] --- # Visualizing Sets of Trees .tiny[[Simon Urbanek (2008)](https://haralick.org/DV/Handbook_of_Data_Visualization.pdf)] **Cut points from all trees for two predictor variables** <img src="./figures/rf-splits.png" width="80%" style="display: block; margin: auto;" /> --- # Visualizing Sets of Trees .tiny[[Simon Urbanek (2008)](https://haralick.org/DV/Handbook_of_Data_Visualization.pdf)] **Trace plots of all trees in a random forest** <img src="./figures/rf-trace.png" width="80%" style="display: block; margin: auto;" /> --- # ggRandomForests .tiny[[Ehrlinger (2015)](https://arxiv.org/pdf/1501.07196.pdf)] R package for visually exploring random forests fit using randomForests or randomForest ```r library(ggRandomForests) ``` .pull-left[ **Out-of-bag errors versus number of trees** ```r plot(gg_error(bike_mod)) + theme_gray() ``` ![](slides_files/figure-html/unnamed-chunk-44-1.png)<!-- --> ] .pull-right[ **Variable importance plot** ```r plot(gg_vimp(bike_mod)) + theme_gray() ``` ![](slides_files/figure-html/unnamed-chunk-45-1.png)<!-- --> ] --- # rfviz .tiny[[Beckett (2018)](https://chrisbeckett8.github.io/Rfviz.html)] Previously mentioned...R package for interacting with parallel coordinate plots for random forests ```r # Prepare data rfprep <- rfviz::rf_prep(x = bike[names(bike) != "cnt"], y = bike$cnt) # View plots rfviz::rf_viz(rfprep, input = TRUE, imp = TRUE, cmd = TRUE, hl_color = 'black') ``` <img src="./figures/rfviz-bike.png" width="70%" style="display: block; margin: auto;" /> --- # Forest Floor Visualizations .tiny[[Welling et. al. (2016)](https://arxiv.org/pdf/1605.09196.pdf)] .pull-left[ - Method that creates plots similar to partial dependence plots - From the paper: "*We suggest to first use feature contributions, a method to decompose trees by splitting features, and then subsequently perform projections. The advantages of forest floor over partial dependence plots is that interactions are not masked by averaging.*" - R package: [`forestFloor`](https://github.com/sorhawell/forestFloor) - I struggled to get it to work... ] .pull-right[ **Forest floor plots** (figure from the paper) <img src="./figures/forestfloor.png" width="80%" style="display: block; margin: auto;" /> ] --- class: inverse, middle, center # Neural Network Specific Techniques --- # Quick intro to random forests **Idea**: Combination of many non-linear regression models <img src="./figures/nn-concept.png" width="80%" style="display: block; margin: auto;" /> .small[Image [source](http://www.datastuff.tech/machine-learning/convolutional-neural-networks-an-introduction-tensorflow-eager/)] --- # Feature Visualization .tiny[[overview article by Olah, Mordvintsev, and Schubert (2017)](https://distill.pub/2017/feature-visualization/)] **Idea**: Determine values of predictor variables that maximize activation functions at a specific "location" in the neural network **Formula Version**: For a node in the network: `\(\ \ \ \underset{x}{\arg\max} \ f_j(x, w_j)\)` - `\(x\)` = values of predictor variables - `\(w_j\)` = estimated weights at node `\(j\)` - `\(f_j\)` = activation function used at node `\(j\)` <img src="./figures/feature-viz.png" width="90%" style="display: block; margin: auto;" /> .small[Image from [Olah, Mordvintsev, and Schubert (2017)](https://distill.pub/2017/feature-visualization/)] --- # Saliency Maps .tiny[[Simonyan, (2014)](https://arxiv.org/abs/1312.6034)] .pull-left[ **Purpose**: To identify the features that are important for making a prediction for a single observation **Concept**: Makes use of back-propagation algorithm to determine gradient values associated with a predictor variable which indicate how much a predictor variable influences the prediction **In practice**: - Commonly used with convolutional neural networks to identify important pixels in an image - Many algorithms for creating saliency maps ] .pull-right[ <img src="./figures/saliency.png" width="95%" style="display: block; margin: auto;" /> .center[.small[Image from [Simonyan, Vedaldi, and Zisserman (2014)](https://arxiv.org/abs/1312.6034)]] ] --- # Grand Tours .tiny[[Li, Zhao, and Scheidegger (2020)](https://distill.pub/2020/grand-tour/)] **Idea**: Make use of the Grand Tour to visualize behaviors of neural networks <img src="./figures/grand-tour.png" width="90%" style="display: block; margin: auto;" /> .small[Image from [Simonyan, Vedaldi, and Zisserman (2014)](https://distill.pub/2020/grand-tour/)] --- class: inverse, middle, center # Additional Methods and Resources --- # More Methods .pull-left[ **Model Agnostic Methods** - Scoped Rules (Anchors) [Ribeiro, Singh, Guestrin (2018)](https://homes.cs.washington.edu/~marcotcr/aaai18.pdf) - SHAP [Lundberg and Lee (2017)](https://papers.nips.cc/paper/7062-a-unified-approach-to-interpreting-model-predictions) - Sensitivity Analyses [Cortez and Embrechts (2013)](https://www.sciencedirect.com/science/article/pii/S0020025512007098) **Example-Based Explanations** - Counterfactual examples - Adversarial examples - Prototypes and criticisms - Influential instances ] .pull-left[ **Model Specific** - Neural networks: See articles on [Distill](https://distill.pub/) - Tree ensembles: - [da Silva, Cook, and Lee (2017)](https://arxiv.org/pdf/1704.02502.pdf) - [Hara and Hayashi (2016)](https://arxiv.org/pdf/1606.05390.pdf) **General Model Viz** - Visualizing statistical models: Removing the blindfold [Wickham, Cook, and Hofmann (2015)](https://onlinelibrary.wiley.com/doi/abs/10.1002/sam.11271) <br> Many more.... ] --- # Overviews **Additional Resources for Overviews for Explainable Machine Learning** [Gilpin et. al. (2019)](https://arxiv.org/pdf/1806.00069.pdf) - Explaining Explanations: An Overview of Interpretability of Machine Learning [Mohseni, Zarei, and Ragan (2019)](https://arxiv.org/pdf/1811.11839.pdf) - A Multidisciplinary Survey and Framework for Design and Evaluation of Explainable AI Systems [Ming (2017)](http://www.cse.ust.hk/~huamin/explainable_AI_yao.pdf) - A Survey on Visualization for Explainable Classifiers [Guidotti et. al. (2018)](https://arxiv.org/pdf/1802.01933.pdf) - A Survey Of Methods For Explaining Black Box Models --- class: inverse, middle, center # A Cautionary Conclusion --- # Some thoughts on EML .pull-left[ **Review of method types** - model agnostic versus model specific - global versus local explanations - static versus interactive - models versus metrics **Good News** - many methods to try out - lots of research opportunities - opportunity for creating useful visualizations ] .pull-right[ **Cautions** - this is a relatively new field - unsure which are the most trusted methods - a seemingly simple method may not be so simple - model based methods - add an additional layer of complexity to an already complex situation - almost seems naive to expect a simple model to capture the complex relationship in a black-box model ]