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.

General Pilar 2 · Datos Pilar 1 · Modelo Pilar 3 · IA ◇ decisión · ▭ paso · ◖▭◗ inicio y fin Inicio: viernes 19:00 Paso 0 · Preparar General Abre la carpeta E003 y E003-modelo.html. Lee el panel de la ficha: F1 Difusión con límite, Valle del Cauca, 16 nodos, 5 tareas. Mira los signos de los arcos. Bloque 0 · viernes 19:00 a 19:30 Paso 1 · Ingesta a DuckDB local Pilar 2 · Datos Doble clic en ingesta_E003.py (en Mac: Terminal, python3, espacio, arrastrar el archivo, Enter) Bloque 1 ¿Conteos 252,677 y 6,388,216? filas 252,677 · casos 6,388,216 NO: corre el script otra vez; si sigue, plan B (duckdb_E003.sql) o plan C: datos_E003.csv y pierdes solo el paso de ingesta (Paso 1) sí no Paso 1 · Lo que deja el script Pilar 2 · Datos examen_E003.duckdb (252,677 filas, 6,388,216 casos), v_territorio_76 con 731 días, mi_territorio_E003.csv, dashboard_E003.html conectado, sql_E003.txt Paso 2 · Dibuja el modelo completo a mano Pilar 1 · Modelo Todos los nodos, incluido fraccion_susceptible; arcos con signo + o -; R1 y B1 contando los menos; 5 frases. Foto modelo_mano_E003.png Bloque 2 Paso 3 · Pasa el dibujo al HTML Pilar 1 · Modelo Escribe las 4 fórmulas, agrega fraccion_susceptible, Cargar datos (datos_E003.csv), Correr Bloque 3 ¿Pasan los 3 chequeos? Pico de Infectados entre el día 175 y 215 · Recuperados final entre 2.25 M y 3.04 M · Susceptibles nunca < 0 NO: revisa primero las fórmulas, luego el CSV cargado sí no Simular, exportar, descargar Pilar 1 · Modelo Sube tasa_contacto de 6 a 8 y corre: el pico llega antes. Vuelve a 6. Exportar salidas CSV → salidas_E003.csv · Descargar este HTML → modelo_E003.html Paso 4 · Dashboard con 5 variables Pilar 2 · Datos dashboard_E003.html ya trae los datos de la base; Leer CSV salidas_E003.csv para sumar las simuladas · casos_7d, fallecidos_7d, importados, Infectados, fraccion_susceptible · media, mediana, moda, desviación, CV, histograma, lecturas Bloque 4 Paso 5 · Hechos, insights, qué mejorar Pilar 2 · Datos 3 hechos con número. Insight de ciclo: el freno B1 gana cuando fraccion_susceptible cae a 0.667. Insight de variable: la brecha cambia de signo el día 275. Transferencia: 5 frases Bloque 5 Paso 6 · Dos empleados IA Pilar 3 · IA empleado_ia_plantilla.html: Vigía de brecha (variable) y Redactor de ola (ciclo). Hoja de vida, prompt con rails, harness, riesgos AIR 2024, políticas, procesos con flujo, contención → empleado_ia1_E003.html y empleado_ia2_E003.html Bloque 6 Paso 7 · Revisar y comprimir General bitacora_ia.md (4 entradas) · transferencia.md (5 frases) · lista de 10 nombres fijos · clic derecho, Comprimir Bloque 7 · 2 puertas ¿Están los 10 archivos con nombre fijo? Revisa la lista de la guía: foto, modelo, salidas, sql, dashboard, insights, 2 empleados, bitácora, transferencia NO: envía igual; un zip incompleto entregado a tiempo también se califica sí no Envía EXAMEN FINAL - E003 - NOMBRE.zip antes de las 19:00 del sábado

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 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:

  1. Botón Agregar convertidor. Nombre: fraccion_susceptible. Unidad: 1 (fracción).
  2. Entradas: Susceptibles y poblacion. La página dibuja los dos arcos.
  3. Fórmula: MAX(0, Susceptibles / poblacion).
  4. Abre infeccion: su fórmula dice ... * (1) con la insignia PROVISIONAL. Reemplaza (1) por fraccion_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:

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:

  1. Exportar salidas CSV escribe salidas_E003.csv en formato largo (t, variable, valor, origen):
salidas_E003.csv: 8041 filas | reales ['d_casos_7d', 'd_importados'] | simuladas 9 variables, dias 731
  1. Descargar este HTML guarda modelo_E003.html con 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

  1. Las personas pasan de Susceptibles a Infectados y luego a Recuperados.
  2. Más Infectados producen más contagios: ciclo R1, cero signos menos.
  3. Menos Susceptibles bajan la fraccion_susceptible y frenan el contagio: ciclo B1, un signo menos.
  4. Los casos importados llegan desde fuera, desde el dato d_importados.
  5. 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

  1. El pico real de casos_7d fue 6,137 casos por día, el día 674 (2022-01-09).
  2. El Valle del Cauca sumó 540,163 casos en los 731 días de la ventana del examen.
  3. 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, columnas t, d_casos_7d, d_importados).
  • Tabla de salidas: salidas_modelo, variable brecha_dato_modelo (origen simulado) y d_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_7d en estadisticas_E003.csv.

Pasos de razonamiento

  1. Lee los últimos 7 días de brecha_dato_modelo.
  2. Cuenta cuántos días su valor absoluto supera 862.4.
  3. Si son 7 de 7, hay alerta. Si son menos, no hay alerta.
  4. Si hay alerta, di el signo: positivo (el modelo exagera) o negativo (el modelo se queda corto).
  5. 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_modelo o en estadisticas_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_susceptible del 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, columna d_casos_7d de 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_7d en estadisticas_E003.csv) para llamar "semana alta" a una semana.

Pasos de razonamiento

  1. Lee fraccion_susceptible del último día y d_casos_7d de los últimos 7 días.
  2. Si fraccion_susceptible es 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".
  3. Si el promedio de la semana supera 1,601.2, la semana es "alta"; si no, "normal".
  4. Escribe la nota con la fase, la semana y los dos números.
  5. 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_modelo y estadisticas_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.

  1. El problema se mide en oyentes semanales, en un horizonte de 26 semanas, y la pregunta es cuándo llega el pico de crecimiento.
  2. 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.
  3. 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.
  4. 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.
  5. 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/:

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.