Aprendizado de máquina - métricas de desempenho

Existem várias métricas que podemos usar para avaliar o desempenho de algoritmos de ML, classificação, bem como algoritmos de regressão. Devemos escolher cuidadosamente as métricas para avaliar o desempenho de ML porque -

  • A forma como o desempenho dos algoritmos de ML é medido e comparado dependerá inteiramente da métrica escolhida.

  • O modo como você pondera a importância de várias características no resultado será totalmente influenciado pela métrica escolhida.

Métricas de desempenho para problemas de classificação

Discutimos a classificação e seus algoritmos nos capítulos anteriores. Aqui, vamos discutir várias métricas de desempenho que podem ser usadas para avaliar previsões para problemas de classificação.

Matriz de confusão

É a maneira mais fácil de medir o desempenho de um problema de classificação em que a saída pode ser de dois ou mais tipos de classes. Uma matriz de confusão nada mais é do que uma mesa com duas dimensões viz. "Real" e "Previsto" e, além disso, ambas as dimensões têm "Verdadeiros positivos (TP)", "Verdadeiros negativos (TN)", "Falsos positivos (FP)", "Falsos negativos (FN)" conforme mostrado abaixo -

A explicação dos termos associados à matriz de confusão é a seguinte -

  • True Positives (TP) - É o caso quando a classe real e a classe prevista do ponto de dados são 1.

  • True Negatives (TN) - É o caso quando a classe real e a classe prevista do ponto de dados são 0.

  • False Positives (FP) - É o caso quando a classe real do ponto de dados é 0 e a classe prevista do ponto de dados é 1.

  • False Negatives (FN) - É o caso quando a classe real do ponto de dados é 1 e a classe prevista do ponto de dados é 0.

Podemos usar a função confusão_matrix de sklearn.metrics para calcular a Matriz de confusão do nosso modelo de classificação.

Precisão de classificação

É a métrica de desempenho mais comum para algoritmos de classificação. Pode ser definido como o número de previsões corretas feitas como uma proporção de todas as previsões feitas. Podemos calculá-lo facilmente pela matriz de confusão com a ajuda da seguinte fórmula -

$$ Precisão = \ frac {TP + TN} {+++} $$

Podemos usar a função precision_score de sklearn.metrics para calcular a precisão de nosso modelo de classificação.

Relatório de Classificação

Este relatório consiste nas pontuações de Precisões, Rechamada, F1 e Suporte. Eles são explicados a seguir -

Precisão

A precisão, usada na recuperação de documentos, pode ser definida como o número de documentos corretos retornados por nosso modelo de ML. Podemos calculá-lo facilmente pela matriz de confusão com a ajuda da seguinte fórmula -

$$ Precisão = \ frac {TP} {TP + FP} $$

Rechamada ou Sensibilidade

A recuperação pode ser definida como o número de positivos retornados por nosso modelo de ML. Podemos calculá-lo facilmente pela matriz de confusão com a ajuda da seguinte fórmula -

$$ Rechamada = \ frac {TP} {TP + FN} $$

Especificidade

A especificidade, ao contrário da memória, pode ser definida como o número de negativos retornados por nosso modelo de ML. Podemos calculá-lo facilmente pela matriz de confusão com a ajuda da seguinte fórmula -

$$ Especificidade = \ frac {TN} {TN + FP} $$

Apoio, suporte

O suporte pode ser definido como o número de amostras da resposta verdadeira que reside em cada classe de valores alvo.

Pontuação F1

Essa partitura nos dará a média harmônica de precisão e recall. Matematicamente, a pontuação F1 é a média ponderada da precisão e da recuperação. O melhor valor de F1 seria 1 e o pior seria 0. Podemos calcular a pontuação F1 com a ajuda da seguinte fórmula -

= ∗ (∗) / (+)

A pontuação F1 está tendo igual contribuição relativa de precisão e recall.

Podemos usar a função classificação_report de sklearn.metrics para obter o relatório de classificação de nosso modelo de classificação.

AUC (Área sob a curva ROC)

AUC (Area Under Curve) -ROC (Receiver Operating Characteristic) é uma métrica de desempenho, com base em valores de limite variáveis, para problemas de classificação. Como o nome sugere, ROC é uma curva de probabilidade e AUC mede a separabilidade. Em palavras simples, a métrica AUC-ROC nos dirá sobre a capacidade do modelo em distinguir as classes. Quanto maior a AUC, melhor o modelo.

Matematicamente, pode ser criado traçando TPR (Taxa de Positivo Verdadeiro), ou seja, Sensibilidade ou recall vs FPR (Taxa de Falso Positivo), ou seja, 1-Especificidade, em vários valores de limiar. A seguir está o gráfico que mostra ROC, AUC tendo TPR no eixo y e FPR no eixo x -

Podemos usar a função roc_auc_score de sklearn.metrics para calcular AUC-ROC.

LOGLOSS (perda logarítmica)

