Introdução

Este relatório apresenta uma análise exploratória e modelagem preditiva usando o conjunto de dados clientes.csv. As principais etapas incluem:

Objetivo:
Este trabalho tem como objetivo desenvolver um modelo de crédito capaz de liberar crédito automático para os clientes de um banco digital, informando o limite pré-aprovado.

Amostra de clientes:
A base de clientes é fictícia e faz referência a uma base de dados de um banco digital: - 100.000 classificadas como clientes. - 2.221 classificadas como novos clientes.

Etapas da Análise

1. Configuração do Ambiente

options(encoding = "UTF-8") #configuração de codificação dos caracteres
options(scipen = 999) #desliga a notação científica
rm(list = ls()) #limpa o environment (ambiente)

2. Carregamento de Pacotes

# Pacotes necessários
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(caTools)
library(class)
library(ggplot2)
library(caret)
## Carregando pacotes exigidos: lattice
library(skimr)

3. Importação dos Dados

# Importando dados – ajuste o endereço de onde a planilha está no seu computador
df <- read.csv("clientes.csv")

# Estrutura dos dados (visualização)
str(df)
## 'data.frame':    100000 obs. of  25 variables:
##  $ id_cliente              : int  3392 3392 3392 3392 3392 3392 3392 3392 8625 8625 ...
##  $ mes                     : int  1 2 3 4 5 6 7 8 1 2 ...
##  $ idade                   : num  23 23 23 23 23 23 23 23 28 28 ...
##  $ profissao               : chr  "cientista" "cientista" "cientista" "cientista" ...
##  $ salario_anual           : num  19114 19114 19114 19114 19114 ...
##  $ num_contas              : num  3 3 3 3 3 3 3 3 2 2 ...
##  $ num_cartoes             : num  4 4 4 4 4 4 4 4 4 4 ...
##  $ juros_emprestimo        : num  3 3 3 3 3 3 3 3 6 6 ...
##  $ num_emprestimos         : num  4 4 4 4 4 4 4 4 1 1 ...
##  $ dias_atraso             : num  3 3 3 5 6 8 3 3 3 7 ...
##  $ num_pagamentos_atrasados: num  7 4 7 4 4 4 8 6 4 1 ...
##  $ num_verificacoes_credito: num  4 4 4 4 4 4 4 4 2 2 ...
##  $ mix_credito             : chr  "Bom" "Bom" "Bom" "Bom" ...
##  $ divida_total            : num  810 810 810 810 810 ...
##  $ taxa_uso_credito        : num  26.8 31.9 28.6 31.4 24.8 ...
##  $ idade_historico_credito : num  265 266 267 268 269 270 271 272 319 320 ...
##  $ investimento_mensal     : num  21.5 21.5 21.5 21.5 21.5 ...
##  $ comportamento_pagamento : chr  "alto_gasto_pagamento_baixos" "baixo_gasto_pagamento_alto" "baixo_gasto_pagamento_medio" "baixo_gasto_pagamento_baixo" ...
##  $ saldo_final_mes         : num  312 285 331 223 341 ...
##  $ score_credito           : chr  "Good" "Good" "Good" "Good" ...
##  $ emprestimo_carro        : int  1 1 1 1 1 1 1 1 0 0 ...
##  $ emprestimo_casa         : int  1 1 1 1 1 1 1 1 0 0 ...
##  $ emprestimo_pessoal      : int  1 1 1 1 1 1 1 1 0 0 ...
##  $ emprestimo_credito      : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ emprestimo_estudantil   : int  0 0 0 0 0 0 0 0 0 0 ...

4. Análise Exploratória

# Visualização inicial e sumário estatístico
summary(df)
##    id_cliente         mes           idade        profissao        
##  Min.   : 1006   Min.   :1.00   Min.   :14.00   Length:100000     
##  1st Qu.:13664   1st Qu.:2.75   1st Qu.:24.00   Class :character  
##  Median :25777   Median :4.50   Median :33.00   Mode  :character  
##  Mean   :25983   Mean   :4.50   Mean   :33.32                     
##  3rd Qu.:38385   3rd Qu.:6.25   3rd Qu.:42.00                     
##  Max.   :50999   Max.   :8.00   Max.   :56.00                     
##  salario_anual      num_contas      num_cartoes     juros_emprestimo
##  Min.   :  7006   Min.   : 0.000   Min.   : 0.000   Min.   : 1.00   
##  1st Qu.: 19343   1st Qu.: 3.000   1st Qu.: 4.000   1st Qu.: 7.00   
##  Median : 37000   Median : 5.000   Median : 5.000   Median :13.00   
##  Mean   : 50505   Mean   : 5.369   Mean   : 5.534   Mean   :14.53   
##  3rd Qu.: 71683   3rd Qu.: 7.000   3rd Qu.: 7.000   3rd Qu.:20.00   
##  Max.   :179987   Max.   :11.000   Max.   :11.000   Max.   :34.00   
##  num_emprestimos  dias_atraso    num_pagamentos_atrasados
##  Min.   :0.000   Min.   : 0.00   Min.   : 0.00           
##  1st Qu.:2.000   1st Qu.:10.00   1st Qu.: 9.00           
##  Median :3.000   Median :18.00   Median :14.00           
##  Mean   :3.533   Mean   :21.08   Mean   :13.31           
##  3rd Qu.:5.000   3rd Qu.:28.00   3rd Qu.:18.00           
##  Max.   :9.000   Max.   :62.00   Max.   :25.00           
##  num_verificacoes_credito mix_credito         divida_total     taxa_uso_credito
##  Min.   : 0.000           Length:100000      Min.   :   0.23   Min.   :20.00   
##  1st Qu.: 3.000           Class :character   1st Qu.: 566.07   1st Qu.:28.05   
##  Median : 5.000           Mode  :character   Median :1166.15   Median :32.31   
##  Mean   : 5.798                              Mean   :1426.22   Mean   :32.29   
##  3rd Qu.: 8.000                              3rd Qu.:1945.96   3rd Qu.:36.50   
##  Max.   :17.000                              Max.   :4998.07   Max.   :50.00   
##  idade_historico_credito investimento_mensal comportamento_pagamento
##  Min.   :  1.0           Min.   :  0.00      Length:100000          
##  1st Qu.:144.0           1st Qu.: 27.96      Class :character       
##  Median :219.0           Median : 45.16      Mode  :character       
##  Mean   :221.2           Mean   : 55.10                             
##  3rd Qu.:302.0           3rd Qu.: 71.30                             
##  Max.   :404.0           Max.   :434.19                             
##  saldo_final_mes     score_credito      emprestimo_carro emprestimo_casa 
##  Min.   :   0.0078   Length:100000      Min.   :0.0000   Min.   :0.0000  
##  1st Qu.: 267.6160   Class :character   1st Qu.:0.0000   1st Qu.:0.0000  
##  Median : 333.8654   Mode  :character   Median :0.0000   Median :1.0000  
##  Mean   : 392.6976                      Mean   :0.3056   Mean   :0.5118  
##  3rd Qu.: 463.2157                      3rd Qu.:1.0000   3rd Qu.:1.0000  
##  Max.   :1183.9307                      Max.   :1.0000   Max.   :1.0000  
##  emprestimo_pessoal emprestimo_credito emprestimo_estudantil
##  Min.   :0.000      Min.   :0.0000     Min.   :0.0000       
##  1st Qu.:0.000      1st Qu.:0.0000     1st Qu.:0.0000       
##  Median :0.000      Median :0.0000     Median :0.0000       
##  Mean   :0.311      Mean   :0.3173     Mean   :0.3104       
##  3rd Qu.:1.000      3rd Qu.:1.0000     3rd Qu.:1.0000       
##  Max.   :1.000      Max.   :1.0000     Max.   :1.0000
skimr::skim(df)
Data summary
Name df
Number of rows 100000
Number of columns 25
_______________________
Column type frequency:
character 4
numeric 21
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
profissao 0 1 6 13 0 15 0
mix_credito 0 1 3 6 0 3 0
comportamento_pagamento 0 1 25 27 0 6 0
score_credito 0 1 4 8 0 3 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
id_cliente 0 1 25982.67 14340.54 1006.00 13664.50 25777.00 38385.00 50999.00 ▇▇▇▇▇
mes 0 1 4.50 2.29 1.00 2.75 4.50 6.25 8.00 ▇▃▇▃▇
idade 0 1 33.32 10.76 14.00 24.00 33.00 42.00 56.00 ▆▇▇▆▃
salario_anual 0 1 50505.12 38299.42 7005.93 19342.97 36999.71 71683.47 179987.28 ▇▃▂▁▁
num_contas 0 1 5.37 2.59 0.00 3.00 5.00 7.00 11.00 ▅▇▇▇▃
num_cartoes 0 1 5.53 2.07 0.00 4.00 5.00 7.00 11.00 ▁▆▇▅▂
juros_emprestimo 0 1 14.53 8.74 1.00 7.00 13.00 20.00 34.00 ▇▇▇▃▃
num_emprestimos 0 1 3.53 2.45 0.00 2.00 3.00 5.00 9.00 ▆▇▆▅▂
dias_atraso 0 1 21.08 14.80 0.00 10.00 18.00 28.00 62.00 ▇▇▅▂▂
num_pagamentos_atrasados 0 1 13.31 6.24 0.00 9.00 14.00 18.00 25.00 ▃▆▇▇▃
num_verificacoes_credito 0 1 5.80 3.87 0.00 3.00 5.00 8.00 17.00 ▇▆▇▃▁
divida_total 0 1 1426.22 1155.13 0.23 566.07 1166.15 1945.96 4998.07 ▇▆▂▁▁
taxa_uso_credito 0 1 32.29 5.12 20.00 28.05 32.31 36.50 50.00 ▃▇▇▃▁
idade_historico_credito 0 1 221.22 99.68 1.00 144.00 219.00 302.00 404.00 ▂▆▇▆▅
investimento_mensal 0 1 55.10 39.01 0.00 27.96 45.16 71.30 434.19 ▇▂▁▁▁
saldo_final_mes 0 1 392.70 201.65 0.01 267.62 333.87 463.22 1183.93 ▂▇▂▁▁
emprestimo_carro 0 1 0.31 0.46 0.00 0.00 0.00 1.00 1.00 ▇▁▁▁▃
emprestimo_casa 0 1 0.51 0.50 0.00 0.00 1.00 1.00 1.00 ▇▁▁▁▇
emprestimo_pessoal 0 1 0.31 0.46 0.00 0.00 0.00 1.00 1.00 ▇▁▁▁▃
emprestimo_credito 0 1 0.32 0.47 0.00 0.00 0.00 1.00 1.00 ▇▁▁▁▃
emprestimo_estudantil 0 1 0.31 0.46 0.00 0.00 0.00 1.00 1.00 ▇▁▁▁▃


