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
- 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} \]
- À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
- Generació de dades de mostra: Utilitzem
make_classificationper crear un conjunt de dades sintètic. - Entrenament del model: Utilitzem una regressió logística per entrenar el model.
- Prediccions de probabilitats: Obtenim les probabilitats de les classes positives.
- Càlcul de la corba ROC: Utilitzem
roc_curveper calcular les taxes de falsos positius i certs positius a diferents llindars. - Càlcul de l'AUC: Utilitzem
aucper calcular l'àrea sota la corba ROC. - Plot de la corba ROC: Utilitzem
matplotlibper 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:
- Utilitza el conjunt de dades
breast_cancerdesklearn.datasets. - Entrena un model de classificació (p. ex.,
RandomForestClassifier). - Genera la corba ROC i calcula l'AUC.
- 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
- No confondre TPR i FPR: Assegura't de calcular correctament les taxes de certs positius i falsos positius.
- 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.
- 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
- Què és el Machine Learning?
- Història i evolució del Machine Learning
- Tipus de Machine Learning
- Aplicacions del Machine Learning
Mòdul 2: Fonaments d'Estadística i Probabilitat
- Conceptes bàsics d'estadística
- Distribucions de probabilitat
- Inferència estadística
- Teorema de Bayes
Mòdul 3: Preprocessament de Dades
Mòdul 4: Algoritmes de Machine Learning Supervisat
- Regressió lineal
- Regressió logística
- Arbres de decisió
- Màquines de suport vectorial (SVM)
- K-Veïns més propers (K-NN)
- Xarxes neuronals
Mòdul 5: Algoritmes de Machine Learning No Supervisat
- Clustering: K-means
- Clustering jeràrquic
- Anàlisi de components principals (PCA)
- Anàlisi d'agrupament DBSCAN
Mòdul 6: Avaluació i Validació de Models
Mòdul 7: Tècniques Avançades i Optimització
- Ensemble Learning
- Gradient Boosting
- Xarxes neuronals profundes (Deep Learning)
- Optimització d'hiperparàmetres
Mòdul 8: Implementació i Desplegament de Models
- Frameworks i biblioteques populars
- Implementació de models en producció
- Manteniment i monitoratge de models
- Consideracions ètiques i de privacitat
Mòdul 9: Projectes Pràctics
- Projecte 1: Predicció de preus d'habitatges
- Projecte 2: Classificació d'imatges
- Projecte 3: Anàlisi de sentiments a xarxes socials
- Projecte 4: Detecció de fraus
