
Proyecto Taussig — Sesión 6: latidos concretos, y todo el camino recorrido
En las cinco sesiones anteriores hemos medido el comportamiento de nuestros modelos con números: exactitud, matriz de confusión, macro avg, weighted avg, validación cruzada. Hoy cambiamos de perspectiva por última vez: en vez de un porcentaje, vamos a coger latidos concretos, uno a uno, y comprobar qué dice el modelo de cada uno — mirando primero con nuestros propios ojos, como haría cualquiera antes de tener un algoritmo al lado.
Vuestro turno primero: mirad la forma antes de preguntarle al modelo
Igual que en la Sesión 1 dibujasteis un latido normal y uno ventricular uno junto al otro, hoy vamos a elegir 5 latidos del conjunto de prueba (que el modelo no ha usado nunca para aprender) y dibujarlos sin decir todavía de qué clase son:
import numpy as np
import matplotlib.pyplot as plt
# Elegimos 5 latidos al azar del conjunto de prueba, con una semilla fija
# para que a todos nos salgan los mismos 5 latidos
rng = np.random.RandomState(7)
indices_elegidos = list(rng.choice(len(X_prueba), size=5, replace=False))
# Nos asegura además de que al menos uno sea de la clase V (ventricular) —
# la que más nos importa desde la Sesión 1
indice_ventricular = y_prueba[y_prueba == 2].index[0]
if indice_ventricular not in indices_elegidos:
indices_elegidos.append(indice_ventricular)
fig, ejes = plt.subplots(1, len(indices_elegidos), figsize=(15, 3))
for eje, indice in zip(ejes, indices_elegidos):
eje.plot(X_prueba.iloc[indice])
eje.set_title(f"Latido #{indice}")
plt.tight_layout()
plt.show()
[COMPLETAR EN CLASE: para cada uno de estos latidos, apuntad en un papel si os parece un latido normal o si veis algo raro en la forma, antes de seguir. No hace falta que sepáis de qué clase exacta se trata (N, S, V, F o Q) — basta con “normal” o “raro”]

Pidiendo la predicción al modelo
Con vuestras respuestas ya escritas, le pedimos al Random Forest de la Sesión 4 que prediga esos mismos latidos:
predicciones_elegidas = bosque.predict(X_prueba.iloc[indices_elegidos])
print(predicciones_elegidas)
Y, como aprendimos en la Sesión 4 con el comité de árboles, podemos pedirle también con cuánta seguridad ha votado cada clase — no solo el resultado final:
probabilidades_elegidas = bosque.predict_proba(X_prueba.iloc[indices_elegidos])
print("Clases:", bosque.classes_)
print(probabilidades_elegidas)
Si para algún latido los votos están muy repartidos entre dos clases, es la versión del bosque de “dudar” — igual que puede que hayáis dudado vosotros mirando alguna de las formas.
[COMPLETAR CON VUESTROS DATOS REALES: predicciones del bosque para los 5 (o 6) latidos = ___]
¿Acertasteis vosotros? ¿Acertó el modelo?
Ahora sí, revelamos la clase real de cada latido elegido:
print(y_prueba.iloc[indices_elegidos].values)
Comparad tres cosas para cada latido: vuestra respuesta a ojo (“normal” o “raro”), la predicción exacta del bosque, y la clase real. Prestad especial atención al latido que os hemos garantizado que fuera de clase V: es, con diferencia, el más importante de los cinco o seis — es la clase que motivó este proyecto desde el primer día.
[COMPLETAR CON VUESTROS DATOS REALES: clases reales = ___. ¿Acertasteis a ojo con el latido V? ¿Acertó el bosque?]
Todo el camino recorrido
Empezamos este proyecto con una pregunta muy concreta, nada hipotética: Antonio Puerta, Hank Gathers y Christian Eriksen sufrieron paradas cardiacas en pleno deporte por arritmias — y en el caso de Eriksen, la segunda vez, un desfibrilador automático detectó la arritmia por sí solo y actuó antes de que nadie tuviera que intervenir. Nos preguntamos si un modelo entrenado con datos reales sería capaz de hacer, con una señal eléctrica, algo parecido a lo que Eriksen lleva ahora implantado en el pecho.
Repasemos el camino, sesión por sesión:
- Sesión 1: conocimos el dataset —109.446 latidos reales de la MIT-BIH Arrhythmia Database— y a Helen Taussig, la cardióloga que se quedó sorda y aprendió a diagnosticar el corazón por el tacto en vez de por el oído. Vimos las cinco clases de latido (N, S, V, F, Q) y dibujamos, por primera vez, un latido normal frente a uno ventricular.
- Sesión 2: entrenamos nuestro primer modelo, un árbol de decisión, con una novedad doble: no hizo falta repartir los datos nosotros mismos (ya venían repartidos de Kaggle) y, por primera vez en toda la familia de proyectos, el modelo tuvo que elegir entre más de dos clases.
- Sesión 3: descubrimos que la exactitud puede esconder mucho, sobre todo con clases tan desequilibradas como las nuestras. Aprendimos a leer una matriz de confusión de 5×5 y a distinguir macro avg de weighted avg — y a sospechar de un weighted avg alto que podía estar tapando una mala exhaustividad justo en la clase V.
- Sesión 4: pasamos del árbol al Random Forest, y descubrimos algo que ningún otro proyecto de la familia nos podía enseñar: en qué instante exacto del latido se fija el bosque para decidir. Un eco, hecho con matemáticas, de lo que Taussig hacía con los dedos.
- Sesión 5: comprobamos con validación cruzada si podíamos fiarnos de nuestros resultados, y aprendimos algo importante sobre la honestidad en ciencia de datos: este dataset tiene una limitación real y documentada (no sabemos qué latidos vienen del mismo paciente), así que ni siquiera un buen resultado nos da un cheque en blanco.
- Sesión 6 (hoy): pusimos a prueba el modelo con latidos concretos, empezando por mirar con nuestros propios ojos, igual que tuvo que aprender a hacer Taussig.
Una respuesta honesta a la pregunta con la que empezamos
¿Hemos construido un desfibrilador? No. Nuestro modelo es un ejercicio educativo, entrenado con datos de un hospital de Boston de hace décadas, sin la validación clínica ni las garantías que exige un dispositivo médico real. Pero sí hemos tocado, con nuestras propias manos y con herramientas reales de ciencia de datos, el mismo principio técnico que hace funcionar al desfibrilador que Christian Eriksen lleva hoy en el pecho: una señal eléctrica del corazón, analizada automáticamente, puede revelar un patrón de arritmia antes de que sea demasiado tarde. Eso, que en 1990 le llegó demasiado tarde a Hank Gathers, ya existe. Y ahora sabéis, aunque sea a pequeña escala, cómo se construye.








