MAT281 - Laboratorio N°09¶
Objetivo: Aplicar un flujo completo de Machine Learning supervisado para la clasificación de tumores mamarios, utilizando técnicas de preprocesamiento, reducción de dimensionalidad y modelos de clasificación con optimización de hiperparámetros.
Nota: Puede ayudarse de algún asistente virtual como ChatGPT, Gemini u otros, así como del autocompletado de Google Colab, para avanzar en este laboratorio debido a su extensión.
El cáncer de mama es una enfermedad caracterizada por la proliferación maligna de células epiteliales en los conductos o lobulillos mamarios. Surge cuando una célula acumula mutaciones que le otorgan la capacidad de dividirse de manera descontrolada, lo que da origen a un tumor. Este tumor puede permanecer localizado o, en casos más agresivos, invadir tejidos cercanos y propagarse a otras partes del organismo mediante metástasis.
El conjunto de datos BC.csv
recopila información clínica y morfológica de pacientes con tumores mamarios, clasificados como benignos o malignos. Las características se obtienen a partir de imágenes digitalizadas de aspirados con aguja fina (FNA, por sus siglas en inglés) de masas mamarias. Dichas variables describen aspectos cuantitativos de los núcleos celulares, como su tamaño, forma, textura y homogeneidad.
Este tipo de información es fundamental para la detección temprana y clasificación de tumores, ya que permite entrenar modelos de machine learning capaces de apoyar el diagnóstico y diferenciar entre tumores benignos y malignos con mayor precisión.
A continuación, se procederá a cargar y explorar el conjunto de datos:
# Importar librerías
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# Importar herramientas de Scikit-learn
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
# Configuración de gráficos
%matplotlib inline
sns.set_palette("deep", desat=0.6)
sns.set(rc={'figure.figsize': (11.7, 8.27)})
# Cargar y preparar los datos
df = pd.read_csv("https://raw.githubusercontent.com/fralfaro/MAT281/main/docs/labs/data/BC.csv")
df.set_index('id', inplace=True)
# Transformación de la variable objetivo
df['diagnosis'] = df['diagnosis'].map({'M': 1, 'B': 0}).astype(int)
# Visualizar las primeras filas del DataFrame
df.head()
diagnosis | radius_mean | texture_mean | perimeter_mean | area_mean | smoothness_mean | compactness_mean | concavity_mean | concave points_mean | symmetry_mean | ... | radius_worst | texture_worst | perimeter_worst | area_worst | smoothness_worst | compactness_worst | concavity_worst | concave points_worst | symmetry_worst | fractal_dimension_worst | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
id | |||||||||||||||||||||
842302 | 1 | 17.99 | 10.38 | 122.80 | 1001.0 | 0.11840 | 0.27760 | 0.3001 | 0.14710 | 0.2419 | ... | 25.38 | 17.33 | 184.60 | 2019.0 | 0.1622 | 0.6656 | 0.7119 | 0.2654 | 0.4601 | 0.11890 |
842517 | 1 | 20.57 | 17.77 | 132.90 | 1326.0 | 0.08474 | 0.07864 | 0.0869 | 0.07017 | 0.1812 | ... | 24.99 | 23.41 | 158.80 | 1956.0 | 0.1238 | 0.1866 | 0.2416 | 0.1860 | 0.2750 | 0.08902 |
84300903 | 1 | 19.69 | 21.25 | 130.00 | 1203.0 | 0.10960 | 0.15990 | 0.1974 | 0.12790 | 0.2069 | ... | 23.57 | 25.53 | 152.50 | 1709.0 | 0.1444 | 0.4245 | 0.4504 | 0.2430 | 0.3613 | 0.08758 |
84348301 | 1 | 11.42 | 20.38 | 77.58 | 386.1 | 0.14250 | 0.28390 | 0.2414 | 0.10520 | 0.2597 | ... | 14.91 | 26.50 | 98.87 | 567.7 | 0.2098 | 0.8663 | 0.6869 | 0.2575 | 0.6638 | 0.17300 |
84358402 | 1 | 20.29 | 14.34 | 135.10 | 1297.0 | 0.10030 | 0.13280 | 0.1980 | 0.10430 | 0.1809 | ... | 22.54 | 16.67 | 152.20 | 1575.0 | 0.1374 | 0.2050 | 0.4000 | 0.1625 | 0.2364 | 0.07678 |
5 rows × 31 columns
Con base en la información presentada, resuelva las siguientes tareas. Asegúrese de:
- Incluir el código necesario para ejecutar cada análisis.
- Explicar de manera clara y fundamentada los resultados obtenidos.
- Describir el proceso seguido, justificando las decisiones tomadas en cada etapa (preprocesamiento, elección de técnicas y parámetros, interpretación de resultados).
Análisis exploratorio profundo (EDA):
- Examine la distribución de las variables, identifique valores atípicos y analice la correlación entre características.
- Visualice las diferencias más relevantes entre tumores benignos y malignos utilizando gráficos adecuados (boxplots, histogramas, mapas de calor).
- Discuta qué variables parecen tener mayor capacidad discriminativa.
# FIXME
Preprocesamiento de datos:
- Normalice las variables numéricas utilizando StandardScaler u otra técnica apropiada.
- Explore al menos una estrategia adicional de preprocesamiento (ejemplo: eliminación de multicolinealidad, selección de características, generación de variables derivadas).
- Justifique sus elecciones.
# FIXME
Reducción de dimensionalidad:
- Aplique un método de reducción de dimensionalidad visto en clases (PCA, t-SNE u otro) para representar los datos en un espacio reducido.
- Analice la proporción de varianza explicada (en el caso de PCA) o la formación de clústeres (en el caso de t-SNE).
- Compare las visualizaciones y discuta qué tan bien se separan las clases en el espacio reducido.
# FIXME
Modelado y evaluación:
- Entrene al menos tres modelos de clasificación distintos (ejemplo: Regresión Logística, SVM, Random Forest, XGBoost, KNN).
- Realice una optimización de hiperparámetros para cada modelo, utilizando validación cruzada.
- Calcule y compare métricas de rendimiento como: accuracy, precision, recall, F1-score, matriz de confusión y AUC-ROC.
- Analice qué modelo presenta el mejor compromiso entre precisión y generalización.
# FIXME
Conclusiones y reflexiones:
- Explique cuál modelo considera más apropiado para este conjunto de datos y por qué.
- Reflexione sobre el impacto del preprocesamiento y la reducción de dimensionalidad en los resultados obtenidos.
- Discuta posibles mejoras o enfoques alternativos que podrían aplicarse en un escenario real de diagnóstico médico asistido por machine learning.
# FIXME