Trazar una curva ROC en Python

Lakshay Kapoor 30 enero 2023
  1. Definición de curva ROC en Python
  2. Biblioteca Scikit-Learn en Python
  3. Código Python para trazar la curva ROC
  4. Explicación del código
Trazar una curva ROC en Python

En esta guía, lo ayudaremos a conocer más sobre esta función de Python y el método que puede usar para trazar una curva ROC como resultado del programa.

Definición de curva ROC en Python

El término curva ROC significa curva de características operativas del receptor. Esta curva es básicamente una representación gráfica del desempeño de cualquier modelo de clasificación en todos los umbrales de clasificación.

Hay dos parámetros de esta curva:

  • Tasa de verdaderos positivos (TPR): representa la sensibilidad real, es decir, la verdadera
  • Tasa de falsos positivos (FPR): significa pseudo, es decir, falsa sensibilidad

Ambos parámetros se conocen como características operativas y se utilizan como factores para definir la curva ROC.

En Python, la eficiencia del modelo se determina al ver el área bajo la curva (AUC). Por tanto, el modelo más eficiente tiene el AUC igual a 1 y el modelo menos eficiente tiene el AUC igual a 0,5.

Biblioteca Scikit-Learn en Python

La biblioteca Scikit-learn es una de las bibliotecas de código abierto más importantes que se utilizan para realizar el aprendizaje automático en Python. Esta biblioteca consta de muchas herramientas para tareas como clasificación, agrupación y regresión.

En este tutorial, se utilizan varias funciones de esta biblioteca que ayudarán a trazar la curva ROC. Estas funciones son:

  • make_classification: esta función se importa porque ayuda a generar un problema de clasificación aleatorio de n clases mediante la creación de grupos de puntos.
  • RandomForestClassifier: esta función se importa como Random Forest Classifier y se utiliza como modelo de muestra en este tutorial en el que se realiza la curva ROC.
  • train_test_split: esta función se utiliza para dividir todos los datos en dos subconjuntos (Train y Test) que se utilizan para entrenar y probar los datos.
  • roc_curve: esta función se utiliza para devolver la curva ROC de un modelo dado.

Código Python para trazar la curva ROC

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import make_classification
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_curve


def plot_roc_curve(fper, tper):
    plt.plot(fper, tper, color="red", label="ROC")
    plt.plot([0, 1], [0, 1], color="green", linestyle="--")
    plt.xlabel("False Positive Rate")
    plt.ylabel("True Positive Rate")
    plt.title("Receiver Operating Characteristic Curve")
    plt.legend()
    plt.show()


data_X, cls_lab = make_classification(
    n_samples=2100, n_classes=2, weights=[1, 1], random_state=2
)
train_X, test_X, train_y, test_y = train_test_split(
    data_X, cls_lab, test_size=0.5, random_state=2
)

model = RandomForestClassifier()
model.fit(train_X, train_y)

prob = model.predict_proba(test_X)
prob = probs[:, 1]
fper, tper, thresholds = roc_curve(test_y, prob)
plot_roc_curve(fper, tper)

Producción:

Curva ROC en Python

Explicación del código

Primero, se importan todas las bibliotecas y funciones necesarias para trazar una curva ROC. Luego se define una función llamada plot_roc_curve en la que todos los factores críticos de la curva como el color, las etiquetas y el título se mencionan utilizando la biblioteca Matplotlib. Después de eso, la función make_classification se utiliza para hacer muestras aleatorias, y luego se dividen en conjuntos train y test con la ayuda de la función train_test_split. Aquí, la relación train-test de los datos es 0.50. Luego, el algoritmo RandomForestClassifier se utiliza para ajustar los datos train_X y train_y. Finalmente, la función roc_curve se utiliza para trazar la Curva ROC.

Lakshay Kapoor avatar Lakshay Kapoor avatar

Lakshay Kapoor is a final year B.Tech Computer Science student at Amity University Noida. He is familiar with programming languages and their real-world applications (Python/R/C++). Deeply interested in the area of Data Sciences and Machine Learning.

LinkedIn