Pular para o conteúdo
Bruno Dórea
Todos os posts

5 mins de leitura


Calculando Métricas de Avaliação

Desafios de Código - Simulando Desafios com IAs Generativas - 5/5


Santander 2024 - Fundamentos de IA para Devs
Santander 2024 - Fundamentos de IA para Devs

Descrição

Você faz parte de uma equipe que está desenvolvendo modelos de Machine Learning para identificar a probabilidade de inadimplência em empréstimos concedidos por uma instituição financeira. Após treinar os modelos, sua tarefa é avaliar seu desempenho usando algumas métricas de avaliação. Nesse contexto, o desafio é criar um algoritmo que receba n matrizes de confusão e retorne o índice, precisão e acurácia da matriz que apresenta o melhor desempenho com base no cálculo dessas métricas. Lembrando que:

• Acurácia é calculada pela fórmula: (VP + VN) / (VP + FP + FN + VN) • Precisão é calculada pela fórmula: VP / (VP + FP)

Onde:

• VP (Verdadeiro Positivo): Casos em que o modelo previu corretamente a classe positiva. • FP (Falso Positivo ou Erro Tipo I): Casos em que o modelo previu incorretamente a classe positiva. • FN (Falso Negativo ou Erro Tipo II): Casos em que o modelo previu incorretamente a classe negativa. • VN (Verdadeiro Negativo): Casos em que o modelo previu corretamente a classe negativa.

Entrada

A entrada consiste em uma string composta por: n, representando o número de matrizes de confusão, seguido dos valores que compõem as n matrizes.

Cada matriz consiste em quatro valores, onde os dois primeiros representam a primeira linha da matriz, composta por verdadeiros positivos (VP) e falsos positivos (FP); os dois últimos valores representam a segunda linha, que é composta por falsos negativos (FN) e verdadeiros negativos (VN). As duas linhas e os valores que as compõem estão separados por vírgulas.

Saída

O resultado esperado inclui o valor do índice, acurácia e precisão (arredondada para duas casas decimais) da matriz com melhor desempenho com base no cálculo dessas métricas.

Exemplos

A tabela abaixo apresenta exemplos com alguns dados de entrada e suas respectivas saídas esperadas. Certifique-se de testar seu programa com esses exemplos e com outros casos possíveis.

EntradaSaída
3Índice: 1
50,10,5,85Acurácia: 0.9
20,5,8,67Precisão: 0.83
30,12,4,88
EntradaSaída
4
70,15,8,78Índice: 3
60,20,10,80Acurácia: 0.94
45,5,3,92Precisão: 0.9
80,7,15,98
EntradaSaída
2Índice: 1
100,0,0,50Acurácia: 1.0
80,10,2,98Precisão: 1.0

Resolução

def best_performance(matrices):
    best_index = 0
    best_accuracy = 0
    best_precision = 0
    for index, matrix in enumerate(matrices, 1):  # Começando com index 1
        vp, fp, fn, vn = map(int, matrix)
        tp = vp
        tn = vn
        accuracy = (tp + tn) / (tp + fp + fn + tn) if tp + fp + fn + tn else 0
        precision = tp / (tp + fp) if tp + fp else 0
        if (accuracy + precision) > (best_accuracy + best_precision):
            best_index = index
            best_accuracy = accuracy
            best_precision = precision
    return best_index, round(best_accuracy, 2), round(best_precision, 2)
 
n = int(input())
matrices = [input().split(',') for _ in range(n)]
best_index, best_accuracy, best_precision = best_performance(matrices)
 
print("Índice:", best_index)
print("Acurácia:", best_accuracy)
print("Precisão:", best_precision)

Para encontrar outras soluções, verifique aqui.

Caso encontre algum erro ou tenha sugestões, clique aqui e abra uma issue no Github.