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:
- O que posso fazer para melhorar o número de hits positivos?
- Como se pode determinar se há um excesso de ajuste nesse caso? (Eu tentei traçar etc.)
- 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)
- 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?
- 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]]
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.
fonte