análise exploratória fornece uma visão inicial da base de dados clientes.csv, contendo 100.000 observações e 25 variáveis, com predominância de variáveis numéricas. Segue um resumo dos principais insights:

Estrutura dos Dados

  • A base inclui variáveis demográficas (e.g., idade, profissao), financeiras (e.g., salario_anual, divida_total), e comportamentais (e.g., comportamento_pagamento).
  • Quatro colunas são do tipo caracter e 21 são do tipo numérico.

Estatísticas Descritivas

  1. Variáveis Demográficas:
    • Idade varia de 14 a 56 anos, com uma mediana de 33 anos.
    • Histórico de crédito (idade_historico_credito) apresenta uma média de 221 meses (~18 anos), com picos de até 404 meses (~33 anos).
  2. Variáveis Financeiras:
    • Salário Anual: Distribuição ampla, de 7.005 a 179.987, com uma mediana de 37.000.
    • Dívida Total: Média de 1.426, variando de 0.23 até 4.998.
    • Taxa de Uso de Crédito: Em torno de 32%, com um máximo de 50%.
  3. Comportamento de Pagamento:
    • Dias de Atraso: Média de 21 dias, podendo chegar a 62 dias.
    • Pagamentos Atrasados: A maioria possui entre 9 e 18 atrasos.
  4. Créditos e Empréstimos:
    • Número de Contas e Cartões: Média de 5.37 e 5.53, respectivamente.
    • Tipos de Empréstimos: Cerca de 31% possuem empréstimos pessoais ou estudantis, e 51% têm empréstimos para casa.

Distribuições

A análise de distribuições indica: - Salário Anual e Dívida Total possuem assimetria positiva, sugerindo a presença de poucos clientes com valores elevados. - A maioria das variáveis categóricas (e.g., mix_credito, comportamento_pagamento) possui menos de 10 categorias únicas.

Visualização dos Dados

A visualização inicial, com histogramas e sumários estatísticos, demonstra que: - Mix de Crédito e Comportamento de Pagamento são fatores importantes para análise e modelagem. - Há um bom balanceamento nas variáveis numéricas, mas algumas apresentam outliers significativos.

Esse resumo da base estabelece a fundação para identificar padrões e criar modelos preditivos robustos.


5. Modelagem

A ideia será criar dois modelos, um para aprovação determinística do crédito e outro para determinação de um pré-limite ao cliente.

Nota Importante:
O modelo deve ser conservador, pois trata-se de um sistema de aprovação de crédito automático.


5.1 Modelo Determinístico

O modelo determinístico utilizará o método de Árvore de Decisão para classificar clientes como bons ou maus pagadores, baseando-se no comportamento de pagamento registrado na base de dados.

  • Na base de clientes atuais, já temos informações detalhadas sobre o histórico financeiro e de pagamentos, o que permite o treinamento do modelo.
  • Na base de novos clientes, esta informação não estará disponível, sendo necessário utilizar o modelo treinado para realizar as classificações.
#proxy que define bons pagadores conservadora
df$bom_pagador <- ifelse(df$comportamento_pagamento %in% 
                           c("alto_gasto_pagamento_alto", "baixo_gasto_pagamento_alto"), 
                         1, 0)

# Convertendo a variável criada em fator
df$bom_pagador <- as.factor(df$bom_pagador)

#Visualizar dados 
glimpse(df)
## Rows: 100,000
## Columns: 26
## $ id_cliente               <int> 3392, 3392, 3392, 3392, 3392, 3392, 3392, 339…
## $ mes                      <int> 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, …
## $ idade                    <dbl> 23, 23, 23, 23, 23, 23, 23, 23, 28, 28, 28, 2…
## $ profissao                <chr> "cientista", "cientista", "cientista", "cient…
## $ salario_anual            <dbl> 19114.12, 19114.12, 19114.12, 19114.12, 19114…
## $ num_contas               <dbl> 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, …
## $ num_cartoes              <dbl> 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, …
## $ juros_emprestimo         <dbl> 3, 3, 3, 3, 3, 3, 3, 3, 6, 6, 6, 6, 6, 6, 6, …
## $ num_emprestimos          <dbl> 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, …
## $ dias_atraso              <dbl> 3, 3, 3, 5, 6, 8, 3, 3, 3, 7, 3, 3, 3, 3, 3, …
## $ num_pagamentos_atrasados <dbl> 7, 4, 7, 4, 4, 4, 8, 6, 4, 1, 1, 3, 1, 0, 4, …
## $ num_verificacoes_credito <dbl> 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, …
## $ mix_credito              <chr> "Bom", "Bom", "Bom", "Bom", "Bom", "Bom", "Bo…
## $ divida_total             <dbl> 809.98, 809.98, 809.98, 809.98, 809.98, 809.9…
## $ taxa_uso_credito         <dbl> 26.82262, 31.94496, 28.60935, 31.37786, 24.79…
## $ idade_historico_credito  <dbl> 265, 266, 267, 268, 269, 270, 271, 272, 319, …
## $ investimento_mensal      <dbl> 21.46538, 21.46538, 21.46538, 21.46538, 21.46…
## $ comportamento_pagamento  <chr> "alto_gasto_pagamento_baixos", "baixo_gasto_p…
## $ saldo_final_mes          <dbl> 312.4941, 284.6292, 331.2099, 223.4513, 341.4…
## $ score_credito            <chr> "Good", "Good", "Good", "Good", "Good", "Good…
## $ emprestimo_carro         <int> 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, …
## $ emprestimo_casa          <int> 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, …
## $ emprestimo_pessoal       <int> 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, …
## $ emprestimo_credito       <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ emprestimo_estudantil    <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ bom_pagador              <fct> 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, …
str(df)
## 'data.frame':    100000 obs. of  26 variables:
##  $ id_cliente              : int  3392 3392 3392 3392 3392 3392 3392 3392 8625 8625 ...
##  $ mes                     : int  1 2 3 4 5 6 7 8 1 2 ...
##  $ idade                   : num  23 23 23 23 23 23 23 23 28 28 ...
##  $ profissao               : chr  "cientista" "cientista" "cientista" "cientista" ...
##  $ salario_anual           : num  19114 19114 19114 19114 19114 ...
##  $ num_contas              : num  3 3 3 3 3 3 3 3 2 2 ...
##  $ num_cartoes             : num  4 4 4 4 4 4 4 4 4 4 ...
##  $ juros_emprestimo        : num  3 3 3 3 3 3 3 3 6 6 ...
##  $ num_emprestimos         : num  4 4 4 4 4 4 4 4 1 1 ...
##  $ dias_atraso             : num  3 3 3 5 6 8 3 3 3 7 ...
##  $ num_pagamentos_atrasados: num  7 4 7 4 4 4 8 6 4 1 ...
##  $ num_verificacoes_credito: num  4 4 4 4 4 4 4 4 2 2 ...
##  $ mix_credito             : chr  "Bom" "Bom" "Bom" "Bom" ...
##  $ divida_total            : num  810 810 810 810 810 ...
##  $ taxa_uso_credito        : num  26.8 31.9 28.6 31.4 24.8 ...
##  $ idade_historico_credito : num  265 266 267 268 269 270 271 272 319 320 ...
##  $ investimento_mensal     : num  21.5 21.5 21.5 21.5 21.5 ...
##  $ comportamento_pagamento : chr  "alto_gasto_pagamento_baixos" "baixo_gasto_pagamento_alto" "baixo_gasto_pagamento_medio" "baixo_gasto_pagamento_baixo" ...
##  $ saldo_final_mes         : num  312 285 331 223 341 ...
##  $ score_credito           : chr  "Good" "Good" "Good" "Good" ...
##  $ emprestimo_carro        : int  1 1 1 1 1 1 1 1 0 0 ...
##  $ emprestimo_casa         : int  1 1 1 1 1 1 1 1 0 0 ...
##  $ emprestimo_pessoal      : int  1 1 1 1 1 1 1 1 0 0 ...
##  $ emprestimo_credito      : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ emprestimo_estudantil   : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ bom_pagador             : Factor w/ 2 levels "0","1": 1 2 1 1 1 1 1 1 1 2 ...
#seed_aleatoria <- sample(1:10000, 1) #esta comentado pois estou usando uma seed fixa para replicar os resultados

#seed fixa
seed_aleatoria <- 3

# Fixar a seed aleatória gerada
set.seed(seed_aleatoria)

Treinamento dos Modelos

#Modelo deterministico: (Liberar ou Não Credito)
## rodar para Decision Tree
library(rpart) 
library(rpart.plot) 

Modelo Preditivo descriminante modelo preditivo de 5 camadas de árvore de decisão importante: saldo e número de empréstimos que tem.

divisao <- sample.split(df$emprestimo_credito, SplitRatio = 0.75) 
DT1_treinamento <- subset(df, divisao == TRUE) #treinamento 
DT1_teste <- subset(df, divisao == FALSE) #teste 

model_pred <- rpart(as.factor(bom_pagador) ~ idade + profissao + salario_anual + 
                      num_contas + num_cartoes + juros_emprestimo + num_emprestimos + 
                      dias_atraso + num_pagamentos_atrasados + num_verificacoes_credito + 
                      mix_credito + divida_total + taxa_uso_credito + idade_historico_credito + 
                      investimento_mensal + saldo_final_mes, 
                    data = DT1_treinamento, maxdepth = 5)

