Métricas de avaliação de classificadores
Introdução
É possível classificar dados tanto em modelos de aprendizado supervisionado, quanto não-supervisionado.
- Supervisionado: abstrai as características dos conjuntos de dados de acordo com cada classe
- Não-supervisionado: abstrai as características dos dados gerando clusters
Este post trata especificamente de métricas para avaliação de modelos de aprendizado supervisionado.
Os exemplos são dados em 2 classes apenas para fins de entendimento das análises.
Futuros posts abordarão cada análise para um número maior de classes.
Matriz de confusão
A matriz de confusão é uma das métricas principais de análise de classificadores.
Para entender a matriz é preciso primeiro entender o conceito de positivo e negativo neste contexto, para então o entendimento dos resultados fique mais claro.
São tratados como positivos a classe de elementos de interesse durante a classificação e negativa a outra classe.
Supondo que você esteja tratando de um caso de câncer em que seus dados são câncer do tipo benigno e do tipo maligno (Wiscosin Breast Cancer). A classe importante neste caso é a do câncer maligno e, portanto a classe positiva.
Curiosidade: Geralmente em datasets desbalanceados, a classe positiva é a de menor quantidade de dados.
A nomenclatura que define os resultados da tabela:
- VP -> verdadeiro positivo. Ou seja, o dado era positivo e foi previsto como positivo
- VN-> verdadeiro negativo. O dado era negativo e foi previsto como negativo.
- FP -> falso positivo. O dado era negativo, porém foi previsto como positivo.
- FN -> falso negativo. O dado era positivo, porém foi previsto como negativo.
Em python você pode criar uma matriz de confusão com o seguinte código:
Da matriz de confusão há muita informação a ser retirada. Começando com:
- Acurácia (Acuracy): analisa a quantidade de acertos em relação ao total de classificações: [ (VP + VN)/(VP + VN + FP + FN) ]
- Sensibilidade (Sensitivity, Recall): porção de VP em relação ao total de positivos. Em outras palavras, quão bom o seu classificador é para classificar corretamente a classe de interesse. [ VP / (VP + FN) ]
- Valor Predito Positivo — Precisão (Precision): porção de VP em relação aos classificados como positivos. [ VP / (VP + FP) ]
- Especificidade (Specificity): porção de VN em relação ao total de negativos. Em outras palavas, quão bom o classificador é para classificar corretamente a outra classe. [ VN / (FP + VN) ]
- Eficiência (Efficiency): média aritmética entre sensibilidade e especificidade. [ (Sens + Espec)/2 ]Interpretando esse cálculo, pense que:
** Eficiência = 1: A única forma de ocorrer é quando Sens=1 e Espec=1. Em outras palavras, o seu classificador conseguiu acertar corretamente todos os elementos de todas as classes.
** Eficiência = 0.5: Geralmente ocorre quando Sens=1, Espec=0, ou o inverso. Ou seja, o seu classificador está classificando todos os elementos em uma classe apenas!
Se a matriz de confusão é capaz de dar tantas respostas sobre o classificador, por que ela não é a única usada?
Considere que nas tabelas apresentadas a seguir, o modelo de classificação mantém-se o mesmo, o que muda é apenas o threshold que gera as classificações.
As tabelas não me informam sobre os valores de threshold. Eu precisaria anotar separadamente e continuar estudando até conseguir uma resposta do melhor valor.
Como escolher qual desses modelos seria o melhor se eu so tivesse esses?
Voltando ao caso do dataset de câncer usado como exemplo no início, precisamos entender o problema de negócio associado. Assim, basta perguntarmos:
O que é pior no caso de um teste de câncer? Dizer ao paciente que ele têm câncer, quando na realidade não possui (FP) ou o contrário, dizer que ele não tem câncer quando de fato possui (FN).
Ora, se dissermos que o paciente possui câncer e for uma informação falsa, então ele pode ser encaminhado para novos exames que mostrarão que o resultado era falso. Mas, se dissermos que o paciente não possui câncer, quando de fato o possui, então o paciente vai embora para casa feliz e pode vir ao óbito, já que não será encaminhado para novos exames.
Assim, considerando que não conseguiremos alcançar o resultado ideal, que é o resultado da tabela da situação 1 existe alguma forma de determinarmos, com um mesmo modelo, qual a melhor resposta que ele pode oferecer?
A resposta é sim! Analisamos, neste caso a curva ROC.
Curva ROC (Receiver Operating Characteristic)
Imagine que para cada valor de threshold do seu classificador, você possa gerar um ponto. Agora imagine que, tendo em vista o seu problema de negócio a ser resolvido (no caso do câncer, minimizar erros de classificações do câncer maligno), fica relativamente mais fácil encontrar o melhor valor de threshold se na sua tabela fossem impressos valores de recall e precision. Por quê?
- Especificidade [ VN / (FP + VN) ] = 1, todos os valores negativos foram corretamente classificados em relação à todos os valores reais negativos.
- Recall, Sensibilidade [ VP / (VP + FN) ] = 1, todos os valores positivos foram corretamente classificados em relação à todos os valores reais positivos.
Assim, se eu tenho um gráfico que mostra ambos, eu posso decidir qual deles é o mais importante. Melhor ainda é fazer [1- Especificidade] para que eu gere uma curva. Veja a imagem.
Observe que a curva aleatória descreve a equação [sens= 1- espec]. Os modelos de classificação devem ser sempre melhores que a curva aleatória.
A curva verde descreve a situação ideal, pois consegue ter o ponto (0,1), que significa que o classificador consegue especificidade e sensibilidade total.
A curva azul descreve o que normalmente encontramos, ou seja, uma curva entre a ideal e a aleatória. Vamos interpretá-la voltando ao caso exemplo do câncer. Queremos então o melhor valor de sensibilidade, sem perder muito na especificidade. Se perdermos 10% de especificidade (0,1 no eixo), conseguimos chegar perto de 70% de sensibilidade. Perdendo mais 10% (20% total), a sensibilidade chega próximo de 80%. Porém, para chegar perto dos 90% de sensibilidade, seria necessário perder por volta de 60% total em especificidade.
A análise demonstrada acima é o que chamamos de trade-off que a curva ROC possibilita fazer.
Trade-off da curva ROC: Decidir quanto vale à pena perder em especificidade para melhorar a sensibilidade.
Outra informação que é possível retirar ainda da curva ROC é a AUC (área under the curve — área sob a curva). Observe que no caso ideal (curva verde) a área vale 1, e na vermelha vale 0,5. Ou seja, a AUC nos diz quão separável são nossos dados são percebidos pelo modelo.
Ou seja, podemos dizer que a curva ROC nos ajuda a:
- Decidir qual modelo nos dá a melhor separabilidade de classes
- Decidir dentro das curvas, qual valor nos dá a melhor classificação dado o nosso problema de negócio.
Até aqui então, vimos a tabela de confusão e a curva ROC. Existe mais alguma métrica que valha a pena tratar em relação à classificadores?
Sim! Estatística!
Estatística: atestando estabilidade do modelo
Então, uma vez que temos o resultado final e queremos apresentar ao nosso cliente (mesmo que esse cliente seja o professor), como mostrar a validade estatística dos resultados?
Primeiro, vamos falar de estabilidade de resultados. Como assim?
Monta-se uma tabela em que comparamos erro e variância da fase de teste e treino dos dados. A primeira informação que essa tabela nos fornece é se nosso classificador está com over-fitting.
Over-fitting: quando o erro do classificador é muito baixo na fase de treino, e alto na fase de testes, indica que o modelo consegue aprender as saídas correspondentes das entradas, em vez de aprender a generalizar o problema.
Assim, o ideal é rodar 30 vezes pelo menos (porque 30 é um número mágico da estatística que nos fornece estabilidade). Sim. Essa foi a definição que aprendi.
Estabilidade do modelo: atestamos a estabilidade de um modelo quando a tabela de estabilidade estiver com valores de erro e variância dos erros similar para treino e teste.
A estabilidade nos indica então que o modelo não está com over-fitting nem under-fitting e, portanto, pronto para implementação (deployment).
Conclusão
Em casos de classificadores, a melhor abordagem (e também a mais usada no ramo profissional) é usar mais de uma análise para garantir que seu modelo:
- possui boa eficiência, precisão e acurácia (matriz de confusão)
- consegue gerar uma boa separabilidade das classes (ROC)
- está estável (estatística) e, portanto, pronto para implementação