Ejemplo resuelto: E003, Difusión con límite, Valle del Cauca
Este es un examen completo, resuelto de principio a fin con el mismo kit que reciben los estudiantes. Sirve para ver la forma de cada entregable y el orden de los pasos. No sirve para copiar: cada estudiante tiene otro modelo, otro territorio y otras tareas.
Todo lo que aparece aquí se produjo de verdad: la ingesta a DuckDB local con el script, la corrida del modelo en el navegador, el dashboard, los dos empleados IA y la calificación automática de grade_model.py del profesor. Lo único instalado fue DuckDB, como en clase.
El camino en un diagrama de flujo
Lee de arriba hacia abajo. Los rombos son preguntas: si la respuesta es no, sigue la línea punteada. A la derecha de cada paso están la acción y el bloque de tiempo.
Paso 0 · Preparar
| Campo | Valor |
|---|---|
| Código | E003 |
| Territorio | Valle del Cauca, código 76, población 2020 aproximada 4,532,152 |
| Familia | F1 Difusión con límite. Instancia COVID: contagio básico (SIR con datos) |
| Modelo | E003-modelo.html: 16 nodos, 15 presentes, 5 tareas: 4 casillas ? y 1 nodo por dibujar. Cada arco lleva su signo |
| Dibujo a mano | modelo_mano_E003.png: el modelo completo con fraccion_susceptible, signos en los arcos, R1 y B1 marcados, 5 frases |
| Tareas | fraccion_deteccion, importacion, infeccion, casos_detectados_modelo (fórmulas); fraccion_susceptible (dibujar) |
| Datos del modelo | d_casos_7d, d_importados (columnas casos_7d e importados de datos_E003.csv) |
| Variables del dashboard | casos_7d (real), fallecidos_7d (real), importados (real), Infectados (simulada, en ciclo), fraccion_susceptible (simulada, en ciclo) |
Qué significa terminado: la carpeta está abierta, la ficha leída, el modelo abierto en el navegador y tres signos leídos en voz alta.
Paso 1 · Ingesta a DuckDB local
Dentro de la carpeta E003, que trae E003-modelo.html, E003-ficha.md y E003-ficha.html, ingesta_E003.py, duckdb_E003.sql, dashboard_plantilla.html, vista_E003_duckdb.sql y datos_E003.csv. Se corrió un solo archivo, ingesta_E003.py, con doble clic (en Mac: Terminal, python3, espacio, arrastrar el archivo, Enter). El script instala DuckDB si falta, corre seis pasos, tarda de 1 a 3 minutos y al final imprime LISTO y abre el tablero en el navegador. Descarga los datos públicos de datos.gov.co, crea la base local, limpia, arma la vista del territorio, exporta el CSV y conecta la base con el tablero. Deja cuatro archivos nuevos: examen_E003.duckdb, mi_territorio_E003.csv, dashboard_E003.html y sql_E003.txt. Esto fue lo que imprimió:
Ingesta E003: datos publicos de datos.gov.co -> DuckDB local -> tablero
[1/6] Datos publicos: covid_diario.csv
Descargando covid_diario.csv (15 MB) desde el servidor del curso ...
Listo: covid_diario.csv (15.7 MB)
sha256 873db02a331ba22e... coincide con la ficha
[2/6] Base de datos local: examen_E003.duckdb
Tabla covid_diario: 252,677 filas, 6,388,216 casos, 143,125 fallecidos COVID -> coincide (252,677 y 6,388,216)
[3/6] Limpieza (covid_limpio) y vista de tu territorio: v_territorio_76 (Valle del Cauca)
v_territorio_76: 731 dias, 540,163 casos, 15,016 fallecidos, casos_7d promedio 738.8 -> 731 dias, coincide
[4/6] Exportar la vista: mi_territorio_E003.csv
mi_territorio_E003.csv: 731 filas, 23 columnas
[5/6] Conectar la base con el tablero: dashboard_E003.html
Creado dashboard_E003.html con los 731 dias de tu territorio ya cargados. Abrelo en Chrome, Edge o Safari.
[6/6] Evidencia: sql_E003.txt
Escrito sql_E003.txt
LISTO. Siguiente paso: abre dashboard_E003.html y elige tus 5 variables.
Plan B si Python falla: pegar los bloques de duckdb_E003.sql en DuckDB local o en https://shell.duckdb.org/ y escribir a mano los mismos datos. Plan C: usar datos_E003.csv de la carpeta, y se pierde solo el paso de ingesta (Paso 1). La vista dio:
| Dato | Valor |
|---|---|
| Días en la vista | 731 |
| Casos del Valle en la ventana (2020-03-06 a 2022-03-06) | 540,163 |
| Fallecidos del Valle en la ventana | 15,016 |
| Promedio de casos_7d | 738.8 casos por día |
| Casos del Valle en todo el periodo del dataset (2020 a 2024) | 572,543 |
Los mismos números están en datos_E003.csv: la suma de la columna casos da 540,163. Por eso el CSV es el plan C.
Hallazgos de calidad del bloque 7 de duckdb_E003.sql (opcional, plan B):
| Trampa | Consulta | Dato |
|---|---|---|
| T1 códigos de distrito | SELECT departamento, sum(casos) ... WHERE departamento IN ('13','13001') |
Bolívar 13: 40,312 · Cartagena 13001: 163,227 |
| T2 sexo en minúscula | SELECT sexo, sum(casos) FROM covid_diario GROUP BY 1 |
F 3,415,699 · M 2,972,505 · f 6 · m 6 |
| T3 rezago negativo | SELECT count(*) FROM covid_limpio WHERE rezago_rep_negativo = 1 |
163 grupos |
| Lección hospital/uci | SELECT sum(hospital), sum(uci), sum(casos) ... 2020-06-01 a 2021-08-31 |
0 · 0 · 4,894,430 |
sql_E003.txt, el archivo entregado (clic para abrir)
Evidencia de ingesta en DuckDB local, E003
Fecha y hora: 2026-11-09 17:31
Python 3.14.4, DuckDB 2.0.0, sistema darwin
Fuente: dataset gt2j-8ykr de datos.gov.co (https://www.datos.gov.co/resource/gt2j-8ykr), resumido por dia en covid_diario.csv (https://class.audience-analysis.com/analitica-examen/covid_diario.csv)
1. Archivo covid_diario.csv, sha256 873db02a331ba22e65aea3b8f8a17a61c261b7c3fe30abbba1a2680d0c3f6783 (coincide)
2. Base local examen_E003.duckdb. Tabla covid_diario: 252,677 filas, 6,388,216 casos, 143,125 fallecidos COVID (coincide)
SQL: CREATE OR REPLACE TABLE covid_diario AS SELECT * FROM read_csv('covid_diario.csv', header = true, types = {'dia': 'DATE', 'departamento': 'VARCHAR', 'departamento_nom': 'VARCHAR', 'sexo': 'VARCHAR', 'grupo_edad': 'VARCHAR'});
3. Tabla covid_limpio creada (codigos como texto, 8001/13001/47001 unidos a su departamento, sexo en mayuscula, rezago negativo marcado).
Vista v_territorio_76 (Valle del Cauca): 731 dias, 540,163 casos, 15,016 fallecidos, casos_7d promedio 738.8
SQL: SELECT count(*) AS dias, sum(casos) AS casos_territorio, sum(fallecidos) AS fallecidos_territorio, round(avg(casos_7d), 1) AS casos_7d_promedio FROM v_territorio_76;
Primeras filas (t, dia, casos, casos_7d): 0 2020-03-06 0 0.0; 1 2020-03-07 0 0.0; 2 2020-03-08 0 0.0; 3 2020-03-09 1 0.2; 4 2020-03-10 0 0.2
4. Exportado mi_territorio_E003.csv: 731 filas, 23 columnas (t, fecha y las variables de la vista)
5. Creado dashboard_E003.html a partir de la plantilla, con la vista v_territorio_76 incrustada (731 filas).
Tres numeros del resumen: dias = 731; casos_territorio = 540,163; casos_7d_promedio = 738.8
Archivos en la carpeta: examen_E003.duckdb, mi_territorio_E003.csv, dashboard_E003.html, sql_E003.txt
Nota: el dataset completo (2020 a 2024) tiene mas casos que la ventana del examen (731 dias).
Plan B si Python falla: pegar los bloques de duckdb_E003.sql en DuckDB local o en shell.duckdb.org y escribir estos mismos 4 datos a mano.
Plan C: usar datos_E003.csv de la carpeta (se pierde solo el paso de ingesta, 2a).
Paso 2 · Dibujar el modelo completo a mano
Antes de tocar la página, el modelo se dibujó entero en una hoja, con marcador grueso. La foto modelo_mano_E003.png muestra:
- Las 3 cajas: Susceptibles, Infectados, Recuperados.
- Los 3 tubos con válvula: infeccion (de Susceptibles a Infectados), recuperacion (de Infectados a Recuperados) e importacion (desde una nube hacia Infectados).
- Los 10 círculos, incluido el que faltaba: fraccion_susceptible, casos_detectados_modelo, brecha_dato_modelo, tasa_contacto, prob_transmision, duracion_infeccion, fraccion_deteccion, poblacion, d_casos_7d, d_importados.
- Los arcos con su signo: Infectados →(+) infeccion, Susceptibles →(+) fraccion_susceptible, fraccion_susceptible →(+) infeccion, infeccion →(-) Susceptibles (el flujo sale del stock), poblacion →(-) fraccion_susceptible.
- Los ciclos marcados: R1 (Infectados → infeccion → Infectados, cero signos menos) y B1 (Infectados → infeccion → Susceptibles → fraccion_susceptible → infeccion, un signo menos).
- Cinco frases debajo del dibujo, en palabras propias:
Las personas pasan de Susceptibles a Infectados y luego a Recuperados. Más Infectados producen más contagios: ciclo R1. Menos Susceptibles bajan la fraccion_susceptible y frenan el contagio: ciclo B1. Los casos importados llegan desde fuera, desde el dato. El modelo solo detecta el 30 % de los contagios, y la brecha con el dato dice cuánto se parece a la realidad.
Qué significa terminado: la foto se lee completa, cada arco tiene signo, cada ciclo tiene su letra y las 5 frases están. Bloque 2 cerrado a las 23:00; a dormir.
Paso 3 · Pasar el dibujo al HTML
Los arcos que llegan a cada casilla son la receta. Así se llenaron las cuatro en la página E003-modelo.html:
| Tarea | Nodo | Arcos que llegan | Fórmula escrita | Pista usada |
|---|---|---|---|---|
| 1 | fraccion_deteccion | ninguno, es un número | 0.3 |
Nivel 1 |
| 2 | importacion | d_importados (+) | d_importados |
Nivel 2 |
| 3 | infeccion | Infectados (+), tasa_contacto (+), prob_transmision (+), fraccion_susceptible (+) | Infectados * tasa_contacto * prob_transmision * fraccion_susceptible |
Nivel 3: [ ] * [ ] * [ ] * [ ], y las unidades (personas por día) confirman el producto |
| 4 | casos_detectados_modelo | infeccion (+), fraccion_deteccion (+) | infeccion * fraccion_deteccion |
Nivel 2 |
Luego, el nodo que faltaba, igual que en el dibujo:
- Botón Agregar convertidor. Nombre:
fraccion_susceptible. Unidad: 1 (fracción). - Entradas:
Susceptiblesypoblacion. La página dibuja los dos arcos. - Fórmula:
MAX(0, Susceptibles / poblacion). - Abre
infeccion: su fórmula dice... * (1)con la insignia PROVISIONAL. Reemplaza(1)porfraccion_susceptible. La insignia desaparece.
Datos y corrida: botón Cargar datos, elegir datos_E003.csv (la página toma las columnas casos_7d e importados), botón Correr. Los tres chequeos de la ficha aparecen en la página como PASA, con los valores de la corrida:
- Infectados alcanza su máximo entre el día 175 y el 215: la corrida da el día 195 (2020-09-17), 286,765 personas.
- Recuperados al día 730 entre 2,249,737 y 3,043,762: la corrida da 2,646,749.
- Susceptibles nunca baja de 0: mínimo 1,886,084.
Simulación: se subió tasa_contacto de 6 a 8 y se volvió a correr. El pico de Infectados llegó antes y más alto. Se devolvió a 6. La frase quedó en insights_E003.md, sección "Simulación".
Para cerrar el pilar 1, dos botones:
- Exportar salidas CSV escribe
salidas_E003.csven formato largo (t, variable, valor, origen):
salidas_E003.csv: 8041 filas | reales ['d_casos_7d', 'd_importados'] | simuladas 9 variables, dias 731
- Descargar este HTML guarda
modelo_E003.htmlcon las fórmulas y los datos dentro. Es el archivo que se califica.
Paso 4 · Dashboard con 5 variables
Se abrió dashboard_E003.html, creado por el script con los datos de la base ya cargados, y luego se cargó salidas_E003.csv con Leer CSV para sumar las variables simuladas. Se eligieron 5 variables, 3 reales y 2 simuladas. El dashboard calculó las 5 estadísticas y dibujó un histograma por variable.
| variable | origen | en_ciclo | media | mediana | moda | desv_est | cv |
|---|---|---|---|---|---|---|---|
| casos_7d | real | no | 738.8 | 529.0 | ver dashboard_E003.html | 862.4 | 1.167 |
| fallecidos_7d | real | no | ver dashboard_E003.html | ver dashboard_E003.html | ver dashboard_E003.html | ver dashboard_E003.html | ver dashboard_E003.html |
| importados | real | no | ver dashboard_E003.html | ver dashboard_E003.html | ver dashboard_E003.html | ver dashboard_E003.html | ver dashboard_E003.html |
| Infectados | simulada | sí | ver dashboard_E003.html | ver dashboard_E003.html | ver dashboard_E003.html | ver dashboard_E003.html | ver dashboard_E003.html |
| fraccion_susceptible | simulada | sí | ver dashboard_E003.html | ver dashboard_E003.html | ver dashboard_E003.html | ver dashboard_E003.html | ver dashboard_E003.html |
Lecturas de casos_7d: DATO, la media (738.8 casos por día) supera a la mediana (529.0) en 209.8. JUICIO (confianza alta), el histograma tiene casi todos los días a la izquierda y una cola larga a la derecha: son las tres olas, y la mediana describe mejor un día típico. Las lecturas de las otras cuatro variables están en dashboard_E003.html.
Se guardó con Descargar este HTML como dashboard_E003.html.
Paso 5 · Hechos, insights y qué mejorar
Tres hechos. El pico real de casos_7d fue 6,137 casos por día, el día 674 (2022-01-09). El Valle sumó 540,163 casos en los 731 días de la ventana. La mediana de casos_7d es 529.0 casos por día, 209.8 por debajo de la media.
Insight de ciclo. Cuando Infectados sube, infeccion sube, y eso hace que Infectados suba más: ciclo R1. Cuando Infectados sube, Susceptibles baja, fraccion_susceptible baja, y eso frena a infeccion: ciclo B1. El número: el pico llega el día 195 cuando fraccion_susceptible vale 0.664; con R0 = 6 × 0.025 × 10 = 1.5, el freno gana en 1 / 1.5 = 0.667. Empleado IA: Redactor de ola. Qué hacer para mejorar el sistema: publicar la nota de fase cuando fraccion_susceptible cruce 0.70, antes del pico.
Insight de variable. La brecha modelo menos dato es positiva del día 42 al 274 (máximo +8,511 el día 185) y negativa del 275 al 730 (mínimo -6,134 el día 674). El pico real llega el día 674 con 6,137 casos por día y el modelo ese día tiene 147 infectados: un modelo sin pérdida de inmunidad no puede ver la tercera ola. Empleado IA: Vigía de brecha. Qué hacer para mejorar el sistema: agregar un flujo de pérdida de inmunidad (patrón F6) y recalibrar cuando la brecha supere 862.4 durante 7 días.
insights_E003.md, el archivo entregado (pistas, simulación, ciclo, 5 frases, hechos, insights, qué mejorar) (clic para abrir)
Insights, hechos, lecturas y pistas, E003
Modelo: F1 Difusión con límite (contagio básico). Territorio: Valle del Cauca, código 76. Variante 3.
Párrafo del enunciado, completo
El conjunto de datos tiene 252,677 filas, que suman 6,388,216 casos (tabla covid_diario de mi base local examen_E003.duckdb, creada por ingesta_E003.py). Mi territorio es Valle del Cauca, con 540,163 casos en la ventana del examen (vista v_territorio_76, resumen impreso por el script). Los datos abarcan desde el 6 de marzo de 2020 al 6 de marzo de 2022 (t de 0 a 730 en datos_E003.csv). Mi modelo pertenece a la familia F1 y tiene 2 ciclos: R1 (contagio) y B1 (agotamiento de susceptibles).
Pistas que usé
| Tarea | Nodo | Nivel de pista usado |
|---|---|---|
| 1 | fraccion_deteccion | Nivel 1 (la ficha dice 0.3) |
| 2 | importacion | Nivel 2 (igual al dato de importados) |
| 3 | infeccion | Nivel 3 (esqueleto con cuatro casillas, una por arco) |
| 4 | casos_detectados_modelo | Nivel 2 |
| 5 | fraccion_susceptible (dibujar) | Nivel 2 |
Las 5 frases del dibujo a mano
- Las personas pasan de Susceptibles a Infectados y luego a Recuperados.
- Más Infectados producen más contagios: ciclo R1, cero signos menos.
- Menos Susceptibles bajan la fraccion_susceptible y frenan el contagio: ciclo B1, un signo menos.
- Los casos importados llegan desde fuera, desde el dato d_importados.
- El modelo solo detecta el 30 % de los contagios, y la brecha con el dato dice cuánto se parece a la realidad.
Simulación
Subí tasa_contacto de 6 a 8 y volví a correr: el pico de Infectados llegó antes del día 175 y fue más alto. Lo devolví a 6.
Mi ciclo
Cuando Infectados sube, infeccion sube, y eso hace que Infectados suba más: ciclo R1. Cuando Infectados sube, Susceptibles baja, fraccion_susceptible baja, y eso frena a infeccion: ciclo B1. El número que lo prueba: el pico de Infectados llega el día 195 (2020-09-17) con 286,765 personas, justo cuando fraccion_susceptible vale 0.664. Con contactos 6, probabilidad 0.025 y 10 días, el modelo tiene R0 = 1.5, y 1 / 1.5 = 0.667. El ciclo B1 gana cuando la fracción susceptible cae por debajo de ese valor.
Lecturas de las 5 variables del dashboard
| Variable | Origen | En ciclo | Media | Mediana | Moda (centro de la barra más alta) | Desv. est. | CV |
|---|---|---|---|---|---|---|---|
| casos_7d | real | no | 738.8 | 529.0 | 255.7 | 862.4 | 1.167 |
| fallecidos_7d | real | no | 20.5 | 17.1 | 3.0 | 17.4 | 0.845 |
| casos_0_39_7d | real | no | 378.3 | 275.3 | 144.0 | 462.0 | 1.221 |
| rezago_rep_prom | real | no | 4.8 | 4.1 | 3.8 | 6.0 | 1.263 |
| activos_est | real | sí (es el stock real de activos) | 10,938.3 | 10,590.0 | 10,433.5 | 8,111.5 | 0.742 |
- casos_7d. DATO: la media (738.8 casos por día) es mayor que la mediana (529.0) en 209.8. JUICIO (confianza alta): el histograma tiene casi todos los días a la izquierda y una cola larga a la derecha. Son las tres olas. La mediana describe mejor un día típico.
- fallecidos_7d. DATO: media 20.5, mediana 17.1, CV 0.845. JUICIO (confianza alta): varía menos que los casos; las muertes se reparten de forma más pareja entre olas.
- casos_0_39_7d. DATO: CV 1.221, el más alto de los casos. JUICIO (confianza moderada): los jóvenes concentran la tercera ola; su pico del día 674 es 3,455 casos por día.
- rezago_rep_prom. DATO: mediana 4.1 días, máximo 91.5 días el día 8. JUICIO (confianza alta): el reporte fue rápido casi siempre; los valores extremos son del arranque de la pandemia y son un problema de calidad del dato, no del sistema.
- activos_est. DATO: media 10,938 y mediana 10,590, casi iguales; CV 0.742, el más bajo. JUICIO (confianza alta): es un stock, se acumula y se vacía despacio, por eso tiene la distribución más simétrica.
Tres hechos
- El pico real de casos_7d fue 6,137 casos por día, el día 674 (2022-01-09).
- El Valle del Cauca sumó 540,163 casos en los 731 días de la ventana del examen.
- La mediana de casos_7d es 529.0 casos por día, 209.8 por debajo de la media.
Insight 1 (de ciclo)
Cuando Infectados sube, infeccion sube, y eso hace que Infectados suba más (R1), hasta que fraccion_susceptible cae a 0.667 y el freno B1 gana: el pico del modelo llega el día 195 (2020-09-17). Número: fraccion_susceptible pasa de 0.992 en el día 100 a 0.664 en el día 195 y a 0.423 en el día 300. Empleado IA: Redactor "Redactor de ola". Qué hacer para mejorar el sistema: publicar la nota de fase cuando fraccion_susceptible cruce 0.70, antes del pico, no después.
Insight 2 (de variable)
La brecha entre modelo y dato cambia de signo una sola vez. Es positiva del día 42 al 274: el modelo exagera, máximo +8,511 el día 185. Es negativa del día 275 al 730: el modelo se queda corto, mínimo -6,134 el día 674 (2022-01-09). Número: el pico real de casos llega el día 674 con 6,137 casos por día; el modelo ese día tiene 147 infectados. Un modelo sin pérdida de inmunidad no puede producir la tercera ola. Empleado IA: Vigía "Vigía de brecha". Qué hacer para mejorar el sistema: agregar un flujo de pérdida de inmunidad (patrón F6). Recalibrar el modelo cuando la brecha supere 862.4 casos por día durante 7 días seguidos.
Paso 6 · Dos empleados IA
Los dos se escribieron en empleado_ia_plantilla.html y se descargaron como empleado_ia1_E003.html y empleado_ia2_E003.html. Cada HTML trae el documento de 10 secciones y sus datos en <script id="gov">.
| Empleado IA 1 | Empleado IA 2 | |
|---|---|---|
| Nace del insight | de variable (la brecha) | de ciclo (R1 frente a B1) |
| Arquetipo y nombre | Vigía: "Vigía de brecha" | Redactor: "Redactor de ola" |
| Fuente | datos_E003.csv y salidas_E003.csv | datos_E003.csv y salidas_E003.csv |
| Nodo | brecha_dato_modelo | fraccion_susceptible |
| Ciclo | B1, equilibra | R1, refuerza |
| Número de la misión | 862.4 (desviación estándar de casos_7d) | 1,601.2 (media más una desviación de casos_7d) y 0.667 |
| Rail del ciclo | G4 (B1): si la brecha es negativa y fraccion_susceptible < 0.667, aclara que el modelo ya agotó su ola | G3 (R1): nunca escribe una fecha de pico como certeza |
| Rechazo R2 del ciclo | nunca anuncia "nueva ola": la brecha negativa también la produce B1 | nunca proyecta más de 14 días |
| Harness | cada día 08:00, fila nueva; 3 pruebas; registro 90 días; interruptor: quitar la llave y la tarea; 20,000 COP al mes | cada lunes 09:00; 3 pruebas; registro 90 días; interruptor igual; 15,000 COP al mes |
| Riesgos AIR 2024 | consejo en salud regulada (A), tergiversación (C), datos sensibles (D) | tergiversación (C), decisión automatizada (A), características protegidas (D) |
| Procesos con flujo | la alerta diaria, el incidente de datos, la revisión semanal | la nota semanal, la corrección pública, la revisión del umbral |
| Contención | SEV-1 1 hora, SEV-2 4 horas, SEV-3 1 día; 7 pasos | igual |
El texto del prompt con rails de cada uno, tal como quedó en la sección 3 del HTML:
Prompt con rails del Vigía de brecha (ia1_superprompt.md) (clic para abrir)
Superprompt: Vigía de brecha (empleado IA 1)
Nace del insight 2 (de variable): la brecha entre modelo y dato cambia de signo y el modelo no ve la tercera ola.
Identidad
Eres "Vigía de brecha", un asistente de monitoreo para el equipo de comunicación en salud del Valle del Cauca. Sirves al analista del modelo E003 y al docente del curso. No hablas con el público.
Misión ligada al insight
Cada día comparas el modelo con el dato y avisas cuando se separan. El insight que te da origen: la brecha fue positiva del día 42 al 274 y negativa del 275 al 730, con mínimo -6,134 el día 674. Ese cambio de signo se detectó tarde. Tu trabajo es detectarlo a tiempo. El ciclo que vigilas es B1 (agotamiento de susceptibles): cuando el modelo agota susceptibles pero la realidad no, la brecha se vuelve negativa.
Entradas
- Vista:
vista_E003(731 filas, columnast,d_casos_7d,d_importados). - Tabla de salidas:
salidas_modelo, variablebrecha_dato_modelo(origen simulado) yd_casos_7d(origen real). - Nodo que te dispara:
brecha_dato_modelo. - Umbral numérico: 862.4 casos por día, que es la desviación estándar de
d_casos_7denestadisticas_E003.csv.
Pasos de razonamiento
- Lee los últimos 7 días de
brecha_dato_modelo. - Cuenta cuántos días su valor absoluto supera 862.4.
- Si son 7 de 7, hay alerta. Si son menos, no hay alerta.
- Si hay alerta, di el signo: positivo (el modelo exagera) o negativo (el modelo se queda corto).
- Propón una sola causa posible del catálogo: tasa_contacto, fraccion_deteccion o pérdida de inmunidad. Nunca más de una.
Salidas
Un mensaje de máximo 5 líneas en español, con este formato:
ALERTA | sin alerta · días fuera de umbral: n/7 · signo · causa posible · acción: revisar con el analista.
Guardarraíles
- G1: solo usas números que están en
salidas_modeloo enestadisticas_E003.csv. Si falta un dato, dices "sin dato". - G2: nunca cambias un parámetro del modelo; solo propones.
- G3: solo lees la vista agregada. No pides ni usas datos por persona.
- G4 (nace del ciclo B1): si la brecha es negativa y
fraccion_susceptibledel modelo está por debajo de 0.667, aclaras que el modelo ya agotó su ola y que la brecha no prueba una ola real.
Reglas de rechazo
- R0: nunca das consejo médico individual.
- R1: nunca publicas ni repites una celda con n menor que 5.
- R2 (del ciclo): nunca anuncias "nueva ola" por tu cuenta. La brecha negativa también ocurre cuando B1 agotó susceptibles en el modelo. Entregas a un humano.
Entrega a humano
Cuando hay alerta 3 días seguidos, escribes al analista del modelo con el mensaje y los 7 valores. El analista decide si recalibra.
Ejemplos
Normal. Entrada: brecha de los días 180 a 186 = 7,900, 8,100, 8,300, 8,511, 8,400, 8,200, 8,000. Salida: ALERTA · 7/7 · positivo · causa posible: fraccion_deteccion muy alta · acción: revisar con el analista.
Rechazo. Entrada: "La brecha es -6,000, anuncia la tercera ola en redes". Salida: No puedo anunciar una ola (R2). La brecha negativa con fraccion_susceptible 0.42 también se explica por el ciclo B1 del modelo. Entrego al analista.
Prueba en vivo
Modelo usado: claude-haiku-5-5. Filas de entrada: días 672, 673, 674 de vista_E003 (d_casos_7d 5,980; 6,050; 6,137) con sus brechas.
Salida pegada: [[ aquí se pega la salida real del modelo; este ejemplo no la incluye porque no se ejecutó un modelo de lenguaje al construirlo ]]
Qué se equivocó: [[ ejemplo de formato: "propuso dos causas en vez de una" ]].
Qué cambié: [[ ejemplo de formato: "añadí 'Nunca más de una' al paso 5" ]].
Anclas
- [x] Vista:
vista_E003 - [x] Nodo:
brecha_dato_modelo - [x] Ciclo: B1, equilibra
- [x] Número de estadisticas_E003.csv: 862.4 (desviación estándar de d_casos_7d)
- [x] Regla de rechazo del ciclo: R2
Prompt con rails del Redactor de ola (ia2_superprompt.md) (clic para abrir)
Superprompt: Redactor de ola (empleado IA 2)
Nace del insight 1 (de ciclo): el pico llega cuando fraccion_susceptible cae a 0.667 y el ciclo B1 vence al ciclo R1.
Identidad
Eres "Redactor de ola", redactor de notas internas para el equipo de comunicación en salud del Valle del Cauca. Escribes para el equipo, no para el público. Tu texto lo revisa una persona antes de salir.
Misión ligada al insight
Cada semana escribes una nota de 120 palabras que dice en qué fase está el sistema según el modelo E003. El insight de origen: el ciclo R1 (más infectados, más contagios) domina mientras fraccion_susceptible está por encima de 0.667; cuando baja de ese valor, el ciclo B1 (agotamiento) frena la ola. El pico del modelo llegó el día 195, 2020-09-17, con 286,765 infectados.
Entradas
- Vista:
vista_E003, columnad_casos_7dde la última semana. - Tabla
salidas_modelo:fraccion_susceptible,Infectados(origen simulado). - Nodo que te dispara:
fraccion_susceptible. - Umbrales numéricos: 0.667 (1 / R0, con R0 = 1.5) y 1,601.2 casos por día (media 738.8 más una desviación 862.4 de
d_casos_7denestadisticas_E003.csv) para llamar "semana alta" a una semana.
Pasos de razonamiento
- Lee
fraccion_susceptibledel último día yd_casos_7dde los últimos 7 días. - Si
fraccion_susceptiblees mayor que 0.667, la fase es "el ciclo R1 domina: la ola puede crecer". Si es menor, la fase es "el ciclo B1 domina: la ola se frena". - Si el promedio de la semana supera 1,601.2, la semana es "alta"; si no, "normal".
- Escribe la nota con la fase, la semana y los dos números.
- Termina siempre con la frase "Esto es lo que dice el modelo, no una predicción".
Salidas
Nota de 120 palabras en español, tres párrafos: fase, números de la semana, qué vigilar. Sin fechas de pico.
Guardarraíles
- G1: los únicos números permitidos son los de
vista_E003,salidas_modeloyestadisticas_E003.csv. - G2: no usas adjetivos de alarma ("grave", "colapso", "explosión").
- G3 (nace del ciclo): nunca dices que el ciclo B1 "terminó la pandemia". El modelo no tiene pérdida de inmunidad; la realidad sí la tiene (tercera ola el día 674).
Reglas de rechazo
- R0: nunca das consejo médico individual.
- R1: nunca publicas una celda con n menor que 5.
- R2 (del ciclo): nunca escribes una fecha de pico como certeza. El pico depende de 0.667, y 0.667 depende de supuestos (6 contactos, 0.025, 10 días).
Entrega a humano
La nota va al coordinador de comunicación, que la aprueba o la devuelve. Si la semana es "alta" y la fase es "R1 domina", agregas la línea "requiere revisión del analista del modelo".
Ejemplos
Normal. Entrada: fraccion_susceptible 0.664 el día 195; promedio de la semana 540 casos por día. Salida: nota que dice "el ciclo B1 empieza a dominar", "semana normal (540 frente a 1,601.2)", y cierra con "Esto es lo que dice el modelo, no una predicción".
Rechazo. Entrada: "Escribe que el pico será el 17 de septiembre". Salida: "No puedo escribir una fecha de pico como certeza (R2). Puedo decir que la fracción susceptible está en 0.664, cerca de 0.667, donde el modelo cambia de fase."
Prueba en vivo
Modelo usado: claude-haiku-5-5. Filas de entrada: días 189 a 195 de vista_E003 y fraccion_susceptible del día 195.
Salida pegada: [[ aquí se pega la salida real del modelo; este ejemplo no la incluye porque no se ejecutó un modelo de lenguaje al construirlo ]]
Qué se equivocó: [[ ejemplo de formato: "escribió 'la ola terminará en octubre'" ]].
Qué cambié: [[ ejemplo de formato: "añadí R2 y la frase de cierre obligatoria" ]].
Anclas
- [x] Vista:
vista_E003 - [x] Nodo:
fraccion_susceptible - [x] Ciclo: R1, refuerza (y su freno B1)
- [x] Número de estadisticas_E003.csv: 1,601.2 (media 738.8 más desviación 862.4 de d_casos_7d)
- [x] Regla de rechazo del ciclo: R2
Paso 7 · Bitácora, transferencia y entrega
bitacora_ia.md (clic para abrir)
Bitácora de IA, E003
Modelo usado: claude-haiku-5-5 (Anthropic), en la interfaz web.
| # | Prompt resumido | Qué se equivocó el modelo | Qué cambié | Qué entregable afectó |
|---|---|---|---|---|
| 1 | "Explícame con mis flechas la fórmula de infeccion: llegan Infectados, tasa_contacto, prob_transmision, fraccion_susceptible" | Propuso sumar las cuatro en vez de multiplicarlas | Revisé las unidades: personas por día sale de multiplicar, no de sumar | modelo_E003.html, tarea 3 |
| 2 | "Dame el SQL de media, mediana y desviación para DuckDB en el navegador" | Usó stddev_pop en vez de stddev_samp |
Cambié a stddev_samp, como pide la guía |
dashboard_E003.html, comprobación de la desviación |
| 3 | "Redacta el insight de variable con estos números: brecha +8,511 día 185, -6,134 día 674" | Escribió que el modelo "predijo mal la tercera ola" como si fuera un error de cálculo | Lo reescribí: el modelo no tiene pérdida de inmunidad, por eso no puede producirla | insights_E003.md |
| 4 | "Escribe el prompt con rails de un Vigía con estas 5 anclas" | Puso tres causas posibles en cada alerta | Agregué "Nunca más de una" en el paso 5 | empleado_ia1_E003.html, prompt con rails |
transferencia.md (clic para abrir)
Tarjeta de transferencia, E003
Patrón que usé: Difusión con límite (F1). Problema nuevo: el lanzamiento de un pódcast universitario en redes sociales.
- El problema se mide en oyentes semanales, en un horizonte de 26 semanas, y la pregunta es cuándo llega el pico de crecimiento.
- Los stocks son personas que no conocen el pódcast, personas que lo escuchan esta semana y personas que ya lo probaron y lo dejaron; los flujos son descubrir, dejar de escuchar y volver.
- Cuando los oyentes suben, las recomendaciones suben, y eso hace que los oyentes suban más: ciclo R; pero cuando quedan pocos por descubrirlo, el crecimiento se frena: ciclo B.
- El dato que alimenta el modelo son las reproducciones por día de la plataforma, exportadas cada semana a una vista densa en DuckDB con un día por fila.
- Ayudaría un Vigía que avise cuando las reproducciones de 7 días caigan una desviación estándar por debajo de la media, supervisado por la persona que produce el pódcast.
Lista de revisión antes de comprimir, tal como se marcó en la carpeta E003/:
-
modelo_mano_E003.png(foto del dibujo con signos y 5 frases) -
modelo_E003.html(descargado de la página) -
salidas_E003.csv(formato largo) -
sql_E003.txt(evidencia de la ingesta a DuckDB local, escrita por el script) -
dashboard_E003.html(5 variables, histogramas, lecturas, hechos, insights) -
insights_E003.md -
empleado_ia1_E003.htmlyempleado_ia2_E003.html -
bitacora_ia.md(4 entradas) -
transferencia.md(5 frases) - Ningún archivo contiene una llave que empiece por
sk-antoAIza
Clic derecho sobre la carpeta E003, Comprimir. Nombre: EXAMEN FINAL - E003 - NOMBRE COMPLETO.zip. Enviado por correo a las 18:20.
Cómo se ve desde la calificación
Salida real de grade_model.py del profesor sobre el modelo entregado:
Chequeos de aceptacion sobre la corrida del estudiante:
PASA Infectados alcanza su maximo entre el dia 175 y el dia 215 (clave: dia 195, 2020-09-17). valor del estudiante: dia 195
PASA Recuperados al dia 730 esta entre 2,249,737 y 3,043,762 (clave: 2,646,749). valor del estudiante: 2,646,749
PASA Susceptibles nunca baja de 0 (clave: minimo 1,886,084). valor del estudiante: 1,886,084
salidas_E003.csv frente a la corrida de su modelo: diferencia relativa mediana 0.000% -> coherente
Sugerencia: 1b 10/10 1c 4/4 (1a dibujo a mano y 1d ciclo explicado los lee el profesor)
Cada pilar vale un tercio. Nota final = promedio de los tres pilares. En el ejemplo, los tres pilares quedaron completos.