Objetivo del presente rmarkdown

El presente script tiene como objetivo abordar ligeramente el proceso de explicación del modelo ajustado (Explanatory model analysis)

” Explanatory Model Analysis for models is whats Exploratory Data Analysis is for Data ”

Model agnostic approach relationship between the input and the output level explanations vs global explanations

library(tidyverse)
library(DALEX)
library(glue)

Instanciando el objeto que explica el modelo

modelo_1_1_explained = explain(
                        modelo_1_1,
                        data = Train,
                        y = Train$Loan.Status,
                        label = "Logistic Regression"
                      )
## Preparation of a new explainer is initiated
##   -> model label       :  Logistic Regression 
##   -> data              :  34209  rows  18  cols 
##   -> target variable   :  34209  values 
##   -> predict function  :  yhat.glm  will be used (  default  )
##   -> predicted values  :  No value for predict function target column. (  default  )
##   -> model_info        :  package stats , ver. 4.1.2 , task classification (  default  ) 
##   -> predicted values  :  numerical, min =  0.0001496554 , mean =  0.7941588 , max =  0.9999995  
##   -> residual function :  difference between y and yhat (  default  )
##   -> residuals         :  numerical, min =  -0.9780313 , mean =  -0.001794265 , max =  0.6073983  
##   A new explainer has been created!
class(modelo_1_1_explained)
## [1] "explainer"

Explicaciones desde la libreria DALEX para una observación random en particular:

single_observation = Train[sample(1:nrow(Train), 1), ]
print(glue("Id observación {sample(1:nrow(Train), 1)}"))
## Id observación 4733
modelo_1_1_explained %>% predict(single_observation)
##     12601 
## 0.8316516

Salida de consola y código no.1 (Prueba para solo una observación aleatoria)

Explicaciones desde la libreria DALEX para una observación en con respuesta Fully Paid:

#single_observation = Train[sample(1:nrow(Train), 1), ]
single_observation = Train[8972, ]
modelo_1_1_explained %>% predict(single_observation)
##      8972 
## 0.8260226
modelo_1_1_explained %>% predict_parts(new_observation = single_observation) %>% plot(title="Break-Down for single obs with Fully Paid response")

Gráfica no. 1 (Break down para solo una observación con respuesta Fully Paid)

Identificando los perfiles “ceteris paribus” para la observación con respuesta Fully Paid

Gráfica no. 2 (Perfil para solo una observación con respuesta Fully Paid) Gráfica no. 3 (Perfil para solo una observación con respuesta Fully Paid) Gráfica no. 4 (Perfil para solo una observación con respuesta Fully Paid) Gráfica no. 5 (Perfil para solo una observación con respuesta Fully Paid)

Explicaciones desde la libreria DALEX para una observación en con respuesta “Charged off”:

single_observation = Train[11434, ]
modelo_1_1_explained %>% predict(single_observation)
##        11434 
## 0.0003637261
modelo_1_1_explained %>% predict(single_observation)
##        11434 
## 0.0003637261
modelo_1_1_explained %>% predict_parts(new_observation = single_observation) %>% plot(title="Break-Down for single obs with Charged Off response")

Gráfica no. 6 (Break down para solo una observación con respuesta Fully Paid)

plot_cf1 = modelo_1_1_explained %>% predict_profile(new_observation = select(single_observation, -c('ID'))) %>% plot(title="Break-Down Charged Off response",  variables=c("Annual.Income"))
plot_cf_2 = modelo_1_1_explained %>% predict_profile(new_observation = select(single_observation, -c('ID'))) %>% plot(title="Break-Down Charged Off response",  variables=c("Credit.Score"))
plot_cf_3= modelo_1_1_explained %>% predict_profile(new_observation = select(single_observation, -c('ID'))) %>% plot(title="Break-Down Charged Off response",  variables=c("Current.Loan.Amount"))
plot_cf_4= modelo_1_1_explained %>% predict_profile(new_observation = select(single_observation, -c('ID'))) %>% plot(title="Break-Down Charged Off response",  variables=c("Monthly.Debt"))

Gráfica no. 7 (Perfil para solo una observación con respuesta Charged off)

Gráfica no. 8 (Perfil para solo una observación con respuesta Charged off) Gráfica no. 9 (Perfil para solo una observación con respuesta Charged off) Gráfica no. 10 (Perfil para solo una observación con respuesta Charged off)