Introduction

First, let's create explainers for random Forest model and linear model

library("DALEX")
library("randomForest")
library("ceterisParibus")
set.seed(59)

apartments_lm_model <- lm(m2.price ~ construction.year + surface + floor + 
                            no.rooms + district, data = apartments)

apartments_rf_model <- randomForest(m2.price ~ construction.year + surface + floor + 
                                      no.rooms + district, data = apartments)

explainer_rf <- explain(apartments_rf_model, 
                        data = apartmentsTest[,2:6], y = apartmentsTest$m2.price)
explainer_lm <- explain(apartments_lm_model, 
                        data = apartmentsTest[,2:6], y = apartmentsTest$m2.price)

Ceteris Paribus Plots

We will explain prediction for

new_apartment <- apartmentsTest[1, ]
new_apartment
##      m2.price construction.year surface floor no.rooms    district
## 1001     4644              1976     131     3        5 Srodmiescie
wi_rf <- what_if(explainer_rf, observation = new_apartment)
wi_rf
##       y_hat new_x             vname   x_quant quant relative_quant
## 0% 4255.354  1920 construction.year 0.6268889  0.00     -0.6268889
## 1% 4300.702  1921 construction.year 0.6268889  0.01     -0.6168889
## 2% 4301.926  1922 construction.year 0.6268889  0.02     -0.6068889
## 3% 4305.352  1923 construction.year 0.6268889  0.03     -0.5968889
## 4% 4305.352  1923 construction.year 0.6268889  0.04     -0.5868889
## 5% 4267.723  1924 construction.year 0.6268889  0.05     -0.5768889
##           label
## 0% randomForest
## 1% randomForest
## 2% randomForest
## 3% randomForest
## 4% randomForest
## 5% randomForest
plot(wi_rf, split = "variables", color = "variables", quantiles = FALSE)

plot of chunk unnamed-chunk-2

plot(wi_rf, split = "variables", color = "variables")

plot of chunk unnamed-chunk-2

plot(wi_rf)

plot of chunk unnamed-chunk-2

wi_lm <- what_if(explainer_lm, observation = new_apartment)
wi_lm
##           y_hat new_x             vname   x_quant quant relative_quant
## 1001   4832.833  1920 construction.year 0.6268889  0.00     -0.6268889
## 1001.1 4832.604  1921 construction.year 0.6268889  0.01     -0.6168889
## 1001.2 4832.375  1922 construction.year 0.6268889  0.02     -0.6068889
## 1001.3 4832.146  1923 construction.year 0.6268889  0.03     -0.5968889
## 1001.4 4832.146  1923 construction.year 0.6268889  0.04     -0.5868889
## 1001.5 4831.917  1924 construction.year 0.6268889  0.05     -0.5768889
##        label
## 1001      lm
## 1001.1    lm
## 1001.2    lm
## 1001.3    lm
## 1001.4    lm
## 1001.5    lm
plot(wi_lm, split = "variables", color = "variables", quantiles = FALSE)

plot of chunk unnamed-chunk-2

plot(wi_lm, split = "variables", color = "variables")

plot of chunk unnamed-chunk-2

plot(wi_lm)

plot of chunk unnamed-chunk-2

Ceteris Paribus - two models

plot(wi_rf, wi_lm, split = "variables", color = "models", quantiles = FALSE)

plot of chunk unnamed-chunk-3

plot(wi_rf, wi_lm, split = "variables", color = "models")

plot of chunk unnamed-chunk-3

plot(wi_rf, wi_lm)

plot of chunk unnamed-chunk-3

Interactive Ceteris Paribus Plots

library("ggiraph")

plot_interactive(wi_rf, split = "variables", color = "variables")
plot_interactive(wi_rf)

plot_interactive(wi_lm, split = "variables", color = "variables")
plot_interactive(wi_lm)

Interactive Ceteris Paribus Plots - two models

plot_interactive(wi_rf, wi_lm)
plot_interactive(wi_rf, wi_lm, split = "variables")