Que tal avaliar seu modelo? — Parte 1
Aprenda a utilizar os tipos de erros para validar a qualidade do seu modelo
O dia a dia de um cientista de dados, no que tange a análise de dados e classificação, pode ser resumido em aplicar técnicas de inferência em dados pré-processados de modo a construir um modelo capaz de fazer boas predições. Mas uma vez que você construiu o seu modelo, como saber se ele é satisfatório?
Um modo de avaliar seu modelo é com relação aos tipos de erro. Consideremos o cenário no qual você vive em uma cidade que vez ou outra chove. Se você chutou que choveria essa manhã, mas por alguma razão não chouveu, seu chute foi um falso positivo, comumente abreviado como FP. Se você chutou que não choveria, mas em vez disso choveu, você cometeu um falso negativo (FN). Mas não só erros são colhidos de nossos chutes! Você poderia ter chutado que choveria e de fato choveu! Nesse caso, temos um verdadeiro positivo (TP, do inglês True Positive), ou você poderia ter chutado que não choveria e de fato não choveu, ou seja, um verdadeiro negativo (TN, do inglês True Negative). Mas pera lá, Marcel! Na prática não são a mesma coisa, né? Chover quando você não tem um guarda chuva é muito pior do que não chover quando você tem um guarda chuva. Verdade, bem observado. Vem comigo! ;-)
Não faz muito sentido dizer que verdadeiro negativo ou verdadeiro positivo são erros, concorda? Por essa razão, costumamos nos referir a erro de tipo I e erro de tipo II (se você clicou nos primeiros dois links desse texto, já deve ter visto isso). O erro de tipo I é o falso positivo (FP) e o erro de tipo II é o falso negativo (FN).
Dependendo do seu problema, pode ser que você queira minimizar o erro de tipo I ou o erro de tipo II em suas predições. Isso varia de problema para problema. Se é esse o seu caso, você provavelmente irá analisar a performance do seu modelo em termos de revocação, precisão (ou recall e precision, em inglês) e outras equações que são definidas em termos desses dois (que por sua vez são definidos em termos de verdadeiro positivo, verdadeiro negativo, falso positivo e falso negativo). Antes de te dizer o que é revocação ou precisão, eu irei te mostrar como essas métricas são definidas (as imagens de equação foram geradas com o codecogs equation editor):
Já que eu trabalho com network discovery, e eu acho que é mais fácil de entender isso em termos de nós e arestas em um grafo, a partir de agora os exemplos serão ilutrados através de redes. Conhecimento indispensável sobre grafos, de modo que você consiga tranquilamente acompanhar o restante do texto:
- Nós (ou vértices) são representados visualmente por um círculo e representam propriedades do seu modelo. Em uma tabela com indivíduos em linhas e características como colunas, essas colunas supostamente seriam os vértices do seu modelo.
- Arestas são as linhas que ligam os nós. Elas podem representar, por exemplo, alguma forma de associação ou interação entre esses nós.
Abaixo, você pode ver um exemplo de uma rede.
Em um problema de network discovery, um dos objetivos é ser capaz de inferir uma estrutura de rede que represente algum tipo de associação entre as propriedades do sistema a partir dos dados de entrada. Imagina uma tabela com 10 linhas e 5 colunas, que significa 10 indivíduos e 5 características de cada um deles. A partir dessas informações, como nossos 5 vértices interagem, se é que interagem?
A imagem acima é do dataset alarm, o qual tem sua rede real conhecida. A partir dela, podemos utilizar técnicas já estabelecidas na literatura (ou técnicas que nós tivermos criado) e comparar a rede inferida com a rede real.
Revocação
Revocação, também chamada de sensibilidade ou recall em inglês, é a medida de quantos resultados corretamente inferidos o seu modelo foi capaz de recuperar, sem se preocupar com as ocorrências de falsos positivos (FP). Observe que nesse caso é melhor trazer uma aresta (mesmo que ela não exista na rede real) do que não trazer nenhuma.
Repare que ainda que você tenha conseguido inferir corretamente apenas uma aresta, contanto que você não tenha cometido um falso negativo (dizer que não tinha uma aresta entre dois nós, quando na verdade a rede real contém essa aresta) você irá obter revocação máxima, que é 1. Como você pode ver, a revocação é penalizada por falsos negativos. Se erro do tipo II é pior do que erro do tipo I para o seu problema, revocação pode ser o que você procura!
Precisão
Precisão, também conhecida como positive predictive value (PPV), é a medida de quantos resultados positivos (TP) seu modelo foi capaz de corretamente recuperar, tentando não cometer erros do tipo I (FP). Observe que aqui é melhor não inferir nenhuma aresta (ainda que elas existam na rede real) do que inferir uma, contanto que ao menos uma aresta correta você tenha conseguido inferir. Nesse caso, se você não tiver cometido nenhum erro de tipo I (FP), dizer que tem uma aresta onde na verdade não tem, você irá obter precisão máxima, isto é, 1. No caso da precisão, ela é penalizada por falsos positivos. Se erro de tipo I é pior do que erro do tipo II para o seu problema, precisão pode ser a métrica que você busca.
Imagino que você tenha reparado que em ambas as descrições eu mencionei contanto que você tenha inferido ao menos 1 aresta corretamente […]. Se a razão desse comentário não ficou clara para você, vamos dar mais uma olhada nas definições de revocação e precisão. Temos o verdadeiro positivo (TP) tanto no numerador como no denominador, de modo que se o número de falsos negativos (FN), para revocação, ou falsos positivos (FP) para precisão, for 0, contanto que TP seja 1, teremos 1/1+0 = 1, seja para revocação ou precisão.
Se você não tiver inferido nenhum verdadeiro positivo e você não inferiu uma aresta que deveria estar lá (FN=1, por exemplo), você terá:
Se você não tiver inferido nenhum verdadeiro positivo e inferiu uma aresta que não deveria estar lá (FP=1, por exemplo), você terá:
Especificidade
A especificidade é também conhecida como a taxa de verdadeiro negativo (TNR, do inglês True Negative Rate). Ela mede a proporção de verdadeiros negativos que foram corretamente inferidos como tal, isto é, a porcentagem de arestas que não foram desenhadas no grafo que você inferiu e de fato não constam no grafo real. Se seu objetivo principal é não inferir arestas que não estão lá, fique de olhos abertos para a especificidade.
Curva ROC
Na teoria de detecção de sinal, a Característica de Operação do Receptor, ou Receiver Operating Characteristic, ou simplesmente curva COR, é uma representação gráfica que ilustra o desempenho de um sistema classificador binário e como o seu limiar de discriminação é variado.
Wikipedia
De modo a discutirmos curvas ROC, eu preciso primeiro introduzí-lo às taxas de falso positivo e verdadeiro positivo.
A taxa de verdadeiro positivo (True Positive Rate, TPR, em inglês) é a probabilidade de detecção, enquanto que a taxa de falso positivo (False Positive Rate, FPR, em inglês) é a probabilidade de alarme falso. Seu classificador (ou classificadores, já que existem três na figura abaixo, por exemplo) irão obter diferentes valores para TPR e FPR a partir do momento que você variar parâmetros ou mudar os dados de entrada. Ao fazer essas alterações, e obter valores diferentes de TPR e FPR, você irá obter uma curva ROC. A AUC mencionada na imagem é a área sob a curva (Area Under the Curve, em inglês). Um classificador perfeito tem sempre uma taxa máxima de verdadeiro positivo. Não preciso dizer o que significa uma curva ROC que está abaixo da linha pontilhada né? Vou dizer mesmo assim :-P. Isso significa que a classificação foi pior do que uma classificação feita ao acaso. Pontos acima da diagonal são considerados boas classificações enquanto que pontos abaixo da diagonal são considerados classificações ruins, piores do que ao acaso.
Tá lembrado que curvas ROC são usadas para avaliar classificadores binários?Uma vez que se trata de classificadores binários (VERDADEIRO ou FALSO, por exemplo), no caso de um classificador com uma terrível curva ROC, você pode simplesmente inverter a saída (Se for TRUE leia FALSE e se for FALSE leia TRUE) e você terá obtido um excelente classificador!
Calma lá, Marcel! Eu não quero mudar critérios, meus dados ou sair fazendo mil e uma simulações. Eu só quero rodar quatro classificadores nos meus dados e ver qual deles é melhor em termos de TPR e FPR.
Beleza, relax. Digamos que você tenha quatro classificadores A, B, C e D. Você irá executar cada um deles uma vez nos seus dados, de modo que você tenha quatro pontos no seu gráfico, em vez de quatro curvas. Olha a figura aqui embaixo!
Esse gráfico mostra que C’ e A são superiores a uma classificação ao acaso, B se comportou de mesmo modo que uma classificação ao acaso e C é muito ruim, pior do que ao acaso.
Tá Marcel, isso é meio óbvio. Tem algo mais que podemos interpretar do gráfico, apenas o observando? Bem, C tem um TPR muito baixo, o que significa que, por exemplo, poucos pacientes doentes foram corretamente identificados como doentes. Além disso, C tem um FPR muito alto, o que signfiica que, por exemplo, vários pacientes saudáveis foram incorretamente classificados como doentes. É.. Não é mesmo um bom classificador :-(.
Em outros textos, você irá provavelmente ver essas taxas explicadas em termos de casos. Se seu dataset (40 linhas) contém 30 pacientes doentes (30 linhas) e seu classificador foi capaz de classificar 28 deles como doentes, qual a sua True Positive Rate (TPR)? E se 10 não estão doentes e você disse que 5 desses 10 estão doentes, qual sua False Positive Rate (FPR)? Observe as respostas abaixo.
Xuxu beleza, entendi. Mas nossos exemplos aqui deveriam ser redes, confere? De fato, voltemos para redes. Você sabe que a rede real tem 10 arestas conectando alguns nós e ao comparar com sua rede inferida você observa que apenas 3 arestas das 10 foram inferidas. Nesse caso, sua TPR é 3/10 = 0.3.
Como já vimos anteriormente, se é muito mais importante evitar erro de tipo I do que de tipo II no seu problema, ou ao contrário, avaliar seu modelo em termos de revocação e precisão isoladamente pode ser uma boa ideia. Nos próximos tópicos, iremos falar de F-score e de acurácia, que tentam ponderar com base em ambos as métricas, precisão e revocação.
F-score
Em análise estatística de classificação binária, o F1 score (também conhecido como F-score ou F-measure) é uma medida de acurácia de um teste. Ele leva em consideração tanto a precisão quanto a revocação do teste para computar o score […] O F-score é a média harmônica da precisão e da revocação, onde o F-score atinge seu valor máximo em 1 (perfeita precisão e revocação) e o mínimo em 0.
Wikipedia
O F-score é definido como:
Como pode ser visto pela definição acima, o F-score é a média harmônica da precisão e da revocação. A média harmônica é um tipo de média utilizada para números que representam uma taxa ou proporção. Se passou pela sua cabeça se existe algo similar mas utilizando a média geométrica, bem pensado! Chama-se G-measure. Você deverá utilizar o F-score quando tanto a precisão quanto revocação são importantes para o seu modelo. Se um deles é muito mais importante do que o outro, talvez seja melhor usar isoladamente a precisão ou a revocação. Sobre essa questão de médias e o F-score, você encontrará umas discussões interessantes aqui.
Acurácia
A acurácia é definida como:
Se você estiver tentando responder a pergunta “De todos os meus chutes, quantos estavam corretos?”, a acurácia é o que você está procurando! O F-Score deve ser escolhido em vez da acurácia se o seu custo de FN e FP são diferentes (tenha em mente que se o custo for muito diferente, talvez seja melhor ir direto com revocação ou precisão de forma isolada). Pontos desse texto a serem levados em consideração (retirado daqui):
- Um valor de acurácia de 90% signfiica que 1 de cada 10 arestas está incorreta e 9e stão corretas.
- Um valor de precisão de 80% significa que 8 de cada 10 arestas de fato existem.
- Um valor de revocação de 70% significa que 3 de cada 10 arestas não foram inferidas, mas deveriam.
- Um valor de especificidade de 60% significa que 4 de cada 10 arestas não deveriam estar lá, mas 6 estão corretas.
Se gostou, bate palminha que a Parte II tá no forno e vai vir uma delícia! ;-)