Conteúdo

Função em Python para calcular WoE e IV

   17 Abr, 2023     20 min leitura

Melhore modelos de regressão logística com WoE e IV em Python.

Você já ouviu falar de Valor de Informação e Peso de Evidência? Essas duas estatísticas são uma dupla dinâmica para a seleção de variáveis preditoras em modelos de regressão logística - elas trabalham juntas para melhorar a preditividade!

Com o Valor de Informação e o Peso de Evidência, você pode ter insights sobre a eficácia de uma variável em prever a resposta desejada, além de descobrir a direção em que essa variável está inclinando a resposta.

Mas quando comecei a usar Python para selecionar e criar variáveis, percebi que faltava uma função que pudesse trazer essas métricas para a análise. Então, resolvi criar minhas próprias funções em Python para gerar tabelas que mostrassem o WoE e o IV.

WoE e IV para variáveis discretas

Comecei criando uma função para as variáveis discretas e fui me aprimorando a partir daí. Quem sabe, talvez você também possa criar suas próprias funções para aprimorar sua análise de dados!

Então, inseri alguns dados da competição Titanic - Machine Learning from Disaster na minha função de WoE e IV em Python, e deixe-me dizer, os resultados foram realmente surpreendentes!

Survived01DistrWoEIVIV_total
female0.1475410.6812870.216562-1.5298770.8165651.341681
male0.8524590.3187132.6746880.9838330.5251161.341681
C0.1366120.2735290.499442-0.6942640.0950570.122728
Q0.0856100.0882350.970249-0.0302030.0000790.122728
S0.7777780.6382351.2186380.1977340.0275920.122728

A função gerou uma tabela que claramente mostrou os valores de WoE e IV para cada variável no conjunto de dados, me dando uma compreensão melhor de quais fatores eram mais importantes para prever as taxas de sobrevivência.

Se você estiver trabalhando com esse mesmo conjunto de dados (ou qualquer outro, na verdade), eu altamente recomendo testar essa função. É uma ferramenta poderosa para obter insights sobre seus dados e melhorar seus modelos preditivos.

WoE e IV para variáveis contínuas

Quando se trata das variáveis contínuas, a coisa ficou um pouco mais complicada para mim. Eu não tinha certeza de qual era a melhor forma de dividir essas variáveis para a análise, já que elas podem ser bem diferentes dependendo do problema.

Fiquei pensando e rascunhando várias ideias, até que finalmente decidi colocar tudo em decis, porque isso permitiria analisar o retorno pelo IV em partes maiores (quartis, por exemplo), se fosse necessário.

Então, aqui está como ficou a função para as variáveis contínuas:

Foi um trabalho árduo, mas o resultado foi bem satisfatório!

variablelimit01DistrWoEIV
Age<=[14.]0.0582880.1315790.442987-0.8142140.06
Age[14.] a [19.]0.0965390.0994150.971070-0.0293560.00
Age[19.] a [22.]0.0874320.0555561.5737700.4534740.01
Age[22.] a [25.]0.0801460.0760231.0542240.0528050.00
Age[25.] a [28.]0.0673950.0701750.960383-0.0404240.00
Age[28.] a [31.8]0.0728600.0760230.958386-0.0425050.00
Age[31.8] a [36.]0.0856100.1286550.665425-0.4073300.02
Age[36.] a [41.]0.0619310.0555561.1147540.1086340.00
Age[41.] a [50.]0.0856100.0906430.944474-0.0571270.00
Age 1.0000001.0000001.0000000.0000000.09
Fare<=[7.55]0.1438980.0380123.7856241.3312110.14
Fare[7.55] a [7.8542]0.1111110.0760231.4615380.3794900.01
Fare[7.8542] a [8.05]0.1584700.0555562.8524591.0481810.11
Fare[8.05] a [10.5]0.1092900.0526322.0765030.7306850.04
Fare[10.5] a [14.4542]0.0874320.1052630.830601-0.1856060.00
Fare[14.4542] a [21.6792]0.0928960.1081870.858662-0.1523800.00
Fare[21.6792] a [27.]0.0783240.1345030.582324-0.5407290.03
Fare[27.] a [39.6875]0.1038250.0994151.0443590.0434030.00
Fare[39.6875] a [77.9583]0.0765030.1374270.556679-0.5857660.04
Fare 1.0000001.0000001.0000000.0000000.37

