Introducció

En aquest tema, explorarem la corba ROC (Receiver Operating Characteristic) i l'àrea sota la corba ROC (AUC - Area Under the Curve), dues eines fonamentals per a l'avaluació de models de classificació. Aquestes eines ens permeten entendre millor el rendiment dels nostres models, especialment en situacions on les classes estan desbalancejades.

Conceptes Clau

  1. Corba ROC

La corba ROC és una representació gràfica que il·lustra el rendiment d'un model de classificació binària a diferents llindars de decisió. La corba es traça amb:

  • Taxa de Fals Positius (FPR) a l'eix X.
  • Taxa de Certs Positius (TPR) a l'eix Y.

Definicions:

  • Taxa de Certs Positius (TPR): També coneguda com a sensibilitat o recall, és la proporció de positius correctament identificats pel model. \[ \text{TPR} = \frac{TP}{TP + FN} \]
  • Taxa de Fals Positius (FPR): És la proporció de negatius incorrectament identificats com a positius pel model. \[ \text{FPR} = \frac{FP}{FP + TN} \]

  1. Àrea Sota la Corba ROC (AUC)

L'AUC és una mesura que resumeix el rendiment de la corba ROC en un sol valor. L'AUC varia entre 0 i 1, on un valor més proper a 1 indica un millor rendiment del model.

  • AUC = 1: Model perfecte.
  • 0.5 < AUC < 1: Model millor que l'atzar.
  • AUC = 0.5: Model equivalent a l'atzar.
  • AUC < 0.5: Model pitjor que l'atzar.

Exemples Pràctics

Exemple 1: Generació de la Corba ROC amb Python

import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression

# Generació de dades de mostra
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Entrenament del model
model = LogisticRegression()
model.fit(X_train, y_train)

# Prediccions de probabilitats
y_probs = model.predict_proba(X_test)[:, 1]

# Càlcul de la corba ROC
fpr, tpr, thresholds = roc_curve(y_test, y_probs)
roc_auc = auc(fpr, tpr)

# Plot de la corba ROC
plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.0])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend(loc="lower right")
plt.show()

Explicació del Codi

  1. Generació de dades de mostra: Utilitzem make_classification per crear un conjunt de dades sintètic.
  2. Entrenament del model: Utilitzem una regressió logística per entrenar el model.
  3. Prediccions de probabilitats: Obtenim les probabilitats de les classes positives.
  4. Càlcul de la corba ROC: Utilitzem roc_curve per calcular les taxes de falsos positius i certs positius a diferents llindars.
  5. Càlcul de l'AUC: Utilitzem auc per calcular l'àrea sota la corba ROC.
  6. Plot de la corba ROC: Utilitzem matplotlib per visualitzar la corba ROC.

Exercici Pràctic

Exercici 1: Generació de la Corba ROC i Càlcul de l'AUC per a un Model de Classificació

Instruccions:

  1. Utilitza el conjunt de dades breast_cancer de sklearn.datasets.
  2. Entrena un model de classificació (p. ex., RandomForestClassifier).
  3. Genera la corba ROC i calcula l'AUC.
  4. Plota la corba ROC.

Codi Base:

from sklearn.datasets import load_breast_cancer
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_curve, auc
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt

# Carrega del conjunt de dades
data = load_breast_cancer()
X = data.data
y = data.target

# Divisió del conjunt de dades
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Entrenament del model
model = RandomForestClassifier(random_state=42)
model.fit(X_train, y_train)

# Prediccions de probabilitats
y_probs = model.predict_proba(X_test)[:, 1]

# Càlcul de la corba ROC
fpr, tpr, thresholds = roc_curve(y_test, y_probs)
roc_auc = auc(fpr, tpr)

# Plot de la corba ROC
plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.0])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend(loc="lower right")
plt.show()

Solució de l'Exercici

from sklearn.datasets import load_breast_cancer
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_curve, auc
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt

# Carrega del conjunt de dades
data = load_breast_cancer()
X = data.data
y = data.target

# Divisió del conjunt de dades
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Entrenament del model
model = RandomForestClassifier(random_state=42)
model.fit(X_train, y_train)

# Prediccions de probabilitats
y_probs = model.predict_proba(X_test)[:, 1]

# Càlcul de la corba ROC
fpr, tpr, thresholds = roc_curve(y_test, y_probs)
roc_auc = auc(fpr, tpr)

# Plot de la corba ROC
plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.0])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend(loc="lower right")
plt.show()

Errors Comuns i Consells

  1. No confondre TPR i FPR: Assegura't de calcular correctament les taxes de certs positius i falsos positius.
  2. Interpretació de l'AUC: Recorda que un AUC proper a 1 indica un bon rendiment, mentre que un AUC proper a 0.5 indica que el model no és millor que l'atzar.
  3. Llindars de decisió: La corba ROC mostra el rendiment del model a diferents llindars. No et limitis a un sol llindar per avaluar el model.

Conclusió

En aquesta secció, hem après a generar i interpretar la corba ROC i l'AUC, eines essencials per avaluar el rendiment dels models de classificació. Aquestes eines ens permeten comprendre millor com es comporta el nostre model a diferents llindars de decisió i ens ajuden a prendre decisions informades sobre la seva implementació.

Curs de Machine Learning

Mòdul 1: Introducció al Machine Learning

Mòdul 2: Fonaments d'Estadística i Probabilitat

Mòdul 3: Preprocessament de Dades

Mòdul 4: Algoritmes de Machine Learning Supervisat

Mòdul 5: Algoritmes de Machine Learning No Supervisat

Mòdul 6: Avaluació i Validació de Models

Mòdul 7: Tècniques Avançades i Optimització

Mòdul 8: Implementació i Desplegament de Models

Mòdul 9: Projectes Pràctics

Mòdul 10: Recursos Addicionals

© Copyright 2024. Tots els drets reservats