Escolar Documentos
Profissional Documentos
Cultura Documentos
1 Introdução 2
1.1 Explorando os dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.1 Importando os dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.2 Conhecendo os dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.3 Limpando os dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Visualizando os dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Conclusões preliminares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 Desenvolvimento 7
2.1 Definição de objetivos SMART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Modelagem supervisionada usando Tidymodels . . . . . . . . . . . . . . . . . . . . . 8
2.2.1 Método 1: Regressão Logística . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2.2 Método 2: Random Forest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.3 Método 3: Decision Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2.4 Método 4: XGBoost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3 Escolha do modelo e Predição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3 Conclusão 18
1 INTRODUÇÃO
Esse trabalho tem por objetivo fazer uma análise preditiva aplicando o ciclo da ciência de dados.
O material base é um dataframe disponibilizado online que dispõe informações bancárias sobre
os clientes. Entre elas, podemos encontrar dados característicos das pessoas e também dados
relacionados com o banco, como salário e se abandonaram ou não o serviço em questão.O capítulo
1 deste trabalho apresenta as etapas de importação de dados, tidy e, ainda, dentro da parte
exploratória, tem uma primeira limpeza e visualização de dados. Por fim, retiram‐se as conclusões
preliminares que servirão de base para os capítulos seguintes.
Sendo assim, importamos o arquivo em formato CSV para o RStudio, através das funções
disponibilizadas pela biblioteca tidyverse:
library(dplyr)
library(tidyverse)
library(tidymodels)
library(tidyverse)
library(knitr)
data(mtcars)
mtcars %>%
head() %>%
kable(caption = "Exemplo de Tabela com dados")
A partir da primeira análise dos dados, de forma a entender sua estrutura e relevância, é possível
definir alguns aspectos e características que precisam ser realizadas a fim de simplificar e melhorar
o dataset.
Com os dados acima, algumas alterações podem ser feitas para facilitar a análise:
• Dentre as variáveis do tipo character, suas análises nos serão úteis se as considerarmos como
factors.
Objetivo 2: transformar as variáveis Geography e Gender em factor.
Visualizando a porcentagem total de clientes que abandonaram o serviço VS. a que manteve:
60%
40%
20%
0%
Manteve Abandonou
75%
50%
25%
0%
France Germany Spain
75%
50%
25%
0%
Female Male
75%
50%
25%
0%
Sem cartão Com cartão
75%
50%
25%
0%
Inativo Ativo
numofproducts tenure
4 10.0
3 7.5
5.0
2 2.5
1 0.0
ManteveAbandonou ManteveAbandonou
exited
• Cartão de crédito: Não há diferença aparente entre clientes com ou sem cartão de crédito;
• Idade: parece haver uma relação de que os clientes que abandonam são, em média, mais
velhos do que os clientes que não o fazem;
• Saldo: O saldo médio de clientes que saem e permanecem são semelhantes. No entanto,
aqueles que abandonam a empresa tendem a ter um saldo maior;
• Pontuação de crédito: não parece haver muita diferença em relação à pontuação de crédito;
• Salário estimado: novamente, não parece haver muita diferença em relação ao salário;
• Posse: há uma distribuição mais ampla de estabilidade entre os clientes que mudam, parece
que clientes novos e antigos podem ter maior probabilidade de desistir.
2 DESENVOLVIMENTO
O capítulo 2, Desenvolvimento, apresenta ainda a fase exploratória, aplicando os modelos sugeridos
a partir dos objetivos já apresentados. São eles: regressão logística, random forest, Árvore de
Decisão e XGBoost para previsão de churn. Para a aplicação dos métodos, é importante destacar
que os dados precisarão ser divididos entre dataframes de teste e outros de análise para que
possamos identificar acurácia dos modelos. Sendo assim será utilizado a função split dentro do
cronograma como o primeiro passo para a organização dos dados.
Ainda, define‐se os objetivos para as análises seguintes. Para realizar as previsões visadas por este
trabalho, o método aplicado será o das etapas de um projeto de Data Science, proposto por H.
Wickham e g. Grolemund (2017).
• Identificar aquele que melhor se encaixa de acordo com os dados e o problema a partir da
comparação das métricas de classificação.
Para isto, vamos selecionar apenas algumas colunas de interesse e criar um novo objeto
denominado churn_df_mod.
set.seed(1234)
churn_split <- initial_split(churn_df_mod, strata=exited)
Como previamente já explicado, para aprimorar a robustez das nossas estimações, iremos usar um
procedimento denominado k‐fold cross validation ou validação cruzada.
Vamos treinar um modelo de Regressão Logística (usando glm), logo um de Árvore de Decisão
(usando rpart), um modelo XGBoost (usando xgboost) e finalmente um de Random Forest (usando
ranger).
xgb_spec <-
boost_tree() %>%
collect_metrics(glm_rs)
# A tibble: 4 x 6
.metric .estimator mean n std_err .config
<chr> <chr> <dbl> <int> <dbl> <chr>
1 accuracy binary 0.809 10 0.00422 Preprocessor1_Model1
2 roc_auc binary 0.767 10 0.00433 Preprocessor1_Model1
3 sensitivity binary 0.962 10 0.00242 Preprocessor1_Model1
4 specificity binary 0.208 10 0.00960 Preprocessor1_Model1
glm_rs %>%
conf_mat_resampled()
# A tibble: 4 x 3
Prediction Truth Freq
<fct> <fct> <dbl>
1 Manteve Manteve 575.
2 Manteve Abandonou 121
3 Abandonou Manteve 22.5
4 Abandonou Abandonou 31.7
glm_rs %>%
collect_predictions() %>%
group_by(id) %>%
roc_curve(exited, .pred_Manteve) %>%
1.00
id
Fold01
0.75 Fold02
Fold03
sensitivity
Fold04
0.50 Fold05
Fold06
Fold07
0.25 Fold08
Fold09
Fold10
0.00
0.00 0.25 0.50 0.75 1.00
1 − specificity
A Randon Forest nada mais é do que uma extensão do modelo de Decision Tree. De forma prática,
esse modelo cria inúmeras árvores de decisão de maneira aleatória dentro das diversas variáveis
para tomada de decisão e previsão. A partir disso, cada uma dessas árvores é utilizada como escolha
no resultado, sendo definida aquela que apresentar o melhor resultado.
collect_metrics(rf_rs)
# A tibble: 4 x 6
.metric .estimator mean n std_err .config
<chr> <chr> <dbl> <int> <dbl> <chr>
1 accuracy binary 0.837 10 0.00436 Preprocessor1_Model1
2 roc_auc binary 0.795 10 0.00388 Preprocessor1_Model1
3 sensitivity binary 0.971 10 0.00244 Preprocessor1_Model1
4 specificity binary 0.310 10 0.00776 Preprocessor1_Model1
# A tibble: 4 x 3
Prediction Truth Freq
<fct> <fct> <dbl>
1 Manteve Manteve 580
2 Manteve Abandonou 105.
3 Abandonou Manteve 17.2
4 Abandonou Abandonou 47.4
rf_rs %>%
collect_predictions() %>%
group_by(id) %>%
roc_curve(exited, .pred_Manteve) %>%
autoplot()
1.00
id
Fold01
0.75 Fold02
Fold03
sensitivity
Fold04
0.50 Fold05
Fold06
Fold07
0.25 Fold08
Fold09
Fold10
0.00
0.00 0.25 0.50 0.75 1.00
1 − specificity
Como o próprio nome referência, a árvore de decisão é um método estatístico de previsão que
estima um mapa dos possíveis resultados de uma série de possíveis resultados. De forma geral,
esse modelo leva em conta diversas variáveis condizentes com uma previsão e caracteriza, a partir
de diferentes métricas, o peso para cada ação condizente com um resultado. De forma geral, o
modelo atua com diferentes “nós”, onde cada um deles define diferentes resultados. Dentro de
cada um desses “nós” existem probabilidades atreladas a uma decisão ou a uma variável que podem
se ramificar em mais variáveis ou decisões e dessa forma uma “árvore” de decisão é criada
collect_metrics(tree_rs)
# A tibble: 4 x 6
.metric .estimator mean n std_err .config
<chr> <chr> <dbl> <int> <dbl> <chr>
1 accuracy binary 0.833 10 0.00408 Preprocessor1_Model1
2 roc_auc binary 0.711 10 0.00583 Preprocessor1_Model1
3 sensitivity binary 0.976 10 0.00366 Preprocessor1_Model1
4 specificity binary 0.271 10 0.0127 Preprocessor1_Model1
tree_rs %>%
conf_mat_resampled()
# A tibble: 4 x 3
Prediction Truth Freq
<fct> <fct> <dbl>
1 Manteve Manteve 583.
2 Manteve Abandonou 111.
3 Abandonou Manteve 14.3
4 Abandonou Abandonou 41.5
tree_rs %>%
collect_predictions() %>%
group_by(id) %>%
roc_curve(exited, .pred_Manteve) %>%
autoplot()
0.75 Fold02
Fold03
sensitivity
Fold04
0.50 Fold05
Fold06
Fold07
0.25 Fold08
Fold09
Fold10
0.00
0.00 0.25 0.50 0.75 1.00
1 − specificity
Este modelo é definido como um algoritmo de aprendizado máquina baseado em árvores de decisão
aplicando uma estrutura de regressões na realização dos seus cálculos. Sua aplicação envolve desde
os conceitos básicos de regressão até o mais complexo de árvores de decisão, todos esses modelos
são a base que com a técnicas de otimização de software e hardware resultam nesse modelo
complexo de previsão.
doParallel::registerDoParallel()
collect_metrics(glm_rs)
# A tibble: 4 x 6
.metric .estimator mean n std_err .config
<chr> <chr> <dbl> <int> <dbl> <chr>
1 accuracy binary 0.809 10 0.00422 Preprocessor1_Model1
2 roc_auc binary 0.767 10 0.00433 Preprocessor1_Model1
3 sensitivity binary 0.962 10 0.00242 Preprocessor1_Model1
4 specificity binary 0.208 10 0.00960 Preprocessor1_Model1
# A tibble: 4 x 3
Prediction Truth Freq
<fct> <fct> <dbl>
1 Manteve Manteve 573
2 Manteve Abandonou 98.5
3 Abandonou Manteve 24.2
4 Abandonou Abandonou 54.2
xgb_rs %>%
collect_predictions() %>%
group_by(id) %>%
roc_curve(exited, .pred_Manteve) %>%
autoplot()
1.00
id
Fold01
0.75 Fold02
Fold03
sensitivity
Fold04
0.50 Fold05
Fold06
Fold07
0.25 Fold08
Fold09
Fold10
0.00
0.00 0.25 0.50 0.75 1.00
1 − specificity
log_metrics <-
glm_rs %>%
collect_metrics(summarise = TRUE) %>%
mutate(model = "Logistic Regression")
rf_metrics <-
xgb_metrics <-
xgb_rs %>%
collect_metrics(summarise = TRUE) %>%
mutate(model = "XGBoost")
tree_metrics <-
tree_rs %>%
collect_metrics(summarise = TRUE) %>%
mutate(model = "Decision tree")
model_comp <-
model_compare %>%
select(model, .metric, mean, std_err) %>%
pivot_wider(names_from = .metric, values_from = c(mean, std_err))
model
XGBoost 0.79 Decision tree
model
Logistic Regression
XGBoost
Logistic Regression 0.77
Random Forest
Com os gráficos realizados podemos fazer uma comparação direta da performance entre os
modelos. A partir dessas visualizações e dos KPIs aplicados, pode‐se perceber o modelo que
apresenta os melhores resultados.
Dentro da análise gráfica, as curvas que se mostrarem mais distribuídas ao longo do seu eixo X
apresenta uma maior constância para predição dos dados, bem como aquela que apresentar o maior
KPI de acurácia para o modelo.
Dessa forma pode‐se perceber que o melhor modelo para este problema é o Random Forest ,
portanto o usaremos para realizar as estimações finais no dataset de teste. A função last_fit()
realiza um último ajuste (fit) usando os dados de treino (dentro da especificação rf_spec) e
automaticamente uma última estimação, usando os dados de teste (a função reconhece os dados
de treino e teste no objeto churn_split)
collect_metrics(modelo_final)
# A tibble: 2 x 4
.metric .estimator .estimate .config
<chr> <chr> <dbl> <chr>
1 accuracy binary 0.833 Preprocessor1_Model1
2 roc_auc binary 0.797 Preprocessor1_Model1
Truth
Prediction Manteve Abandonou
Manteve 1933 359
Abandonou 58 151
collect_predictions(modelo_final) %>%
roc_curve(exited, .pred_Manteve) %>%
ggplot(aes(x = 1 - specificity, y = sensitivity)) +
geom_line(size = 1.5, color = "midnightblue") +
geom_abline(
lty = 2, alpha = 0.5,
color = "gray50",
size = 1.2
) +
coord_equal()
1.00
0.75
sensitivity
0.50
0.25
0.00
0.00 0.25 0.50 0.75 1.00
1 − specificity
3 CONCLUSÃO
Por fim, o capítulo 3, abrange a etapa de comunicação, elencando os resultados obtidos e auxiliando
a organização a direcionar o processo de tomada de decisões estratégicas.
Hoje a maioria das organizações que lideram em seus campos já utiliza o Machine Learning
para resolver problemas de negócios. O Machine Learning beneficia a visualização de dados
Podemos listar, como as principais vantagens da utilização desse conjunto de técnicas, estão:
• Agilidade e adaptabilidade: leitura de dados mais rápida e capaz de ser adaptada a diferentes
situações.
Com isso, fica nítido a relevância do entendimento de diferentess métodos de aplicação em Machine
Learning para realizar a predição de variáveis. Dessa forma, todo e qualquer modelo de negócios
pode se beneficiar, seja desde a predição de demanda até mesmo para predições de erros em
equipamentos.