lección 7
Día 5: La presentación a Ana
Presenta los resultados al cliente PharmaLife. Enfrenta las preguntas incomodas de Ana, gestiona cambios de última hora y aprende a comunicar datos a no técnicos.
⏱ 40 min
### Viernes 9:30 AM -- Ensayo general
Carmen, Ivan y tu en la sala ROAS, 30 minutos antes de la call con Ana. Carmen tiene la presentación abierta en Tableau: 3 slides simples con la tabla de reconciliación, el grafico de ROAS por canal y la recomendación. "Repasemos. El mensaje principal es: el ROAS real con LTV es 0.33x total, Meta es el mejor canal, y recomendamos redistribuir presupuesto de Google a Meta. Preguntas?"
Ivan anade: "Si Ana pregunta por que los números son tan diferentes a los que reporta Google, explica la doble atribución en 2 frases. No entres en detalle técnico a menos que ella pregunte. Si pregunta por la metodologia, tenemos el doc de 1 pagina que puedes compartir después de la call."
Tu preguntas: "Y si Ana se enfada con los números? ROAS 0.33x es bastante malo para su objetivo de 3x." Carmen te mira: "Ana prefiere la verdad incomoda a la mentira comoda. Por eso nos contrató. Si se enfada, se enfada con los números, no con nosotros. Nuestro trabajó es darle la foto real para que tome decisiones informadas."
Ivan te da un último consejo: "Cuando hables, no mires la pantalla. Mira a la camara. Y cuando Ana haga una pregunta, espera 2 segundos antes de responder. Eso transmite que estas pensando la respuesta, no recitando de memoria. Y si no sabes algo, di no lo se, lo verifico y te mando un email. NUNCA inventes un número en una call con cliente."
### La call -- 10:00 AM
1[Videollamada: PharmaLife Quarterly Review]2[Presentes: Ana Soler (PharmaLife), Carmen, Ivan, Tu]34Carmen: Buenos días Ana. Hoy te traemos los números de ROAS real5de enero. Hemos cruzado los datos de las 3 plataformas publicitarias6con vuestro CRM de HubSpot para daros números basados en ventas7REALES, no en lo que reportan Google y Meta.89[Carmen comparte pantalla: tabla de reconciliación]1011Ana: Veo ROAS 0.33x con LTV. Eso es menos del 10% de mi12objetivo de 3x. Algo no cuadra. Google me dice que mi ROAS13es casi 2x. Por que hay TANTA diferencia?1415Carmen: Dos razones. Primera: Google cuenta como conversión16cualquier compra en 30 días tras un click, aunque ese usuario17también hizo click en Meta y recibió un email. Las 3 plataformas18se atribuyen la misma venta. Eso infla un 49.5% las conversiones.1920Segunda: tu objetivo de ROAS 3x está calculado sobre revenue21total incluyendo clientes recurrentes. Pero los 2M que gastas22en ads solo captan NUEVOS clientes. El ROAS de captacion siempre23es bajo -- el valor está en que esos clientes recompran.2425Ana: [pausa 3 segundos] Ok, entiendo la inflacion. Pero 0.33x26sigue siendo bajo. Estoy perdiendo dinero?2728Ivan: No necesariamente. Si miramos el revenue TOTAL de enero29(nuevos + recurrentes que recompran) es 3.85M EUR. Eso dividido30entre los 2M de gasto da ROAS 1.93x. No llegas al 3x pero no31estas perdiendo dinero. Cada euro invertido genera 1.93 en32revenue total.3334Ana: Eso tiene más sentido. Pero sigue sin ser 3x. Que35recomendais?
La presentación: números claros, sin jerga, respuestas preparadas
1Carmen: Tres recomendaciones:231. REDISTRIBUIR: Meta es 27% más eficiente que Google en4 atribución lineal. Mover 10-15% del presupuesto de Google5 a Meta (unos 110K-165K EUR/mes).672. OPTIMIZAR EMAIL: Cart Recovery (email) tiene el mejor8 ROI por euro invertido pero está subcapitalizado. Podemos9 aumentar la frecuencia de envios de cart abandonment.10113. MONITORIZAR: Queremos implementar un report semanal12 automatizado con estos números reales para que no tengas13 que esperar al quarterly.1415Ana: Me gusta. Hacedlo. Pero tengo una pregunta más.16Si Google es tan malo... por que no cortamos todo ahi y17ponemos todo en Meta?1819Tu: Porque Google cumple una función de captura de demanda.20Cuando alguien busca "comprar omega 3", ese click de Google21es el que cierra la venta. Sin Google, esas busquedas irian22a la competencia. Lo que si podemos reducir es el gasto en23Display de Google, que tiene el peor rendimiento.2425Ana: Bien. Una última cosa. Necesito estos números CADA SEMANA,26no cada trimestre. Y quiero ver la tendencia: si redistribuimos27presupuesto, quiero ver que el ROAS sube semana a semana.2829Carmen: Listo. Lo implementamos está semana. Primer report30semanal el lunes que viene.3132Ana: Perfecto. Buen trabajó equipo.
Las preguntas de Ana y la recomendación accionable
### El cambio de última hora
La call termina a las 10:35. Carmen cierra el portatil satisfecha: "Bien. Ana está contenta. Pero acabais de comprometeros a un report semanal automatizado para el lunes. Eso significa que necesitamos el DAG de Airflow listo en... 3 días." Te mira. Ivan te mira. Tu asientes.
1#canal-pharmalife [10:40]23Carmen Delgado: Resumen post-call:4- Ana aprueba la redistribucion Google -> Meta5- Quiere report semanal automatizado empezando lunes6- Raul: coordina con el equipo de paid para ejecutar7 la redistribucion de presupuesto antes del lunes8- @Tu: DAG de Airflow para el report semanal.9 Deadline: domingo noche funcionando.10- @Ivan: revisar el DAG antes de que se ejecute en prod1112Ivan Romero: Tranquilo, el DAG es straightforward.13Ya tienes todas las piezas (scripts 01-08). Solo14necesitas orquestarlas con dependencias correctas.15Te ayudo está tarde si te atascas.1617Raul Merino: Genial la presentación! Ana me acaba de18mandar un email diciendo "por fin números que entiendo".19La redistribucion la hago está tarde en las plataformas.
Post-call: compromisos claros, deadlines apretados, equipo alineado
Una presentación exitosa a un cliente siempre genera más trabajó inmediato. Es una señal positiva: significa que confian en tu equipo y quieren más. Pero también significa que tienes que cumplir lo prometido. Nunca prometas algo en una call que no puedas entregar -- si no estas seguro, di "lo evaluamos y os confirmamos mañana".
### El report semanal automatizado
Por la tarde, te sientas con Ivan a disenar el DAG. La logica ya la tienes -- solo necesitas orquestarla. Ivan te da la plantilla de Airflow que usan en AdPulse para todos los clientes:
1from airflow import DAG2from airflow.operators.python import PythonOperator3from airflow.operators.sql import SQLExecuteQueryOperator4from airflow.utils.dates import days_ago5from datetime import timedelta67default_args = {8 'owner': 'data-team',9 'depends_on_past': False,10 'email_on_failure': True,11 'email': ['carmen@adpulse.io', 'ivan@adpulse.io'],12 'retries': 2,13 'retry_delay': timedelta(minutes=5),14}1516with DAG(17 'pharmalife_weekly_report',18 default_args=default_args,19 description='Pipeline semanal PharmaLife: ingesta -> unificacion -> reconciliación -> report',20 schedule_interval='0 7 * * 1', # Lunes 7:00 AM21 start_date=days_ago(1),22 catchup=False,23 tags=['pharmalife', 'weekly', 'production'],24) as dag:2526 # Las 3 ingestas en PARALELO (no dependen entre si)27 ingest_google = PythonOperator(task_id='ingest_google', python_callable=ingest_google_fn)28 ingest_meta = PythonOperator(task_id='ingest_meta', python_callable=ingest_meta_fn)29 ingest_email = PythonOperator(task_id='ingest_email', python_callable=ingest_email_fn)30 ingest_crm = PythonOperator(task_id='ingest_crm', python_callable=ingest_crm_fn)3132 # Unificacion (necesita las 3 ingestas completadas)33 unify = SQLExecuteQueryOperator(34 task_id='unify_campaigns',35 conn_id='adpulse_postgres',36 sql='sql/unify_weekly.sql',37 )3839 # Reconciliacion (necesita unificacion + CRM)40 reconcile = PythonOperator(task_id='reconcile', python_callable=reconcile_fn)4142 # En paralelo: detectar huerfanas + generar report43 detect_orphans = PythonOperator(task_id='detect_orphans', python_callable=detect_orphans_fn)44 generate_report = PythonOperator(task_id='generate_report', python_callable=report_fn)4546 # Enviar report por email a Ana47 send_report = PythonOperator(task_id='send_report', python_callable=send_email_fn)4849 # Dependencias50 [ingest_google, ingest_meta, ingest_email] >> unify51 [unify, ingest_crm] >> reconcile52 reconcile >> [detect_orphans, generate_report]53 generate_report >> send_report
DAG de Airflow: ingestas en paralelo, luego unificacion y reconciliación secuencial
En producción, las APIs de Google y Meta tienen rate limits y fallan con frecuencia (timeouts, errores 500, cambios de schema sin aviso). Los 2 retries con 5 minutos de espera resuelven el 80% de fallos transitorios. Para el 20% restante, el email_on_failure alerta al equipo para intervención manual.
### Lo que aprendiste sobre presentar a un cliente
Despues de la call, Carmen te da feedback sobre tu participacion en la presentación:
1Carmen Delgado [10:40 - después de la call]:23Feedback rápido:45LO QUE HICISTE BIEN:6- Cuando Ana preguntó por Google vs Meta, respondiste con7 datos: "los datos muestran que Meta es 27% más eficiente".8 No dijiste "yo creo". Dijiste "los datos muestran". Perfecto.9- Tu tono era seguro. No vacilaste. Eso genera confianza.1011LO QUE PUEDES MEJORAR:12- Te extendiste demasiado en la explicacion del email.13 En presentaciones: respuesta en 2 frases. Si quieren más,14 preguntan. No ofrezcas información que no han solicitado.15- Cuando diste el número de ROAS, no dijiste las unidades.16 Siempre di: "ROAS de 0.38 euros por cada euro invertido".17 Ana entiende euros, no "x".1819REGLAS PARA PRESENTAR A CLIENTE:201. Respuestas cortas (2-3 frases max)212. Siempre con datos, nunca opiniones223. Si no sabes, di "lo verifico y te confirmo"234. Nunca uses jerga técnica sin explicarla primero245. El silencio del cliente no es malo -- está pensando
Feedback de Carmen: comunicar a clientes es un skill que se entrena
## ejercicios
Escribir el email de resumen post-presentación
Redacta el email que Carmen enviara a Ana después de la presentación, resumiendo los hallazgos, las acciones acordadas y los proximos pasos. Debe ser claro, sin jerga técnica.
Query del report semanal automatizado
Implementa la query SQL que genera el report semanal para Ana: métricas de la semana actual, comparativa con media de 4 semanas anteriores, y alertas si algo cambia mucho.
Funcion de detección de huerfanas con alerta Slack
Implementa la función Python que detecta campañas sin mapping en la última semana, las prioriza por gasto y genera el mensaje formateado para el canal de Slack de Raul.
Ranking de campañas por eficiencia (SQL con RANK)
Crea un ranking de las campañas más y menos eficientes usando RANK() y ROAS corregido. Identifica las top 3 para escalar y las bottom 3 para pausar.
Regístrate para guardar tu progreso.
## comentarios
Reporta erratas, ayuda a otros o comparte tu opinión. Sé constructivo.
Inicia sesión para comentar y responder.
cargando comentarios...