Skip to content

Um exemplo de como construir uma analise de scorecard usando o python

Notifications You must be signed in to change notification settings

igoracmorais/scorecard

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

scorecard

Um exemplo de como construir uma analise de scorecard usando o python Aqui é explicado como usar o pacote scorecardpy do Python (https://pypi.org/project/scorecardpy/) para fazer uma análise e construção de um modelo básico de scorecard. A motivação para esse post veio após um trabalho de mentoria em uma empresa de crédito no Brasil e a constatação da baixa disponibilidade de material em português sobre o tema. Para cumprir com esse objetivo, fiz uma divisão das explicações em 5 diferentes notebooks. O banco de dados utilizado é o tradicional adotado pelo próprio pacote para explicar as funções, e pode ser obtido, na sua forma pura, no link (https://www.kaggle.com/uciml/german-credit).

1. Dados_analise

O banco de dados original usado nas ilustrações do pacote possui 1.000 linhas e 9 colunas, mas não contem a coluna de target, que representaria se a pessoa, em questão, entrou ou não em default. Nesse caso, disponibilizo um arquivo em csv "german_credit_data.csv" com uma simulação de dados para a coluna, cujo nome fica como "default". Usa-se o numpy para isso, considerando 30% dos clientes com default="yes". A seguir a descrição das variaveis usadas:

Age: idade (numerico).
Sex: sexo (string: male, female)
Job: grau de instrução da pessoa (numerico: 0 - unskilled and non-resident, 1 - unskilled and resident, 2 - skilled, 3 - highly skilled)
Housing: situacao residencial (string: own, rent, or free)
Saving accounts: tamanho da conta bancaria (string - little, moderate, quite rich, rich)
Checking account: quantidade de recurso na conta (numerico, in DM - Deutsch Mark)
Credit amount: quantidade em credito (numerico, in DM)
Duration: duracao em meses do credito (numerico, in month)
Purpose: proposito do credito (string: car, furniture/equipment, radio/TV, domestic appliances, repairs, education, business, vacation/others
default: (Variavel objetivo - yes: default; no: pagou)

Alem disso, há valores nulos em "saving accounts" e "checking account" e no notebook apresentamos algumas opções de como preencher esses valores. Os resultados são salvos e depois disponibilizados como "german_credi_data2.csv" para que se tenha uma reprodução igual nos notebooks seguintes.

2. WOE_IV

Nesse notebook explico os conceitos de WOE - Weight of Evidence e IV - Information Value que são aplicados posteriormente no estudo de scorecard. Esse processo é feito passo a passo, ou seja, as estatísticas são construídas "na mão". Isso dá um pouco de trabalho, mas entendo que seria a forma mais eficiente de se aprender o significado das mesmas e o cientista de dados que assim proceder adquire um conhecimento que irá diferencia-lo dos demais. Caso não queira ver como isso funciona no detalhe, pode pular esse notebook e ir direto para o notebook 3, onde mostro como aplicar o pacote scorecardpy, que tem essas fórmulas já prontas para apenas "apertar o botão". Os conceitos, comentários e demais observações sobre o WOE e IV são todos feitos diretamente no notebook.

3. Scorecardpy

O pacote é idêntico ao que foi desenvolvido no R, com apenas algumas pequenas diferenças de opções de funções. A descrição do uso do pacote no Python é bem precária, com apenas um exemplo e mesmo assim pouco explicado. E em português, por exemplo, não encontraremos quase nada. Isso me motivou a desenvolver, de forma mais didática, esses notebooks e espero que sejam úteis. Sugiro ir no github do pacote e ver as fórmulas, isso irá proporcionar ao mesmo tempo uma melhor compreensão das mesmas e fortalecer o seu entendimento de como usar o Python. Para aqueles com facilidade em R, podem acessar o link (https://cran.r-project.org/web/packages/scorecard/index.html) e ver algumas explicações sobre as funções. O objetivo dessa primeira parte é criar os valores do woe e iv para cada uma das variaveis do arquivo "german_credit_data2.csv". Ao final salvamos os resultados em um novo arquivo de nome "woe_to_model.csv" para ser utilizado no notebook 4.

4. Modelo_basico

Até esse momento o que fizemos foi aplicar técnicas que pudessem gerar um banco de dados melhor para usar em um modelo de scorecard que possa ser reproduzido posteriormente para novos clientes. Na ideia de uso da metodologia CRISP (https://www.datascience-pm.com/crisp-dm-2/) o passo seguinte é a modelagem. Aqui ilustramos como usar uma regressão logística na sua forma simples a partir do pacote sklearn discutindo algumas métricas de análise conhecidas como precision-recall disponível também no sklearn para depois apresentar o ROC - Receiver Operating Characteristic.
A seguir, discutimos as diversas formas de aplicar a técnica do cross-validation, muito importante para refinar as estimativas em Machine Learning para, em seguida, fazer a junção entre o modelo de regressão logística com cross-validation. A seguir é discutida a aplicação do processo de otimização dos hyperparâmetros, tanto com o RandomSearchCV quanto com o GridSearchCV. Ao final, salvamos o modelo que será usado no notebook 5.

5. Inserindo_LR_no_scorecard

Essa sessão encerra o primeiro ciclo de construção do scorecard. Após a definição do modelo final, feito na sessão 4, usamos duas funções do pacote para ter o score: i) scorecard - usa como input os intervalos (bins) criados anteriormente pela função woebin para cada variavel, juntamente com o modelo da sessão 4. O resultado aqui ainda não é o score. Para obtê-lo temos que aplicar outra função: ii) scorecard_ply - usa o resultado obtido na função scorecard juntamente com o banco de dados para definir o score para cada individuo.

Sugestões de melhoria desse notebook são bem vindas!

About

Um exemplo de como construir uma analise de scorecard usando o python

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published