Modelo de classificação binária para dados desequilibrados

14

Eu tenho um conjunto de dados com as seguintes especificações:

  • Conjunto de dados de treinamento com 193.176 amostras com 2.821 positivos
  • Conjunto de dados de teste com 82.887 amostras com 673 positivos
  • Existem 10 recursos.

Eu quero realizar uma classificação binária (0 ou 1). O problema que estou enfrentando é que os dados são muito desequilibrados. Após a normalização e o dimensionamento dos dados, juntamente com alguma engenharia de recursos e o uso de alguns algoritmos diferentes, esses são os melhores resultados que eu poderia alcançar:

mean square error : 0.00804710026904
Confusion matrix : [[82214   667]
                   [    0     6]]

ou seja, apenas 6 acertos positivos corretos. Isso está usando regressão logística. Aqui estão as várias coisas que tentei com isso:

  • Algoritmos diferentes como RandomForest, DecisionTree, SVM
  • Alteração do valor dos parâmetros para chamar a função
  • Alguma engenharia de recursos baseada em intuição para incluir recursos compostos

Agora, minhas perguntas são:

  1. O que posso fazer para melhorar o número de hits positivos?
  2. Como se pode determinar se há um excesso de ajuste nesse caso? (Eu tentei traçar etc.)
  3. Em que ponto alguém poderia concluir se talvez esse seja o melhor ajuste possível que eu possa ter? (o que parece triste considerando apenas 6 ocorrências em 673)
  4. Existe uma maneira de fazer com que as instâncias de amostra positivas pesem mais, para que o reconhecimento de padrões melhore, levando a mais ocorrências?
  5. Quais gráficos podem ajudar a detectar valores extremos ou alguma intuição sobre qual padrão se encaixaria melhor?

Estou usando a biblioteca scikit-learn com Python e todas as implementações são funções de biblioteca.

editar:

Aqui estão os resultados com alguns outros algoritmos:

Classificador aleatório de floresta (n_estimators = 100)

[[82211   667]
[    3     6]]

Árvores de decisão:

[[78611   635]
[ 3603    38]]
tejaskhot
fonte

Respostas:

11
  1. Desde que você está fazendo a classificação binária, você tentou ajustar o limite de classificação? Como seu algoritmo parece bastante insensível, eu tentaria abaixá-lo e verificar se há uma melhoria.

  2. Você sempre pode usar Curvas de aprendizado ou um gráfico de um parâmetro do modelo vs. Erro de treinamento e validação para determinar se o seu modelo está sobreajustado. Parece que está se encaixando no seu caso, mas isso é apenas intuição.

  3. Bem, em última análise, depende do seu conjunto de dados e dos diferentes modelos que você tentou. Neste ponto, e sem mais testes, não pode haver uma resposta definitiva.

  4. Sem pretender ser um especialista no assunto, existem várias técnicas diferentes que você pode seguir (dica: primeiro link no google ), mas, na minha opinião, você deve primeiro escolher com cuidado sua função de custo, para que ela represente o que você está realmente procurando.

  5. Não sabe ao certo o que você quer dizer com intuição padrão, você pode elaborar?

A propósito, quais foram seus resultados com os diferentes algoritmos que você tentou? Eles eram diferentes?

insys
fonte
1
Ajustar o limiar para a regressão logística fez o truque. Obrigado pela lista de fontes.
tejaskhot
Alguém pode colar um trecho de código de como você ajusta um limite de regressão logística?
Blenz
0

Como os dados são muito assimétricos, nesse caso, também podemos tentar o treinamento do modelo após a amostragem excessiva dos dados.

SMOTE e ADASYN são algumas das técnicas que podemos usar para sobre-amostrar os dados.

vipin bansal
fonte