A regressão logística está prevendo todos 1 e não 0

10

Estou executando uma análise sobre a probabilidade de inadimplência de empréstimos usando regressão logística e florestas aleatórias.

Quando uso regressão logística, a previsão é sempre '1' (o que significa bom empréstimo). Eu nunca vi isso antes e não sei por onde começar em termos de tentar resolver o problema. Existem 22 colunas com 600 mil linhas. Quando diminuo o número de colunas, obtenho o mesmo resultado com regressão logística.

Por que a regressão logística pode ser tão errada?

**Actual from the data**

0 :   41932

1 :   573426

**Logistic regression output** 

prediction for 1 when actually 0: 41932
prediction for 1 when actually 1:573426

A**s you can see, it always predicts a 1**


**Random forests does better:**

actual 0, pred 0 : 38800 
actual 1, pred 0 : 27 
actual 0, pred 1 : 3132
actual 1, pred 1 : 573399
ivan7707
fonte
4
Isso não faz sentido. Logit não vai prever exatamente 0. Pode prever um valor baixo que você interpretado como 0. Assim, o problema poderia ser devido ao limite, não apenas o próprio modelo
Aksakal
@ Aksakal, estou usando o método scikit learn .predict. prever rótulos de classe para amostras em X
ivan7707 31/08/2015
Você está familiarizado com as curvas ROC? Você pode extrair as probabilidades previstas e depois jogar com o limite para classificar os dados você mesmo. O limite é sua alavanca de troca entre identificar padrões ou não padrões.
Aksakal
1
Veja minha resposta abaixo, mas também você pode usar ROC para encontrar o ponto doce em sua classificador configuração para logit entre sensibilidade e especificidade
Aksakal
4
Não use predictno sklearn em um modelo de probabilidade, é inútil. SEMPRE use predict_proba.
Matthew Drury

Respostas:

5

Bem, faz sentido que o seu modelo preveja sempre 1. Dê uma olhada no seu conjunto de dados: ele está seriamente desequilibrado em favor da sua classe positiva. A classe negativa compõe apenas ~ 7% dos seus dados. Tente reequilibrar seu conjunto de treinamento ou use um algoritmo sensível a custos.

JimBoy
fonte
Obrigado pela contribuição. Existe uma regra prática para o que é aceitável para dados desequilibrados ou boas fontes de como reequilibrar o que você poderia sugerir?
precisa saber é o seguinte
Infelizmente, não existe uma regra sobre como escolher um algoritmo, mas o "teorema do almoço grátis". No seu caso particular, eu iria primeiro com o pacote C5.0 de Ross Quinlan. Depois, você pode experimentar diferentes custos e técnicas de amostragem, como up e downsampling, SMOTE etc. Além disso, o site de Max Kuhn oferece um bom resumo dos algoritmos estabelecidos.
precisa saber é o seguinte
7
(+1) Na ausência de uma função de custo, parece não haver razão para usar a regressão logística como classificador : você tem as probabilidades previstas e pode usar uma regra de pontuação adequada para avaliar o desempenho do seu modelo. Veja, por exemplo, qual é a medida para avaliar a precisão da classificação binária para dados desequilibrados? . O desequilíbrio não é um problema per se: consulte A amostragem para baixo altera os coeficientes de regressão logística? .
Scortchi - Restabelece Monica
@ Scortchi, obrigado pelos links e pela ideia de usar modelos com custos. Consegui encontrar este link em papel que me leva na direção certa.
precisa saber é o seguinte
1
Não, não faz sentido que seu modelo preveja sempre 1s, porque 7% é uma taxa de inadimplência bastante alta e o logit é amplamente usado em inadimplências de empréstimos. Considere empréstimos com classificação AAA, cujo padrão é 0,1% ao ano. São basicamente empréstimos não solicitados.
Aksakal
13

Y

Frank Harrell
fonte
2
(+1) Sim, a pergunta é "você está resolvendo um problema de classificação ou está resolvendo um problema de suporte à decisão?".
GeoMatt22
1
Não tenho certeza disso. A estimativa de probabilidades é um ótimo resultado final. E observe que a maioria dos problemas de "classificação" é melhor resolvida usando decisões ótimas de Bayes. Além do reconhecimento visual e de padrões de áudio, a maioria dos problemas nos quais os métodos de classificação são aplicados seria melhor tratada com estimativa direta de probabilidade.
Frank Harrell
@FrankHarrell É correto que interpretar a saída como probabilidades exija um design que permita tal interpretação (coorte). E se não tivermos esse design, teremos que tomar uma decisão com base nas "pontuações de risco". Além disso, embora exista literatura discutindo isso no cenário não calibrado, isso não é tão comum na prática. Isso está correto?
julieth 12/09/16
1
Descreva como a amostragem usada para montar o conjunto de dados usado para o desenvolvimento do modelo difere dos clientes aos quais você aplicará as previsões.
31716 Frank
Por exemplo, amostragem de controle de caso para a qual a prevalência alvo é desconhecida. Ou amostras de conveniência de tamanho moderado.
julieth 13/09/16
1

Quando você classifica usando o logit, é isso que acontece.

O logit prevê a probabilidade de inadimplência (PD) de um empréstimo, que é um número entre 0 e 1. Em seguida, defina um limite D, de forma a marcar um empréstimo como padrão se PD> D e marcá-lo como não- padrão se PD

Naturalmente, em uma população típica de empréstimos PD << 1. Portanto, no seu caso, 7% é uma probabilidade bastante alta de dados de um ano (os PDs são normalmente relatados anualmente). Se esses dados são plurianuais, estamos falando do chamado PD cumulativo. Nesse caso, cumPD = 7% não é um número alto para 10 anos de dados, por exemplo. Portanto, por qualquer padrão, eu não diria que seu conjunto de dados é problemático. Eu descreveria isso pelo menos típico para dados padrão de empréstimo, se não for ótimo (no sentido de que você tem um número relativamente grande de padrões).

