Estou procurando o método ideal de binning (discretização) de uma variável contínua em relação a uma variável binária de resposta (destino) e com o número máximo de intervalos como parâmetro.
exemplo: eu tenho um conjunto de observações de pessoas com variáveis "height" (numeral contínuo) e "has_back_pains" (binário). Eu quero discretizar a altura em 3 intervalos (grupos), no máximo, com diferentes proporções de pessoas com dores nas costas, para que o algoritmo maximize a diferença entre os grupos (com restrições dadas, por exemplo, que cada intervalo tenha pelo menos x observações).
A solução óbvia para esse problema seria usar árvores de decisão (um modelo simples de uma variável), mas não consigo encontrar nenhuma função em R que tivesse "número máximo de ramificações" como parâmetro - todas elas dividem a variável em 2 gropus (<= x e> x). O minerador SAS tem um parâmetro "ramo máximo", mas estou procurando uma solução não comercial.
algumas de minhas variáveis possuem apenas alguns valores exclusivos (e podem ser tratadas como variáveis discretas), mas quero discretizá-las também em um número menor de intervalos.
A solução mais próxima do meu problema é implementada no pacote smbinning no R (que depende da função ctree do pacote party), mas tem duas desvantagens: é impossível definir o número de intervalos (no entanto, você pode encontrar uma maneira de contornar isso alterando o parâmetro p) e não funciona quando o vetor de dados possui menos de 10 valores exclusivos. De qualquer forma, você pode ver o exemplo de saída aqui (as colunas Cutpoint e Odds são cruciais):
Cutpoint CntRec CntGood CntBad CntCumRec CntCumGood CntCumBad PctRec BadRate Odds LnOdds WoE IV
1 <= 272 9081 169 8912 9081 169 8912 0.1874 0.9814 0.0190 -3.9653 -0.6527 0.0596
2 <= 311 8541 246 8295 17622 415 17207 0.1762 0.9712 0.0297 -3.5181 -0.2055 0.0068
3 <= 335 2986 163 2823 20608 578 20030 0.0616 0.9454 0.0577 -2.8518 0.4608 0.0163
4 Missing 27852 1125 26727 48460 1703 46757 0.5747 0.9596 0.0421 -3.1679 0.1447 0.0129
5 Total 48460 1703 46757 NA NA NA 1.0000 0.9649 0.0364 -3.3126 0.0000 0.0956
Estou ciente de que o binning resulta em perda de informações e que existem métodos melhores, mas vou usá-lo para visualização de dados e tratar essas variáveis como um fator.
fonte
SPSS Algorithms Optimal Binning
.Respostas:
Ao ler este livro aqui (Nagarajan, 2103 [1]), deparei-me com esta informação valiosa que estou descaradamente citando aqui:
Usando conhecimento prévio sobre os dados. Os limites dos intervalos são definidos, para cada variável, para corresponder a cenários do mundo real significativamente diferentes, como a concentração de um poluente específico (ausente, perigoso, letal) ou classes de idade (criança, adulto, idoso).
Usando heurística antes de aprender a estrutura da rede. Alguns exemplos são: regras de Sturges, Freedman-Diaconis ou Scott (Venables e Ripley, 2002).
Escolhendo o número de intervalos e seus limites para equilibrar a precisão e a perda de informações (Kohavi e Sahami, 1996), novamente uma variável por vez e antes que a estrutura da rede seja aprendida. Uma abordagem semelhante, considerando pares de variáveis, é apresentada em Hartemink (2001).
Realização de aprendizado e discretização iterativamente até que nenhuma melhoria seja feita (Friedman e Goldszmidt, 1996).
Essas estratégias representam diferentes compromissos entre a precisão da representação discreta dos dados originais e a eficiência computacional da transformação.
Essas informações são fornecidas, caso você deseje justificar o método de classificação que deseja usar e não apenas usar um pacote diretamente.
[1]: Nagarajan R. (2013),
redes bayesianas em R, com aplicações em biologia de sistemas
Springer
fonte
Experimente o pacote de informações para R. https://cran.r-project.org/web/packages/Information/Information.pdf https://cran.r-project.org/web/packages/Information/vignettes/Information-vignette .html
O pacote de informações possui funcionalidade para calcular WoE e IV (o número de posições é um parâmetro flexível, o padrão é 10) e é um instrumento útil para a exploração de dados e, consequentemente, para o binning. A saída não contém Odds; e não é possível especificar zero como uma bandeja separada (para minhas tarefas, zero geralmente é uma bandeja válida); e seria bom obter uma saída do pacote de informações que seria como a do iniciante. No entanto, o que foi dito sobre recursos interessantes do pacote Information, mas ainda não disponíveis, outros pacotes R para WoE e IV (ai, klaR) não impressionaram instrumentos tão úteis quanto o pacote Information, na verdade eu falha ao executá-los após 2-3 tentativas. Para a tarefa de dscretisation / binning, os pacotes Information e smbinning podem funcionar bem juntos,
Para o binning real, usei a função data.table em vez da função cut (). Veja o link do meu post abaixo, ele contém código genérico na parte inferior da pergunta inicial: /programming/34939845/binning-variables-in-a-dataframe-with-input-bin-data- from-another-dataframe
Espero que ajude.
fonte