
🧬 Machine Learning con Propósito: Diagnóstico de Cáncer de Mama con Scikit-Learn
| Nivel: Introductorio (Sesión 1)
¡Bienvenidos/as al inicio de nuestro taller de Inteligencia Artificial aplicada a la Ciencia y la Salud!
En esta primera sesión no utilizaremos datos hipotéticos ni comerciales: trabajaremos con el dataset real Breast Cancer Wisconsin, una base de datos médica con 569 registros de pacientes.
Nuestro objetivo será preparar estos datos para entrenar a un algoritmo capaz de ayudar en la detección precoz del cáncer de mama, diferenciando entre tumores malignos y benignos a partir de mediciones celulares.
1. Instalación de Scikit-Learn
Abre una celda en tu cuaderno de JupyterLab e instala la librería principal de Machine Learning:
Python
%pip install scikit-learn
💡 Nota: Usamos
%pippara asegurarnos de que se instala en el motor (kernel) exacto que está usando tu cuaderno.
2. Cargar los datos médicos sin descargas
Gracias a Scikit-Learn, no necesitamos descargar archivos CSV externos ni pelearnos con rutas en el ordenador. Cargamos el dataset directamente en memoria:
Python
import pandas as pd
from sklearn.datasets import load_breast_cancer
# Cargar el dataset en un DataFrame de Pandas
cancer = load_breast_cancer(as_frame=True)
df = cancer.frame
# Ver cuántos pacientes tenemos y el desglose del diagnóstico
print("Total de pacientes:", len(df))
print("\nDesglose del diagnóstico (target):")
print(df['target'].value_counts())
Lo que veremos en pantalla:
- Hay 569 pacientes en total.
- Cada paciente tiene 30 mediciones geométricas de las células (radio, textura, área, simetría…).
- En la columna
target(el diagnóstico):- 0: Tumor Maligno (aprox. 37% de los casos)
- 1: Tumor Benigno (aprox. 63% de los casos)
3. ¿Por qué debemos separar un conjunto de prueba (Test Set)?
Antes de que el ordenador empiece a aprender, debemos reservar el 20% de los pacientes (unos 114 casos) y guardarlos en una “caja fuerte”.
¿Por qué hacemos esto?
Si le enseñamos al modelo todos los casos durante la fase de aprendizaje, sería como darle a un estudiante las preguntas y respuestas del examen antes de la prueba. El conjunto de prueba sirve para hacer un “examen a ciegas” y comprobar si la Inteligencia Artificial realmente ha aprendido a diagnosticar pacientes nuevos.
4. ¿Qué es la Estratificación (stratify=y) y por qué es imprescindible?
Imagina que tienes una bolsa con 60 canicas verdes (casos benignos) y 40 canicas rojas (casos malignos). Si metes la mano a ciegas y sacas un puñado de 10 canicas al azar para el examen final, podría pasar que saques 9 verdes y solo 1 roja.
¿Cuál sería el problema en medicina?
Que si el examen casi no tiene casos con cáncer (rojas), ¡no sabremos si nuestra IA de verdad sabe detectar tumores malignos o si solo ha tenido buena suerte!
🎯 La solución: La Estratificación
La estratificación consiste en forzar al programa a actuar como una “balanza inteligente”: asegura que el conjunto de prueba mantenga exactamente el mismo porcentaje de casos positivos (malignos) y negativos (benignos) que el dataset original.
- Si el dataset original tiene un 37% de tumores malignos, la estratificación garantiza que tanto el grupo de estudio (80%) como el del examen (20%) tengan exactamente ese 37% de casos malignos.
En código Python, esto se activa con una sola palabra: stratify=y.
5. Código completo para la clase
Aquí tenéis el bloque de código limpio y definitivo que debemos ejecutar:
Python
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
# 1. Cargar datos
cancer = load_breast_cancer()
X = cancer.data # Las 30 mediciones celulares de cada paciente
y = cancer.target # El diagnóstico (0 = Maligno, 1 = Benigno)
# 2. Separar en Entrenamiento (80%) y Prueba (20%) con ESTRATIFICACIÓN
X_train, X_test, y_train, y_test = train_test_split(
X, y,
test_size=0.2, # 20% para el examen final
random_state=42, # Para que a todos nos salgan los mismos datos
stratify=y # ¡Estratificación activada! Mismas proporciones en ambos lados
)
# 3. Comprobar el resultado
print(f"Pacientes para entrenar al modelo (Train): {len(X_train)}")
print(f"Pacientes reservados para el examen final (Test): {len(X_test)}")
Resultado en la consola:
Plaintext
Pacientes para entrenar al modelo (Train): 455
Pacientes reservados para el examen final (Test): 114
📝 Resumen final
En solo unas pocas líneas de código hemos logrado:
- Cargar un dataset médico numérico y estructurado.
- Proteger la evaluación futura de nuestra IA evitando que “haga trampas”.
- Garantizar mediante estratificación que la muestra de prueba representa fielmente la proporción real de la enfermedad.
¡En la siguiente sesión entrenaremos nuestro primer algoritmo de clasificación! 🔬💻




