Parte: 02 — IA probabilística, evolutiva y de decisión
Nivel: intermedio · Horas estimadas: 6
Laboratorio: probability · Estado: EXECUTABLE_CORE
Comprender programación probabilística y causalidad dentro de la evolución de la inteligencia artificial, implementar un experimento mínimo verificable y distinguir qué parte constituye evidencia frente a una afirmación todavía no comprobada.
Al finalizar podrás:
- Explicar programación probabilística y causalidad usando los conceptos
causalidad,intervención,modelos,inferencia. - Ejecutar el laboratorio con una semilla explícita y revisar su contrato JSON.
- Identificar al menos un supuesto, una limitación y un riesgo de aplicación.
- Comparar el enfoque con la etapa anterior de la ruta de aprendizaje.
- Producir una evidencia reproducible y una conclusión que no exceda los datos.
causalidad, intervención, modelos, inferencia
Esta clase reúne dos culminaciones de la parte 02. La programación probabilística generaliza las redes bayesianas (027): el modelo es un programa con variables aleatorias, y un motor de inferencia (MCMC, variacional — clase 031) calcula posteriores automáticamente. La causalidad de Pearl responde a la limitación más profunda de todo lo anterior: la probabilidad condicional describe qué observamos, no qué pasaría si interviniéramos. Correlación no responde preguntas de acción; el do-calculus sí, y es la frontera actual entre predecir y entender.
Un programa probabilístico define un modelo generativo con dos primitivas:
# pseudocódigo estilo PPL
p = sample("p", Beta(1, 1)) # prior sobre variable latente
for i in range(N):
observe(f"y{i}", Bernoulli(p), y[i]) # condicionar en datos
# consulta: posterior de p dado yEl motor (PyMC, Stan, NumPyro, Gen) separa modelo de inferencia: el usuario declara la historia generativa; el sistema corre MCMC/variacional. Ventajas sobre redes dibujadas a mano: control de flujo, recursión, número variable de variables. Costo: la inferencia automática puede fallar silenciosamente (cadenas que no convergen), y hay que auditarla con diagnósticos (R̂, tamaño efectivo).
Nivel 1 — Asociación: P(y | x) "¿qué veo si observo x?" (datos)
Nivel 2 — Intervención: P(y | do(x)) "¿qué pasa si HAGO x?" (experimento o do-calculus)
Nivel 3 — Contrafactual: P(y_x | x', y') "¿qué habría pasado si…?" (modelo estructural completo)
P(y | x) ≠ P(y | do(x)) en general: observar zapatos grandes predice buena lectura en niños (asociación vía edad), pero regalar zapatos no enseña a leer (intervención). El operador do(X=x) corta las flechas que entran en X — X deja de escuchar a sus causas — y modela una acción externa.
Un confounder Z causa a la vez el tratamiento X y el resultado Y, creando asociación espuria. Un conjunto Z satisface el criterio backdoor para (X, Y) si: (1) ningún nodo de Z es descendiente de X, y (2) Z bloquea (d-separación, clase 027) todo camino entre X e Y que entra a X por una flecha "hacia atrás". Entonces:
Fórmula de ajuste:
P(y | do(x)) = Σ_z P(y | x, z) · P(z)
— se estratifica por el confounder y se promedia con los pesos poblacionales de Z (no los condicionales a X). El do-calculus (tres reglas de reescritura sobre el grafo) generaliza esto y es completo: si el efecto causal es identificable desde datos observacionales + grafo, las reglas lo derivan.
Advertencia dual: ajustar por un colisionador o por un mediador introduce sesgo en lugar de quitarlo. Controlar "por todo lo que se pueda" es un error causal, no prudencia estadística.
Un SCM asigna a cada variable una ecuación Xᵢ := fᵢ(Padres(Xᵢ), Uᵢ) con ruidos exógenos U. El := es asimétrico (mecanismo, no ecuación algebraica). Los SCM soportan los tres niveles: simular (1), mutilar el grafo con do (2), y abducir los U para razonar contrafactualmente (3). Un PPL puede expresar un SCM — la síntesis de las dos mitades de esta clase.
¿El tratamiento X cura la enfermedad Y? Confounder: gravedad Z (los graves reciben el tratamiento con más frecuencia y se curan menos). Datos observacionales de 1 000 pacientes:
| Z (gravedad) | P(z) | P(x=1 | z) | P(y=1 | x=1, z) | P(y=1 | x=0, z) |
|---|---|---|---|---|
| leve (z₀) | 0.5 | 0.2 | 0.9 | 0.8 |
| grave (z₁) | 0.5 | 0.8 | 0.6 | 0.4 |
Nivel 1 — asociación cruda (promedios ponderados por quién recibe el tratamiento):
P(y=1 | x=1) = [0.5·0.2·0.9 + 0.5·0.8·0.6] / (0.5·0.2 + 0.5·0.8)
= (0.09 + 0.24) / 0.5 = 0.66
P(y=1 | x=0) = [0.5·0.8·0.8 + 0.5·0.2·0.4] / (0.5·0.8 + 0.5·0.2)
= (0.32 + 0.04) / 0.5 = 0.72
Diferencia observacional: 0.66 − 0.72 = −0.06 → ¡el tratamiento "empeora"!
Nivel 2 — intervención con ajuste backdoor (Z bloquea el camino trasero X ← Z → Y):
P(y=1 | do(x=1)) = Σ_z P(y=1|x=1,z)·P(z) = 0.9·0.5 + 0.6·0.5 = 0.75
P(y=1 | do(x=0)) = 0.8·0.5 + 0.4·0.5 = 0.60
Efecto causal medio (ATE): 0.75 − 0.60 = +0.15 → el tratamiento CURA
La asociación cruda (−0.06) y el efecto causal (+0.15) tienen signo opuesto — paradoja de Simpson resuelta: el grafo dice que Z es confounder y hay que ajustar; sin grafo, los mismos números no deciden si estratificar o no.
| Pregunta | Herramienta suficiente | Requiere | Falla si |
|---|---|---|---|
| P(y|x) — predicción | Estadística / ML estándar | Datos i.i.d. | Deriva de distribución |
| P(y|do(x)) — efecto de acción | RCT (experimento) | Aleatorización costosa/ética | No siempre posible |
| P(y|do(x)) sin experimento | do-calculus + grafo | DAG causal correcto y completo | Confounders no medidos |
| Contrafactual individual | SCM completo | Ecuaciones y ruidos | Casi nunca identificable solo con datos |
| Posterior de parámetros | PPL + MCMC | Modelo generativo | Cadenas sin converger |
flowchart TD
subgraph "Modelo observacional"
Z1["Z gravedad"] --> X1["X tratamiento"]
Z1 --> Y1["Y curación"]
X1 --> Y1
end
subgraph "Mundo intervenido do(X=x)"
Z2["Z gravedad"] --> Y2["Y curación"]
X2["X := x (flecha Z→X cortada)"] --> Y2
end
O["Datos observacionales +<br/>criterio backdoor"] -->|"Σ_z P(y|x,z)P(z)"| E["P(y | do(x))<br/>efecto causal identificado"]
P(y|x)como efecto de una acción. Condicionar selecciona subpoblaciones; intervenir cambia el mecanismo. El ejemplo trabajado muestra que pueden tener signo contrario.- "Controlar por todas las variables disponibles." Ajustar por colisionadores o mediadores crea sesgo (sesgo de colisionador, sobreajuste del efecto); la selección de covariables es un problema del grafo, no de cantidad.
- Creer que el DAG sale de los datos. De datos observacionales solo se identifica la clase de equivalencia de Markov; la orientación causal exige supuestos, experimentos o conocimiento del dominio.
- Confundir PPL con "el modelo es correcto". El motor calcula el posterior del modelo escrito; si la historia generativa es errónea, la inferencia impecable da respuestas precisas a la pregunta equivocada. Diagnósticos ≠ validación del modelo.
- Saltar al nivel 3 sin fundamento. Los contrafactuales individuales ("¿se habría curado sin el fármaco?") requieren el SCM completo con sus ruidos; ni un RCT basta para identificarlos en general.
El ejemplo tiene un confounder medido y un grafo dado; en la práctica el grafo es hipótesis discutible, hay confounders no medidos (se necesitan variables instrumentales, front-door o análisis de sensibilidad) y los datos tienen sesgos de selección propios. Un pipeline causal serio incluye: elicitar y documentar el DAG con expertos, verificar sus implicaciones testeables (independencias), estimar con métodos dobles-robustos y reportar cuánto confounding oculto haría desaparecer el efecto (E-value). En PPL: diagnósticos de convergencia y validación predictiva posterior antes de creer un número.
python lab.pyEl laboratorio llama a ai_evolution.labs.run_lab("probability"). Esta
decisión evita 183 implementaciones divergentes: cada clase tiene un entrypoint
propio, pero los motores didácticos se prueban como una biblioteca común.
- tipo de laboratorio y semilla;
- entradas o decisiones observables;
- resultado estructurado;
- lista
evidencecon hechos que pueden inspeccionarse; - lista
limitationsque impide presentar la demo como producción.
- 📓
notebook.ipynb: recorrido guiado con la materia resumida. - ✍️
notebook_student.ipynb: ejercicios para resolver. - ✅
notebook_solution.ipynb: solución de referencia explicada.
| Criterio | Peso |
|---|---|
| Comprensión conceptual | 25 % |
| Ejecución reproducible | 25 % |
| Interpretación basada en evidencia | 25 % |
| Riesgos, límites y mejora propuesta | 25 % |
Consulta assessment.md para preguntas y criterio de aceptación.
| Síntoma | Causa probable | Corrección |
|---|---|---|
| El código corre, pero no hay conclusión | Se confundió ejecución con aprendizaje | Explica qué demuestra y qué no demuestra |
| El resultado cambia sin explicación | No se registró semilla o configuración | Conserva semilla, versión y parámetros |
| Se promete uso real | Se extrapoló desde una demo educativa | Declara entorno, datos, límites y revisión humana |
| Se copia una métrica aislada | No existe baseline ni costo de error | Añade comparación y criterio de decisión |
¿Debo usar una API comercial?
No. El núcleo funciona localmente. Las extensiones LIVE se documentan por separado.
¿El laboratorio representa una implementación industrial?
No por sí solo. Enseña el contrato y el patrón; producción exige integración,
seguridad, observabilidad, pruebas y operación.
¿Dónde profundizo?
Revisa las especializaciones enlazadas en el README raíz y la ruta siguiente.
- Pearl, J. (2009). Causality: Models, Reasoning, and Inference, 2.ª ed. Cambridge University Press. https://bayes.cs.ucla.edu/BOOK-2K/ — uso: referencia consultada en su fuente original
- Pearl, J. (1995). "Causal diagrams for empirical research". Biometrika, 82(4), 669-688. https://doi.org/10.1093/biomet/82.4.669 — uso: fuente primaria del mecanismo estudiado
- Pearl, J. & Mackenzie, D. (2018). The Book of Why. Basic Books. — uso: desarrollo extendido del tema
- Koller, D. & Friedman, N. (2009). Probabilistic Graphical Models, cap. 21 (causalidad). https://mitpress.mit.edu/9780262013192/probabilistic-graphical-models/ — uso: referencia consultada en su fuente original
- Documentación de PyMC. https://www.pymc.io/ · Documentación de Stan. https://mc-stan.org/ — uso: referencia consultada en su fuente original
Bloque generado por
python scripts/link_papers_to_classes.py. La fuente espapers/catalog/papers.json.
| Paper | Año | Qué desbloqueó | Miniatura |
|---|---|---|---|
| P94 · Stan: un lenguaje de programación probabilística | 2017 | Separa declarar el modelo de calcular la inferencia: se escribe qué se supone del mundo y el motor devuelve la posterior. | notebook |
| P95 · Las siete herramientas de la inferencia causal, con reflexiones sobre aprendizaje automático | 2019 | Ordena en tres peldaños lo que un sistema puede responder —asociación, intervención y contrafáctico— y muestra que subir de peldaño exige supuestos que los datos no contienen. | notebook |
Cada ficha explica el problema anterior, la matemática mínima, los límites y los errores de atribución más frecuentes. Para leerlas con método: cómo leer un paper de IA · anexos matemáticos.
Bloque generado por
python scripts/link_sources_to_classes.py. Cada obra lleva su localizador verificado ensources/bibliography.json.
Los papers dicen de dónde salió el mecanismo. Estas obras lo desarrollan con el espacio que una clase no tiene: teoría completa, demostraciones y ejercicios.
| Obra | Edición | Localizador | Papel en esta clase |
|---|---|---|---|
| Koller, Daphne y Friedman, Nir — Probabilistic Graphical Models: Principles and Techniques | 2010 | ISBN 9780262013192 · web de la obra | citada en las referencias de esta clase · cap. 21 · obra de referencia de la parte 02 |
| Pearl, J. y Mackenzie, D. — The Book of Why | 2018 | ISBN 9780465097609 | citada en las referencias de esta clase |
| Russell, Stuart J. y Norvig, Peter — Artificial Intelligence: A Modern Approach | 4.ª · 2020 | ISBN 9780134610993 · web de la obra | obra de referencia de la parte 02 · bloque de incertidumbre y decisión |
| Pearl, J. — Probabilistic Reasoning in Intelligent Systems | 1988 | ISBN 9780080514895 | obra de referencia de la parte 02 · redes de creencia |