Python | CAP: análisis del perfil de precisión acumulada

CAP popularmente llamado el ‘perfil de precisión acumulativa’ se utiliza en la evaluación del rendimiento del modelo de clasificación. Nos ayuda a comprender y concluir sobre la robustez del modelo de clasificación. Para visualizar esto, se trazan tres curvas distintas en nuestro diagrama: 

  1. Una trama al azar
  2. Un gráfico obtenido mediante el uso de un clasificador SVM o un clasificador de bosque aleatorio
  3. Una trama perfecta (una línea ideal)

Estamos trabajando los DATOS para entender el concepto. 

Código: Cargando conjunto de datos. 

Python3

# importing libraries
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
 
# loading dataset
data = pd.read_csv('C:\\Users\\DELL\\Desktop\\Social_Network_Ads.csv')
 
print ("Data Head : \n\n", data.head())

Producción : 

Data Head : 

     User ID  Gender  Age  EstimatedSalary  Purchased
0  15624510    Male   19            19000          0
1  15810944    Male   35            20000          0
2  15668575  Female   26            43000          0
3  15603246  Female   27            57000          0
4  15804002    Male   19            76000          0

Código: Salida de entrada de datos. 

Python3

# Input and Output
x = data.iloc[:, 2:4]
y = data.iloc[:, 4]
 
print ("Input : \n", x.iloc[0:10, :])

Producción : 

Input : 
    Age  EstimatedSalary
0   19            19000
1   35            20000
2   26            43000
3   27            57000
4   19            76000
5   27            58000
6   27            84000
7   32           150000
8   25            33000
9   35            65000

Código: división de conjuntos de datos para entrenamiento y pruebas. 

Python3

# splitting data
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(
        x, y, test_size = 0.3, random_state = 0)

Código: clasificador de bosque aleatorio 

Python3

# classifier
from sklearn.ensemble import RandomForestClassifier
classifier = RandomForestClassifier(n_estimators = 400)
 
# training
classifier.fit(x_train, y_train)
 
# predicting
pred = classifier.predict(x_test)

Código: encontrar la precisión del clasificador. 

Python3

# Model Performance
from sklearn.metrics import accuracy_score
print("Accuracy : ", accuracy_score(y_test, pred) *  100)

Producción : 

Accuracy :  91.66666666666666

Modelo aleatorio

El gráfico aleatorio se realiza bajo el supuesto de que hemos trazado el número total de puntos que van desde 0 hasta el número total de puntos de datos en el conjunto de datos. El eje y se ha mantenido como el número total de puntos para los que la variable dependiente de nuestro conjunto de datos tiene un resultado de 1. La gráfica aleatoria puede entenderse como una relación linealmente creciente. Un ejemplo es un modelo que predice si un producto es comprado (resultado positivo) por cada individuo de un grupo de personas (parámetro de clasificación) basado en factores como su género, edad, ingresos, etc. Si los miembros del grupo fueran contactados al azar, el número acumulado de productos vendidos aumentaría linealmente hacia un valor máximo correspondiente al número total de compradores dentro del grupo. Esta distribución se denomina CAP “aleatoria”

Código: modelo aleatorio  

Python3

# code for the random plot
import matplotlib.pyplot as plt
import numpy as np
 
# length of the test data
total = len(y_test)
 
# Counting '1' labels in test data
one_count = np.sum(y_test)
 
# counting '0' labels in test data
zero_count = total - one_count
 
plt.figure(figsize = (10, 6))
 
# x-axis ranges from 0 to total people contacted
# y-axis ranges from 0 to the total positive outcomes.
 
plt.plot([0, total], [0, one_count], c = 'b',
         linestyle = '--', label = 'Random Model')
plt.legend()

Producción : 

Línea clasificadora de bosque aleatorio

Código: el algoritmo de clasificación aleatoria de bosques se aplica al conjunto de datos para el gráfico de líneas del clasificador aleatorio .  

Python3

lm = [y for _, y in sorted(zip(pred, y_test), reverse = True)]
x = np.arange(0, total + 1)
y = np.append([0], np.cumsum(lm))
plt.plot(x, y, c = 'b', label = 'Random classifier', linewidth = 2)

Producción : 

Explicación: pred es la predicción realizada por el clasificador aleatorio. Comprimimos los valores de predicción y prueba y los ordenamos en orden inverso para que los valores más altos aparezcan primero y luego los valores más bajos. Extraemos solo los valores de y_test en una array y los almacenamos en lm . np.cumsum() crea una array de valores mientras agrega acumulativamente todos los valores anteriores en la array al valor actual. Los valores de x oscilarán entre 0 y el total + 1. Agregamos uno al total porque arange() no incluye uno en la array y queremos que el eje x oscile entre 0 y el total. 

modelo perfecto

Luego trazamos la trama perfecta (o la línea ideal). Una predicción perfecta determina exactamente qué miembros del grupo comprarán el producto, de modo que el número máximo de productos vendidos se alcance con un número mínimo de llamadas. Esto produce una línea pronunciada en la curva CAP que permanece plana una vez que se alcanza el máximo (contactar a todos los demás miembros del grupo no generará más productos vendidos), que es el CAP «perfecto» .  

Python3

plt.plot([0, one_count, total], [0, one_count, one_count],
         c = 'grey', linewidth = 2, label = 'Perfect Model')

Producción : 

Explicación: un modelo perfecto encuentra resultados positivos en el mismo número de intentos que el número de resultados positivos. Tenemos un total de 41 resultados positivos en nuestro conjunto de datos y, por lo tanto, con exactamente 41, se logra el máximo. 

ANÁLISIS FINAL:

En cualquier caso, nuestro algoritmo clasificador no debería producir una línea que se encuentre debajo de la línea aleatoria. Se considera que es un modelo realmente malo en ese caso. Dado que la línea clasificadora trazada está cerca de la línea ideal, podemos decir que nuestro modelo se ajusta realmente bien. Tome el área debajo de la parcela perfecta y llámela aP. Tome el área bajo el modelo de predicción y llámela aR . Luego tome la relación como aR/aP . Esta relación se denomina Tasa de precisión . Cuanto más cerca esté el valor de 1, mejor será el modelo. Esta es una forma de analizarlo.

Otra forma de analizarlo sería proyectar una línea desde aproximadamente el 50 % del eje en el modelo de predicción y proyectarla en el eje y. Digamos que obtenemos el valor de proyección como X%.  

-> 60%        : it is a really bad model
-> 60%<X<70%  : it is still a bad model but better than the first case obviously
-> 70%<X<80%  : it is a good model
-> 80%<X<90%  : it is a very good model
-> 90%<X<100% : it is extraordinarily good and might be one of the overfitting cases.

Entonces, de acuerdo con este análisis, podemos determinar qué tan preciso es nuestro modelo. 

Referencia: – wikipedia.org 
 

Publicación traducida automáticamente

Artículo escrito por Choco_Chips y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *