Métricas de avaliação de classificadores

Juliana Guamá
pyladiesbh
Published in
7 min readMar 16, 2019

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.

Matriz de confusão

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.

Idealmente, o projeto de classificação visa essa situação
Todos os dados classificados como negativos
Todos os dados classificados como positivos

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?

Tabela de estabilidade do modelo

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

--

--

Juliana Guamá
pyladiesbh

Cientista de Dados que usa Python e R até para calcular a quantidade de pó que vai no café.