Eu tenho um conjunto de dados que possui um atributo de classe binária. Existem 623 casos com classe +1 (câncer positivo) e 101.671 casos com classe -1 (câncer negativo).
Eu tentei vários algoritmos (Naive Bayes, Random Forest, AODE, C4.5) e todos eles têm taxas de falso-negativos inaceitáveis. A Random Forest tem a maior precisão geral de previsão (99,5%) e a menor taxa de falsos negativos, mas ainda perde 79% das classes positivas (ou seja, falha em detectar 79% dos tumores malignos).
Alguma idéia de como posso melhorar essa situação?
Obrigado!
Respostas:
Desequilíbrio de classe é um problema muito comum. Você pode sobreamostrar a classe positiva (ou subamostrar a negativa) ou adicionar pesos de classe.
Outra coisa a lembrar neste caso é que a precisão não é uma métrica muito útil aqui. Você pode considerar a pontuação na AUC ou na F1 .
Alterar o limiar da sua decisão pode parecer atraente, mas obviamente levará a (nesse caso, provavelmente drasticamente) aumento de falsos positivos (embora talvez os PJs não sejam tão ruins quanto os FNs no caso de diagnóstico médico, se os testes não forem proibitivamente caros).
Uma análise mais aprofundada das opções no caso de desequilíbrio de classe é fornecida aqui .
fonte
Mesmo que a resposta na realidade seja sempre
true
oufalse
, você pode fazer com que os atributos da sua classe não sejam rótulos, mas números de ponto flutuante, ou seja, 1,0 e 0,0 (ou 100 e 0). Ou seja, você pode enquadrar que é um problema de regressão , não um problema de classificação.Então a saída prevista será igualmente números nesse espectro, ou seja, probabilidades, não etiquetas. Sua implementação atual é essencialmente equivalente a um modelo de regressão com um limite de 0,5.
Com essa saída, você ou seu cliente podem definir um limite aceitável (por exemplo, 0,3). É claro que haverá mais falsos positivos, mas para algumas aplicações, como a detecção de câncer, isso é ideal.
Sobreamostragem (os positivos) ou subamostragem (os negativos) também são maneiras de corrigir isso, mas devem ser feitas com cuidado, podem sacrificar a precisão e ainda sacrificar o controle para mover o limite após a criação dos dados e do treinamento.
fonte
A sub e a super amostragem como técnica já foram mencionadas, mas pensei em apontar para uma variante comumente usada:
SMOTE : Técnica de super amostragem de minoria sintética
Foi apresentado neste artigo em 2002 . Aqui está um trecho do resumo:
Você pode usá-lo facilmente no Python, usando o
imbalanced-learn
pacote , que está contido no módulo contrib do Scikit-Learn e deve ser instalado separadamente.Esse pacote inclui métodos para combinar sobre / subamostragem, bem como um conjunto de utilitários para gerar lotes de dados que podem fluir para o Keras / Tensorflow.
fonte