rpart.plot(model_pred, type = 2)

#principais
summary(model_pred)
## Call:
## rpart(formula = as.factor(bom_pagador) ~ idade + profissao + 
##     salario_anual + num_contas + num_cartoes + juros_emprestimo + 
##     num_emprestimos + dias_atraso + num_pagamentos_atrasados + 
##     num_verificacoes_credito + mix_credito + divida_total + taxa_uso_credito + 
##     idade_historico_credito + investimento_mensal + saldo_final_mes, 
##     data = DT1_treinamento, maxdepth = 5)
##   n= 75000 
## 
##           CP nsplit rel error    xerror        xstd
## 1 0.01923481      0 1.0000000 1.0000000 0.006262651
## 2 0.01266555      2 0.9615304 0.9615304 0.006181034
## 3 0.01000000      3 0.9488648 0.9568005 0.006170704
## 
## Variable importance
##     saldo_final_mes       salario_anual     num_emprestimos    taxa_uso_credito 
##                  70                  17                   5                   4 
## investimento_mensal 
##                   2 
## 
## Node number 1: 75000 observations,    complexity param=0.01923481
##   predicted class=0  expected loss=0.2537067  P(node) =1
##     class counts: 55972 19028
##    probabilities: 0.746 0.254 
##   left son=2 (64932 obs) right son=3 (10068 obs)
##   Primary splits:
##       saldo_final_mes     < 613.9694 to the left,  improve=1489.2910, (0 missing)
##       salario_anual       < 70786.28 to the left,  improve=1071.1410, (0 missing)
##       investimento_mensal < 53.50581 to the left,  improve= 350.1393, (0 missing)
##       taxa_uso_credito    < 41.09714 to the left,  improve= 224.8246, (0 missing)
##       divida_total        < 1488.585 to the right, improve= 167.1049, (0 missing)
##   Surrogate splits:
##       salario_anual       < 86906.88 to the left,  agree=0.896, adj=0.228, (0 split)
##       taxa_uso_credito    < 41.49761 to the left,  agree=0.874, adj=0.062, (0 split)
##       investimento_mensal < 161.5447 to the left,  agree=0.869, adj=0.022, (0 split)
## 
## Node number 2: 64932 observations
##   predicted class=0  expected loss=0.2144705  P(node) =0.86576
##     class counts: 51006 13926
##    probabilities: 0.786 0.214 
## 
## Node number 3: 10068 observations,    complexity param=0.01923481
##   predicted class=1  expected loss=0.4932459  P(node) =0.13424
##     class counts:  4966  5102
##    probabilities: 0.493 0.507 
##   left son=6 (5302 obs) right son=7 (4766 obs)
##   Primary splits:
##       saldo_final_mes         < 788.4297 to the left,  improve=88.79293, (0 missing)
##       num_emprestimos         < 2.5      to the left,  improve=79.37222, (0 missing)
##       investimento_mensal     < 109.6339 to the right, improve=78.36963, (0 missing)
##       salario_anual           < 126296.4 to the right, improve=51.82884, (0 missing)
##       idade_historico_credito < 181.5    to the right, improve=11.17817, (0 missing)
##   Surrogate splits:
##       salario_anual       < 105379   to the left,  agree=0.732, adj=0.434, (0 split)
##       investimento_mensal < 95.35607 to the left,  agree=0.630, adj=0.218, (0 split)
##       num_emprestimos     < 1.5      to the right, agree=0.581, adj=0.114, (0 split)
##       mix_credito         splits as  RLL,          agree=0.572, adj=0.096, (0 split)
##       taxa_uso_credito    < 40.79136 to the left,  agree=0.572, adj=0.096, (0 split)
## 
## Node number 6: 5302 observations,    complexity param=0.01266555
##   predicted class=0  expected loss=0.4437948  P(node) =0.07069333
##     class counts:  2949  2353
##    probabilities: 0.556 0.444 
##   left son=12 (3145 obs) right son=13 (2157 obs)
##   Primary splits:
##       num_emprestimos          < 2.5      to the left,  improve=91.34329, (0 missing)
##       salario_anual            < 98731.95 to the right, improve=82.55529, (0 missing)
##       investimento_mensal      < 67.10573 to the right, improve=54.00902, (0 missing)
##       idade_historico_credito  < 181.5    to the right, improve=15.71589, (0 missing)
##       num_verificacoes_credito < 5.5      to the left,  improve=13.06523, (0 missing)
##   Surrogate splits:
##       salario_anual            < 89776.84 to the left,  agree=0.653, adj=0.147, (0 split)
##       idade_historico_credito  < 181.5    to the right, agree=0.612, adj=0.046, (0 split)
##       num_verificacoes_credito < 8.5      to the left,  agree=0.598, adj=0.012, (0 split)
##       mix_credito              splits as  LLR,          agree=0.597, adj=0.009, (0 split)
##       num_cartoes              < 7.5      to the left,  agree=0.597, adj=0.008, (0 split)
## 
## Node number 7: 4766 observations
##   predicted class=1  expected loss=0.423206  P(node) =0.06354667
##     class counts:  2017  2749
##    probabilities: 0.423 0.577 
## 
## Node number 12: 3145 observations
##   predicted class=0  expected loss=0.3669316  P(node) =0.04193333
##     class counts:  1991  1154
##    probabilities: 0.633 0.367 
## 
## Node number 13: 2157 observations
##   predicted class=1  expected loss=0.4441354  P(node) =0.02876
##     class counts:   958  1199
##    probabilities: 0.444 0.556
predictTrain <- predict(model_pred, type = "class", newdata = DT1_teste) 
CM.DT <- table(DT1_teste$emprestimo_credito, predictTrain) 
confusionMatrix(CM.DT)
## Confusion Matrix and Statistics
## 
##    predictTrain
##         0     1
##   0 15177  1891
##   1  7422   510
##                                              
##                Accuracy : 0.6275             
##                  95% CI : (0.6215, 0.6335)   
##     No Information Rate : 0.904              
##     P-Value [Acc > NIR] : 1                  
##                                              
##                   Kappa : -0.0572            
##                                              
##  Mcnemar's Test P-Value : <0.0000000000000002
##                                              
##             Sensitivity : 0.6716             
##             Specificity : 0.2124             
##          Pos Pred Value : 0.8892             
##          Neg Pred Value : 0.0643             
##              Prevalence : 0.9040             
##          Detection Rate : 0.6071             
##    Detection Prevalence : 0.6827             
##       Balanced Accuracy : 0.4420             
##                                              
##        'Positive' Class : 0                  
## 

5.1.2 Resultados da Análise com Árvore de Decisão

Desempenho do Modelo

Após a execução do modelo de árvore de decisão, os principais resultados observados foram:

  • Estrutura da Árvore:
    • O modelo utiliza 5 divisões principais para separar os clientes em bons e maus pagadores.
    • A variável mais influente foi saldo_final_mes, com o primeiro nó separando os clientes com saldo abaixo de 614 como maus pagadores.
    • Variáveis como salario_anual e num_emprestimos também desempenharam papéis importantes nas divisões secundárias.

  • Importância das Variáveis:
    • As cinco variáveis mais importantes para o modelo foram:
      1. saldo_final_mes: 70% da importância.
      2. salario_anual: 17%.
      3. num_emprestimos: 5%.
      4. taxa_uso_credito: 4%.
      5. investimento_mensal: 2%.
  • Resultados do Treinamento:
    • O modelo foi treinado com 75.000 observações, das quais:
      • 55.972 (74,6%) foram classificadas como bons pagadores.
      • 19.028 (25,4%) foram classificadas como maus pagadores.

Métricas de Avaliação no Conjunto de Teste


Insights da Análise


#### Foco no Conservadorismo - A alta sensibilidade é consistente com o objetivo do modelo, que prioriza a detecção de bons pagadores.
- Contudo, a baixa especificidade sugere que alguns maus pagadores podem ser incorretamente classificados como bons.

#### Interpretação dos Nós - Clientes com saldo abaixo de 614 têm alta probabilidade de serem maus pagadores.
- Para clientes com saldo acima deste valor, variáveis como num_emprestimos (< 3) e salario_anual (> 78.000) ajudam a refinar a decisão.

#### Aplicação Prática - O modelo é robusto para um cenário inicial e serve como uma base interpretável para aprovação automatizada de crédito.

5.2 Modelo para aprovar limite de Crédito

5.2.1 Modelo de regressão Multipla

#Construção do modelo para determinar o valor do credito pre aprovado
#Modelo de regressão Multipla (carregar todas as vezes)

library(caTools)
library(stargazer)
## 
## Please cite as:
##  Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
##  R package version 5.2.3. https://CRAN.R-project.org/package=stargazer
library(lmtest)
## Carregando pacotes exigidos: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
# Filtrando apenas os bons pagadores
df_bons_pagadores <- subset(df, bom_pagador == 1)

# Divisão em treinamento e teste
divisao <- sample.split(df_bons_pagadores$divida_total, SplitRatio = 0.75)
treinamento <- subset(df_bons_pagadores, divisao == TRUE)
teste <- subset(df_bons_pagadores, divisao == FALSE)

# Modelo de Regressão Linear
model_valor <- lm(divida_total ~ num_contas + num_cartoes +  
                    num_verificacoes_credito + idade + taxa_uso_credito + idade_historico_credito + 
                    investimento_mensal + mix_credito, 
                  data = treinamento)