Tudo junto agora

Depois de superar os obstáculos iniciais, decidi me desafiar ainda mais e criar outra função incrível - aquela que uniria as métricas tanto das variáveis discretas quanto das contínuas em uma única tabela.

Confesso que essa função foi bem mais rápida de criar! Então, sem mais delongas, aqui está a função que fiz para juntar tudo isso em uma tabela só:

A tabela final ficou da seguinte forma:

variablelimit01DistrWoEIVIV_total
female 0.1475410.6812870.216562-1.5298770.8165651.341681
male 0.8524590.3187132.6746880.9838330.5251161.341681
C 0.1366120.2735290.499442-0.6942640.0950570.122728
Q 0.0856100.0882350.970249-0.0302030.0000790.122728
S 0.7777780.6382351.2186380.1977340.0275920.122728
Age<=[14.]0.0582880.1315790.442987-0.8142140.060000 
Age[14.] a [19.]0.0965390.0994150.971070-0.0293560.000000 
Age[19.] a [22.]0.0874320.0555561.5737700.4534740.010000 
Age[22.] a [25.]0.0801460.0760231.0542240.0528050.000000 
Age[25.] a [28.]0.0673950.0701750.960383-0.0404240.000000 
Age[28.] a [31.8]0.0728600.0760230.958386-0.0425050.000000 
Age[31.8] a [36.]0.0856100.1286550.665425-0.4073300.020000 
Age[36.] a [41.]0.0619310.0555561.1147540.1086340.000000 
Age[41.] a [50.]0.0856100.0906430.944474-0.0571270.000000 
Age 1.0000001.0000001.0000000.0000000.090000 
Fare<=[7.55]0.1438980.0380123.7856241.3312110.140000 
Fare[7.55] a [7.8542]0.1111110.0760231.4615380.3794900.010000 
Fare[7.8542] a [8.05]0.1584700.0555562.8524591.0481810.110000 
Fare[8.05] a [10.5]0.1092900.0526322.0765030.7306850.040000 
Fare[10.5] a [14.4542]0.0874320.1052630.830601-0.1856060.000000 
Fare[14.4542] a [21.6792]0.0928960.1081870.858662-0.1523800.000000 
Fare[21.6792] a [27.]0.0783240.1345030.582324-0.5407290.030000 
Fare[27.] a [39.6875]0.1038250.0994151.0443590.0434030.000000 
Fare[39.6875] a [77.9583]0.0765030.1374270.556679-0.5857660.040000 
Fare 1.0000001.0000001.0000000.0000000.370000 

Vocês gostaram das minhas funções para o cálculo do IV e WoE em Python? Eu amei criá-las, mas percebi que ainda tem muita gente por aí que fica meio perdida com essas métricas e não sabe como utilizá-las para melhorar seus modelos de regressão logística.

Por isso, decidi que é hora de criar um post e explicar tudo bem detalhadamente! Vou mostrar como é realizado o cálculo do IV e do WoE, e dar dicas valiosas sobre como tomar decisões e escolhas inteligentes para melhorar seus modelos com base nessas métricas.

Estou super empolgada para compartilhar tudo isso com vocês, então fiquem ligados(as)!

Referências:

  • Anderson, Raymond. The Credit Scoring Toolkit: Theory and Practice for Retail Credit Risk Management and Decision Automation. Oxford University Press, 2007.

  • Siddiqi, Naeem. Credit Risk Scorecards: Developing and Implementing Intelligent Credit Scoring. Wiley, 2006.

  • Sudarson Mothilal Thoppay (2015). woe: Computes Weight of Evidence and Information Values. R package version 0.2. https://CRAN.R-project.org/package=woe

  • Thilo Eichenberg (2018). woeBinning: Supervised Weight of Evidence Binning of Numeric Variables and Factors. R package version 0.1.6. https://CRAN.R-project.org/package=woeBinning