Métricas Comuns em Machine Learning: como analisar a qualidade de chat bots inteligentes — métricas (3 de 4)

Renato dos Santos Rosa Leal
As Máquinas que Pensam
4 min readMay 22, 2017

Nos primeiros dois artigos já falamos sobre o porquê utilizar apenas a precisão geral do modelo como métrica não é suficiente para uma boa avaliação e também abordamos alguns dos conceitos básicos para a compreensão mais avançada de modelos de qualidade em sistemas de aprendizado de máquina.

Neste artigo apresentaremos as métricas mais utilizadas para modelos de classificação considerando os conceitos já apresentados. Para nos ajudar a entender melhor essas métricas utilizaremos a matriz de confusão do segundo artigo da série:

Acurácia

Já vimos a definição de acurácia no primeiro artigo, agora podemos defini-la utilizando os termos aprendidos:

A pergunta que a acurácia responde é a seguinte: no geral, o quão frequente o classificador está correto?

No nosso caso temos que a acurácia global é igual a 21/31 = 0.68, pois aqui os verdadeiros positivos e verdadeiros negativos possuem o mesmo grupo de exemplos, ou seja, ao considerarmos os VP como todos aqueles exemplos marcados em roxo teremos então VN como zero.

Podemos também fazer estas análises para cada uma das intenções também:

  • #realizarPedido: (6+15)/31 = 21/31 = 0.68
  • #obterStatus: (4+17)/31 = 0.68
  • #horarioAtendimento: (11+10)/31 = 0.68

Podemos ver então que a média das acurácias individuais se mantém em 0.68 pois a soma dos verdadeiros positivos com verdadeiros negativos das classes sempre dá o mesmo valor (tudo aquilo classificado corretamente que não é de uma classe será, por definição, da classe de verdadeiros negativos).

Precisão (precision)

Apesar de alguns traduzirem a métrica anterior (accuracy) como precisão vamos utilizar apenas a descrição a seguir: daqueles que classifiquei como corretos, quantos efetivamente eram? Traduzindo em fórmula temos:

No nosso exemplo teríamos uma precisão global de 21/(21+10) = 21/31 = 0.68, o mesmo número que nossa acurácia glocal. E para as intenções:

  • #realizarPedido: 6/(6+3) = 0.67
  • #obterStatus: 4/(4+5) = 0.44
  • #horarioAtendimento: 11/(11+2) = 0.85

A média das precisões individuais ficaria então em 0.65. Neste exemplo já podemos ver que a análise das intenções se mostra bem mais sensível as mudanças introduzidas enquanto o modelo geral mantém o mesmo comportamento.

Aqui é interessante analisar que temos algumas intenções muito mais fortes que outras (#horarioAtendimento tem uma precisão quase duas vezes maior que #obterStatus) e a partir daí poderíamos colocar mais esforço em melhorar uma intenção do que outra.

Recall ou revocação

O recall é a frequência em que o seu classificador encontra os exemplos de uma classe, ou seja, “quando realmente é da classe X, o quão frequente você classifica como X?”. Traduzindo para fórmula:

No nosso exemplo teríamos um recall global de 21/31 = 0.68, o mesmo número que nossa precisão global. E para as intenções:

  • #realizarPedido: 6/(6+4) = 0.6
  • #obterStatus: 4/(4+5) = 0.44
  • #horarioAtendimento: 11/(11+1) = 0.92

A média dos recalls individuais ficaria então em 0.65, o mesmo número encontrado para a precisão, no entanto podemos ver que novamente as classes obtiveram um comportamento mais afetados pelo maneira que medimos.

Precisão x Recall

Se olharmos os resultados gerais do nosso classificador, seja por cálculo direto (P 0.68/ R 0.68) ou média das métricas individuais (P 0.65/ R 0.65) já temos um resultado interessante.

Isso porque equilibrar uma boa precisão com bom recall exige bastante trabalho. Você se encontrará várias vezes melhorando o seu recall e assim vendo a sua precisão baixar (ou vice versa).

É natural: o quanto mais rigorosos somos para acertar (melhorar a precisão) menos estamos dispostos a errar (aumentar o recall).

Se o seu classificador não comete nenhum erro então a precisão do mesmo é igual ao seu recall e ambos possuem valor 1.0. Mas no mundo real isso é algo impossível de se atingir.

Podemos então combinar essas duas métricas em uma medida única: o F1.

F1 Score

Essa métrica combina precisão e recall de modo a trazer um número único que indique a qualidade geral do seu modelo e trabalha bem até com conjuntos de dados que possuem classes desproporcionais.

A fórmula que define o F1 é a seguinte (quanto maior melhor o modelo):

No nosso caso teríamos um F1 global de 0.68 enquanto um modelo perfeito (1/1) chegaria a um score de no máximo um.

Mas olhar apenas para o resultado geral é suficiente?

Conclusão

Como vimos ao decorrer deste artigo utilizar outras métricas para analisar o seu bot pode te dar uma visão mais completa do desempenho do mesmo.

O importante é entender o quê cada medição significa e quais são suas restrições para então decidir que ação tomar. Vimos que uma análise de cada intenção ao invés da análise global pode te mostrar quais intenções estão mais fracas ou mais fortes.

Resolvemos então o problema dos falsos positivos na métricas mas ficou ainda um outro problema: a distribuição desigual dos exemplos nas classes.

No último artigo dessa série falarei como realizar essas analises em código e já de quebra resolveremos a questão da distribuição.

--

--