1 Introdução

Este documento apresenta uma Análise Exploratória de Dados (EDA) do conjunto de dados “Porto Seguro`s Safe Driver Prediction”, fornecido pela concessionária de seguros Porto Seguro como projeto de Machine Learning e com base nos Notebooks do projeto do Kaggle, especialmente do autor Headsortails. O documento visa apresentar uma análise detalhada dos dados coletados pela empresa e suas relações com a variável-alvo: saber se o cliente irá acionar o seguro no ano seguinte.

Não obstante, o desenvolvimento conta com uma seção de Feature Engineering, onde avalia a importância conjunta de variáveis para a estimativa da probabilidade de acionamento do seguro e, por fim, preparação dos dados para modelagem de algoritmos preditivos que estimam a probabilidade de cada cliente acionar o seguro no ano seguinte.

Por fim, a anonimização dos dados foi uma questão que chamou a atenção para a escolha deste conjunto de dados e eu espero que o desenvolvimento do estudo possa exemplificar etapas e obstáculos para o tratamento e análise de dados codificados para auxiliar analistas neste tipo de projeto que está cada vez mais comum.

2 Observação inicial dos dados

O conjunto de dados é fornecido já dividido entre treinamento e teste. Para a modelagem do algoritmo é utilizado somente o conjunto de treinamento, o conjunto de teste é utilizado para validar o funcionamento e a qualidade do algoritmo modelado. Pode ocorrer de empresas fornecerem o conjunto de teste sem os valores da variável-alvo (neste caso se o seguro foi aciondo ou não), logo é importante visualizar uma lista com todas as variáveis (colunas) presentes em cada arquivo .csv (treinamento e teste).

Inicialmente será plotado as listas (glimpse) das colunas dos dois conjuntos de dados (treinamento e teste), para conhecer os nomes e seus tipos (numérico, catégórico, binário, lógico, etc). Em seguida será plotado o resumo (summary), mostrando estatísticas básicas como mínimos, máximos, médias, medianas, primeiro e terceiro quartis. Esta visualização é importante para conhecer a ordem de grandeza das variáveis, bem como as quantidades de valores faltantes (missing ou NA) e para servir de consulta durante todo o desenvolvimento.

Para maiores detalhes sobre o funcionamento de conjuntos de dados e teste, sugiro pesquisar sobre: overfitting, underfitting, bias-variance tradeoff e validação cruzada.

Porteriormente serão realizadas as manipulações necessárias no tipo e combinadas em um único dataset para tratamento. E como as saídas destes códigos são extensas, foi dividido em duas abas para facilitar a visualização.

2.1 Treinamento - Tipos

## Rows: 595,212
## Columns: 59
## $ id             <int> 7, 9, 13, 16, 17, 19, 20, 22, 26, 28, 34, 35, 36, 43...
## $ target         <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0...
## $ ps_ind_01      <int> 2, 1, 5, 0, 0, 5, 2, 5, 5, 1, 5, 2, 2, 1, 5, 5, 1, 5...
## $ ps_ind_02_cat  <int> 2, 1, 4, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1...
## $ ps_ind_03      <int> 5, 7, 9, 2, 0, 4, 3, 4, 3, 2, 2, 3, 1, 3, 11, 3, 1, ...
## $ ps_ind_04_cat  <int> 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0...
## $ ps_ind_05_cat  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1...
## $ ps_ind_06_bin  <int> 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1...
## $ ps_ind_07_bin  <int> 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0...
## $ ps_ind_08_bin  <int> 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0...
## $ ps_ind_09_bin  <int> 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0...
## $ ps_ind_10_bin  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
## $ ps_ind_11_bin  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
## $ ps_ind_12_bin  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
## $ ps_ind_13_bin  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
## $ ps_ind_14      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
## $ ps_ind_15      <int> 11, 3, 12, 8, 9, 6, 8, 13, 6, 4, 3, 9, 10, 12, 10, 5...
## $ ps_ind_16_bin  <int> 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1...
## $ ps_ind_17_bin  <int> 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
## $ ps_ind_18_bin  <int> 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0...
## $ ps_reg_01      <dbl> 0.7, 0.8, 0.0, 0.9, 0.7, 0.9, 0.6, 0.7, 0.9, 0.9, 0....
## $ ps_reg_02      <dbl> 0.2, 0.4, 0.0, 0.2, 0.6, 1.8, 0.1, 0.4, 0.7, 1.4, 0....
## $ ps_reg_03      <dbl> 0.7180703, 0.7660777, NA, 0.5809475, 0.8407586, 2.33...
## $ ps_car_01_cat  <int> 10, 11, 7, 7, 11, 10, 6, 11, 10, 11, 11, 11, 6, 9, 1...
## $ ps_car_02_cat  <int> 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1...
## $ ps_car_03_cat  <int> NA, NA, NA, 0, NA, NA, NA, 0, NA, 0, NA, NA, NA, 0, ...
## $ ps_car_04_cat  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 8, 0, 0, 0, 0, 9, 1, 0...
## $ ps_car_05_cat  <int> 1, NA, NA, 1, NA, 0, 1, 0, 1, 0, NA, NA, NA, 1, NA, ...
## $ ps_car_06_cat  <int> 4, 11, 14, 11, 14, 14, 11, 11, 14, 14, 13, 11, 11, 6...
## $ ps_car_07_cat  <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...
## $ ps_car_08_cat  <int> 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0...
## $ ps_car_09_cat  <int> 0, 2, 2, 3, 2, 0, 0, 2, 0, 2, 2, 0, 2, 2, 2, 0, 0, 2...
## $ ps_car_10_cat  <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...
## $ ps_car_11_cat  <int> 12, 19, 60, 104, 82, 104, 99, 30, 68, 104, 20, 36, 1...
## $ ps_car_11      <int> 2, 3, 1, 1, 3, 2, 2, 3, 3, 2, 3, 3, 3, 3, 1, 2, 3, 2...
## $ ps_car_12      <dbl> 0.4000000, 0.3162278, 0.3162278, 0.3741657, 0.316069...
## $ ps_car_13      <dbl> 0.8836789, 0.6188165, 0.6415857, 0.5429488, 0.565831...
## $ ps_car_14      <dbl> 0.3708099, 0.3887158, 0.3472751, 0.2949576, 0.365102...
## $ ps_car_15      <dbl> 3.605551, 2.449490, 3.316625, 2.000000, 2.000000, 3....
## $ ps_calc_01     <dbl> 0.6, 0.3, 0.5, 0.6, 0.4, 0.7, 0.2, 0.1, 0.9, 0.7, 0....
## $ ps_calc_02     <dbl> 0.5, 0.1, 0.7, 0.9, 0.6, 0.8, 0.6, 0.5, 0.8, 0.8, 0....
## $ ps_calc_03     <dbl> 0.2, 0.3, 0.1, 0.1, 0.0, 0.4, 0.5, 0.1, 0.6, 0.8, 0....
## $ ps_calc_04     <int> 3, 2, 2, 2, 2, 3, 2, 1, 3, 2, 2, 2, 4, 2, 3, 2, 2, 1...
## $ ps_calc_05     <int> 1, 1, 2, 4, 2, 1, 2, 2, 1, 2, 3, 2, 1, 1, 1, 1, 1, 3...
## $ ps_calc_06     <int> 10, 9, 9, 7, 6, 8, 8, 7, 7, 8, 8, 8, 8, 10, 8, 9, 10...
## $ ps_calc_07     <int> 1, 5, 1, 1, 3, 2, 1, 1, 3, 2, 2, 2, 4, 1, 2, 5, 6, 2...
## $ ps_calc_08     <int> 10, 8, 8, 8, 10, 11, 8, 6, 9, 9, 9, 10, 11, 8, 6, 10...
## $ ps_calc_09     <int> 1, 1, 2, 4, 2, 3, 3, 1, 4, 1, 4, 1, 1, 3, 3, 2, 3, 1...
## $ ps_calc_10     <int> 5, 7, 7, 2, 12, 8, 10, 13, 11, 11, 7, 8, 9, 8, 12, 1...
## $ ps_calc_11     <int> 9, 3, 4, 2, 3, 4, 3, 7, 4, 3, 6, 9, 6, 2, 4, 5, 3, 9...
## $ ps_calc_12     <int> 1, 1, 2, 2, 1, 2, 0, 1, 2, 5, 3, 2, 3, 0, 1, 2, 3, 1...
## $ ps_calc_13     <int> 5, 1, 7, 4, 1, 0, 0, 3, 1, 0, 3, 1, 3, 4, 3, 6, 1, 3...
## $ ps_calc_14     <int> 8, 9, 7, 9, 3, 9, 10, 6, 5, 6, 6, 10, 8, 3, 9, 7, 8,...
## $ ps_calc_15_bin <int> 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
## $ ps_calc_16_bin <int> 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1...
## $ ps_calc_17_bin <int> 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1...
## $ ps_calc_18_bin <int> 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0...
## $ ps_calc_19_bin <int> 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0...
## $ ps_calc_20_bin <int> 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0...

2.2 Treinamento - Resumo

##        id              target          ps_ind_01   ps_ind_02_cat 
##  Min.   :      7   Min.   :0.00000   Min.   :0.0   Min.   :1.00  
##  1st Qu.: 371992   1st Qu.:0.00000   1st Qu.:0.0   1st Qu.:1.00  
##  Median : 743548   Median :0.00000   Median :1.0   Median :1.00  
##  Mean   : 743804   Mean   :0.03645   Mean   :1.9   Mean   :1.36  
##  3rd Qu.:1115549   3rd Qu.:0.00000   3rd Qu.:3.0   3rd Qu.:2.00  
##  Max.   :1488027   Max.   :1.00000   Max.   :7.0   Max.   :4.00  
##                                                    NA's   :216   
##    ps_ind_03      ps_ind_04_cat   ps_ind_05_cat   ps_ind_06_bin   
##  Min.   : 0.000   Min.   :0.000   Min.   :0.000   Min.   :0.0000  
##  1st Qu.: 2.000   1st Qu.:0.000   1st Qu.:0.000   1st Qu.:0.0000  
##  Median : 4.000   Median :0.000   Median :0.000   Median :0.0000  
##  Mean   : 4.423   Mean   :0.417   Mean   :0.419   Mean   :0.3937  
##  3rd Qu.: 6.000   3rd Qu.:1.000   3rd Qu.:0.000   3rd Qu.:1.0000  
##  Max.   :11.000   Max.   :1.000   Max.   :6.000   Max.   :1.0000  
##                   NA's   :83      NA's   :5809                    
##  ps_ind_07_bin   ps_ind_08_bin    ps_ind_09_bin    ps_ind_10_bin     
##  Min.   :0.000   Min.   :0.0000   Min.   :0.0000   Min.   :0.000000  
##  1st Qu.:0.000   1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.000000  
##  Median :0.000   Median :0.0000   Median :0.0000   Median :0.000000  
##  Mean   :0.257   Mean   :0.1639   Mean   :0.1853   Mean   :0.000373  
##  3rd Qu.:1.000   3rd Qu.:0.0000   3rd Qu.:0.0000   3rd Qu.:0.000000  
##  Max.   :1.000   Max.   :1.0000   Max.   :1.0000   Max.   :1.000000  
##                                                                      
##  ps_ind_11_bin      ps_ind_12_bin      ps_ind_13_bin         ps_ind_14      
##  Min.   :0.000000   Min.   :0.000000   Min.   :0.0000000   Min.   :0.00000  
##  1st Qu.:0.000000   1st Qu.:0.000000   1st Qu.:0.0000000   1st Qu.:0.00000  
##  Median :0.000000   Median :0.000000   Median :0.0000000   Median :0.00000  
##  Mean   :0.001692   Mean   :0.009439   Mean   :0.0009476   Mean   :0.01245  
##  3rd Qu.:0.000000   3rd Qu.:0.000000   3rd Qu.:0.0000000   3rd Qu.:0.00000  
##  Max.   :1.000000   Max.   :1.000000   Max.   :1.0000000   Max.   :4.00000  
##                                                                             
##    ps_ind_15    ps_ind_16_bin    ps_ind_17_bin    ps_ind_18_bin   
##  Min.   : 0.0   Min.   :0.0000   Min.   :0.0000   Min.   :0.0000  
##  1st Qu.: 5.0   1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.0000  
##  Median : 7.0   Median :1.0000   Median :0.0000   Median :0.0000  
##  Mean   : 7.3   Mean   :0.6608   Mean   :0.1211   Mean   :0.1534  
##  3rd Qu.:10.0   3rd Qu.:1.0000   3rd Qu.:0.0000   3rd Qu.:0.0000  
##  Max.   :13.0   Max.   :1.0000   Max.   :1.0000   Max.   :1.0000  
##                                                                   
##    ps_reg_01       ps_reg_02        ps_reg_03      ps_car_01_cat   
##  Min.   :0.000   Min.   :0.0000   Min.   :0.06     Min.   : 0.000  
##  1st Qu.:0.400   1st Qu.:0.2000   1st Qu.:0.63     1st Qu.: 7.000  
##  Median :0.700   Median :0.3000   Median :0.80     Median : 7.000  
##  Mean   :0.611   Mean   :0.4392   Mean   :0.89     Mean   : 8.298  
##  3rd Qu.:0.900   3rd Qu.:0.6000   3rd Qu.:1.08     3rd Qu.:11.000  
##  Max.   :0.900   Max.   :1.8000   Max.   :4.04     Max.   :11.000  
##                                   NA's   :107772   NA's   :107     
##  ps_car_02_cat    ps_car_03_cat    ps_car_04_cat    ps_car_05_cat   
##  Min.   :0.0000   Min.   :0.0      Min.   :0.0000   Min.   :0.00    
##  1st Qu.:1.0000   1st Qu.:0.0      1st Qu.:0.0000   1st Qu.:0.00    
##  Median :1.0000   Median :1.0      Median :0.0000   Median :1.00    
##  Mean   :0.8299   Mean   :0.6      Mean   :0.7252   Mean   :0.53    
##  3rd Qu.:1.0000   3rd Qu.:1.0      3rd Qu.:0.0000   3rd Qu.:1.00    
##  Max.   :1.0000   Max.   :1.0      Max.   :9.0000   Max.   :1.00    
##  NA's   :5        NA's   :411231                    NA's   :266551  
##  ps_car_06_cat    ps_car_07_cat   ps_car_08_cat    ps_car_09_cat  
##  Min.   : 0.000   Min.   :0.000   Min.   :0.0000   Min.   :0.000  
##  1st Qu.: 1.000   1st Qu.:1.000   1st Qu.:1.0000   1st Qu.:0.000  
##  Median : 7.000   Median :1.000   Median :1.0000   Median :2.000  
##  Mean   : 6.555   Mean   :0.948   Mean   :0.8321   Mean   :1.331  
##  3rd Qu.:11.000   3rd Qu.:1.000   3rd Qu.:1.0000   3rd Qu.:2.000  
##  Max.   :17.000   Max.   :1.000   Max.   :1.0000   Max.   :4.000  
##                   NA's   :11489                    NA's   :569    
##  ps_car_10_cat    ps_car_11_cat      ps_car_11       ps_car_12     
##  Min.   :0.0000   Min.   :  1.00   Min.   :0.000   Min.   :0.1000  
##  1st Qu.:1.0000   1st Qu.: 32.00   1st Qu.:2.000   1st Qu.:0.3162  
##  Median :1.0000   Median : 65.00   Median :3.000   Median :0.3742  
##  Mean   :0.9921   Mean   : 62.22   Mean   :2.346   Mean   :0.3799  
##  3rd Qu.:1.0000   3rd Qu.: 93.00   3rd Qu.:3.000   3rd Qu.:0.4000  
##  Max.   :2.0000   Max.   :104.00   Max.   :3.000   Max.   :1.2649  
##                                    NA's   :5       NA's   :1       
##    ps_car_13        ps_car_14       ps_car_15       ps_calc_01    
##  Min.   :0.2506   Min.   :0.11    Min.   :0.000   Min.   :0.0000  
##  1st Qu.:0.6709   1st Qu.:0.35    1st Qu.:2.828   1st Qu.:0.2000  
##  Median :0.7658   Median :0.37    Median :3.317   Median :0.5000  
##  Mean   :0.8133   Mean   :0.37    Mean   :3.066   Mean   :0.4498  
##  3rd Qu.:0.9062   3rd Qu.:0.40    3rd Qu.:3.606   3rd Qu.:0.7000  
##  Max.   :3.7206   Max.   :0.64    Max.   :3.742   Max.   :0.9000  
##                   NA's   :42620                                   
##    ps_calc_02       ps_calc_03       ps_calc_04      ps_calc_05   
##  Min.   :0.0000   Min.   :0.0000   Min.   :0.000   Min.   :0.000  
##  1st Qu.:0.2000   1st Qu.:0.2000   1st Qu.:2.000   1st Qu.:1.000  
##  Median :0.4000   Median :0.5000   Median :2.000   Median :2.000  
##  Mean   :0.4496   Mean   :0.4498   Mean   :2.372   Mean   :1.886  
##  3rd Qu.:0.7000   3rd Qu.:0.7000   3rd Qu.:3.000   3rd Qu.:3.000  
##  Max.   :0.9000   Max.   :0.9000   Max.   :5.000   Max.   :6.000  
##                                                                   
##    ps_calc_06       ps_calc_07      ps_calc_08       ps_calc_09   
##  Min.   : 0.000   Min.   :0.000   Min.   : 2.000   Min.   :0.000  
##  1st Qu.: 7.000   1st Qu.:2.000   1st Qu.: 8.000   1st Qu.:1.000  
##  Median : 8.000   Median :3.000   Median : 9.000   Median :2.000  
##  Mean   : 7.689   Mean   :3.006   Mean   : 9.226   Mean   :2.339  
##  3rd Qu.: 9.000   3rd Qu.:4.000   3rd Qu.:10.000   3rd Qu.:3.000  
##  Max.   :10.000   Max.   :9.000   Max.   :12.000   Max.   :7.000  
##                                                                   
##    ps_calc_10       ps_calc_11       ps_calc_12       ps_calc_13    
##  Min.   : 0.000   Min.   : 0.000   Min.   : 0.000   Min.   : 0.000  
##  1st Qu.: 6.000   1st Qu.: 4.000   1st Qu.: 1.000   1st Qu.: 2.000  
##  Median : 8.000   Median : 5.000   Median : 1.000   Median : 3.000  
##  Mean   : 8.434   Mean   : 5.441   Mean   : 1.442   Mean   : 2.872  
##  3rd Qu.:10.000   3rd Qu.: 7.000   3rd Qu.: 2.000   3rd Qu.: 4.000  
##  Max.   :25.000   Max.   :19.000   Max.   :10.000   Max.   :13.000  
##                                                                     
##    ps_calc_14     ps_calc_15_bin   ps_calc_16_bin   ps_calc_17_bin  
##  Min.   : 0.000   Min.   :0.0000   Min.   :0.0000   Min.   :0.0000  
##  1st Qu.: 6.000   1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.0000  
##  Median : 7.000   Median :0.0000   Median :1.0000   Median :1.0000  
##  Mean   : 7.539   Mean   :0.1224   Mean   :0.6278   Mean   :0.5542  
##  3rd Qu.: 9.000   3rd Qu.:0.0000   3rd Qu.:1.0000   3rd Qu.:1.0000  
##  Max.   :23.000   Max.   :1.0000   Max.   :1.0000   Max.   :1.0000  
##                                                                     
##  ps_calc_18_bin   ps_calc_19_bin  ps_calc_20_bin  
##  Min.   :0.0000   Min.   :0.000   Min.   :0.0000  
##  1st Qu.:0.0000   1st Qu.:0.000   1st Qu.:0.0000  
##  Median :0.0000   Median :0.000   Median :0.0000  
##  Mean   :0.2872   Mean   :0.349   Mean   :0.1533  
##  3rd Qu.:1.0000   3rd Qu.:1.000   3rd Qu.:0.0000  
##  Max.   :1.0000   Max.   :1.000   Max.   :1.0000  
## 

2.3 Teste - Tipos

## Rows: 892,816
## Columns: 58
## $ id             <int> 0, 1, 2, 3, 4, 5, 6, 8, 10, 11, 12, 14, 15, 18, 21, ...
## $ ps_ind_01      <int> 0, 4, 5, 0, 5, 0, 0, 0, 0, 1, 0, 1, 1, 3, 0, 2, 2, 0...
## $ ps_ind_02_cat  <int> 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2...
## $ ps_ind_03      <int> 8, 5, 3, 6, 7, 6, 3, 0, 7, 6, 5, 4, 2, 3, 1, 2, 3, 0...
## $ ps_ind_04_cat  <int> 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1...
## $ ps_ind_05_cat  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 6, 0, 0, N...
## $ ps_ind_06_bin  <int> 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1...
## $ ps_ind_07_bin  <int> 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0...
## $ ps_ind_08_bin  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0...
## $ ps_ind_09_bin  <int> 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0...
## $ ps_ind_10_bin  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
## $ ps_ind_11_bin  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
## $ ps_ind_12_bin  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
## $ ps_ind_13_bin  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
## $ ps_ind_14      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
## $ ps_ind_15      <int> 12, 5, 10, 4, 4, 10, 11, 7, 6, 7, 3, 9, 8, 0, 8, 9, ...
## $ ps_ind_16_bin  <int> 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1...
## $ ps_ind_17_bin  <int> 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0...
## $ ps_ind_18_bin  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0...
## $ ps_reg_01      <dbl> 0.5, 0.9, 0.4, 0.1, 0.9, 0.9, 0.1, 0.9, 0.4, 0.9, 0....
## $ ps_reg_02      <dbl> 0.3, 0.5, 0.0, 0.2, 0.4, 0.5, 0.1, 1.1, 0.0, 1.0, 0....
## $ ps_reg_03      <dbl> 0.6103278, 0.7713624, 0.9161741, NA, 0.8177714, 0.75...
## $ ps_car_01_cat  <int> 7, 4, 11, 7, 11, 9, 6, 7, 11, 11, 11, 11, 11, 11, 6,...
## $ ps_car_02_cat  <int> 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1...
## $ ps_car_03_cat  <int> NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, 1, NA...
## $ ps_car_04_cat  <int> 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2, 0, 0...
## $ ps_car_05_cat  <int> NA, 0, NA, NA, NA, NA, 0, NA, 0, NA, NA, NA, 1, NA, ...
## $ ps_car_06_cat  <int> 1, 11, 14, 1, 11, 11, 1, 11, 2, 4, 11, 7, 6, 1, 11, ...
## $ ps_car_07_cat  <int> 1, 1, 1, 1, 1, 0, 1, 1, NA, 1, 1, 1, 1, 1, 1, 1, 1, ...
## $ ps_car_08_cat  <int> 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1...
## $ ps_car_09_cat  <int> 2, 0, 2, 2, 2, 2, 0, 2, 0, 2, 0, 2, 2, 1, 0, 2, 2, 2...
## $ ps_car_10_cat  <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...
## $ ps_car_11_cat  <int> 65, 103, 29, 40, 101, 11, 10, 103, 104, 104, 103, 10...
## $ ps_car_11      <int> 1, 1, 3, 2, 3, 2, 2, 3, 2, 2, 3, 3, 2, 1, 2, 0, 1, 3...
## $ ps_car_12      <dbl> 0.3162278, 0.3162278, 0.4000000, 0.3741657, 0.374165...
## $ ps_car_13      <dbl> 0.6695564, 0.6063200, 0.8962387, 0.6521104, 0.812914...
## $ ps_car_14      <dbl> 0.3521363, 0.3583295, 0.3984972, 0.3814446, 0.385097...
## $ ps_car_15      <dbl> 3.464102, 2.828427, 3.316625, 2.449490, 3.316625, 3....
## $ ps_calc_01     <dbl> 0.1, 0.4, 0.6, 0.1, 0.9, 0.7, 0.9, 0.8, 0.9, 0.0, 0....
## $ ps_calc_02     <dbl> 0.8, 0.5, 0.6, 0.5, 0.6, 0.9, 0.8, 0.9, 0.3, 0.9, 0....
## $ ps_calc_03     <dbl> 0.6, 0.4, 0.6, 0.5, 0.8, 0.4, 0.8, 0.5, 0.0, 0.7, 0....
## $ ps_calc_04     <int> 1, 3, 2, 2, 3, 2, 1, 2, 2, 2, 2, 2, 3, 2, 2, 1, 4, 3...
## $ ps_calc_05     <int> 1, 3, 3, 1, 4, 1, 1, 2, 2, 1, 2, 2, 1, 2, 3, 4, 0, 2...
## $ ps_calc_06     <int> 6, 8, 7, 7, 7, 9, 7, 8, 9, 7, 5, 9, 8, 7, 7, 8, 9, 8...
## $ ps_calc_07     <int> 3, 4, 4, 3, 1, 5, 3, 4, 7, 1, 5, 3, 0, 1, 3, 3, 1, 5...
## $ ps_calc_08     <int> 6, 10, 6, 12, 10, 9, 9, 11, 9, 9, 7, 10, 9, 9, 9, 9,...
## $ ps_calc_09     <int> 2, 2, 3, 1, 4, 4, 5, 2, 0, 1, 2, 1, 4, 1, 4, 3, 3, 1...
## $ ps_calc_10     <int> 9, 7, 12, 13, 12, 12, 6, 8, 10, 11, 10, 4, 7, 13, 7,...
## $ ps_calc_11     <int> 1, 2, 4, 5, 4, 8, 2, 3, 5, 6, 2, 4, 3, 7, 6, 9, 3, 5...
## $ ps_calc_12     <int> 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 2, 4, 0, 3, 0, 1, 2...
## $ ps_calc_13     <int> 1, 3, 2, 0, 0, 4, 4, 4, 4, 6, 1, 7, 0, 5, 5, 2, 2, 3...
## $ ps_calc_14     <int> 12, 10, 4, 5, 4, 9, 6, 9, 6, 10, 8, 8, 12, 9, 6, 11,...
## $ ps_calc_15_bin <int> 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1...
## $ ps_calc_16_bin <int> 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1...
## $ ps_calc_17_bin <int> 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1...
## $ ps_calc_18_bin <int> 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0...
## $ ps_calc_19_bin <int> 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1...
## $ ps_calc_20_bin <int> 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...

2.4 Teste - Resumo

##        id            ps_ind_01     ps_ind_02_cat     ps_ind_03     
##  Min.   :      0   Min.   :0.000   Min.   :1.000   Min.   : 0.000  
##  1st Qu.: 372022   1st Qu.:0.000   1st Qu.:1.000   1st Qu.: 2.000  
##  Median : 744307   Median :1.000   Median :1.000   Median : 4.000  
##  Mean   : 744154   Mean   :1.902   Mean   :1.359   Mean   : 4.414  
##  3rd Qu.:1116309   3rd Qu.:3.000   3rd Qu.:2.000   3rd Qu.: 6.000  
##  Max.   :1488026   Max.   :7.000   Max.   :4.000   Max.   :11.000  
##                                    NA's   :307                     
##  ps_ind_04_cat    ps_ind_05_cat   ps_ind_06_bin    ps_ind_07_bin   
##  Min.   :0.0000   Min.   :0.000   Min.   :0.0000   Min.   :0.0000  
##  1st Qu.:0.0000   1st Qu.:0.000   1st Qu.:0.0000   1st Qu.:0.0000  
##  Median :0.0000   Median :0.000   Median :0.0000   Median :0.0000  
##  Mean   :0.4176   Mean   :0.422   Mean   :0.3932   Mean   :0.2572  
##  3rd Qu.:1.0000   3rd Qu.:0.000   3rd Qu.:1.0000   3rd Qu.:1.0000  
##  Max.   :1.0000   Max.   :6.000   Max.   :1.0000   Max.   :1.0000  
##  NA's   :145      NA's   :8710                                     
##  ps_ind_08_bin    ps_ind_09_bin    ps_ind_10_bin      ps_ind_11_bin     
##  Min.   :0.0000   Min.   :0.0000   Min.   :0.000000   Min.   :0.000000  
##  1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.000000   1st Qu.:0.000000  
##  Median :0.0000   Median :0.0000   Median :0.000000   Median :0.000000  
##  Mean   :0.1637   Mean   :0.1859   Mean   :0.000373   Mean   :0.001595  
##  3rd Qu.:0.0000   3rd Qu.:0.0000   3rd Qu.:0.000000   3rd Qu.:0.000000  
##  Max.   :1.0000   Max.   :1.0000   Max.   :1.000000   Max.   :1.000000  
##                                                                         
##  ps_ind_12_bin      ps_ind_13_bin        ps_ind_14         ps_ind_15     
##  Min.   :0.000000   Min.   :0.000000   Min.   :0.00000   Min.   : 0.000  
##  1st Qu.:0.000000   1st Qu.:0.000000   1st Qu.:0.00000   1st Qu.: 5.000  
##  Median :0.000000   Median :0.000000   Median :0.00000   Median : 7.000  
##  Mean   :0.009376   Mean   :0.001039   Mean   :0.01238   Mean   : 7.297  
##  3rd Qu.:0.000000   3rd Qu.:0.000000   3rd Qu.:0.00000   3rd Qu.:10.000  
##  Max.   :1.000000   Max.   :1.000000   Max.   :4.00000   Max.   :13.000  
##                                                                          
##  ps_ind_16_bin    ps_ind_17_bin    ps_ind_18_bin     ps_reg_01     
##  Min.   :0.0000   Min.   :0.0000   Min.   :0.000   Min.   :0.0000  
##  1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.000   1st Qu.:0.4000  
##  Median :1.0000   Median :0.0000   Median :0.000   Median :0.7000  
##  Mean   :0.6606   Mean   :0.1204   Mean   :0.155   Mean   :0.6111  
##  3rd Qu.:1.0000   3rd Qu.:0.0000   3rd Qu.:0.000   3rd Qu.:0.9000  
##  Max.   :1.0000   Max.   :1.0000   Max.   :1.000   Max.   :0.9000  
##                                                                    
##    ps_reg_02        ps_reg_03      ps_car_01_cat    ps_car_02_cat 
##  Min.   :0.0000   Min.   :0.06     Min.   : 0.000   Min.   :0.00  
##  1st Qu.:0.2000   1st Qu.:0.63     1st Qu.: 7.000   1st Qu.:1.00  
##  Median :0.3000   Median :0.80     Median : 7.000   Median :1.00  
##  Mean   :0.4399   Mean   :0.89     Mean   : 8.294   Mean   :0.83  
##  3rd Qu.:0.6000   3rd Qu.:1.09     3rd Qu.:11.000   3rd Qu.:1.00  
##  Max.   :1.8000   Max.   :4.42     Max.   :11.000   Max.   :1.00  
##                   NA's   :161684   NA's   :160      NA's   :5     
##  ps_car_03_cat    ps_car_04_cat    ps_car_05_cat    ps_car_06_cat   
##  Min.   :0.0      Min.   :0.0000   Min.   :0.0      Min.   : 0.000  
##  1st Qu.:0.0      1st Qu.:0.0000   1st Qu.:0.0      1st Qu.: 1.000  
##  Median :1.0      Median :0.0000   Median :1.0      Median : 7.000  
##  Mean   :0.6      Mean   :0.7258   Mean   :0.5      Mean   : 6.564  
##  3rd Qu.:1.0      3rd Qu.:0.0000   3rd Qu.:1.0      3rd Qu.:11.000  
##  Max.   :1.0      Max.   :9.0000   Max.   :1.0      Max.   :17.000  
##  NA's   :616911                    NA's   :400359                   
##  ps_car_07_cat   ps_car_08_cat    ps_car_09_cat  ps_car_10_cat   
##  Min.   :0.000   Min.   :0.0000   Min.   :0.00   Min.   :0.0000  
##  1st Qu.:1.000   1st Qu.:1.0000   1st Qu.:0.00   1st Qu.:1.0000  
##  Median :1.000   Median :1.0000   Median :2.00   Median :1.0000  
##  Mean   :0.948   Mean   :0.8323   Mean   :1.33   Mean   :0.9921  
##  3rd Qu.:1.000   3rd Qu.:1.0000   3rd Qu.:2.00   3rd Qu.:1.0000  
##  Max.   :1.000   Max.   :1.0000   Max.   :4.00   Max.   :2.0000  
##  NA's   :17331                    NA's   :877                    
##  ps_car_11_cat      ps_car_11       ps_car_12        ps_car_13     
##  Min.   :  1.00   Min.   :0.000   Min.   :0.1414   Min.   :0.2758  
##  1st Qu.: 32.00   1st Qu.:2.000   1st Qu.:0.3162   1st Qu.:0.6712  
##  Median : 65.00   Median :3.000   Median :0.3742   Median :0.7661  
##  Mean   : 62.28   Mean   :2.347   Mean   :0.3800   Mean   :0.8136  
##  3rd Qu.: 94.00   3rd Qu.:3.000   3rd Qu.:0.4000   3rd Qu.:0.9061  
##  Max.   :104.00   Max.   :3.000   Max.   :1.2649   Max.   :4.0313  
##                   NA's   :1                                        
##    ps_car_14       ps_car_15       ps_calc_01       ps_calc_02    
##  Min.   :0.11    Min.   :0.000   Min.   :0.0000   Min.   :0.0000  
##  1st Qu.:0.35    1st Qu.:2.828   1st Qu.:0.2000   1st Qu.:0.2000  
##  Median :0.37    Median :3.317   Median :0.4000   Median :0.5000  
##  Mean   :0.37    Mean   :3.068   Mean   :0.4496   Mean   :0.4505  
##  3rd Qu.:0.40    3rd Qu.:3.606   3rd Qu.:0.7000   3rd Qu.:0.7000  
##  Max.   :0.64    Max.   :3.742   Max.   :0.9000   Max.   :0.9000  
##  NA's   :63805                                                    
##    ps_calc_03       ps_calc_04      ps_calc_05      ps_calc_06    
##  Min.   :0.0000   Min.   :0.000   Min.   :0.000   Min.   : 1.000  
##  1st Qu.:0.2000   1st Qu.:2.000   1st Qu.:1.000   1st Qu.: 7.000  
##  Median :0.4000   Median :2.000   Median :2.000   Median : 8.000  
##  Mean   :0.4501   Mean   :2.371   Mean   :1.885   Mean   : 7.688  
##  3rd Qu.:0.7000   3rd Qu.:3.000   3rd Qu.:3.000   3rd Qu.: 9.000  
##  Max.   :0.9000   Max.   :5.000   Max.   :6.000   Max.   :10.000  
##                                                                   
##    ps_calc_07     ps_calc_08       ps_calc_09      ps_calc_10    
##  Min.   :0.00   Min.   : 1.000   Min.   :0.000   Min.   : 0.000  
##  1st Qu.:2.00   1st Qu.: 8.000   1st Qu.:1.000   1st Qu.: 6.000  
##  Median :3.00   Median : 9.000   Median :2.000   Median : 8.000  
##  Mean   :3.01   Mean   : 9.226   Mean   :2.339   Mean   : 8.443  
##  3rd Qu.:4.00   3rd Qu.:10.000   3rd Qu.:3.000   3rd Qu.:10.000  
##  Max.   :9.00   Max.   :12.000   Max.   :7.000   Max.   :25.000  
##                                                                  
##    ps_calc_11       ps_calc_12      ps_calc_13       ps_calc_14   
##  Min.   : 0.000   Min.   : 0.00   Min.   : 0.000   Min.   : 0.00  
##  1st Qu.: 4.000   1st Qu.: 1.00   1st Qu.: 2.000   1st Qu.: 6.00  
##  Median : 5.000   Median : 1.00   Median : 3.000   Median : 7.00  
##  Mean   : 5.438   Mean   : 1.44   Mean   : 2.875   Mean   : 7.54  
##  3rd Qu.: 7.000   3rd Qu.: 2.00   3rd Qu.: 4.000   3rd Qu.: 9.00  
##  Max.   :20.000   Max.   :11.00   Max.   :15.000   Max.   :28.00  
##                                                                   
##  ps_calc_15_bin   ps_calc_16_bin   ps_calc_17_bin   ps_calc_18_bin  
##  Min.   :0.0000   Min.   :0.0000   Min.   :0.0000   Min.   :0.0000  
##  1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.0000  
##  Median :0.0000   Median :1.0000   Median :1.0000   Median :0.0000  
##  Mean   :0.1237   Mean   :0.6278   Mean   :0.5547   Mean   :0.2878  
##  3rd Qu.:0.0000   3rd Qu.:1.0000   3rd Qu.:1.0000   3rd Qu.:1.0000  
##  Max.   :1.0000   Max.   :1.0000   Max.   :1.0000   Max.   :1.0000  
##                                                                     
##  ps_calc_19_bin   ps_calc_20_bin  
##  Min.   :0.0000   Min.   :0.0000  
##  1st Qu.:0.0000   1st Qu.:0.0000  
##  Median :0.0000   Median :0.0000  
##  Mean   :0.3493   Mean   :0.1524  
##  3rd Qu.:1.0000   3rd Qu.:0.0000  
##  Max.   :1.0000   Max.   :1.0000  
## 

2.5 Valores missing

## Existem 846458 valores missing no conjunto de teinamento
## Existem 1270295 valores missing no conjunto de teste

3 Manupilação inicial de tipo de dados

A partir de agora será adotado para a coluna a nomenclatura de variável, sendo cada linha uma observação ou indivíduo (neste caso, cada linha um cliente). Portanto:

-coluna == variável -linha == observação / indivíduo / cliente

A seção acima permitiu identificar que existem 2 tipos de variáveis: números inteiros (integer / int) e valores decimais (double / dbl). Em contrapartida, o resumo estatístico nos mostra qua algumas variáveis possuem exclusivamente valores 0 e 1, muito comum em colunas anomizadas (como é o caso) e isso é comprovado pelos nomes que a empresa deu as colunas. Algumas teminam com _bin.

Para conhecer mais sobre conversão de dados em binários, sugir pesquisar por One Hot Encoding, servem para anomização e são extremamente úteis especialmente para algoritmos de regressão ou modelos que necessitam que os dados sejam numéricos.

De forma semelhante, percebe-se que algumas variáveis terminam com _cat, indicando que aquela variável é categórica e que para cada categoria foi atribuido um valor inteiro como forma de codificar os dados, como por exemplo:

-carro de passeio == 1 -moto == 2 -caminhonete == 3

Esta técnica é conhecida como label encoding ou integer encoding, tem função similar ao ‘one hot encoding’, é mais organizada porém com um desempenho um pouco pior.

Em resumo, estes dados precisam ter seus tipos transformados. Na linguagem R, o tipo de dados utilizado para representar categorias é o tipo fator/factor.

Transformando variáveis categóricas em fatores e binárias em valores lógicos.

3.1 Juntando em um único dataset para tratamento de dados

## Rows: 1,488,028
## Columns: 60
## $ id             <int> 7, 9, 13, 16, 17, 19, 20, 22, 26, 28, 34, 35, 36, 43...
## $ target         <fct> 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0...
## $ ps_ind_01      <int> 2, 1, 5, 0, 0, 5, 2, 5, 5, 1, 5, 2, 2, 1, 5, 5, 1, 5...
## $ ps_ind_02_cat  <fct> 2, 1, 4, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1...
## $ ps_ind_03      <int> 5, 7, 9, 2, 0, 4, 3, 4, 3, 2, 2, 3, 1, 3, 11, 3, 1, ...
## $ ps_ind_04_cat  <fct> 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0...
## $ ps_ind_05_cat  <fct> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1...
## $ ps_ind_06_bin  <lgl> FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE,...
## $ ps_ind_07_bin  <lgl> TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE...
## $ ps_ind_08_bin  <lgl> FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE...
## $ ps_ind_09_bin  <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALS...
## $ ps_ind_10_bin  <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FAL...
## $ ps_ind_11_bin  <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FAL...
## $ ps_ind_12_bin  <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FAL...
## $ ps_ind_13_bin  <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FAL...
## $ ps_ind_14      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
## $ ps_ind_15      <int> 11, 3, 12, 8, 9, 6, 8, 13, 6, 4, 3, 9, 10, 12, 10, 5...
## $ ps_ind_16_bin  <lgl> FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TR...
## $ ps_ind_17_bin  <lgl> TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALS...
## $ ps_ind_18_bin  <lgl> FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALS...
## $ ps_reg_01      <dbl> 0.7, 0.8, 0.0, 0.9, 0.7, 0.9, 0.6, 0.7, 0.9, 0.9, 0....
## $ ps_reg_02      <dbl> 0.2, 0.4, 0.0, 0.2, 0.6, 1.8, 0.1, 0.4, 0.7, 1.4, 0....
## $ ps_reg_03      <dbl> 0.7180703, 0.7660777, NA, 0.5809475, 0.8407586, 2.33...
## $ ps_car_01_cat  <fct> 10, 11, 7, 7, 11, 10, 6, 11, 10, 11, 11, 11, 6, 9, 1...
## $ ps_car_02_cat  <fct> 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1...
## $ ps_car_03_cat  <fct> NA, NA, NA, 0, NA, NA, NA, 0, NA, 0, NA, NA, NA, 0, ...
## $ ps_car_04_cat  <fct> 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 8, 0, 0, 0, 0, 9, 1, 0...
## $ ps_car_05_cat  <fct> 1, NA, NA, 1, NA, 0, 1, 0, 1, 0, NA, NA, NA, 1, NA, ...
## $ ps_car_06_cat  <fct> 4, 11, 14, 11, 14, 14, 11, 11, 14, 14, 13, 11, 11, 6...
## $ ps_car_07_cat  <fct> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...
## $ ps_car_08_cat  <fct> 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0...
## $ ps_car_09_cat  <fct> 0, 2, 2, 3, 2, 0, 0, 2, 0, 2, 2, 0, 2, 2, 2, 0, 0, 2...
## $ ps_car_10_cat  <fct> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...
## $ ps_car_11_cat  <fct> 12, 19, 60, 104, 82, 104, 99, 30, 68, 104, 20, 36, 1...
## $ ps_car_11      <int> 2, 3, 1, 1, 3, 2, 2, 3, 3, 2, 3, 3, 3, 3, 1, 2, 3, 2...
## $ ps_car_12      <dbl> 0.4000000, 0.3162278, 0.3162278, 0.3741657, 0.316069...
## $ ps_car_13      <dbl> 0.8836789, 0.6188165, 0.6415857, 0.5429488, 0.565831...
## $ ps_car_14      <dbl> 0.3708099, 0.3887158, 0.3472751, 0.2949576, 0.365102...
## $ ps_car_15      <dbl> 3.605551, 2.449490, 3.316625, 2.000000, 2.000000, 3....
## $ ps_calc_01     <dbl> 0.6, 0.3, 0.5, 0.6, 0.4, 0.7, 0.2, 0.1, 0.9, 0.7, 0....
## $ ps_calc_02     <dbl> 0.5, 0.1, 0.7, 0.9, 0.6, 0.8, 0.6, 0.5, 0.8, 0.8, 0....
## $ ps_calc_03     <dbl> 0.2, 0.3, 0.1, 0.1, 0.0, 0.4, 0.5, 0.1, 0.6, 0.8, 0....
## $ ps_calc_04     <int> 3, 2, 2, 2, 2, 3, 2, 1, 3, 2, 2, 2, 4, 2, 3, 2, 2, 1...
## $ ps_calc_05     <int> 1, 1, 2, 4, 2, 1, 2, 2, 1, 2, 3, 2, 1, 1, 1, 1, 1, 3...
## $ ps_calc_06     <int> 10, 9, 9, 7, 6, 8, 8, 7, 7, 8, 8, 8, 8, 10, 8, 9, 10...
## $ ps_calc_07     <int> 1, 5, 1, 1, 3, 2, 1, 1, 3, 2, 2, 2, 4, 1, 2, 5, 6, 2...
## $ ps_calc_08     <int> 10, 8, 8, 8, 10, 11, 8, 6, 9, 9, 9, 10, 11, 8, 6, 10...
## $ ps_calc_09     <int> 1, 1, 2, 4, 2, 3, 3, 1, 4, 1, 4, 1, 1, 3, 3, 2, 3, 1...
## $ ps_calc_10     <int> 5, 7, 7, 2, 12, 8, 10, 13, 11, 11, 7, 8, 9, 8, 12, 1...
## $ ps_calc_11     <int> 9, 3, 4, 2, 3, 4, 3, 7, 4, 3, 6, 9, 6, 2, 4, 5, 3, 9...
## $ ps_calc_12     <int> 1, 1, 2, 2, 1, 2, 0, 1, 2, 5, 3, 2, 3, 0, 1, 2, 3, 1...
## $ ps_calc_13     <int> 5, 1, 7, 4, 1, 0, 0, 3, 1, 0, 3, 1, 3, 4, 3, 6, 1, 3...
## $ ps_calc_14     <int> 8, 9, 7, 9, 3, 9, 10, 6, 5, 6, 6, 10, 8, 3, 9, 7, 8,...
## $ ps_calc_15_bin <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRU...
## $ ps_calc_16_bin <lgl> TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, T...
## $ ps_calc_17_bin <lgl> TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, ...
## $ ps_calc_18_bin <lgl> FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE...
## $ ps_calc_19_bin <lgl> FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, FA...
## $ ps_calc_20_bin <lgl> TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE...
## $ dset           <fct> train, train, train, train, train, train, train, tra...

1.488.028 observações e 60 variáveis, divididas em:

  • Binárias ou lógicas
  • Categóricas
  • Numéricas inteiras (discretos)
  • Numéricas decimais (contínuos)

4 Visualização preliminar de atributos/variáveis

Como as variáveis estão codificadas e não se sabe seus significados e relações entre si, o estudo irá dividir por tipo: binário, categórico, variáveis numéricas inteiras e contínuas. Estas plotagens serão utilizadas para visualização completa da distribuição das variáveis no conjunto de dados.

Especialmente em conjunto de dados relacionados a seguros, fraudes, etc, é importante ter ferramentas de visualização de distribuição sempre em mãos, uma vez que não são raras variáveis com taxas-base desequilibradas.

4.1 Variáveis binárias - 01/02

Observa-se claramente a existencia de variáveis desequilibradas, especialmente a ind_10, ind_11, ind_12 e ind_13.

4.2 Variáveis binárias - 02/02

4.3 Variáveis categóricas - 01/02

A visualização ficou comprometida devido a presença de categorias com contagem desequilibrada. Este problema de leitura pode ser evitado com a utilização de escala em log10 no eixo Y, mas deve-se ter em mente que as diferenças de alturas das barras em níveis mais altos do eixo Y não são proporcionais em termos absolutos.

4.3.1 Variáveis categóricas - 01/02 - Log10

Percebe-se que alguns atributos possuem apenas 2 categorias e NA. Caso os metadados estivessem disponíveis e com isso o significado dos valores NA, tais categorias poderiam ser convertidas em binários ou receberem tratamento específico.

4.4 Variáveis categóricas - 02/02

4.4.0.1 Variáveis categóricas - 02/02 - Log10

4.5 Variáveis numéricas - 01/02

4.5.1 Variáveis numéricas - 01/02 - Log10 no ind14

4.6 Variáveis numéricas - 02/02

Aparentemente existe um assimetria maior que zero (cauda direita) para algumas variáveis, como calc_10, calc_11 e calc_14 e cauda a esquerda para outras, como calc_08 e calc_06.

4.7 Variáveis contínuas (float) - 01/02 - “reg” e “calc”

Variáveis com maior nível de distorção, especialmente calc_01, calc_02 e calc_03.

4.8 Variáveis contínuas (float) - 02/02 - “car”

4.9 Variável-alvo: 1 se acionou o seguro e 0 se não acionou o seguro

## # A tibble: 2 x 2
##   target percentage
##   <fct>       <dbl>
## 1 0           96.4 
## 2 1            3.64

Como esperado, o problema a ser solucionado possui taxas-base altamente desequilibradas, e precisa ser considerado na análise de desempenho do algoritmo.

5 Investigando valores NA

Uma análise combinatória dos valores NA possibilita avaliar a ocorrência simultânea de NAs em diferentes variáveis. Os traços vermelhos significam que o NA ocorre concomitantemente com outra variável. Vale ressaltar que maior concomitância não equivale a maior frequência de NA, como observado na análise:

As barras vermelhas representam a quantidade de NAs em cada variável.

Sem os metadados não é possível avaliar o significado destes NAs. Caso soubéssemos que para uma determinada variável numérica o NA significa zero ou que para uma categoria o NA representa "Não existe" poderia ser substituído. Em um segundo cenário um pouco mais delicado, onde tem-se conhecimento de que o NA em uma determinada coluna é simplesmente um valor não preenchide que deveria constar, poderiam ser traçadas estratégias como: substituição pela mediana, pela moda da categoria, pela moda da categoria em um determinado grupo, entre outras opções.

## 2.410359 % dos valores no conjunto de treinamento são missing
## 2.453096 % dos valore no conjunto de teste são missing

6 Avaliando cada variável em relação ao acionamento do seguro

Será classificado a porcentagem de acionamentos para cada variável a fim de determinar a relevância das categorias com a variável alvo. De forma complementar, será plotado margens de erro com base na confiança binomial de 95%, a partir da taxa de acionamentos e não acionamentos.

6.1 Variáveis binárias - 01/02

Observa-se que, com exceção dos atributos ind_10, ind_11 e ind_13, o restante aparentemente possui uma relação direta de uma das suas categorias com o acionamento do seguro.

6.2 Variáveis binárias - 02/02

p1 <- train %>%
  group_by(ps_ind_16_bin, target) %>%
  count() %>%
  spread(target, n) %>%
  mutate(frac_claim = `1`/(`1`+`0`)*100,
         lwr = get_binCI(`1`,(`1`+`0`))[[1]]*100,
         upr = get_binCI(`1`,(`1`+`0`))[[2]]*100
         ) %>%
  ggplot(aes(ps_ind_16_bin, frac_claim, fill = ps_ind_16_bin)) +
  geom_col() +
  geom_errorbar(aes(ymin = lwr, ymax = upr), width = 0.5, size = 0.7, color = "gray30") +
  theme(legend.position = "none") +
  labs(y = "Acionamentos [%]")

p2 <- train %>%
  group_by(ps_ind_17_bin, target) %>%
  count() %>%
  spread(target, n) %>%
  mutate(frac_claim = `1`/(`1`+`0`)*100,
         lwr = get_binCI(`1`,(`1`+`0`))[[1]]*100,
         upr = get_binCI(`1`,(`1`+`0`))[[2]]*100
         ) %>%
  ggplot(aes(ps_ind_17_bin, frac_claim, fill = ps_ind_17_bin)) +
  geom_col() +
  geom_errorbar(aes(ymin = lwr, ymax = upr), width = 0.5, size = 0.7, color = "gray30") +
  theme(legend.position = "none") +
  labs(y = "Acionamentos [%]")

p3 <- train %>%
  group_by(ps_ind_18_bin, target) %>%
  count() %>%
  spread(target, n) %>%
  mutate(frac_claim = `1`/(`1`+`0`)*100,
         lwr = get_binCI(`1`,(`1`+`0`))[[1]]*100,
         upr = get_binCI(`1`,(`1`+`0`))[[2]]*100
         ) %>%
  ggplot(aes(ps_ind_18_bin, frac_claim, fill = ps_ind_18_bin)) +
  geom_col() +
  geom_errorbar(aes(ymin = lwr, ymax = upr), width = 0.5, size = 0.7, color = "gray30") +
  theme(legend.position = "none") +
  labs(y = "Acionamentos [%]")

p4 <- train %>%
  group_by(ps_calc_15_bin, target) %>%
  count() %>%
  spread(target, n) %>%
  mutate(frac_claim = `1`/(`1`+`0`)*100,
         lwr = get_binCI(`1`,(`1`+`0`))[[1]]*100,
         upr = get_binCI(`1`,(`1`+`0`))[[2]]*100
         ) %>%
  ggplot(aes(ps_calc_15_bin, frac_claim, fill = ps_calc_15_bin)) +
  geom_col() +
  geom_errorbar(aes(ymin = lwr, ymax = upr), width = 0.5, size = 0.7, color = "gray30") +
  theme(legend.position = "none") +
  labs(y = "Acionamentos [%]")

p5 <- train %>%
  group_by(ps_calc_16_bin, target) %>%
  count() %>%
  spread(target, n) %>%
  mutate(frac_claim = `1`/(`1`+`0`)*100,
         lwr = get_binCI(`1`,(`1`+`0`))[[1]]*100,
         upr = get_binCI(`1`,(`1`+`0`))[[2]]*100
         ) %>%
  ggplot(aes(ps_calc_16_bin, frac_claim, fill = ps_calc_16_bin)) +
  geom_col() +
  geom_errorbar(aes(ymin = lwr, ymax = upr), width = 0.5, size = 0.7, color = "gray30") +
  theme(legend.position = "none") +
  labs(y = "Acionamentos [%]")

p6 <- train %>%
  group_by(ps_calc_17_bin, target) %>%
  count() %>%
  spread(target, n) %>%
  mutate(frac_claim = `1`/(`1`+`0`)*100,
         lwr = get_binCI(`1`,(`1`+`0`))[[1]]*100,
         upr = get_binCI(`1`,(`1`+`0`))[[2]]*100
         ) %>%
  ggplot(aes(ps_calc_17_bin, frac_claim, fill = ps_calc_17_bin)) +
  geom_col() +
  geom_errorbar(aes(ymin = lwr, ymax = upr), width = 0.5, size = 0.7, color = "gray30") +
  theme(legend.position = "none") +
  labs(y = "Acionamentos [%]")

p7 <- train %>%
  group_by(ps_calc_18_bin, target) %>%
  count() %>%
  spread(target, n) %>%
  mutate(frac_claim = `1`/(`1`+`0`)*100,
         lwr = get_binCI(`1`,(`1`+`0`))[[1]]*100,
         upr = get_binCI(`1`,(`1`+`0`))[[2]]*100
         ) %>%
  ggplot(aes(ps_calc_18_bin, frac_claim, fill = ps_calc_18_bin)) +
  geom_col() +
  geom_errorbar(aes(ymin = lwr, ymax = upr), width = 0.5, size = 0.7, color = "gray30") +
  theme(legend.position = "none") +
  labs(y = "Acionamentos [%]")

p8 <- train %>%
  group_by(ps_calc_19_bin, target) %>%
  count() %>%
  spread(target, n) %>%
  mutate(frac_claim = `1`/(`1`+`0`)*100,
         lwr = get_binCI(`1`,(`1`+`0`))[[1]]*100,
         upr = get_binCI(`1`,(`1`+`0`))[[2]]*100
         ) %>%
  ggplot(aes(ps_calc_19_bin, frac_claim, fill = ps_calc_19_bin)) +
  geom_col() +
  geom_errorbar(aes(ymin = lwr, ymax = upr), width = 0.5, size = 0.7, color = "gray30") +
  theme(legend.position = "none") +
  labs(y = "Acionamentos [%]")

p9 <- train %>%
  group_by(ps_calc_20_bin, target) %>%
  count() %>%
  spread(target, n) %>%
  mutate(frac_claim = `1`/(`1`+`0`)*100,
         lwr = get_binCI(`1`,(`1`+`0`))[[1]]*100,
         upr = get_binCI(`1`,(`1`+`0`))[[2]]*100
         ) %>%
  ggplot(aes(ps_calc_20_bin, frac_claim, fill = ps_calc_20_bin)) +
  geom_col() +
  geom_errorbar(aes(ymin = lwr, ymax = upr), width = 0.5, size = 0.7, color = "gray30") +
  theme(legend.position = "none") +
  labs(y = "Acionamentos [%]")

layout <- matrix(c(1,2,3,4,5,6,7,8,9,9),2,5,byrow=TRUE)
multiplot(p1, p2, p3, p4, p5, p6, p7, p8, p9, layout=layout)

Nesta segunda metade das variáveis binárias, somente a ind_16 e a ind_17 possuem relações sigfinativas com o acionamento do seguro.

6.3 Variáveis categóricas - 01/02

Nesta análise, observa-se um fato interessante: a alta quantidade de acionamentos nos NA.

Tal fato pode significar uma possível correlação entre a INEXISTÊNCIA das categorias ind_02, ind_04 e car_01 com o acionamento do seguro.

6.4 Variáveis categóricas - 02/02

Poucas relações observáveis, possíveis correlações somente em car_06 e car_11

6.5 Variáveis numéricas - 01/02

p1 <- train %>%
  group_by(ps_ind_01, target) %>%
  count() %>%
  spread(target, n) %>%
  mutate(frac_claim = `1`/(`1`+`0`)*100,
         lwr = get_binCI(`1`,(`1`+`0`))[[1]]*100,
         upr = get_binCI(`1`,(`1`+`0`))[[2]]*100
         ) %>%
  ggplot(aes(ps_ind_01, frac_claim)) +
  geom_point(color = "chartreuse3") +
  geom_errorbar(aes(ymin = lwr, ymax = upr), width = 0.5, size = 0.7, color = "navy") +
  theme(legend.position = "none") +
  labs(x = "ps_ind_01", y = "Acionam. [%]")
  
p2 <- train %>%
  group_by(ps_ind_03, target) %>%
  count() %>%
  spread(target, n) %>%
  mutate(frac_claim = `1`/(`1`+`0`)*100,
         lwr = get_binCI(`1`,(`1`+`0`))[[1]]*100,
         upr = get_binCI(`1`,(`1`+`0`))[[2]]*100
         ) %>%
  ggplot(aes(ps_ind_03, frac_claim)) +
  geom_point(color = "chartreuse3") +
  geom_errorbar(aes(ymin = lwr, ymax = upr), width = 0.5, size = 0.7, color = "navy") +
  theme(legend.position = "none") +
  labs(x = "ps_ind_03", y = "Acionam. [%]")
  
p3 <- train %>%
  group_by(ps_ind_14, target) %>%
  count() %>%
  spread(target, n) %>%
  mutate(frac_claim = `1`/(`1`+`0`)*100,
         lwr = get_binCI(`1`,(`1`+`0`))[[1]]*100,
         upr = get_binCI(`1`,(`1`+`0`))[[2]]*100
         ) %>%
  ggplot(aes(ps_ind_14, frac_claim)) +
  geom_point(color = "chartreuse3") +
  geom_errorbar(aes(ymin = lwr, ymax = upr), width = 0.5, size = 0.7, color = "navy") +
  theme(legend.position = "none") +
  labs(x = "ps_ind_14", y = "Acionam. [%]")
  
p4 <- train %>%
  group_by(ps_ind_15, target) %>%
  count() %>%
  spread(target, n) %>%
  mutate(frac_claim = `1`/(`1`+`0`)*100,
         lwr = get_binCI(`1`,(`1`+`0`))[[1]]*100,
         upr = get_binCI(`1`,(`1`+`0`))[[2]]*100
         ) %>%
  ggplot(aes(ps_ind_15, frac_claim)) +
  geom_point(color = "chartreuse3") +
  geom_errorbar(aes(ymin = lwr, ymax = upr), width = 0.5, size = 0.7, color = "navy") +
  theme(legend.position = "none") +
  labs(x = "ps_ind_15", y = "Acionam. [%]")
  
p5 <- train %>%
  filter(!is.na(ps_car_11)) %>%
  group_by(ps_car_11, target) %>%
  count() %>%
  spread(target, n, fill = 0) %>%
  mutate(frac_claim = `1`/(`1`+`0`)*100,
         lwr = get_binCI(`1`,(`1`+`0`))[[1]]*100,
         upr = get_binCI(`1`,(`1`+`0`))[[2]]*100
         ) %>%
  ggplot(aes(ps_car_11, frac_claim)) +
  geom_point(color = "chartreuse3") +
  geom_errorbar(aes(ymin = lwr, ymax = upr), width = 0.5, size = 0.7, color = "navy") +
  theme(legend.position = "none") +
  labs(x = "ps_car_11", y = "Acionam. [%]")

layout <- matrix(c(1,1,2,2,3,4,4,5),2,4,byrow=TRUE)
multiplot(p1, p2, p3, p4, p5, layout=layout)

Percebe-se que ind_03 e car_11 quando diferente de 0 possuem uma taxa de acionamento consideravelmente menor. Já ind_01 aparente uma tendência crescente, enquanto ind_15 uma tendência decrescente.

6.6 Variáveis numéricas - 02/02

p1 <- train %>%
  group_by(ps_calc_04, target) %>%
  count() %>%
  spread(target, n) %>%
  mutate(frac_claim = `1`/(`1`+`0`)*100,
         lwr = get_binCI(`1`,(`1`+`0`))[[1]]*100,
         upr = get_binCI(`1`,(`1`+`0`))[[2]]*100
         ) %>%
  ggplot(aes(ps_calc_04, frac_claim)) +
  geom_point(color = "navyblue") +
  geom_errorbar(aes(ymin = lwr, ymax = upr), width = 0.5, size = 0.7, color = "chartreuse3") +
  theme(legend.position = "none") +
  labs(x = "ps_calc_04", y = "Acionam. [%]")
  
p2 <- train %>%
  filter(ps_calc_05 < 6) %>%
  group_by(ps_calc_05, target) %>%
  count() %>%
  spread(target, n) %>%
  mutate(frac_claim = `1`/(`1`+`0`)*100,
         lwr = get_binCI(`1`,(`1`+`0`))[[1]]*100,
         upr = get_binCI(`1`,(`1`+`0`))[[2]]*100
         ) %>%
  ggplot(aes(ps_calc_05, frac_claim)) +
  geom_point(color = "navyblue") +
  geom_errorbar(aes(ymin = lwr, ymax = upr), width = 0.5, size = 0.7, color = "chartreuse3") +
  theme(legend.position = "none") +
  labs(x = "ps_calc_05", y = "Acionam. [%]")
  
p3 <- train %>%
  filter(ps_calc_06 > 2) %>%
  group_by(ps_calc_06, target) %>%
  count() %>%
  spread(target, n, fill = 0) %>%
  mutate(frac_claim = `1`/(`1`+`0`)*100,
         lwr = get_binCI(`1`,(`1`+`0`))[[1]]*100,
         upr = get_binCI(`1`,(`1`+`0`))[[2]]*100
         ) %>%
  ggplot(aes(ps_calc_06, frac_claim)) +
  geom_point(color = "navyblue") +
  geom_errorbar(aes(ymin = lwr, ymax = upr), width = 0.5, size = 0.7, color = "chartreuse3") +
  theme(legend.position = "none") +
  labs(x = "ps_calc_06", y = "Acionam. [%]")
  
p4 <- train %>%
  filter(ps_calc_07 < 8) %>%
  group_by(ps_calc_07, target) %>%
  count() %>%
  spread(target, n) %>%
  mutate(frac_claim = `1`/(`1`+`0`)*100,
         lwr = get_binCI(`1`,(`1`+`0`))[[1]]*100,
         upr = get_binCI(`1`,(`1`+`0`))[[2]]*100
         ) %>%
  ggplot(aes(ps_calc_07, frac_claim)) +
  geom_point(color = "navyblue") +
  geom_errorbar(aes(ymin = lwr, ymax = upr), width = 0.5, size = 0.7, color = "chartreuse3") +
  theme(legend.position = "none") +
  labs(x = "ps_calc_07", y = "Acionam. [%]")
  
p5 <- train %>%
  filter(ps_calc_08 > 2) %>%
  group_by(ps_calc_08, target) %>%
  count() %>%
  spread(target, n, fill = 0) %>%
  mutate(frac_claim = `1`/(`1`+`0`)*100,
         lwr = get_binCI(`1`,(`1`+`0`))[[1]]*100,
         upr = get_binCI(`1`,(`1`+`0`))[[2]]*100
         ) %>%
  ggplot(aes(ps_calc_08, frac_claim)) +
  geom_point(color = "navyblue") +
  geom_errorbar(aes(ymin = lwr, ymax = upr), width = 0.5, size = 0.7, color = "chartreuse3") +
  theme(legend.position = "none") +
  labs(x = "ps_calc_08", y = "Acionam. [%]")

p6 <- train %>%
  group_by(ps_calc_09, target) %>%
  count() %>%
  spread(target, n, fill = 0) %>%
  mutate(frac_claim = `1`/(`1`+`0`)*100,
         lwr = get_binCI(`1`,(`1`+`0`))[[1]]*100,
         upr = get_binCI(`1`,(`1`+`0`))[[2]]*100
         ) %>%
  ggplot(aes(ps_calc_09, frac_claim)) +
  geom_point(color = "navyblue") +
  geom_errorbar(aes(ymin = lwr, ymax = upr), width = 0.5, size = 0.7, color = "chartreuse3") +
  theme(legend.position = "none") +
  labs(x = "ps_calc_09", y = "Acionam. [%]")

p7 <- train %>%
  ggplot(aes(ps_calc_10, fill = target)) +
  geom_density(alpha = 0.5, bw = 0.4) +
  theme(legend.position = "none")

p8 <- train %>%
  ggplot(aes(ps_calc_11, fill = target)) +
  geom_density(alpha = 0.5, bw = 0.4) +
  theme(legend.position = "none")

p9 <- train %>%
  filter(ps_calc_12 < 9) %>%
  group_by(ps_calc_12, target) %>%
  count() %>%
  spread(target, n, fill = 0) %>%
  mutate(frac_claim = `1`/(`1`+`0`)*100,
         lwr = get_binCI(`1`,(`1`+`0`))[[1]]*100,
         upr = get_binCI(`1`,(`1`+`0`))[[2]]*100
         ) %>%
  ggplot(aes(ps_calc_12, frac_claim)) +
  geom_point(color = "navyblue") +
  geom_errorbar(aes(ymin = lwr, ymax = upr), width = 0.5, size = 0.7, color = "chartreuse3") +
  theme(legend.position = "none") +
  labs(x = "ps_calc_12", y = "Acionam. [%]")

p10 <- train %>%
  filter(ps_calc_13 < 12) %>%
  group_by(ps_calc_13, target) %>%
  count() %>%
  spread(target, n, fill = 0) %>%
  mutate(frac_claim = `1`/(`1`+`0`)*100,
         lwr = get_binCI(`1`,(`1`+`0`))[[1]]*100,
         upr = get_binCI(`1`,(`1`+`0`))[[2]]*100
         ) %>%
  ggplot(aes(ps_calc_13, frac_claim)) +
  geom_point(color = "navyblue") +
  geom_errorbar(aes(ymin = lwr, ymax = upr), width = 0.5, size = 0.7, color = "chartreuse3") +
  theme(legend.position = "none") +
  labs(x = "ps_calc_13", y = "Acionam. [%]")

p11 <- train %>%
  ggplot(aes(ps_calc_14, fill = target)) +
  geom_density(alpha = 0.5, bw = 0.4)

layout <- matrix(c(1,2,3,4,5,6,7,8,9,10,11,11),3,4,byrow=TRUE)
multiplot(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, layout=layout)

Nenhuma relação significativa. As distribuições de acionamento para calc_10, calc_11, calc_14 estão quase que perfeitamente sobrepostas. Como observado pelas margens de erro, para as demais variáveis, as diferenças entre as taxas podem ser atribuidas a variações aleatórias.

6.7 Variáveis contínuas (float) - 01/02

Poucas diferenças. Especialemnte nas variáveis reg_01, reg_02 e reg_03, percebe-se que valores mais baixos tem taxas menores de acionamento de seguro (cor rosa acima), enquanto valores mais altos apresentam taxas menores (cor azul acima).

6.8 Variáveis contínuas (float) - 02/02

Poucas diferenças nas taxas.

6.9 Resumo

Variáveis binárias possuem diferença significativa nas taxas, por volta de 1 a 2% (que para a taxa-base é considerável). No entando, as variáveis calc binárias não mostraram impacto direto no acionamento, tais quais as variavels calc numéricas.

As maiores variações se encotram nas variáveis categóricas e numéricas, especialmente no que tange a existência ou não de algumas categorias, como observado no aumento das taxas de acionamentos em dados NA categóricos e na diminuição da taxa quando algumas variáveis numéricas são diferentes de zero.

As variáveis float possuem uam diferença pouco significativa nas taxas. Contudo, esta diferença pequena pode ser utilizada na modelagem e com os rótulos reais, isso um pode ter um significado pertinente.

De início, as variáveis calc são candidatas fortes ao descarte.

7 Análise Multivariada

Nesta etapa serão avaliadas as variáveis em conjunto e suas correlações entre si. A anonimização dos dados é, definitivamente, um obstáculo para as conclusões a respeito destas correlações e atrasa consideravelmente o processo. Entretanto, esta etapa é fundamental para a modelagem pois poderão ser evidenciados casos de multicolinearidade.

7.1 Matriz de correlação

A princípio, será utilizada a matriz de correlação de todas as variáveis como ponto de partida pava investigações mais específicas. A matriz indica quais variáveis possuem maior correlação entre si (positiva ou negativa). Quanto mais forte a cor e o tamanho do círculo, mais forte a correlação.

Para cálculo das correlações, as variáveis binárias foram (re)transformadas em inteiros (1 e 0), bem como as categóricas. As variáveis calc, ind_10, ind_11 e car_10 foram removidas da análise uma vez que não possuem relação direta com a diferenças na taxa de acionamento do seguro.

Vale lembrar que devido ao alto nível de desequilíbrio da variável alvo e probabilidade a priori de acionamento muito baixa (quantidade de acionamentos / quantidade de não acionamentos), as correlações entre a variável alvo e outras não são sequer visíveis na matriz.

O método utilizado é a correlação de Spearman e a intensidade da cor representa a força da correlação (de 0 a 1 positivo ou negativo), sendo 1 uma correlação perfeita.

Existe uma alta correlação entre as variáveis _car, possívelmente especificações técnicas dos veículos.

As variáveis selecionadas para investigação mais aprofundada foram: ind_12, ind_14, ind_16, ind_17, ind_18, reg_02, reg_03, car_12, car_13, car_14, car_15,car_02 e car_04.

Observa-se uma correlação quase perfeita entre ind_12 e ind_14 (0,94), que é entre uma variável binária e uma variável numérica inteira de 0 a 5, com grande maioria dos indivíduos como 0 (observar plots individuais);

As correlações entre _reg e _car se mostram interessantes, especialmente por serem variáveis contínuas;

As maiores correlações negativas (inversamente proporcionais) estão entre ind_16, ind_17 e ind_18;

7.2 Diagrama de Sankey a partir dos acionamentos

Para não poluir muito o diagrama, será feito com as variáveis binárias e car_02 e car_04 com as principais categorias.

Este modelo de diagrama representa a proporção das conexões entre as variáveis, pode ser trabalhado com diferentes combinações. A combinação apresentada foi a melhor em questões visuais, e percebe-be a quantidade de acionamentos é maior quando as variáveis ind_17 e ind_18 são FALSAS, bem como a car_02 == 1 e car_04 == 0.

7.3 Análises bidimensionais

A priori, serão analisadas os pares de variáveis com correlação maior que 0,5.

Observa-se claramente uma relação entre as variáveis ind_12 e ind_14, sendo uma correlação perfeita quando ind_14 == 0 e ind_12 == FALSO, tal quando ind_14 == 4 e ind_12 == VERDADEIRO. Os valores intermediários de ind_14 (1, 2 e 3) também são diretamente proporcionais à taxa de VERDADEIRO em ind_12.

As duas correlações binárias se mostram similares, com altas taxas quando: -ind_16 = VERDADEIRO e ind_18 = FALSO -ind_16 = VERDADEIRO e ind_17 = FALSO

e nenhuma observação de -ind_16 = TRUE e ind_18 = TRUE -ind_16 = TRUE e ind_17 = TRUE

Este é um exemplo de análise que pode facilmente ser explicada com dados não anonimizados.

Entre as variáveis _reg, existe uma tendência linear positiva, contudo a grande variação de valores em reg_03 não deixa isso perfeitamente claro.

As correlações entre car_12 e car_13 e car_14 são, como esperado a partir das correlações, bastante claras. O que chama a atenção são outliers evidentes que podem, inclusive, estar puxando para baixo o indicador de correlação da matriz que ja é bastante alto.

7.4 Análises multivariadas

A partir de agora, serão analisadas correlações entre variáveis categóricas e divididas em um grid entre uma variável binária (ind_14) e a variável alvo (acionamento 0-não e 1-sim)

Este plot é um pouco confuso e de início pode parecer que demanda muita análise pra pouco significado. Contudo, assim como os outros plots apresentados, tendo a posse dos dados com seus devidos significados, estas ligeiras diferenças são, provavelmente, insights não-obvios e com alto valor agregado.

No grid acima observa-se que a medida que ind_16 se torna VERDADEIRO, bem como a medida que o acionamento se torna 1 - SIM, diminuem a quantidade de categorias de ind_14. Observa-se que pra ind_16 = VERDADEIRO, só existe ind_14 0, 1 e 2, já para ind_16 = VERDADEIRO && acionamento = 1, só existe ind_14 0 e 1.

Uma segunda observação é que ind_14 = 0 possui distribuições diferentes dos demais níveis (1,2,3 e 4), estando deslocado para valores mais altos de car_14.

A distribuição de car_14 é bastante diferente entre os 4 quadrantes do grid, o que deve ser observado seu significado.

Devido a esta diferenciação da variável car_14 não observada nos plots individuais, será plotada esta variável em relação às variáveis numérias mais relacionadas ao acionamento do seguro (ind_01, ind_03, ind_05 e car_11, que apesar de categória, sua alta quantidade de categorias chamou a atenção)

Neste plot, as variações na variável car_14 são mais presentes quando alteramos os valores das classes car_11, mudando significativamente sua distribuição, bem como da variável ind_01, formando novos picos.

As variáveis ind_03 e ind_15 não modificam tanto o formato da distribuição da variável car_14, apenas intensificando alguns picos, mas sem movimentações a se alertar.

Referências e leituras sugeridas

https://www.kaggle.com/c/porto-seguro-safe-driver-prediction

https://medium.com/@arthurlambletvaz/one-hot-encoding-o-que-%C3%A9-cd2e8d302ae0