É também chamada de perda de regressão logística ou perda de entropia cruzada. É basicamente definido em estimativas de probabilidade e mede o desempenho de um modelo de classificação onde a entrada é um valor de probabilidade entre 0 e 1. Pode ser entendido de forma mais clara ao diferenciá-lo com precisão. Como sabemos, a precisão é a contagem de previsões (valor previsto = valor real) em nosso modelo, enquanto a perda de log é a quantidade de incerteza de nossa previsão com base em quanto ela varia em relação ao rótulo real. Com a ajuda do valor Log Loss, podemos ter uma visão mais precisa do desempenho do nosso modelo. Podemos usar a função log_loss de sklearn.metrics para calcular a perda de log.

Exemplo

A seguir está uma receita simples em Python que nos dará uma visão sobre como podemos usar as métricas de desempenho explicadas acima no modelo de classificação binária -

from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
from sklearn.metrics import roc_auc_score
from sklearn.metrics import log_loss
X_actual = [1, 1, 0, 1, 0, 0, 1, 0, 0, 0]
Y_predic = [1, 0, 1, 1, 1, 0, 1, 1, 0, 0]
results = confusion_matrix(X_actual, Y_predic)
print ('Confusion Matrix :')
print(results)
print ('Accuracy Score is',accuracy_score(X_actual, Y_predic))
print ('Classification Report : ')
print (classification_report(X_actual, Y_predic))
print('AUC-ROC:',roc_auc_score(X_actual, Y_predic))
print('LOGLOSS Value is',log_loss(X_actual, Y_predic))

Resultado

Confusion Matrix :
[
   [3 3]
   [1 3]
]
Accuracy Score is 0.6
Classification Report :
            precision      recall      f1-score       support
      0       0.75          0.50      0.60           6
      1       0.50          0.75      0.60           4
micro avg     0.60          0.60      0.60           10
macro avg     0.62          0.62      0.60           10
weighted avg  0.65          0.60      0.60           10
AUC-ROC:  0.625
LOGLOSS Value is 13.815750437193334

Métricas de desempenho para problemas de regressão

Discutimos a regressão e seus algoritmos nos capítulos anteriores. Aqui, vamos discutir várias métricas de desempenho que podem ser usadas para avaliar previsões para problemas de regressão.

Erro Médio Absoluto (MAE)

É a métrica de erro mais simples usada em problemas de regressão. É basicamente a soma da média da diferença absoluta entre os valores previstos e reais. Em palavras simples, com o MAE, podemos ter uma ideia de como as previsões estavam erradas. O MAE não indica a direção do modelo, ou seja, nenhuma indicação sobre desempenho inferior ou superior do modelo. A seguir está a fórmula para calcular MAE -

$$ MAE = \ frac {1} {n} \ sum | Y - \ hat {Y} | $$

Aqui, = Valores reais de saída

E $ \ hat {Y} $ = Valores de saída previstos.

Podemos usar a função mean_absolute_error de sklearn.metrics para calcular MAE.

Erro Quadrado Médio (MSE)

O MSE é como o MAE, mas a única diferença é que ele eleva ao quadrado a diferença dos valores de saída reais e previstos antes de somar todos em vez de usar o valor absoluto. A diferença pode ser notada na seguinte equação -

$$ MSE = \ frac {1} {n} \ sum (Y - \ hat {Y}) $$

Aqui, = Valores reais de saída

E $ \ hat {Y} $ = Valores de saída previstos.

Podemos usar a função mean_squared_error de sklearn.metrics para calcular MSE.

R ao quadrado (R 2 )

A métrica R quadrada é geralmente usada para fins explicativos e fornece uma indicação da bondade ou adequação de um conjunto de valores de saída previstos aos valores de saída reais. A fórmula a seguir nos ajudará a entendê-lo -

$$ R ^ {2} = 1 - \ frac {\ frac {1} {n} \ sum_ {i {= 1}} ^ n (Y_ {i} - \ hat {Y_ {i}}) ^ 2} {\ frac {1} {n} \ sum_ {i {= 1}} ^ n (Y_ {i} - \ bar {Y_i) ^ 2}} $$

Na equação acima, o numerador é MSE e o denominador é a variação nos valores.

Podemos usar a função r2_score de sklearn.metrics para calcular o valor de R ao quadrado.

Exemplo

A seguir está uma receita simples em Python que nos dará uma visão sobre como podemos usar as métricas de desempenho explicadas acima no modelo de regressão -

from sklearn.metrics import r2_score
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_squared_error
X_actual = [5, -1, 2, 10]
Y_predic = [3.5, -0.9, 2, 9.9]
print ('R Squared =',r2_score(X_actual, Y_predic))
print ('MAE =',mean_absolute_error(X_actual, Y_predic))
print ('MSE =',mean_squared_error(X_actual, Y_predic))

Resultado

R Squared = 0.9656060606060606
MAE = 0.42499999999999993
MSE = 0.5674999999999999