# Resumo do Modelo
summary(model_valor)
## 
## Call:
## lm(formula = divida_total ~ num_contas + num_cartoes + num_verificacoes_credito + 
##     idade + taxa_uso_credito + idade_historico_credito + investimento_mensal + 
##     mix_credito, data = treinamento)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1974.89  -459.29   -18.89   428.98  2222.96 
## 
## Coefficients:
##                            Estimate Std. Error t value             Pr(>|t|)    
## (Intercept)              1199.83084   42.45814  28.259 < 0.0000000000000002 ***
## num_contas                 11.84814    2.56407   4.621          0.000003845 ***
## num_cartoes                36.51426    2.74484  13.303 < 0.0000000000000002 ***
## num_verificacoes_credito   32.09933    1.72511  18.607 < 0.0000000000000002 ***
## idade                      -1.51977    0.43809  -3.469             0.000523 ***
## taxa_uso_credito           -0.59983    0.89401  -0.671             0.502263    
## idade_historico_credito    -2.10173    0.06341 -33.145 < 0.0000000000000002 ***
## investimento_mensal        -0.60273    0.12012  -5.018          0.000000527 ***
## mix_creditoNormal         -26.59611   13.46768  -1.975             0.048303 *  
## mix_creditoRuim          1444.38521   23.23862  62.155 < 0.0000000000000002 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 661.1 on 20973 degrees of freedom
## Multiple R-squared:  0.639,  Adjusted R-squared:  0.6389 
## F-statistic:  4125 on 9 and 20973 DF,  p-value: < 0.00000000000000022
# Apresentação dos resultados - forma mais bonita de apresentação
stargazer(model_valor, type = "text", title = "Modelo de Regressão para Crédito Pré-Aprovado",
          dep.var.labels = "Valor do Crédito Pré-Aprovado (divida_total)",
          covariate.labels = c("Numero de Contas", "Numero de Cartões",
                               "Num Verificações de Crédito", "Idade", "Taxa de Uso Crédito", 
                               "Idade Histórico Crédito", "Investimento Mensal", 
                               "Mix de Crédito: Normal", "Mix de Crédito: Ruim"),
          omit.stat = c("f", "ser"), ci = TRUE, single.row = TRUE)
## 
## Modelo de Regressão para Crédito Pré-Aprovado
## =================================================================
##                                      Dependent variable:         
##                             -------------------------------------
##                             Valor do Crédito Pré-Aprovado (divida
## -----------------------------------------------------------------
## Numero de Contas                  11.848*** (6.823, 16.874)      
## Numero de Cartões                36.514*** (31.134, 41.894)      
## Num Verificações de Crédito      32.099*** (28.718, 35.480)      
## Idade                            -1.520*** (-2.378, -0.661)      
## Taxa de Uso Crédito                -0.600 (-2.352, 1.152)        
## Idade Histórico Crédito          -2.102*** (-2.226, -1.977)      
## Investimento Mensal              -0.603*** (-0.838, -0.367)      
## Mix de Crédito: Normal           -26.596** (-52.992, -0.200)     
## Mix de Crédito: Ruim         1,444.385*** (1,398.838, 1,489.932) 
## Constant                     1,199.831*** (1,116.614, 1,283.047) 
## -----------------------------------------------------------------
## Observations                               20,983                
## R2                                          0.639                
## Adjusted R2                                 0.639                
## =================================================================
## Note:                                 *p<0.1; **p<0.05; ***p<0.01
# Criar dataframe de comparação entre valores reais e preditos - exibição do gráfico
comparacao <- data.frame(
  Real = teste$divida_total,              # Valores reais da variável dependente
  Predito = predict(model_valor, teste)  # Valores preditos pelo modelo no conjunto de teste
)

#Grafico do modelo - verificação por gráfico da eficiência do modelo
ggplot(comparacao, aes(x = Real, y = Predito)) +
  geom_point(color = "blue", alpha = 0.6) +
  geom_abline(slope = 1, intercept = 0, color = "red", linetype = "dashed") +
  labs(title = "Valores Reais vs. Preditos", x = "Valor Real", y = "Valor Predito") +
  theme_minimal()

# Resíduos vs Valores Ajustados - Analise para homocedasticidade dos erros
ggplot(data.frame(Fitted = model_valor$fitted.values, Residuals = model_valor$residuals), 
       aes(x = Fitted, y = Residuals)) +
  geom_point(color = "darkgreen", alpha = 0.6) +
  geom_hline(yintercept = 0, color = "red", linetype = "dashed") +
  labs(title = "Resíduos vs Valores Ajustados", x = "Valores Ajustados", y = "Resíduos") +
  theme_minimal()

#Teste de Heterocedasticidade de breush-pagan
bptest(model_valor)
## 
##  studentized Breusch-Pagan test
## 
## data:  model_valor
## BP = 4985, df = 9, p-value < 0.00000000000000022

Como podemos ver nos resultados apresentados, os dados não são continuos e o modelo de regressão não é adequado para prever o valor do crédito
Por isso vamos tentar outra abordagem

5.2.2 Análise Random Forest

O modelo Random Forest é um método de aprendizado supervisionado usado para classificação e regressão que se baseia na criação de múltiplas árvores de decisão para fazer previsões. Diferente de uma única árvore de decisão, o Random Forest construi várias árvores utilizando subconjuntos aleatórios dos dados e variáveis, combinando suas previsões por meio de votação (para classificação) ou média (para regressão). Isso aumenta a precisão do modelo e reduz o risco de overfitting, que é comum em árvores individuais. O método utiliza o bootstrap sampling (amostras com reposição) e a seleção aleatória de variáveis em cada divisão para garantir diversidade entre as árvores. Por ser robusto e flexível, o Random Forest é amplamente aplicado em áreas como diagnósticos médicos, previsão financeira, análise de comportamento do consumidor e outras aplicações que exigem alta acurácia e estabilidade.

#O modelo de regressao linear nao vai ser bom. Vamos testar outro metodo
#-------------------------------------------------------------------

#Tentar o modelo de random Forest
library(ranger)

# Modelo de Random Forest com ranger - modelo em si (model rf)
model_rf <- ranger(
  formula = divida_total ~ num_contas + num_cartoes + num_verificacoes_credito + idade + 
    taxa_uso_credito + idade_historico_credito + investimento_mensal + mix_credito,
  data = treinamento,
  num.trees = 500,  # Número de árvores
  importance = "impurity"  # Calcula importância das variáveis
)

# Predições no conjunto de teste
pred_teste_rf <- predict(model_rf, data = teste)$predictions

# Avaliação do Modelo - desvio medio absoluto
library(Metrics)
## 
## Attaching package: 'Metrics'
## The following objects are masked from 'package:caret':
## 
##     precision, recall
mae_rf <- mae(teste$divida_total, pred_teste_rf)
rmse_rf <- rmse(teste$divida_total, pred_teste_rf)

print(paste("MAE:", mae_rf))
## [1] "MAE: 287.522497846018"
print(paste("RMSE:", rmse_rf))
## [1] "RMSE: 375.239649108641"
# Importância das variáveis - importancia das variaveis para prever a divida
model_rf$variable.importance
##               num_contas              num_cartoes num_verificacoes_credito 
##               1930972728               2172212020               2890716942 
##                    idade         taxa_uso_credito  idade_historico_credito 
##               1298679267               1141119859               5723479967 
##      investimento_mensal              mix_credito 
##               1689412061               7366286106
# Dataframe de comparação
comparacao_rf <- data.frame(
  Real = teste$divida_total,
  Predito = pred_teste_rf
)

# Gráfico de Valores Reais vs Preditos
ggplot(comparacao_rf, aes(x = Real, y = Predito)) +
  geom_point(color = "blue", alpha = 0.6) +
  geom_abline(slope = 1, intercept = 0, color = "red", linetype = "dashed") +
  labs(title = "Valores Reais vs. Preditos - Random Forest",
       x = "Valor Real", y = "Valor Predito") +
  theme_minimal()

# Cálculo dos resíduos
residuos_rf <- teste$divida_total - pred_teste_rf

# Gráfico de Resíduos vs Preditos
ggplot(data.frame(Predito = pred_teste_rf, Residuos = residuos_rf), aes(x = Predito, y = Residuos)) +
  geom_point(color = "darkgreen", alpha = 0.6) +
  geom_hline(yintercept = 0, color = "red", linetype = "dashed") +
  labs(title = "Resíduos vs. Valores Preditos - Random Forest",
       x = "Valores Preditos", y = "Resíduos") +
  theme_minimal()

# Histograma dos Resíduos - segue a gaussiana
ggplot(data.frame(Residuos = residuos_rf), aes(x = Residuos)) +
  geom_histogram(binwidth = 50, fill = "blue", color = "black", alpha = 0.7) +
  labs(title = "Distribuição dos Resíduos - Random Forest",
       x = "Resíduos", y = "Frequência") +
  theme_minimal()

# Adicionar os valores preditos no conjunto de teste
teste$Predito <- pred_teste_rf

# Boxplot de Predições por Categoria de Mix de Crédito
ggplot(teste, aes(x = mix_credito, y = Predito, fill = mix_credito)) +
  geom_boxplot() +
  labs(title = "Predições por Mix de Crédito - Random Forest",
       x = "Mix de Crédito", y = "Valor Predito") +
  theme_minimal()

# Transformar a importância em um dataframe
importancia_rf <- data.frame(
  Variavel = names(model_rf$variable.importance),
  Importancia = model_rf$variable.importance
)