Agora, suponha que seu modelo preveja os seguintes três níveis de DP:

  • 0,1 (563.426)
  • 0,5 (20.000)
  • 0,9 (31.932)

Suponha também que os padrões reais para esses grupos sejam:

  • 0 0
  • 10.000
  • 31.932

Agora você pode definir D com valores diferentes e ver como a matriz muda. Vamos usar D = 0,4 primeiro:

  • Padrão real, prever não padrão: 0
  • Padrão real, padrão de previsão: 41.932
  • Não padrão real, prever não padrão: 563.426
  • Não padrão real, padrão de previsão: 10.000

Se você definir D = 0,6:

  • Padrão real, prever não padrão: 31.932
  • Padrão real, predizer padrão: 10.000
  • Não padrão real, prever não padrão: 573.426
  • Não padrão real, padrão de previsão: 0

Se você definir D = 0,99:

  • Padrão real, prever não padrão: 41.932
  • Padrão real, padrão de previsão: 0
  • Não padrão real, prever não padrão: 573.426
  • Não padrão real, padrão de previsão: 0

O último caso é o que você vê nos resultados do seu modelo. Neste caso, estou enfatizando o limite D para um classificador. Uma simples alteração em D pode melhorar certas características da sua previsão. Observe que, nos três casos, o DP previsto permaneceu o mesmo, apenas o limite D mudou.

Também é possível que sua própria regressão do logit seja ruim, é claro. Portanto, nesse caso, você tem pelo menos duas variáveis: a especificação do logit e o limite. Ambos afetam seu poder de previsão.

Aksakal
fonte
Você percebe que está propondo uma técnica para lidar com dados desequilibrados, não é? Portanto, você está admitindo o efeito da classe menor na precisão da previsão. Além disso, você está propondo uma técnica que o modelo original não está usando. Você não pode simplesmente mudar as circunstâncias ao seu gosto e, em seguida, fazer uma declaração à medida que avança.
Jimboy
Na análise / previsão de inadimplência, os dados são sempre "desequilibrados" nesse sentido. É o estado normal das coisas.
Aksakal
Pode ser como é. No entanto, você deve dar uma olhada no que Max Kuhn descreve como a "taxa de não informação", que nada mais é do que a maior classe no conjunto de dados. Então, dê uma olhada na mesa que Ivan forneceu novamente. Os resultados fazem todo sentido para o modelo que ele usou. Que você possa otimizar esses resultados com técnicas diferentes é outra questão e inteiramente possível.
precisa saber é o seguinte
@ JimBoy, vi a mesa dele e vi muitas outras coisas assim. Isso é bastante simples, geralmente lidamos com dados de inadimplência de empréstimos, em que os estados estão entre Corrente e 30 dias atrasados, 60, 90 .... até Padrão e Fechado. Em um bom portfólio, você pode obter empréstimos de 95% no estado Atual (limpo) e apenas 1% no Padrão. As pessoas usam logit mulltinomial para esse tipo de coisa o tempo todo no setor.
Aksakal
@ Aksakal, terei de fazer mais leituras sobre como alterar o limite, pois li muito sobre como é matematicamente incorreto alterá-lo para regressão logística. Em outra nota, o que você quis dizer com 'é possível que sua própria regressão logit seja ruim'?
Ivan7707 01/09/2015
1

Se o problema é realmente o desequilíbrio entre as classes, eu começaria simplesmente equilibrando os pesos das classes:

log_reg = LogisticRegression(class_weight = 'balanced')

Essa configuração de parâmetro significa que as penalidades para previsões falsas na função de perda serão ponderadas com proporções inversas às frequências das classes. Isso pode resolver o problema que você descreve.

Tal Yifat
fonte
Não está claro para mim que você identificou o problema. Eu acho que Matthew Drury encontrou o problema que tinha a ver com o uso do sklearn.
Michael R. Chernick
0

Bem, sem mais informações, é difícil dizer, mas pela definição de regressão logística você está saturando com base nos dados ajustados. Então, na equação, o termo e ^ -t vai para 0. Portanto, o primeiro lugar para procurar seria ver quais são os coeficientes reais.

Isso também pode ser devido a variáveis ​​mal dimensionadas. Pode haver um problema em que uma das colunas é enorme em valor numérico em comparação com outras que está causando problemas.

Tim Felty
fonte
@ Tim Felty, Obrigado pela resposta. Você pode, por favor, expandir o que eu procuraria em relação aos coeficientes e como isso se relaciona à saturação (ou me indicar um recurso para ler)? Além disso, tive a impressão de que variáveis ​​mal dimensionadas não teriam um efeito negativo na regressão logística. [link (] stats.stackexchange.com/questions/18916/… )
ivan7707 26/08/2015
0

Você pode usar o SMOTE para equilibrar o conjunto de dados desequilibrado. Um bom artigo para referência é:

Lifeng Zhou, Hong Wang, predição padrão de empréstimos para grandes dados desequilibrados usando florestas aleatórias, TELKOMNIKA Jornal Indonésio de Engenharia Elétrica, Vol.10, No.6, outubro de 2012, pp. 1519 ~ 1525, link .

Tushar Gadkari
fonte
Você poderia adicionar uma citação / referência completa (incluindo autor, data, editor, etc.) como faria em um artigo acadêmico? Isso tornaria mais fácil para os futuros leitores para rastreá-lo se o link parou de funcionar
Silverfish