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_classification
per 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_curve
per calcular les taxes de falsos positius i certs positius a diferents llindars. - Càlcul de l'AUC: Utilitzem
auc
per calcular l'àrea sota la corba ROC. - 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:
- Utilitza el conjunt de dades
breast_cancer
desklearn.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