Home Credit Group Prediction on Credit Payment Delay
PARTE 1
Introdução ao Conjunto de Dados
1 - Contexto de Negócio
Uma instituição financeira bancária chamada Home Credit Group está tendo problemas em identificar quando os clientes terão problemas em realizar o pagamento dos créditos solicitados, e como estão passando por problemas financeiros, querem garantir que só irão fornecer crédito àqueles clientes que puderem pagar, evitando prejuízos.
Diante disso, buscaram o auxílio de um cientista de dados, na intenção que o profissional tanto desenvolve-se um modelo de Machine Learning, que pudesse prever a probabilidade de um cliente ter problemas, baseado em dados dos próprios clientes, como seu gênero, número de parentes, salário e pertences Além, que ele performasse uma análise nos dados, e extrai deles insights interessantes sobre o perfil deles, padrões de comportamento e outros.
2 - Requisitos de Solução do Projeto
Durante a conversa entre o cientista e a empresa, foi perguntado quais eram as principais informações que eles gostariam de obter. Em resposta, a empresa lhe definiu um conjunto de perguntas estratégicas relacionadas ao negócio, destacando aquelas que seriam essenciais para orientar as análises e decisões. Seguem as perguntas:
Qual é o perfil dos clientes que solicitam crédito? E dos que se atrasam para pagar?
Fatores naturais como idade podem sinalizar riscos de atrasos?
O tipo de emprego do cliente é um indicativo para atrasos? E sua escolaridade?
Estado civil, e número de dependentes pode impactar na necessidade de crédito?
Os pertences comunicados ao banco servem como garantia? É algo placebo?
Qual o financeiro dos clientes do banco? Como ele muda para clientes que atrasam?
Faz sentido pensar que clientes com salários altos têm menos dificuldade?
Clientes que solicitam mais doque precisam têm mais dificuldade em pagar?
Existem tipos de contratos que possuem maior taxa de atrasos?
Além das perguntas, a empresa solicitou o treinamento de um modelo de Machine Learning para prever atrasos, bem como a elaboração de um relatório detalhando o potencial impacto financeiro desse modelo. Além disso, é necessário identificar os fatores que, de forma objetiva, mais indicam que clientes irão atrasar os pagamentos.
Desenvolver um modelo de Machine Learning capaz de prever clientes atrasando.
Identificar as principais características que evidenciam se ocorrerá um atraso.
Gerar uma explicação ou relatório financeiro sobre os benefícios do novo modelo.
É importante denotar que a Home Credit Group já possui um modelo de machine learning que utiliza o Random Forest Classifier para realizar as previsões, e ainda que esse modelo não possua um AUC ruim, no valor de 0.71 ele é praticamente incapaz de acertar quando os clientes atrasam, e esse é um problema que vamos superar.
3 - Metodologia do Projeto
Neste projeto, adotei uma das metodologias mais conhecidas para a resolução de problemas de dados: a CRISP-DM, que em tradução livre significa "Processo Padrão Transversal para Mineração de Dados". Trata-se de um método iterativo que permite ao cientista de dados "ir e voltar" entre as etapas do processo, como entre a Modelagem e a Preparação dos Dados. Essa flexibilidade é útil, pois alguns insights podem surgir em diferentes etapas, e a CRISP-DM oferece a liberdade de corrigir elementos em diferentes fases de criação.
4 - Dicionário de Dados
No dataset fornecido pela empresa, estão inclusas diversas informações sobre os clientes, como sua localização, idade, estado civil, estado de empregabilidade. Também contém informações sobre suas relações financeiras, de pertences, sociais e temporais, é importante ressaltar que nesse dicionário não estão contidas todas as colunas, dito que por serem mais de 120 colunas seria excessivo, constam aqui as principais que serão utilizadas na EDA.
SK_ID_CURR:
ID único do cliente.
TARGET:
Indicador de inadimplência (1 = inadimplente).
NAME_CONTRACT_TYPE:
Tipo de contrato de crédito.
CODE_GENDER:
Gênero do cliente.
FLAG_OWN_CAR:
Cliente possui carro.
FLAG_OWN_REALTY:
Cliente possui imóvel.
CNT_CHILDREN:
Número de filhos.
AMT_INCOME_TOTAL:
Renda anual total do cliente.
AMT_CREDIT:
Valor total do crédito concedido.
AMT_ANNUITY:
Valor anual de pagamento de crédito.
AMT_GOODS_PRICE:
Preço dos bens financiados.
NAME_TYPE_SUITE:
Companhia durante a aplicação de crédito.
NAME_INCOME_TYPE:
Tipo de fonte de renda.
NAME_EDUCATION_TYPE:
Nível educacional do cliente.
NAME_FAMILY_STATUS:
Estado civil.
NAME_HOUSING_TYPE:
Tipo de moradia.
REGION_POPULATION_RELATIVE:
Densidade populacional da região.
DAYS_BIRTH:
Idade em dias (negativo).
DAYS_EMPLOYED:
Tempo de emprego em dias (negativo).
DAYS_REGISTRATION:
Dias desde o registro do cliente.
DAYS_ID_PUBLISH:
Dias desde a última atualização de documento.
OWN_CAR_AGE:
Idade do carro do cliente (em anos).
FLAG_EMP_PHONE:
Tem telefone de trabalho.
FLAG_WORK_PHONE:
Tem telefone fixo.
FLAG_PHONE:
Tem qualquer telefone fixo.
FLAG_EMAIL:
Tem endereço de e-mail.
OCCUPATION_TYPE:
Tipo de ocupação.
CNT_FAM_MEMBERS:
Número de membros na família.
REGION_RATING_CLIENT:
Avaliação da região de residência.
EXT_SOURCE_1:
Pontuação de fonte externa (risco de crédito).
PARTE 2
Análise Exploratória de Dados
Nesta seção do projeto, iniciaremos a extração de insights a partir do dataset fornecido pela empresa. Vamos explorar abordagens para responder às perguntas solicitadas e identificar novas correlações que a empresa pode não ter considerado. Incluiremos os códigos utilizados para gerar os gráficos, os próprios gráficos, e as interpretações que podem ser extraídas deles, todo o processo será feito usando Python com Matplotlib e Seaborn.
Impacto da idade na confiança do seguro: Idade traz mais responsabilidade?
É um senso comum que pessoas mais velhas tendem a ser mais responsáveis, porém é necessário conferir essa informação, para isso, criei um código que exibe um histograma que faz a contagem de quantas pessoas em diferentes idades atrasam, ou não, o pagamento.
Temos uma clara tendência para confiar no senso comum nesse caso, dentre os clientes que não costumam atrasar, a idade parece bem distribuída, isso é visível pois os valores que estão acima da média marcados em preto estão centralizados no gráfico. No entanto, no gráfico dos clientes que atrasam, é possível observar uma clara queda conforme a idade aumenta, isso pode indicar que clientes mais velhos são mais confiáveis para obter crédito. Vamos agora conferir fatores financeiros, pra depois ver como se relacionam com a idade.
Nesses gráficos, a linha preta representa clientes que não atrasam, e a linha cinza clientes que atrasam o pagamento, cada círculo representa um cliente e os círculos fora do intervalo interquartil estão ocos e pretos. De cara é possível perceber algumas coisas interessantes, num geral, os clientes que atrasam solicitam mais crédito que os outros também possuem bens mais caros à pagar, oque faz sentido, ambos possuem os preços dos bens equivalentes no intervalo, mas existem mais membros que atrasam fora do IQR, o mesmo pode ser dito sobre o salário do cliente, e isso ficará mais evidente no próximo gráfico, junto às idades.
Comparando essas linhas podemos identificar um problema, ainda que o salário seja bem parecido, como vimos anteriormente, os clientes que atrasam costumam solicitar mais dinheiro, a linha cinza acima da preta, e também costumam solicitar esses empréstimos para bens mais caros, esse problema costuma atingir seu pico na idade dos 50 anos, mas vale lembrar que os mais jovens costumam solicitar menos dinheiro e atrasam mais, como vimos no começo, então os mais velhos costumam dever mais dinheiro, mas são menos clientes.
Com isso fica evidente a discrepância entre os clientes que atrasam e os pontuais, nesse gráfico a cor cinza representa os valores dos bens à serem pagos pelos clientes, e o preto o valor do crédito que foi solicitado, podemos observar que os clientes que possuem atrasos solicitam mais crédito que os clientes pontuais solicitam, em média $11379 a mais de crédito, oque é um indicativo forte de um dos problemas pode ser a solicitação excessiva de crédito.
Em resumo, podemos concluir que:
Clientes mais jovens tem mais chance de atrasar pagamento, enquanto clientes mais velhos costuma ser mais pontuais.
Clientes mais velhos pedem mais crédito e financiam bens mais caros, principalmente até os 50 anos.
Cliente que atrasam tem salário parecido com quem paga em dia, mas pede mais dinheiro emprestado e financia bens mais caros.
Clientes que atrasam aparecem mais fora do intervalo interquartil, ou seja, há mais casos extremos de endividamento.
Clientes jovens atrasam mais, mas devem menos; cliente mais velhos atrasa menos, mas deve mais dinheiro.
Clientes que atrasam pede, em média, $11.379 a mais em crédito do que quem paga em dia, o que pode indicar excesso de endividamento.
Cliente de 50 anos parece ser o ponto crítico, onde os pedidos de crédito e os atrasos se tornam mais evidentes.
Influência do perfil ocupacional e familiar dos clientes: Como esses fatores afetam o atraso dos clientes?
Em princípio, vamos entender quem são os nossos clientes, anteriormente entendemos melhor sobre como a idade dos clientes afeta suas decisões, agora vamos observar diferentes aspectos de trabalho e educação, para isso vamos usar esse gráfico de barras horizontal:
Rapidamente podemos notar um padrão nos clientes, a grande maioria não possui educação superior, e percebemos uma maior taxa de pontualidade quando os clientes possuem esse nível, além disso, clientes com cargos mais elevados também aparentam ser mais pontuais, isso é visível no gráfico dos "Tipos de Ocupação", cargos de alto nível como "Core Staff" ou "High Skill Tech Staff" são mais característicos de clientes pontuais. Isso indica que clientes de camadas mais altas na sociedade, com maior renda, atrasam menos, vamos conferir isso:
Nesse gráfico, cada ponto representa um cliente do banco, e não é tão óbvio o insight desse gráfico, ao menos não quanto pode ter parecido ser, mas ainda é visível que clientes pontuais solicitam relativamente valores semelhantes de crédito comparativamente aos que atrasam, mas possuem mais integrantes de alta renda, indicando que salário é pode ser um fator de importância para a previsão dos atraso dos clientes. Vamos agora brevemente analisar para quais tipos de produtos esses créditos solicitados tem sido direcionados.
Esse gráfico é útil para confirmarmos algumas informações passadas, a maioria dos clientes realmente não realiza compras de grande magnitude, sendo a maioria das compras para eletrônicos, e a minoria para turismo e medicina, reforçando a ideia de uma base de clientes de baixa/média renda, raramente bens caros são disponibilizados para obter crédito. Vamos conferir agora se existe algo a ser extraído dos aspectos familiares dos clientes.
Nesse gráfico podemos perceber que há poucas diferenças entre os clientes pontuais e os que atrasam, num geral a base de clientes possui o mesmo padrão nos quatro gráficos. Com isso, percebemos que a grande maioria dos clientes se encontram solteiros, moram com poucas pessoas em casa, e geralmente não possuem filhos, existe um pequeno aumento na taxa de atraso para clientes com mais filhos, mas é uma porcentagem pequena.
Em resumo, podemos concluir que:
Clientes costumam não possuir nível superior de ensino, mas os que possuem atrasam menos.
Clientes com cargos mais altos onde trabalham costumam atrasar menos.
Clientes com atrasos e pontuais solicitam valores semelhantes de crédito, mas clientes com salários maiores costumam atrasar menos o pagamento do crédito, mas não é um valor tão significativo.
Produtos que créditos são mais solicitados estão relacionados à eletrônicos, e não custam muito. outras solicitações mais caras para veículos, medicina e turismo são quase inexistentes ou negadas.
Fatores familiares não impactam no atraso dos clientes, e a maioria é solteira, com poucos membros na família.
PARTE 3
Modelagem Preditiva com Python
1 - Modelagem de Dados
Com o dataset fornecido pela empresa, existem algumas informações inúteis, informações que podem ser agregadas, informações que estão faltando e precisam ser preenchidas, outliers que podem ser ruins para o modelo. Após fazer todas essas transformações ainda é necessário criar um modelo de machine learning que possa entregar resultados bons para a empresa, abaixo segue uma visualização do dataset fornecido, para facilitar o entendimento do processo.
2 - Limpeza dos Dados
Neste primeiro código, realizei a remoção de algumas colunas que considerei irrelevantes para o processo de modelagem, para reduzir a dimensionalidade do conjunto de dados e evitar redundâncias, combinei determinadas colunas ao calcular a média entre elas, reduzindo o número total de variáveis sem perder informações significativas. trabalhando com um conjunto de dados mais enxuto e otimizado, o que pode contribuir para um melhor desempenho.
Em seguida criei duas funções para localizar valores faltantes no dataset, uma delas retorna uma Series ranqueando as colunas que possuem mais valores faltantes, e a outra cria dois gráficos, uma para os valores faltantes de colunas numéricas e outras de colunas de objetos, separei eliminando as colunas que possuem mais de 60% dos valores em falta e escolhi preencher o restante com estratégias diferentes, que serão explicadas melhor logo em seguida.
Considerei que preencher colunas com mais de 60% de valores ausentes poderia resultar em inconsistências ou perda de qualidade nos dados, optei por removê-las completamente. Para as demais colunas, adotei uma abordagem de imputação estratégica: nas variáveis numéricas, substituí os valores ausentes pela média da respectiva coluna, já nas variáveis de objetos preenchi com a moda das strings das colunas, segue o código utilizado nesse processo:
Em seguida realizei a remoção de outliers, utilizando uma função que filtra outliers, e aplicando ela sobre algumas colunas específicas que possuem potenciais outliers, depois realizei a codificação das variáveis de tipo objeto, pois os modelos apenas aceitam números, as colunas que possuem apenas dois tipos de string foram transformadas em zeros e uns, e uma outra coluna de grau escolar foi transformada pelo OrdinalEncoder, com um grau de importância.
3 - Modelo de Machine Learning
Comecei fazendo o pré-processamento dos dados, para isso selecionei quais seriam as variáveis que o modelo iria ser treinado, e qual ele iria se basear para realizar a previsão, depois apliquei uma técnica de undersampling chamada de NearMiss, dito que existiam menos pessoas atrasando que pessoas pagando em tempo correto, isso ajuda a balancear e evita que o modelo compreenda mal as informações, enfim a padronização dos dados usando o Standard Scaler.
Em seguida, defini os hiperparâmetros do LightGBM, utilizando o método DART para melhorar a regularização e evitar overfitting. Também ajustei a taxa de aprendizado, o número de folhas e a fração de features usadas em cada iteração. Para lidar com o desbalanceamento das classes, apliquei o parâmetro scale_pos_weight, dando mais peso à classe minoritária. Após isso, realizei uma validação cruzada estratificada com 5 folds, garantindo que a proporção das classes fosse mantida em cada divisão dos dados. Durante o treinamento, o modelo foi ajustado por até 600 iterações, sempre monitorando a métrica AUC para avaliar seu desempenho. Por fim, identifiquei o número ótimo de iterações observando em qual ponto a AUC atingiu seu valor máximo, garantindo que o modelo tivesse o melhor desempenho possível.
4 - Resultados do Modelo
Com o modelo treinado, precisamos definir como entenderemos o sucesso desse modelo, e vamos usar 3 métricas para isso, precision, recall e AUC (Area Under Curve), porém como os dados estão desbalanceados, a troca entre precision e recall é muito custosa, então vamos usar o AUC-ROC, que serve para medir quão bom o modelo é em separar as classes, uma AUC de 0.5 seria exatamente como um modelo aleatório, então temos que buscar aproximar ao máximo de 1.0, essa foi a métrica requisitada na competição que criou esse desafio do Home Credit Group, com o recorde sendo 0.80570.
Enfim, alcançamos o resultado de um AUC de 0.764, que significa que nosso modelo tem 76,4% de chance de classificar corretamente um cliente que vai atrasar o pagamento em comparação com um cliente que não vai atrasar, as métricas de precision e recall estarão incluídas no código desse projeto, porém como tivemos um grande desbalanceamento de classes, a troca entre essas duas métricas era sempre muito custosa, sendo que um valor estava sempre bem maior que o outro.
Comparando os modelos, o anterior apresentava um AUC de 0.719. Mas como isso impacta o lucro da empresa? Embora um número seja maior que o outro, o mais importante é entender o impacto prático. A imagem abaixo vai ilustrar essa diferença, apesar do modelo antigo ter uma taxa de acerto ligeiramente superior no geral, nosso novo modelo se destaca na capacidade de identificação de clientes inadimplentes, tornando-o mais eficaz para mitigar riscos financeiros, que serão calculados logo:
Mesmo com uma pequena amostra de clientes, nosso novo modelo demonstrou uma melhoria significativa na previsão de atrasos no pagamento. Enquanto o modelo antigo identificou corretamente apenas 4 clientes, o novo modelo acertou 222, representando um aumento de 5450% na precisão. Embora ambos os modelos ainda precisem de aprimoramentos, essa atualização já representa um avanço significativo para a empresa. Considerando que, em média, cada cliente inadimplente solicita ¥557.778 em crédito e atrasa o pagamento por 4 meses, o banco pode ter um prejuízo médio de até ¥100.400.
Enfim, o novo modelo conseguiu prever 218 clientes a mais que poderiam gerar prejuízo, representando numa diferença financeira de mais de ¥21.88 milhões em perdas potenciais identificadas, isso apenas em um escopo de 30752 previsões, o número apenas tendem a aumentar conforme novas amostras surgem e o modelo melhora, muito obrigado pela atenção.