Unidad 3 - Práctica: el EDA de tu proyecto con un agente
Aplicación guiada en clase · Semana 8 · 06327-ECO
1 Reglas de juego
Esta sesión asume que ya estudiaste la teoría
Qué es un agente, el bucle agéntico y el archivo de reglas quedaron en el podcast (y su versión escrita) y en el quiz: hoy no se repiten, se usan. Si un término se te escapa, la teoría queda a un clic.
Lo que necesitas ahora mismo:
- 🤖 Un agente de código funcionando: Claude Code o Codex. (¿Usas otro, como Copilot en VS Code? La secuencia de hoy es exactamente la misma.)
- 📦 R funcionando (semana 3) con
dplyryggplot2(semana 4). - ❓ La pregunta de negocio de tu equipo — la de la Entrega 1. Hoy todo gira alrededor de ella.
- 🗜️ El proyecto de hoy: proyecto_condor.zip ⬅️ descárgalo ya (3,3 MB).
La regla de la sesión: un prompt, una tarea, una ejecución, una mirada. No le pides el análisis completo: le pides un paso, corres el código, lees la salida y solo entonces escribes el siguiente prompt. Quien dirige eres tú — el agente escribe rápido y se equivoca en silencio; tu trabajo es decidir qué se pregunta, mirar cada salida y no aceptar una cifra que no viste correr.
La meta de hoy es corta a propósito: salir con 3 o 4 resultados bien escogidos —descriptivas o gráficos que de verdad respondan tu pregunta—, cada uno en su propio script de R, corriendo de arriba a abajo. Eso es el corazón del avance que presentas la próxima semana en la Entrega 2. El EDA completo no es la meta de hoy: ampliarlo queda como trabajo fuera de clase.
¿Sin agente funcionando? (plan B, sin drama)
- No tienes Claude Code ni Codex activos: trabaja en pareja con alguien que sí — hoy el rol de auditor (el que revisa cada salida y decide el siguiente prompt) es tan importante como el de piloto.
- Tu agente no puede ejecutar comandos: tú corres en la terminal cada script que proponga (
Rscript scripts/01_cargar.R) y le pegas la salida. Es el mismo bucle, con tus manos como intermediarias.
Dos hábitos para toda la sesión
- Economiza tokens. Los prompts de hoy son cortos a propósito: el contexto pesado ya está en el
README.mdy el diccionario del proyecto. No pegues tablas ni pedazos de CSV al chat — el agente ya tiene los archivos. - Guarda tus prompts. La Entrega 2 es IAG nivel 3: el registro de tus interacciones hace parte del trabajo. Copia los prompts que uses (con tus espacios ya llenos) en un archivo de notas del equipo.
2 Monta el proyecto ≈ 10 min
- Descomprime
proyecto_condor.zip. Te deja esta carpeta:
proyecto_condor/
├── README.md ← el contexto del caso y las reglas para el agente
├── input/ ← las 4 tablas de Cóndor + diccionario_datos.md
├── scripts/ ← aquí vivirá un script de R por resultado
└── output/ ← aquí se guardan gráficos y tablas- Abre tu agente con esa carpeta como directorio de trabajo:
- Claude Code: abre la terminal, entra a la carpeta (
cd proyecto_condor) y lanzaclaude. - Codex: igual — entra a la carpeta y lanza
codex(o, en VS Code, File → Open Folder… y eligeproyecto_condor). - Otra herramienta (p. ej. Copilot): File → Open Folder… con
proyecto_condor; todo lo demás es igual.
La carpeta es el contexto
Al abrir la carpeta completa, el agente puede ver el README.md, los datos de input/ y dónde debe dejar cada cosa. Los datos ya están adentro: hoy nadie lee desde internet ni pega datos en un chat.
3 Prompt 0 · El agente lee las reglas ≈ 5 min
Tu primer mensaje no pide análisis. Pide contexto:
Lee el archivo README.md y revisa la estructura del proyecto. No hagas cambios todavía.Qué debe hacer: resumirte el caso, las cuatro tablas y las reglas de trabajo (español, dplyr y ggplot2, un script por resultado, salidas a output/, nada de adelantarse).
Checkpoint ✅ — pregúntale: «¿Qué reglas del proyecto conoces?». Si no te recita las del README.md, no lo leyó: vuelve a pedírselo antes de seguir.
4 Tu pregunta manda ≈ 10 min
Ahora sí, tu pregunta de negocio — la del equipo, con sus palabras:
Estoy trabajando con el caso Cóndor y mi pregunta de negocio es:
________________________________________________________________
Quiero que primero revises la estructura de los datos disponibles y me ayudes a entender
qué información puedo utilizar para responder esta pregunta. No hagas todavía todo el
análisis.Qué debe hacer: decirte qué tablas y qué columnas se relacionan con tu pregunta (apoyándose en input/diccionario_datos.md) y, ojalá, preguntarte algo. No debe escribir código.
Qué revisas antes de seguir: ¿entendió tu pregunta o la cambió por otra más cómoda? ¿Las columnas que nombró existen en el diccionario?
Si se desborda: Todavía no escribas análisis. Solo quiero saber qué datos me sirven.
Ahora pídele el plan — y fíjate que la meta ya viene acotada:
Proponme un EDA sencillo para responder mi pregunta, con la lógica que ya conozco:
entender el grano de las tablas que necesito, mirar cómo se comporta mi variable de
interés y después cruzarla con las variables candidatas a explicarla.
Quiero terminar con 3 o 4 resultados (descriptivas o gráficos) bien escogidos, no un EDA
completo. Lístalos en una línea cada uno y no escribas código todavía.Qué revisas antes de seguir: que cada resultado propuesto responda tu pregunta y no una genérica. Aquí decides tú: recorta, cambia o reordena la lista y díselo — esa lista es el plan de la sesión, y de aquí en adelante se ejecuta un resultado por prompt.
5 Cargar lo necesario ≈ 10 min
Escribe scripts/01_cargar.R que haga solo esto: leer de input/ con read.csv las tablas que
necesito (________) y, para cada una, imprimir el número de filas, el número de columnas y
cuántos clientes distintos tiene. Nada más: no limpies, no unas, no resumas.Qué debe hacer: un script corto con read.csv sobre input/ y, por tabla, nrow, ncol y n_distinct(cliente_id).
Qué revisas antes de seguir: córrelo (tú o el agente) y compara la salida con input/diccionario_datos.md. ¿Cuadran las filas? ¿Los anexos tienen más filas que clientes distintos? Ese contraste —varias filas por cliente— es exactamente lo que resuelve la etapa siguiente.
Si se desborda: borra lo que sobre y díselo: Quité lo que agregaste de más. De aquí en adelante escribe solo lo que te pida.
6 La base analítica ≈ 10 min
¿Tu pregunta se responde solo con base_clientes? Entonces sáltate esta etapa: esa tabla ya viene a nivel de cliente. Esta etapa es para quien necesita sumar un anexo (transacciones, créditos o campañas).
Mi unidad de análisis es ________ (un cliente / una transacción / una solicitud), porque
mi pregunta se responde a ese nivel.
Escribe scripts/02_base.R que agregue el anexo ________ a ese nivel, creando las columnas
________ y ________, y luego lo una a mi tabla principal conservando todas las filas de
esta. El script debe imprimir el número de filas antes y después de unir.Qué debe hacer: group_by() + summarise() sobre el anexo y después un left_join(). Nunca al revés.
Qué revisas antes de seguir: que el número de filas no cambió al unir. Si creció, unió sin agregar y ahora tienes clientes repetidos — en la semana 6 lo viste: unir las campañas sin agregar convierte 8.000 filas en 15.081, y R no avisa. Mira también los NA nuevos: son las unidades que no aparecen en el anexo (clientes sin campañas, sin crédito). Decide tú qué significan —¿cero o “no aplica”?— y díselo al agente en el siguiente prompt.
7 Resultado 1 · Tu variable de interés ≈ 10 min
El primer resultado siempre es el mismo: conocer la vara con la que vas a medir todo lo demás.
Escribe scripts/03_variable_interes.R: mi variable de interés es ________.
Si es binaria, muéstrame la proporción de cada valor; si es numérica, un resumen con
mediana y media más un histograma guardado en output/. Dime también cuántos faltantes
tiene y a quiénes les faltan. No interpretes todavía: solo muéstrame las salidas.Qué revisas antes de seguir: esta salida es tu punto de comparación. Si la variable es binaria, esa proporción global es la referencia de todos los cruces que siguen. Si es numérica, mira cuánto se separan mediana y media: si la media queda muy por encima, hay cola larga, y de ahí en adelante describes con medianas y tramos, no con promedios. Y un faltante nunca es solo un faltante: pregúntate a quién le falta — en Cóndor los vacíos suelen ser “no aplica”, y el diccionario dice cuáles.
8 Resultados 2, 3 y 4 · Un prompt por resultado ≈ 30 min
Ahora ejecuta tu plan, un resultado por prompt, con estos dos moldes. Cada resultado nuevo es un script nuevo (04_…, 05_…) y un archivo nuevo en output/.
Molde A — una descriptiva por grupos:
Escribe scripts/04_________.R: compárame ________ (la tasa / la mediana de mi variable de
interés) entre grupos de ________: parte las numéricas en tramos con cut() y deja las
categóricas como están. Muestra cuántas observaciones hay en cada grupo y guarda la tabla
en output/ con write.csv().Molde B — un gráfico que diga algo:
Escribe scripts/05_________.R con un gráfico de ggplot2 que le sirva a ________ (quien
decide) para entender ________. Debe mostrar ________.
El título debe decir el mensaje, no el nombre de las variables; si son barras, el eje
empieza en cero. Guárdalo en output/ con ggsave().Qué revisas en cada resultado, antes de pedir el siguiente:
- El conteo al lado de la tasa. Una tasa del 80 % sobre siete observaciones no es un hallazgo.
- El contraste. ¿El indicador se mueve de verdad entre grupos, o sale plano? Que una variable salga plana también es un resultado: déjalo escrito.
- El título del gráfico. ¿Dice el hallazgo o describe las variables? Si describe, itera:
El título describe en vez de informar. Cámbialo por el hallazgo. - Que el script corre solo.
Rscript scripts/04_….Rde arriba a abajo, sin depender de lo que haya en memoria.
Si te alcanza el tiempo: toma las dos variables que más contrasten y pídele que las cruce: «¿Miden lo mismo o se complementan?». En la semana 6, ese cruce fue el mejor hallazgo de la sesión.
9 El freno de las fugas ≈ 5 min
Antes de cerrar, un chequeo que en la semana 9 te van a agradecer:
Revisa las columnas que estoy usando y dime cuáles NO debería usar para responder mi
pregunta porque se conocen DESPUÉS del momento en que se tomaría la decisión. Explícame
el criterio en cada caso.Qué revisas: que el criterio sea el momento de la decisión, no la correlación. El ejemplo de manual está en el diccionario: gasto_proximo_trim “explica” el abandono de maravilla justamente porque se mide después del corte. Cuando una variable funciona demasiado bien, sospecha de esto.
10 Cierre ≈ 5 min
Lo que te llevas hoy no es el EDA hecho por la IA: es haber dirigido el análisis. Al final tienes una carpeta con scripts que corren de arriba a abajo, salidas en output/ cuyas cifras viste correr, y un plan de resultados que tú decidiste. Eso es el esqueleto del avance que presenta tu equipo la próxima semana (Entrega 2).
Los tres frenos — para hoy y para el resto del proyecto:
| Si el agente… | Escríbele |
|---|---|
| hace el EDA completo de una vez | Hiciste más de lo que te pedí. Deja solo <la tarea> y borra el resto. |
| inventa nombres de columnas | No supongas los nombres. Lee el diccionario y usa los que existen. |
| afirma una cifra que no corrió | ¿De qué salida sale ese número? Muéstrame el código y córrelo. |
Fuera de clase, amplía el análisis con el mismo método (un prompt, un resultado) y cierra con este prompt — el acta que firma el equipo:
Con las salidas que ya corrimos —y solo con esas, sin inventar cifras— escribe en
output/hallazgos.md: (1) tres hallazgos con número, en lenguaje de negocio, para alguien
de ________ que no sabe R; (2) el acta: qué hicimos con los faltantes, qué columnas
excluimos y por qué. Máximo una página.Qué revisas: cada cifra contra la salida de la que salió. Si aparece un número que no recuerdas haber visto correr, no es un hallazgo — es una alucinación, y el acta la firmas tú.