- Mede a proporção de amostras que foram classificadas corretamente.
- Como a accuracy mede a proporção da classe majoritária na response variable, se as lessons na response variable estiverem com um desbalanceamento significativo o modelo pode ficar enviesado. Por exemplo, se a classe majoritária for a negativa com 95% de dados e a classe positiva com apenas 5% um modelo que sempre prevê a classe negativa terá uma accuracy de 95% mas não classificará corretamente as lessons positivas.
Calculando a accuracy utilizando o scikit-learn em Python
# importando as bibliotecas
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# definindo as options e as response_variable
X = df[features]
y = df[response_variable]
# dividindo em treino e teste
X_train,X_test,y_train,y_test = train_test_split(X,y)
# criando e treinando o modelo
example_model = Mannequin()
example_model.match(X_train,y_train)
# fazendo a previsão
y_pred = example_model.predict(X_test)
# calculando a accuracy
accuracy = accuracy_score(y_test,y_pred)
print(accuracy)
- Taxa de verdadeiros positivos
- Definido como:
- TP número de positivos verdadeiros. Definido como o número de amostras de positivos que foram previstos como positivo pelo modelo.
- P é o número de amostras da classe positiva no dataset de teste.
- Taxa de falsos negativos. Ou seja, proporção de positivos da amostra de teste que foram previstos incorretamente como negativos.
- Definido como:
- FN número de falsos negativos da amostra que foram previstos incorretamente como negativos.
- P é o número de amostras da classe positiva no dataset de teste.
- N número de amostras negativas no dataset de teste.
- TN número de verdadeiros negativos da amostra que foram previstos corretamente.
- FP número de falsos positivos da amostra que foram previstos incorretamente como positivos.
- Matrix 2×2, onde em um eixo se encontra as lessons verdadeiras e no outro as lessons previstas.
- Para se fazer uma classificação correta, espera-se que os elementos da diagonal principal da confusion matrix estejam em porporções maiores que os elementos fora da diagonal principal, pois os elementos fora da diagonal principal representam classificações incorretas.
- A accuracy pode ser calculada através da soma da diagonal principal da confusion matrix dividida pelo número whole de todas as previsões.
Calculando a confusion matrix utilizando o scikit-learn em Python
# importando as bibliotecas
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix# definindo as options e as response_variable
X = df[features]
y = df[response_variable]
# dividindo em treino e teste
X_train,X_test,y_train,y_test = train_test_split(X,y)
# criando e treinando o modelo
example_model = Mannequin()
example_model.match(X_train,y_train)
# fazendo a previsão
y_pred = example_model.predict(X_test)
# calculando a confusion matrix
print(confusion_matrix(y_test,y_pred))
- O ROC é uma curva dos TPRs(eixo y) e FPRs(eixo x) que se originam da redução do limite de 1 até 0. Vejamos o seu funcionamento:
- Por exemplo, em uma logistic regression que provê apenas probabilidades estritamente definidas entre 0 e 1, desconsiderando os limites, se o limite for 1 não haverá previsões positivas e com isso o TPR e o FPR serão 0 e a curva ROC começará em (0,0).
- Quando o limite é baixo o TPR vai começar a crescer e espera-se que ele cresça mais rápido que o FPR para ser um bom classificador.
- Quando o limite é reduzido até 0, prevê que todas as amostras sejam positivas incluindos os verdadeiros e os falsos positivos, o que faz com que o TPR e o FPR sejam igual a 1.
- Diante disso tudo, deve-se escolher o limite mais apropriado entre esses casos.
- É a space sobre a curva Roc.
- No geral, a ROC AUC fica entre 0.5 e 1.
- Quanto mais próximo de 0.5 não é um bom classificador, quanto mais próximo de 1 o modelo é um bom classificador.
Calculando a ROC AUC utilizando o scikit-learn
# importando as bibliotecas
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score# definindo as options e as response_variable
X = df[features]
y = df[response_variable]
# dividindo em treino e teste
X_train,X_test,y_train,y_test = train_test_split(X,y)
# criando e treinando o modelo
example_model = Mannequin()
example_model.match(X_train,y_train)
# fazendo a previsão das probabilidades
y_pred_proba = example_model.predict_proba(X_test)
# calculando a confusion matrix
print(roc_auc_score(y_test,y_pred_proba[:,1]))
- Também chamado de constructive predictive worth.
- Definido como:
- Analisa a proporção entre o número de positivos verdadeiros e a soma de verdadeiros e falsos positivos.
- A soma no denominador é o número whole de positivos previstos.
- A precision mede a proporção de positivos previstos que são corretos em todos os positivos previstos.
- Se houver poucas amostras positivas o precision é melhor, fornece uma avaliação mais crítica, que a ROC AUC para definir a qualidade do classificador.
- Precision e TPR são frequentemente plotados juntos para avaliar a qualidade dos positivos previstos no que diz respeito a qual fração está correta.
- Podemos usar a AUC do recall e precision para comparar a eficácia de diferentes modelos.
Calculando a precision utilizando o scikit-learn em Python
# importando as bibliotecas
from sklearn.model_selection import train_test_split
from sklearn.metrics import precision_score# definindo as options e as response_variable
X = df[features]
y = df[response_variable]
# dividindo em treino e teste
X_train,X_test,y_train,y_test = train_test_split(X,y)
# criando e treinando o modelo
example_model = Mannequin()
example_model.match(X_train,y_train)
# fazendo a previsão
y_pred = example_model.predict(X_test)
# calculando a precision
print(precision_score(y_test,y_pred))
Conhecer métricas para avaliar se um modelo de classificação binária está performando bem ou não é de suma importância, pois garante a confiabilidade do modelo.
Muito obrigado pela sua atenção e até a próxima!!!