# Criar o gráfico com ggplot2 - mix_credito é o que mais importa
library(ggplot2)
ggplot(importancia_rf, aes(x = reorder(Variavel, Importancia), y = Importancia)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  coord_flip() +
  labs(title = "Importância das Variáveis - Random Forest (Ranger)",
       x = "Variáveis", y = "Importância") +
  theme_minimal()

Análise do Modelo Random Forest

Valores Reais vs. Preditos

  • O gráfico de dispersão apresenta uma relação geral próxima à linha diagonal vermelha (slope = 1), indicando que o modelo Random Forest possui boa capacidade preditiva, especialmente para valores médios de divida_total.
  • Observação de desvios:
    • Para valores muito baixos (próximos de zero), há uma subestimação evidente em relação aos valores reais.
    • Nos extremos superiores, os valores reais tendem a ser subestimados, evidenciando uma perda de precisão para clientes com dívidas maiores.

Resíduos vs. Valores Preditos

  • A análise dos resíduos revela:
    • Uma distribuição de resíduos com comportamento cônico, indicando possíveis problemas de heterocedasticidade, onde os erros crescem proporcionalmente ao aumento do valor predito.
    • A concentração de resíduos próximos de zero é predominante, mas o espalhamento significativo para valores altos sugere que o modelo pode melhorar na previsão de dívidas mais elevadas.

Métricas de Avaliação

  • MAE (Mean Absolute Error): 287.52 — indica o erro médio absoluto entre os valores reais e preditos. Esse valor é aceitável, dado o escopo do modelo e a variabilidade dos dados.
  • RMSE (Root Mean Squared Error): 375.24 — reflete a penalização mais severa de grandes erros, sendo um indicativo de que o modelo pode ser refinado para reduzir o impacto de erros extremos.

Importância das Variáveis

As variáveis mais relevantes para o modelo foram: - mix_credito (73.66% da importância relativa): Representa a diversificação do portfólio de crédito do cliente. - idade_historico_credito (57.23%): Indica o tempo total de histórico de crédito, um fator crucial para avaliar o risco. - num_verificacoes_credito (28.91%): Mostra a frequência com que o cliente foi avaliado por instituições financeiras. - num_cartoes e num_contas (21.72% e 19.31%, respectivamente): Contribuem para a avaliação de quão diversificado é o perfil financeiro do cliente.


Conclusão e Recomendação

Eficiência Geral do Modelo

  • O modelo Random Forest mostrou bom desempenho em prever valores médios de divida_total.
  • Contudo, os erros crescem para valores altos de dívida, indicando que ajustes no hiperparâmetro num.trees ou no método de seleção de variáveis podem melhorar o desempenho.

Refinamento Necessário

  • Problemas de heterocedasticidade identificados nos resíduos sugerem a possibilidade de aplicar técnicas adicionais
  • Dados extremos podem ser tratados com métodos robustos para outliers, como quantile regression forests.

Uso Prático

  • O modelo é adequado para previsões iniciais, mas futuras melhorias são recomendadas para aumentar a confiabilidade na aprovação de crédito para clientes de perfis extremos (altas dívidas).
  • Entretanto agora temos dois modelos funcionais.

###6 Aplicação prática dos modelos - Vamos classificar novos clientes e ceder limite de crédito a eles. - Observação: Os modelos preveem a divida total do cliente e os novos clientes já possuem divida. Assim o valor aprovado será \(max( 0; Valor Previsto - Divida Atual)\)

library(readxl)  # Para carregar o arquivo Excel

# 1. Carregar a base de novos clientes
novos_clientes <- read_excel("Novos_clientes.xlsx")


# Transformando colunas categóricas em fatores
novos_clientes <- novos_clientes %>%
  mutate(
    profissao = as.factor(profissao),
    mix_credito = as.factor(mix_credito),
    score_credito = as.factor(score_credito),
    emprestimo_carro = as.factor(emprestimo_carro),
    emprestimo_casa = as.factor(emprestimo_casa),
    emprestimo_pessoal= as.factor(emprestimo_pessoal),
    emprestimo_credito = as.factor(emprestimo_credito),
    emprestimo_estudantil = as.factor(emprestimo_estudantil)
  )

#Visualizar estrutura dos dados 
str(novos_clientes)
## tibble [2,222 × 24] (S3: tbl_df/tbl/data.frame)
##  $ id_cliente              : chr [1:2222] "3392" "36507" "41781" "29152" ...
##  $ mes                     : num [1:2222] 1 1 1 1 1 1 1 1 1 1 ...
##  $ idade                   : num [1:2222] 23 15 21 28 18 53 55 22 25 36 ...
##  $ profissao               : Factor w/ 15 levels "advogado","arquiteto",..: 3 6 2 12 5 7 14 15 11 2 ...
##  $ salario_anual           : num [1:2222] 19114 55830 66105 15399 27070 ...
##  $ num_contas              : num [1:2222] 3 10 6 1 7 3 3 2 4 6 ...
##  $ num_cartoes             : num [1:2222] 4 10 8 7 3 5 3 1 3 5 ...
##  $ juros_emprestimo        : num [1:2222] 3 18 31 5 11 6 18 4 6 7 ...
##  $ num_emprestimos         : num [1:2222] 4 8 5 4 4 0 0 0 1 0 ...
##  $ dias_atraso             : num [1:2222] 3 30 26 1 12 5 17 14 22 14 ...
##  $ num_pagamentos_atrasados: num [1:2222] 7 20 22 2 15 9 18 11 18 17 ...
##  $ num_verificacoes_credito: num [1:2222] 4 11 9 3 1 2 3 2 5 5 ...
##  $ mix_credito             : Factor w/ 3 levels "Bom","Normal",..: 1 3 3 1 2 1 2 1 2 2 ...
##  $ divida_total            : num [1:2222] 810 3422 1550 344 920 ...
##  $ taxa_uso_credito        : num [1:2222] 26.8 27.1 30.1 36.7 28.6 ...
##  $ idade_historico_credito : num [1:2222] 265 126 134 339 350 227 239 242 364 343 ...
##  $ investimento_mensal     : num [1:2222] 21.5 79.9 41.3 45.4 17.7 ...
##  $ saldo_final_mes         : num [1:2222] 312.5 63.2 431.2 298.3 362.3 ...
##  $ score_credito           : Factor w/ 3 levels "Good","Poor",..: 1 3 3 3 3 2 3 1 3 3 ...
##  $ emprestimo_carro        : Factor w/ 2 levels "0","1": 2 1 2 1 1 1 1 1 1 1 ...
##  $ emprestimo_casa         : Factor w/ 2 levels "0","1": 2 2 2 2 2 1 1 1 1 1 ...
##  $ emprestimo_pessoal      : Factor w/ 2 levels "0","1": 2 2 1 1 2 1 1 1 1 1 ...
##  $ emprestimo_credito      : Factor w/ 2 levels "0","1": 2 1 1 1 2 1 1 1 1 1 ...
##  $ emprestimo_estudantil   : Factor w/ 2 levels "0","1": 1 2 2 2 2 1 1 1 2 1 ...
# 3. Aplicar o modelo Decision Tree para prever `bom_pagador`
novos_clientes$bom_pagador <- predict(model_pred, novos_clientes, type = "class")

#Visualizar estrutura dos dados  - preveu certinho
str(novos_clientes)
## tibble [2,222 × 25] (S3: tbl_df/tbl/data.frame)
##  $ id_cliente              : chr [1:2222] "3392" "36507" "41781" "29152" ...
##  $ mes                     : num [1:2222] 1 1 1 1 1 1 1 1 1 1 ...
##  $ idade                   : num [1:2222] 23 15 21 28 18 53 55 22 25 36 ...
##  $ profissao               : Factor w/ 15 levels "advogado","arquiteto",..: 3 6 2 12 5 7 14 15 11 2 ...
##  $ salario_anual           : num [1:2222] 19114 55830 66105 15399 27070 ...
##  $ num_contas              : num [1:2222] 3 10 6 1 7 3 3 2 4 6 ...
##  $ num_cartoes             : num [1:2222] 4 10 8 7 3 5 3 1 3 5 ...
##  $ juros_emprestimo        : num [1:2222] 3 18 31 5 11 6 18 4 6 7 ...
##  $ num_emprestimos         : num [1:2222] 4 8 5 4 4 0 0 0 1 0 ...
##  $ dias_atraso             : num [1:2222] 3 30 26 1 12 5 17 14 22 14 ...
##  $ num_pagamentos_atrasados: num [1:2222] 7 20 22 2 15 9 18 11 18 17 ...
##  $ num_verificacoes_credito: num [1:2222] 4 11 9 3 1 2 3 2 5 5 ...
##  $ mix_credito             : Factor w/ 3 levels "Bom","Normal",..: 1 3 3 1 2 1 2 1 2 2 ...
##  $ divida_total            : num [1:2222] 810 3422 1550 344 920 ...
##  $ taxa_uso_credito        : num [1:2222] 26.8 27.1 30.1 36.7 28.6 ...
##  $ idade_historico_credito : num [1:2222] 265 126 134 339 350 227 239 242 364 343 ...
##  $ investimento_mensal     : num [1:2222] 21.5 79.9 41.3 45.4 17.7 ...
##  $ saldo_final_mes         : num [1:2222] 312.5 63.2 431.2 298.3 362.3 ...
##  $ score_credito           : Factor w/ 3 levels "Good","Poor",..: 1 3 3 3 3 2 3 1 3 3 ...
##  $ emprestimo_carro        : Factor w/ 2 levels "0","1": 2 1 2 1 1 1 1 1 1 1 ...
##  $ emprestimo_casa         : Factor w/ 2 levels "0","1": 2 2 2 2 2 1 1 1 1 1 ...
##  $ emprestimo_pessoal      : Factor w/ 2 levels "0","1": 2 2 1 1 2 1 1 1 1 1 ...
##  $ emprestimo_credito      : Factor w/ 2 levels "0","1": 2 1 1 1 2 1 1 1 1 1 ...
##  $ emprestimo_estudantil   : Factor w/ 2 levels "0","1": 1 2 2 2 2 1 1 1 2 1 ...
##  $ bom_pagador             : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 2 1 1 1 ...
##   ..- attr(*, "names")= chr [1:2222] "1" "2" "3" "4" ...
glimpse(novos_clientes)
## Rows: 2,222
## Columns: 25
## $ id_cliente               <chr> "3392", "36507", "41781", "29152", "19184", "…
## $ mes                      <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ idade                    <dbl> 23, 15, 21, 28, 18, 53, 55, 22, 25, 36, 33, 2…
## $ profissao                <fct> cientista, empresario, arquiteto, mecanico, d…
## $ salario_anual            <dbl> 19114.12, 55829.79, 66105.40, 15398.95, 27070…
## $ num_contas               <dbl> 3, 10, 6, 1, 7, 3, 3, 2, 4, 6, 7, 9, 5, 3, 3,…
## $ num_cartoes              <dbl> 4, 10, 8, 7, 3, 5, 3, 1, 3, 5, 10, 9, 6, 4, 6…
## $ juros_emprestimo         <dbl> 3, 18, 31, 5, 11, 6, 18, 4, 6, 7, 21, 18, 12,…
## $ num_emprestimos          <dbl> 4, 8, 5, 4, 4, 0, 0, 0, 1, 0, 8, 5, 2, 4, 4, …
## $ dias_atraso              <dbl> 3, 30, 26, 1, 12, 5, 17, 14, 22, 14, 33, 26, …
## $ num_pagamentos_atrasados <dbl> 7, 20, 22, 2, 15, 9, 18, 11, 18, 17, 18, 15, …
## $ num_verificacoes_credito <dbl> 4, 11, 9, 3, 1, 2, 3, 2, 5, 5, 12, 10, 1, 2, …
## $ mix_credito              <fct> Bom, Ruim, Ruim, Bom, Normal, Bom, Normal, Bo…
## $ divida_total             <dbl> 809.98, 3422.49, 1549.56, 343.84, 919.76, 565…
## $ taxa_uso_credito         <dbl> 26.82262, 27.07054, 30.11104, 36.74315, 28.55…
## $ idade_historico_credito  <dbl> 265, 126, 134, 339, 350, 227, 239, 242, 364, …
## $ investimento_mensal      <dbl> 21.46538, 79.93897, 41.29275, 45.39013, 17.68…
## $ saldo_final_mes          <dbl> 312.49409, 63.24698, 431.15936, 298.33251, 36…
## $ score_credito            <fct> Good, Standard, Standard, Standard, Standard,…
## $ emprestimo_carro         <fct> 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, …
## $ emprestimo_casa          <fct> 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, …
## $ emprestimo_pessoal       <fct> 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, …
## $ emprestimo_credito       <fct> 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, …
## $ emprestimo_estudantil    <fct> 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, …
## $ bom_pagador              <fct> 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, …
#Estatistica descritiva dos dados - dar créditos apenas a bons pagadores
summary(novos_clientes)
##   id_cliente             mes        idade               profissao   
##  Length:2222        Min.   :1   Min.   :14.00   contador     : 168  
##  Class :character   1st Qu.:1   1st Qu.:24.00   gerente_midia: 162  
##  Mode  :character   Median :1   Median :32.00   cientista    : 161  
##                     Mean   :1   Mean   :32.99   arquiteto    : 159  
##                     3rd Qu.:1   3rd Qu.:41.00   jornalista   : 156  
##                     Max.   :1   Max.   :56.00   advogado     : 148  
##                                                 (Other)      :1268  
##  salario_anual      num_contas      num_cartoes     juros_emprestimo
##  Min.   :  7081   Min.   : 0.000   Min.   : 1.000   Min.   : 1.00   
##  1st Qu.: 19444   1st Qu.: 4.000   1st Qu.: 4.000   1st Qu.: 8.00   
##  Median : 36976   Median : 5.000   Median : 5.000   Median :13.00   
##  Mean   : 50423   Mean   : 5.373   Mean   : 5.535   Mean   :14.64   
##  3rd Qu.: 70381   3rd Qu.: 7.000   3rd Qu.: 7.000   3rd Qu.:20.00   
##  Max.   :179825   Max.   :10.000   Max.   :10.000   Max.   :34.00   
##                                                                     
##  num_emprestimos  dias_atraso    num_pagamentos_atrasados
##  Min.   :0.000   Min.   : 0.00   Min.   : 0.00           
##  1st Qu.:2.000   1st Qu.:10.00   1st Qu.: 9.00           
##  Median :3.000   Median :18.00   Median :14.00           
##  Mean   :3.549   Mean   :21.03   Mean   :13.34           
##  3rd Qu.:5.000   3rd Qu.:28.00   3rd Qu.:18.00           
##  Max.   :9.000   Max.   :62.00   Max.   :25.00           
##                                                          
##  num_verificacoes_credito mix_credito    divida_total     taxa_uso_credito
##  Min.   : 0.000           Bom   : 669   Min.   :   0.54   Min.   :21.71   
##  1st Qu.: 2.000           Normal:1019   1st Qu.: 554.41   1st Qu.:28.20   
##  Median : 4.000           Ruim  : 534   Median :1124.61   Median :32.14   
##  Mean   : 4.897                         Mean   :1409.43   Mean   :32.32   
##  3rd Qu.: 8.000                         3rd Qu.:1948.44   3rd Qu.:36.47   
##  Max.   :15.000                         Max.   :4997.05   Max.   :49.56   
##                                                                           
##  idade_historico_credito investimento_mensal saldo_final_mes     score_credito 
##  Min.   :  2.0           Min.   :  0.00      Min.   :   4.557   Good    : 354  
##  1st Qu.:137.0           1st Qu.: 27.55      1st Qu.: 271.290   Poor    : 641  
##  Median :217.0           Median : 45.47      Median : 338.349   Standard:1227  
##  Mean   :217.1           Mean   : 54.76      Mean   : 400.809                  
##  3rd Qu.:299.0           3rd Qu.: 70.55      3rd Qu.: 468.935                  
##  Max.   :397.0           Max.   :266.87      Max.   :1182.007                  
##                                                                                
##  emprestimo_carro emprestimo_casa emprestimo_pessoal emprestimo_credito
##  0:1533           0:1084          0:1528             0:1508            
##  1: 689           1:1138          1: 694             1: 714            
##                                                                        
##                                                                        
##                                                                        
##                                                                        
##                                                                        
##  emprestimo_estudantil bom_pagador
##  0:1525                0:1996     
##  1: 697                1: 226     
##                                   
##                                   
##                                   
##                                   
## 
skim(novos_clientes)
Data summary
Name novos_clientes
Number of rows 2222
Number of columns 25
_______________________
Column type frequency:
character 1
factor 9
numeric 15
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
id_cliente 0 1 4 5 0 2222 0

Variable type: factor

skim_variable n_missing complete_rate ordered n_unique top_counts
profissao 0 1 FALSE 15 con: 168, ger: 162, cie: 161, arq: 159
mix_credito 0 1 FALSE 3 Nor: 1019, Bom: 669, Rui: 534
score_credito 0 1 FALSE 3 Sta: 1227, Poo: 641, Goo: 354
emprestimo_carro 0 1 FALSE 2 0: 1533, 1: 689
emprestimo_casa 0 1 FALSE 2 1: 1138, 0: 1084
emprestimo_pessoal 0 1 FALSE 2 0: 1528, 1: 694
emprestimo_credito 0 1 FALSE 2 0: 1508, 1: 714
emprestimo_estudantil 0 1 FALSE 2 0: 1525, 1: 697
bom_pagador 0 1 FALSE 2 0: 1996, 1: 226

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
mes 0 1 1.00 0.00 1.00 1.00 1.00 1.00 1.00 ▁▁▇▁▁
idade 0 1 32.99 10.99 14.00 24.00 32.00 41.00 56.00 ▇▇▇▆▃
salario_anual 0 1 50422.93 38245.92 7080.70 19444.41 36975.76 70380.69 179825.36 ▇▃▂▁▁
num_contas 0 1 5.37 2.56 0.00 4.00 5.00 7.00 10.00 ▃▇▇▇▃
num_cartoes 0 1 5.53 2.08 1.00 4.00 5.00 7.00 10.00 ▁▆▇▅▂
juros_emprestimo 0 1 14.64 8.69 1.00 8.00 13.00 20.00 34.00 ▆▇▆▃▃
num_emprestimos 0 1 3.55 2.46 0.00 2.00 3.00 5.00 9.00 ▆▇▆▅▂
dias_atraso 0 1 21.03 14.94 0.00 10.00 18.00 28.00 62.00 ▇▇▅▂▂
num_pagamentos_atrasados 0 1 13.34 6.23 0.00 9.00 14.00 18.00 25.00 ▃▆▇▇▃
num_verificacoes_credito 0 1 4.90 3.55 0.00 2.00 4.00 8.00 15.00 ▇▅▅▂▁
divida_total 0 1 1409.43 1139.55 0.54 554.41 1124.61 1948.45 4997.05 ▇▆▂▁▁
taxa_uso_credito 0 1 32.32 5.07 21.71 28.20 32.14 36.47 49.56 ▅▇▇▃▁
idade_historico_credito 0 1 217.08 101.56 2.00 137.00 217.00 299.00 397.00 ▃▆▇▆▆
investimento_mensal 0 1 54.76 38.41 0.00 27.55 45.47 70.55 266.87 ▇▃▁▁▁
saldo_final_mes 0 1 400.81 206.95 4.56 271.29 338.35 468.93 1182.01 ▂▇▂▁▁
# 4. Filtrar apenas os bons pagadores
bons_pagadores <- novos_clientes %>%
  filter(bom_pagador == 1)

#Visualizar estrutura dos dados 
str(bons_pagadores)
## tibble [226 × 25] (S3: tbl_df/tbl/data.frame)
##  $ id_cliente              : chr [1:226] "9229" "25286" "32209" "32274" ...
##  $ mes                     : num [1:226] 1 1 1 1 1 1 1 1 1 1 ...
##  $ idade                   : num [1:226] 55 20 47 24 27 52 37 46 49 32 ...
##  $ profissao               : Factor w/ 15 levels "advogado","arquiteto",..: 14 8 5 7 7 1 10 9 6 13 ...
##  $ salario_anual           : num [1:226] 139354 144882 179825 169107 114262 ...
##  $ num_contas              : num [1:226] 3 3 5 4 3 7 3 5 5 7 ...
##  $ num_cartoes             : num [1:226] 3 4 6 5 7 3 3 1 4 5 ...
##  $ juros_emprestimo        : num [1:226] 18 15 2 12 1 20 3 7 8 9 ...
##  $ num_emprestimos         : num [1:226] 0 4 4 4 1 4 2 0 3 5 ...
##  $ dias_atraso             : num [1:226] 17 6 6 14 17 11 18 0 11 23 ...
##  $ num_pagamentos_atrasados: num [1:226] 18 13 5 8 14 16 0 9 0 17 ...
##  $ num_verificacoes_credito: num [1:226] 3 2 0 4 0 0 3 4 0 6 ...
##  $ mix_credito             : Factor w/ 3 levels "Bom","Normal",..: 2 2 1 1 1 2 1 1 1 2 ...
##  $ divida_total            : num [1:226] 519 405 486 254 338 ...
##  $ taxa_uso_credito        : num [1:226] 32.7 33.9 34.7 42.2 37.3 ...
##  $ idade_historico_credito : num [1:226] 239 309 223 211 190 392 216 296 357 100 ...
##  $ investimento_mensal     : num [1:226] 156.9 227.5 144.5 91 72.8 ...
##  $ saldo_final_mes         : num [1:226] 1031 738 1020 969 949 ...
##  $ score_credito           : Factor w/ 3 levels "Good","Poor",..: 3 3 3 1 1 3 2 1 2 3 ...
##  $ emprestimo_carro        : Factor w/ 2 levels "0","1": 1 1 2 1 1 2 1 1 1 1 ...
##  $ emprestimo_casa         : Factor w/ 2 levels "0","1": 1 2 1 1 1 1 2 1 2 2 ...
##  $ emprestimo_pessoal      : Factor w/ 2 levels "0","1": 1 1 1 1 2 2 1 1 2 1 ...
##  $ emprestimo_credito      : Factor w/ 2 levels "0","1": 1 2 1 2 1 2 1 1 1 1 ...
##  $ emprestimo_estudantil   : Factor w/ 2 levels "0","1": 1 2 2 2 1 1 2 1 1 1 ...
##  $ bom_pagador             : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
##   ..- attr(*, "names")= chr [1:226] "7" "14" "19" "33" ...
summary(bons_pagadores)
##   id_cliente             mes        idade               profissao  
##  Length:226         Min.   :1   Min.   :14.00   professor    : 23  
##  Class :character   1st Qu.:1   1st Qu.:26.25   gerente_midia: 22  
##  Mode  :character   Median :1   Median :35.00   arquiteto    : 20  
##                     Mean   :1   Mean   :35.77   cientista    : 19  
##                     3rd Qu.:1   3rd Qu.:45.00   engenheiro   : 19  
##                     Max.   :1   Max.   :55.00   empresario   : 14  
##                                                 (Other)      :109  
##  salario_anual      num_contas     num_cartoes    juros_emprestimo
##  Min.   : 61783   Min.   :0.000   Min.   :1.000   Min.   : 1.00   
##  1st Qu.:100689   1st Qu.:2.000   1st Qu.:4.000   1st Qu.: 5.00   
##  Median :118880   Median :4.000   Median :4.000   Median : 9.00   
##  Mean   :118503   Mean   :3.907   Mean   :4.624   Mean   : 9.15   
##  3rd Qu.:134504   3rd Qu.:5.000   3rd Qu.:6.000   3rd Qu.:12.00   
##  Max.   :179825   Max.   :9.000   Max.   :9.000   Max.   :32.00   
##                                                                   
##  num_emprestimos  dias_atraso    num_pagamentos_atrasados
##  Min.   :0.00    Min.   : 0.00   Min.   : 0.000          
##  1st Qu.:1.00    1st Qu.: 7.00   1st Qu.: 5.000          
##  Median :2.00    Median :11.00   Median :10.000          
##  Mean   :2.15    Mean   :12.85   Mean   : 9.832          
##  3rd Qu.:3.00    3rd Qu.:18.00   3rd Qu.:14.000          
##  Max.   :6.00    Max.   :36.00   Max.   :20.000          
##                                                          
##  num_verificacoes_credito mix_credito   divida_total     taxa_uso_credito
##  Min.   : 0.000           Bom   :128   Min.   :   3.31   Min.   :25.05   
##  1st Qu.: 1.000           Normal: 97   1st Qu.: 402.81   1st Qu.:30.81   
##  Median : 2.000           Ruim  :  1   Median : 722.08   Median :34.58   
##  Mean   : 2.549                        Mean   : 759.37   Mean   :34.96   
##  3rd Qu.: 4.000                        3rd Qu.:1131.65   3rd Qu.:39.12   
##  Max.   :11.000                        Max.   :2613.85   Max.   :44.97   
##                                                                          
##  idade_historico_credito investimento_mensal saldo_final_mes   score_credito
##  Min.   : 65.0           Min.   : 42.18      Min.   : 615.6   Good    : 67  
##  1st Qu.:219.0           1st Qu.: 75.32      1st Qu.: 772.5   Poor    : 21  
##  Median :279.5           Median : 97.39      Median : 860.0   Standard:138  
##  Mean   :275.2           Mean   :106.87      Mean   : 868.1                 
##  3rd Qu.:337.0           3rd Qu.:129.06      3rd Qu.: 963.0                 
##  Max.   :394.0           Max.   :266.87      Max.   :1182.0                 
##                                                                             
##  emprestimo_carro emprestimo_casa emprestimo_pessoal emprestimo_credito
##  0:175            0:142           0:173              0:176             
##  1: 51            1: 84           1: 53              1: 50             
##                                                                        
##                                                                        
##                                                                        
##                                                                        
##                                                                        
##  emprestimo_estudantil bom_pagador
##  0:175                 0:  0      
##  1: 51                 1:226      
##                                   
##                                   
##                                   
##                                   
## 
# 5. Aplicar o modelo Random Forest para prever `divida_total`
bons_pagadores$divida_total_Prev <- predict(model_rf, data = bons_pagadores)$predictions

# 6. Consolidar e calcular o limite pré-aprovado - divida total - divida total prevista
resultado_final <- bons_pagadores %>%
  mutate(
    # Calcular o limite pré-aprovado
    limite_pre_aprovado = pmax(0, divida_total_Prev - divida_total)
  ) %>%
  select(id_cliente, bom_pagador, divida_total, divida_total_Prev, limite_pre_aprovado)

# Visualizar as primeiras linhas do resultado
print(resultado_final, n = 250)
## # A tibble: 226 × 5
##     id_cliente bom_pagador divida_total divida_total_Prev limite_pre_aprovado
##     <chr>      <fct>              <dbl>             <dbl>               <dbl>
##   1 9229       1                 519.                623.              104.  
##   2 25286      1                 405.                477.               72.9 
##   3 32209      1                 486.                667.              181.  
##   4 32274      1                 254.                606.              351.  
##   5 18938      1                 338.                567.              230.  
##   6 11948      1                 116.                673.              557.  
##   7 50983      1                 579.                651.               72.2 
##   8 21183      1                1133.                612.                0   
##   9 28385      1                 528.                618.               89.5 
##  10 14461      1                 959.               1075.              116.  
##  11 20150      1                 402.                602.              200.  
##  12 50930      1                  60.2               513.              453.  
##  13 22542      1                 138.                541.              404.  
##  14 25566      1                 322.                549.              228.  
##  15 46822      1                1439.                989.                0   
##  16 26123      1                 374.                511.              136.  
##  17 45922      1                 642.               1250.              608.  
##  18 47363      1                 658.               1237.              579.  
##  19 20292      1                 520.                689.              169.  
##  20 7605       1                1531.               1969.              438.  
##  21 48907      1                 367.                538.              171.  
##  22 17951      1                1366.                762.                0   
##  23 30225      1                 462.                637.              175.  
##  24 31533      1                 354.                763.              409.  
##  25 18596      1                 892.                872.                0   
##  26 1190       1                 705.                691.                0   
##  27 9938       1                1049.                891.                0   
##  28 20759      1                 551.                630.               79.8 
##  29 10920      1                 473.                609.              136.  
##  30 29367      1                 199.                561.              362.  
##  31 25521      1                  91.9               235.              144.  
##  32 19982      1                 779.                675.                0   
##  33 20266      1                1152.                741.                0   
##  34 47060      1                 102.                593.              492.  
##  35 37071      1                 939.                864.                0   
##  36 35465      1                 228.                691.              462.  
##  37 40630      1                 865.                826.                0   
##  38 20741      1                1453.               1152.                0   
##  39 11316      1                 270.                515.              245.  
##  40 34195      1                 875.                788.                0   
##  41 50534      1                 853.                825.                0   
##  42 4275       1                 260.                643.              382.  
##  43 31095      1                1338.               1106.                0   
##  44 4640       1                 722.                743.               20.5 
##  45 14859      1                 576.                757.              181.  
##  46 3805       1                1137.               1026.                0   
##  47 13493      1                1132.                927.                0   
##  48 41805      1                 632.                910.              278.  
##  49 16501      1                 249.                586.              336.  
##  50 8695       1                 650.                699.               48.4 
##  51 36057      1                1084.                938.                0   
##  52 26377      1                 465.                545.               80.4 
##  53 26769      1                 554.                634.               80.2 
##  54 27740      1                 360.                528.              168.  
##  55 8851       1                 631.                751.              119.  
##  56 17306      1                 791.                691.                0   
##  57 34358      1                 828.                802.                0   
##  58 16911      1                 758.                865.              108.  
##  59 12234      1                 394.                594.              200.  
##  60 28775      1                1076.                781.                0   
##  61 20418      1                1280.               1054.                0   
##  62 15973      1                 939.                862.                0   
##  63 21692      1                 325.                600.              276.  
##  64 35576      1                 755.                792.               37.0 
##  65 39138      1                1283.               1040.                0   
##  66 18526      1                1246.               1120.                0   
##  67 24105      1                 533.                726.              193.  
##  68 13730      1                1176.               1085.                0   
##  69 48942      1                 844.                724.                0   
##  70 33266      1                1032.                858.                0   
##  71 25091      1                1177.                949.                0   
##  72 12728      1                1219.               1112.                0   
##  73 3317       1                 563.                606.               43.4 
##  74 46051      1                1351.               1136.                0   
##  75 7745       1                1291.                696.                0   
##  76 7151       1                 984.                902.                0   
##  77 32069      1                 680.                670.                0   
##  78 44158      1                 226.                437.              210.  
##  79 34279      1                 911.                688.                0   
##  80 50273      1                1280.               1077.                0   
##  81 21044      1                 230.                650.              420.  
##  82 2354       1                 103.                415.              311.  
##  83 26604      1                1252.                769.                0   
##  84 34851      1                 681.                740.               59.1 
##  85 45057      1                 131.                551.              421.  
##  86 32374      1                 526.                603.               77.2 
##  87 20417      1                 524.                625.              101.  
##  88 38923      1                1205.                970.                0   
##  89 12088      1                1279.                951.                0   
##  90 11251      1                 211.                446.              235.  
##  91 19465      1                 834.                768.                0   
##  92 43318      1                1024.                947.                0   
##  93 38546      1                 597.                606.                9.42
##  94 23436      1                 791                 754.                0   
##  95 14960      1                 620.                695.               75.4 
##  96 25780      1                 301.                724.              422.  
##  97 31023      1                   9.35              259.              250.  
##  98 33061      1                 175.                523.              347.  
##  99 1130       1                 716.                774.               57.7 
## 100 38815      1                1160.               1059.                0   
## 101 4889       1                 769.                705.                0   
## 102 37237      1                 798.                782.                0   
## 103 21332      1                1465.               1197.                0   
## 104 37198      1                1041.                915.                0   
## 105 46239      1                1204.                886.                0   
## 106 28929      1                 115.                410.              294.  
## 107 38697      1                 831.                794.                0   
## 108 19531      1                 651.                785.              134.  
## 109 25704      1                  16.4               433.              417.  
## 110 36109      1                 252.                521.              269.  
## 111 15277      1                 932.                697.                0   
## 112 34067      1                 670.                733.               62.4 
## 113 17889      1                 342.                462.              120.  
## 114 30550      1                 704.                691.                0   
## 115 44414      1                1231.                954.                0   
## 116 28652      1                 694.                681.                0   
## 117 25198      1                 722.                771.               48.9 
## 118 34757      1                 829.                819.                0   
## 119 26662      1                1134.                998.                0   
## 120 45360      1                1385.               1026.                0   
## 121 33399      1                1275.               1123.                0   
## 122 9193       1                1380.               1174.                0   
## 123 36111      1                1318.                866.                0   
## 124 19122      1                 820.                808.                0   
## 125 26804      1                1052                 908.                0   
## 126 34631      1                 623.                726.              103.  
## 127 14552      1                1190.               1199.                8.69
## 128 10677      1                 488.                589.              102.  
## 129 22325      1                 716.                655.                0   
## 130 50891      1                 804.                842.               38.1 
## 131 22346      1                 959.                867.                0   
## 132 49863      1                 265.                597.              332.  
## 133 36245      1                 617.                643.               25.6 
## 134 13740      1                1190.                935.                0   
## 135 45066      1                1231.                848.                0   
## 136 14907      1                 305.                501.              196.  
## 137 49478      1                 881.                829.                0   
## 138 7918       1                 641.                694.               52.7 
## 139 32707      1                 716.                759.               43.0 
## 140 5490       1                2614.               2090.                0   
## 141 31929      1                 633.                623.                0   
## 142 22053      1                  50.8               621.              570.  
## 143 4931       1                1388.               1116.                0   
## 144 24664      1                 241.                423.              183.  
## 145 23029      1                1445.               1232.                0   
## 146 19177      1                 339.                463.              124.  
## 147 49135      1                 724.                719.                0   
## 148 28888      1                 115.                348.              233.  
## 149 12986      1                1283.               1038.                0   
## 150 44459      1                1123.                828.                0   
## 151 24239      1                 848.                770.                0   
## 152 32067      1                 226.                470.              243.  
## 153 12066      1                 335.                502.              167.  
## 154 32582      1                 276.                398.              122.  
## 155 26647      1                 530.               1288.              758.  
## 156 20199      1                1423.                974.                0   
## 157 33246      1                 487.                546.               58.4 
## 158 18293      1                 594.               1003.              409.  
## 159 15594      1                 504.                646.              142.  
## 160 48842      1                 788.                677.                0   
## 161 18578      1                 318.                553.              235.  
## 162 38429      1                  78.3               240.              162.  
## 163 31072      1                1344.                825.                0   
## 164 50698      1                 331.                420.               88.8 
## 165 7505       1                 165.                522.              357.  
## 166 42995      1                 293.                549.              256.  
## 167 34184      1                1099.                921.                0   
## 168 32044      1                1151.               1117.                0   
## 169 31661      1                 813.                786.                0   
## 170 12819      1                 885.                813.                0   
## 171 45147      1                1488.               1119.                0   
## 172 9284       1                 681.                761.               80.7 
## 173 26670      1                1263.               1170.                0   
## 174 49302      1                 348.                506.              159.  
## 175 4007       1                 561.                632.               70.4 
## 176 26106      1                 870.                789.                0   
## 177 44956      1                1246.               1012.                0   
## 178 1681       1                1283.               1087.                0   
## 179 46210      1                1370.                998.                0   
## 180 47946      1                 421.                486.               65.0 
## 181 45760      1                 441.                522.               81.7 
## 182 40735      1                 304.                467.              163.  
## 183 47932      1                 881.                823.                0   
## 184 42412      1                2312.               1890.                0   
## 185 37586      1                1159.               1061.                0   
## 186 35423      1                 832.                768.                0   
## 187 28309      1                1223.                820.                0   
## 188 46013      1                  64.7               332.              267.  
## 189 45346      1                 869.                855.                0   
## 190 25056      1                1115                 914.                0   
## 191 2258       1                 836.                825.                0   
## 192 23666      1                 460.                600.              140.  
## 193 47800      1                 172.                402.              230.  
## 194 12209      1                 689.                759.               69.4 
## 195 2309       1                 327.                551.              224.  
## 196 18450      1                 679.                712.               33.8 
## 197 37332      1                1481.                985.                0   
## 198 17244      1                1630.               1520.                0   
## 199 14869      1                 824.                794.                0   
## 200 43743      1                1440.               1215.                0   
## 201 11944      1                 551.                693.              142.  
## 202 26268      1                 108.                751.              643.  
## 203 5475       1                1082.                944.                0   
## 204 37999      1                1130.                931.                0   
## 205 11255      1                 831.                788.                0   
## 206 50558      1                1149.               1051.                0   
## 207 20785      1                1181.                947.                0   
## 208 10328      1                 738.                574.                0   
## 209 11389      1                1243.                835.                0   
## 210 39124      1                 412.                598.              186.  
## 211 30168      1                 211.                551.              340.  
## 212 17404      1                 496.                614.              118.  
## 213 40239      1                 368.                609.              241.  
## 214 6302       1                 670.                772.              102.  
## 215 11381      1                 464.                653.              190.  
## 216 33335      1                1273.               1079.                0   
## 217 10984      1                 828.                771.                0   
## 218 43295      1                1078.                740.                0   
## 219 32757      1                1387.               1127.                0   
## 220 11438      1                1426.               1144.                0   
## 221 40539      1                 157.                783.              626.  
## 222 18194      1                 137.                638.              501.  
## 223 48459      1                 858.                749.                0   
## 224 14543      1                   3.31              362.              359.  
## 225 7138       1                 782.                830.               48.2 
## 226 43399      1                 550.                776.              226.

Conclusão

Este relatório documenta as principais etapas do desenvolvimento de um modelo preditivo para análise de crédito, abordando desde a exploração inicial dos dados até a aplicação prática dos modelos. A seguir, destacam-se os principais pontos e resultados obtidos:

  1. Análise Exploratória:
    • A base de dados analisada apresentou uma boa diversidade de variáveis relevantes para modelagem, como saldo_final_mes, idade_historico_credito e mix_credito.
    • Identificamos possíveis outliers e padrões nas variáveis numéricas, o que contribuiu para o entendimento do perfil financeiro dos clientes.
  2. Modelagem:
    • O modelo de Árvore de Decisão foi útil para classificar clientes em bons e maus pagadores de maneira conservadora, com sensibilidade de 67,16%. No entanto, a especificidade de 21,24% indica que alguns maus pagadores podem ser erroneamente classificados como bons.
    • O modelo de Random Forest apresentou desempenho superior em prever a divida_total de bons pagadores, com MAE de 287.52 e RMSE de 375.24. As variáveis mix_credito e idade_historico_credito foram as mais relevantes para essa predição.
  3. Aplicação Prática:
    • Com base nos modelos desenvolvidos, foi possível calcular o limite pré-aprovado para novos clientes, seguindo a fórmula: \[ \text{Limite Aprovado} = \max(0, \text{Valor Previsto} - \text{Dívida Atual}) \]
    • A análise demonstrou que clientes com menor saldo e maior número de empréstimos tendem a ser mais conservadores na liberação de crédito.
  4. Reflexão e Possíveis Melhorias:
    • Embora os modelos tenham apresentado resultados promissores, desafios como a heterocedasticidade nos resíduos e a baixa especificidade do modelo determinístico indicam oportunidades de melhoria.
    • Para aprimorar a precisão do limite pré-aprovado, podem ser exploradas técnicas complementares, como Gradient Boosting ou Quantile Regression Forests.
    • Além disso, a inclusão de variáveis temporais, como mudanças no comportamento financeiro ao longo do tempo, poderia agregar valor à análise.
  5. Impacto Prático:
    • Este modelo pode ser integrado a sistemas automatizados de decisão de crédito em bancos digitais, oferecendo uma base interpretável e confiável para a concessão de limites pré-aprovados.
    • A abordagem conservadora garante maior segurança na tomada de decisões, minimizando riscos associados a maus pagadores.

Com base nos resultados apresentados, o trabalho mostra-se como um primeiro passo importante na construção de sistemas preditivos de crédito, abrindo espaço para futuras melhorias e refinamentos.