lección 7
Atribución, ROAS y CAC: a quién le das el crédito
Modelos de atribución, retorno de la inversión publicitaria y coste de adquirir un cliente. Las tres preguntas que marketing no puede responder sin ti.
⏱ 55 min
Un cliente ve un anuncio tuyo en Instagram por la mañana, no hace nada. Por la tarde busca tu marca en Google y entra en la web, pero no compra. Dos días después le llega un correo con un cupón, y esa vez sí, se suscribe. Pregunta sencilla: ¿qué canal ha traído a ese cliente? La trampa es que no hay una respuesta correcta. Instagram dirá que fue él quien lo descubrió. Google dirá que sin la búsqueda no habría vuelto. El email dirá que fue el cupón el que cerró la venta. Y los tres tienen parte de razón. Si cada equipo se cuelga la medalla, sumas tres clientes donde solo hubo uno, e inflas los resultados hasta que el director financiero cruza sus números con los tuyos y no cuadran. Este es el problema de la atribución: repartir el mérito de una venta entre los varios canales por los que pasó el cliente. Es, literalmente, el problema no resuelto del marketing — y de cómo lo resuelvas depende dónde pones el dinero el trimestre que viene.
Este es el problema de la atribución de marketing: cuando un cliente pasa por varios canales antes de comprar, ¿a quién le das el mérito? ¿Al primero que lo trajo? ¿Al último que lo convenció? ¿A todos por igual? La respuesta que elijas cambia por completo cuánto vale cada canal — y por tanto dónde pones el dinero el próximo trimestre. Esa decisión es lo que vamos a aprender a calcular hoy, junto con dos métricas que viven pegadas a ella: el ROAS (cuánto ingreso genera cada euro de publicidad) y el CAC (cuánto cuesta traer un cliente nuevo).
### La analogía: el gol del equipo
Imagina un gol de fútbol. El delantero marca, pero la jugada empezó con el portero sacando largo, siguió con el mediocampista filtrando un pase, y acabó con el extremo centrando al área. ¿Quién "ganó" ese gol? Si solo premias al que marca (last-click), el portero y el mediocampista no existen. Si solo premias al que inició la jugada (first-click), el extremo que centró al área no cuenta. Si repartes el mérito a partes iguales (lineal), tratas igual al portero que sacó de rutina que al mediocampista que rompió tres líneas con un pase de 40 metros.
En marketing digital pasa exactamente lo mismo. El "gol" es la conversión (una compra, un registro, una suscripción). Los "jugadores" son los canales por los que pasó el cliente: vio un anuncio en Instagram, buscó en Google, abrió un email, y compró. Cada modelo de atribución es una forma diferente de repartir la asistencia. Y no hay uno correcto — hay uno más útil para cada decisión.
### Los cinco modelos de atribución
Un modelo de atribución es una regla que decide cómo repartir el crédito de una conversión entre los puntos de contacto (touchpoints) que tuvo el cliente antes de convertir. Un punto de contacto es cada interacción medible: un clic en un anuncio, una visita desde búsqueda orgánica, la apertura de un email. Vamos a ver los cinco modelos clásicos con un ejemplo concreto: un cliente que pasó por cuatro canales antes de comprar.
Last-click (última interacción). Todo el crédito va al último canal que tocó el cliente antes de convertir. Es el modelo más extendido de la historia del marketing digital, y sigue siendo el que la mayoría de equipos lleva en la cabeza. ¿Por qué? Porque es el más fácil de implementar: si el cliente compró después de hacer clic en un email, el email se lleva la conversión. No hay que reconstruir el recorrido completo ni repartir nada. Ojo con una trampa de vocabulario que te van a poner en la entrevista: cuando una herramienta dice "último clic" casi nunca quiere decir el último clic literal. Google Analytics, por ejemplo, siempre ha ignorado el tráfico directo al repartir el crédito, y desde 2023 su modelo por defecto ya no es de regla fija sino basado en datos. El last-click que vas a escribir tú en SQL es la versión pura; la que te va a dar la herramienta lleva excepciones.
First-click (primera interacción). Todo el crédito va al primer canal que trajo al cliente. Es útil para medir el descubrimiento: ¿qué canal es mejor para atraer gente NUEVA que no te conocía? Pero ignora completamente todo lo que pasa después de ese primer contacto. Un cliente que te descubrió por un tuit pero necesitó tres emails y un descuento para comprar: first-click le da todo el crédito al tuit.
Lineal. Reparte el crédito a partes iguales entre todos los puntos de contacto. Si hubo 4 touchpoints, cada uno recibe 0,25. Es democrático pero no distingue: trata igual una búsqueda casual en Google que el email con el cupón que cerró la venta. Útil como punto de partida cuando no tienes datos suficientes para algo más sofisticado.
Time-decay (decaimiento temporal). Asigna más peso a los touchpoints más cercanos a la conversión, y menos a los más lejanos. La lógica: lo que pasó justo antes de comprar probablemente influyó más que lo que pasó hace tres semanas. Conserva algo de sentido común sin ser tan radical como dar el 100% a un solo canal — aunque en la práctica se usó poco, y Google lo retiró de sus herramientas en 2023 precisamente por eso. El reparto no se elige a dedo: sale de una fórmula. El peso de cada touchpoint es 2^(-días / vida_media), donde la vida media es el tiempo que tarda un contacto en valer la mitad. Con una vida media de 7 días: un clic de hoy vale 1, uno de hace una semana vale 0,5, uno de hace dos semanas vale 0,25.
Data-driven (basado en datos). En vez de usar una regla fija, analiza patrones en tus datos históricos y calcula la probabilidad de que cada touchpoint contribuya a la conversión. Lo ofrecen Google y Meta en sus plataformas. La ventaja es que se adapta a TU negocio. La desventaja: es una caja negra, necesita mucho volumen de datos, y convenientemente suele dar más crédito al canal de la plataforma que lo calcula.
Consejo de senior: en la entrevista, si te preguntan "cuál es el mejor modelo de atribución", la respuesta NO es nombrar uno. Es decir "depende de la pregunta". Si quiero saber dónde descubrir clientes nuevos, first-click. Si quiero saber qué cierra ventas, last-click. Si quiero repartir un presupuesto de forma equilibrada, lineal o time-decay. El modelo es la herramienta, no la respuesta.
### Por qué last-click es el estándar y por qué engaña
Last-click domina por tres razones prácticas: es trivial de implementar (no necesitas reconstruir recorridos), es fácil de explicar a un directivo ("el último clic antes de comprar"), y es lo que las plataformas de publicidad usan por defecto. Pero tiene un sesgo brutal: sobrevalora los canales de cierre y mata los de descubrimiento.
El ejemplo más claro: el email marketing. Un cliente te descubre por un anuncio en Instagram, te busca en Google, navega tu web tres veces, y finalmente abre un email con un cupón del 10% y compra. Con last-click, el email se lleva el 100% del crédito. El equipo de email dice "hemos generado 500 conversiones este mes". Pero si quitas el anuncio de Instagram, ese cliente nunca te habría conocido. El email no descubrió al cliente — lo remató. Es como darle al delantero todos los premios mientras el centrocampista que montó la jugada no existe en las estadísticas.
El efecto perverso: si solo mides con last-click y optimizas presupuesto sobre eso, acabas poniendo todo el dinero en canales de cierre (email, remarketing, búsqueda de marca) y quitando dinero a los canales de descubrimiento (display, redes sociales, contenido). Durante un trimestre parece que funciona: el ROAS de los canales de cierre es espectacular. Pero al trimestre siguiente, el pipeline de clientes nuevos se seca — porque nadie está invirtiendo en que te conozcan por primera vez.
Error común que he visto en tres empresas distintas: la CMO recorta presupuesto de awareness (reconocimiento de marca) porque su ROAS con last-click es bajo. Tres meses después, los canales de cierre también bajan — porque ya no hay clientes nuevos entrando al embudo. Last-click te hace optimizar el cierre a costa de matar la entrada. Si usas un solo modelo, al menos compleméntalo con first-click para vigilar el descubrimiento.
### ROAS: cuánto ingreso genera cada euro de publicidad
ROAS son las siglas de Return On Ad Spend, es decir, retorno sobre la inversión publicitaria. La fórmula es directa: ingresos atribuidos a un canal dividido entre el gasto en ese canal. Si gastaste 1.000 euros en Google Ads y esas campañas generaron 5.000 euros en ventas (según tu modelo de atribución), tu ROAS es 5.000 / 1.000 = 5,0. Dicho de otro modo: por cada euro que metes en Google Ads, sacas cinco.
La fórmula parece sencilla, pero esconde dos trampas que engañan a equipos enteros:
- 01.El ROAS depende del modelo de atribución. Los mismos 5.000 euros de ingresos se reparten de forma distinta según uses last-click, lineal o time-decay. Con last-click, Google se lleva los 5.000 si fue el último clic. Con lineal, quizá se lleva solo 2.500. El ROAS pasa de 5,0 a 2,5 sin que haya cambiado NADA en el mundo real — solo la regla de reparto.
- 02.Un ROAS de 1 NO es breakeven. Parece lógico: si meto 1.000 y saco 1.000, estoy en paz. Pero esos 1.000 de ingresos tienen costes operativos detrás: el producto que vendiste tiene un coste de fabricación, de envío, de devolución, de soporte. Si tu margen bruto es del 40%, necesitas un ROAS de al menos 2,5 para cubrir los costes operativos (1 / 0,40 = 2,5). El ROAS mínimo rentable depende de tu margen, y cada negocio tiene el suyo.
### CAC: cuánto cuesta traer un cliente nuevo
CAC es Customer Acquisition Cost, el coste de adquisición de cliente. Se calcula dividiendo el gasto total de marketing en un periodo entre el número de clientes nuevos que adquiriste en ese mismo periodo. Si en enero gastaste 15.000 euros entre todos los canales y conseguiste 300 clientes nuevos, tu CAC es 15.000 / 300 = 50 euros por cliente.
La versión simple incluye solo el gasto en publicidad. La versión completa (que es la que quiere Finanzas) incluye también los salarios del equipo de marketing, las herramientas, la agencia, los freelances — todo lo que gastas para atraer clientes. Es la misma lógica pero con un numerador más honesto. Cuando alguien dice "nuestro CAC es de 30 euros", pregunta siempre: ¿solo medios, o coste completo?
El CAC por sí solo no dice mucho. Un CAC de 200 euros es carísimo para una app de recetas gratuita y es baratísimo para un software empresarial que cobra 2.000 euros al mes. El contexto es su compañero inseparable: el LTV (Lifetime Value), es decir, el valor total que ese cliente te genera a lo largo de su vida como cliente.
### La regla de oro: LTV mayor que 3 veces el CAC
La regla que se repite en todo venture capital, en toda startup y en toda entrevista de analista es: el LTV (valor de vida del cliente, es decir, el ingreso total que genera un cliente antes de darse de baja) debe ser al menos tres veces el CAC. Si te cuesta 50 euros traer un cliente, ese cliente debe generar al menos 150 euros a lo largo de su vida. ¿Por qué tres y no dos? Porque entre la adquisición y el ingreso hay costes operativos: servir al cliente, el producto, el soporte, las devoluciones. La regla del 3x deja margen para todo eso.
- LTV / CAC < 1: pierdes dinero con cada cliente que traes. Emergencia.
- LTV / CAC entre 1 y 3: sobrevives, pero no hay margen para crecer ni para error.
- LTV / CAC > 3: negocio sano. Puedes invertir más en adquisición porque cada cliente se paga de sobra.
- LTV / CAC > 5: probablemente estás gastando demasiado poco en marketing. Podrías crecer más rápido invirtiendo más agresivamente.
Consejo de senior: cuando presentes el CAC a un directivo, nunca lo presentes solo. Siempre acompáñalo del LTV y del ratio LTV/CAC. Un CAC de 200 euros asusta — pero si el LTV es de 1.800 euros, el ratio es 9x y el negocio es espectacular. El CAC sin LTV es un número que parece caro o barato según el humor de quien lo lee.
### Breve historia: de dónde viene la atribución
Antes de internet, la atribución era un misterio. La frase que todo el mundo atribuye a John Wanamaker —"la mitad del dinero que gasto en publicidad se desperdicia; el problema es que no sé cuál mitad"— definió un siglo entero de marketing. Tiene su gracia que nadie sepa a ciencia cierta quién la dijo: aparece impresa por primera vez a finales del siglo XIX sin firma, y se le empieza a atribuir a Wanamaker poco después. Ni la propia frase de la atribución está bien atribuida. Sabías cuánto gastabas en un anuncio de televisión, pero no sabías si el cliente que entró en tu tienda lo había visto. La radio, la prensa, las vallas: todo era gasto sin trazabilidad directa.
Internet cambió eso de raíz. Cuando un usuario hace clic en un anuncio, se registra exactamente qué anuncio, a qué hora, y si luego compró. La cookie de terceros (que está en extinción) permitió seguir al usuario por toda la web: ver qué anuncio de Facebook le mostró tu marca y qué búsqueda de Google lo trajo de vuelta. De repente la frase de Wanamaker tenía respuesta — o al menos, una versión de la respuesta que dependía del modelo que eligieras.
Hoy vivimos una tercera era: la de la privacidad. Con la desaparición de cookies de terceros, el bloqueo de rastreo en iOS 14+ y las regulaciones como el RGPD, reconstruir el recorrido completo del usuario es cada vez más difícil. Muchos touchpoints se pierden. Los modelos data-driven pierden datos. Y la atribución vuelve a ser parcialmente un misterio — pero un misterio que ahora se mide con modelos estadísticos en vez de con fe ciega. Como analista, vas a vivir en ese mundo intermedio: datos incompletos, modelos imperfectos, y directivos que quieren certeza.
### Calcularlo en SQL: las tablas que necesitas
Para calcular la atribución, el ROAS y el CAC necesitas al menos tres tablas: una de sesiones (cada visita de un usuario con su canal de origen), una de conversiones (quién compró, cuándo y cuánto gastó), y una de costes de campaña (cuánto gastaste en cada canal en cada periodo). Vamos a ver la estructura y luego a construir las queries.
### Ejemplo guiado: atribución last-click en SQL
Vamos a construir paso a paso la query de last-click. La lógica: para cada conversión, buscar la última sesión del usuario que ocurrió ANTES de (o el mismo día de) la conversión. El canal de esa sesión se lleva el 100% del crédito.
1-- Paso 1: Para cada conversion, encontrar la ultima sesion anterior2WITH ultima_sesion AS (3 SELECT4 c.conversion_id,5 c.user_id,6 c.revenue,7 s.channel,8 s.session_date,9 -- ROW_NUMBER = 1 es la sesion mas reciente antes de la conversion10 ROW_NUMBER() OVER (11 PARTITION BY c.conversion_id12 ORDER BY s.session_date DESC13 ) AS rn14 FROM conversiones c15 JOIN sesiones s16 ON s.user_id = c.user_id17 AND s.session_date <= c.conversion_date18)19-- Paso 2: Quedarse solo con la ultima (rn = 1) y sumar por canal20SELECT21 channel,22 COUNT(*) AS conversiones_atribuidas,23 ROUND(SUM(revenue), 2) AS ingresos_atribuidos24FROM ultima_sesion25WHERE rn = 126GROUP BY channel27ORDER BY ingresos_atribuidos DESC;
Last-click: ROW_NUMBER ordena las sesiones de más reciente a más antigua y se queda con la primera.
### Ejemplo guiado: atribución lineal en SQL
En el modelo lineal, cada touchpoint se lleva una fracción igual del crédito. Si un cliente tuvo 4 sesiones antes de comprar, cada sesión recibe 1/4 = 0,25 del ingreso. La query cambia en una sola cosa: en vez de quedarnos con la última sesión, contamos TODAS y dividimos el ingreso entre ellas.
1-- Atribucion lineal: repartir el ingreso entre todos los touchpoints2WITH touchpoints AS (3 SELECT4 c.conversion_id,5 c.revenue,6 s.channel,7 -- Contar cuantas sesiones tuvo ESTE usuario antes de ESTA conversion8 COUNT(*) OVER (PARTITION BY c.conversion_id) AS total_touchpoints9 FROM conversiones c10 JOIN sesiones s11 ON s.user_id = c.user_id12 AND s.session_date <= c.conversion_date13)14SELECT15 channel,16 ROUND(SUM(revenue / total_touchpoints), 2) AS ingresos_atribuidos,17 ROUND(SUM(1.0 / total_touchpoints), 2) AS conversiones_atribuidas18FROM touchpoints19GROUP BY channel20ORDER BY ingresos_atribuidos DESC;
Atribución lineal: revenue / total_touchpoints reparte el crédito equitativamente.
Consejo de senior: cuando presentes ambos modelos al CMO, no le digas cuál es "mejor". Ponlos en una tabla lado a lado y pregunta: "con last-click, email gana; con lineal, Google gana. ¿Qué pregunta estamos intentando responder?". Si quiere saber qué cierra ventas, mira last-click. Si quiere saber qué contribuye al recorrido completo, mira lineal. Tu trabajo no es elegir el modelo — es presentar la historia que cada uno cuenta y dejar que el negocio decida.
### Del ingreso atribuido al ROAS: unir con costes
Una vez que tienes los ingresos atribuidos por canal, calcular el ROAS es un JOIN con la tabla de costes. Divides los ingresos atribuidos entre el gasto de ese canal en el mismo periodo. La query es directa una vez que la atribución está hecha:
1-- ROAS por canal: ingresos atribuidos / gasto2WITH atribucion_last_click AS (3 -- (la query de last-click de antes, resumida)4 SELECT channel, SUM(revenue) AS ingresos_atribuidos5 FROM (6 SELECT c.conversion_id, c.revenue, s.channel,7 ROW_NUMBER() OVER (8 PARTITION BY c.conversion_id9 ORDER BY s.session_date DESC10 ) AS rn11 FROM conversiones c12 JOIN sesiones s ON s.user_id = c.user_id13 AND s.session_date <= c.conversion_date14 ) sub15 WHERE rn = 116 GROUP BY channel17)18SELECT19 a.channel,20 a.ingresos_atribuidos,21 co.spend AS gasto,22 ROUND(a.ingresos_atribuidos / co.spend, 2) AS roas23FROM atribucion_last_click a24JOIN costes_campana co ON co.channel = a.channel25ORDER BY roas DESC;
El ROAS es una división — toda la complejidad está en la atribución que va arriba.
### CAC en SQL: gasto total entre clientes nuevos
El CAC es más sencillo que el ROAS porque no necesita atribución: es una división global. Gasto total del periodo entre clientes nuevos del periodo. Pero si quieres CAC por canal (para saber qué canal trae clientes nuevos más baratos), entonces sí necesitas atribuir cada cliente nuevo a un canal — y volvemos a last-click o al modelo que elijas.
1-- CAC global del periodo2WITH gasto AS (3 SELECT SUM(spend) AS total4 FROM costes_campana5 WHERE month = '2024-03-01'::DATE6),7nuevos AS (8 SELECT COUNT(DISTINCT user_id) AS total9 FROM conversiones10 WHERE is_new_customer = TRUE11)12SELECT13 gasto.total AS gasto_total,14 nuevos.total AS clientes_nuevos,15 ROUND(gasto.total / nuevos.total, 2) AS cac_global16FROM gasto, nuevos;1718-- CAC por canal (requiere atribucion del cliente nuevo a un canal)19WITH nuevos_atribuidos AS (20 SELECT c.user_id, s.channel,21 ROW_NUMBER() OVER (22 PARTITION BY c.user_id23 ORDER BY s.session_date DESC24 ) AS rn25 FROM conversiones c26 JOIN sesiones s ON s.user_id = c.user_id27 AND s.session_date <= c.conversion_date28 WHERE c.is_new_customer = TRUE29)30SELECT31 na.channel,32 COUNT(*) AS clientes_nuevos,33 co.spend,34 ROUND(co.spend / COUNT(*), 2) AS cac_por_canal35FROM nuevos_atribuidos na36JOIN costes_campana co ON co.channel = na.channel37WHERE na.rn = 138GROUP BY na.channel, co.spend39ORDER BY cac_por_canal;
El CAC global no necesita atribución; el CAC por canal sí.
### Errores que hacen que tu atribución mienta
- 01.Contar la misma conversión en varios canales. Si no deduplicaste por conversion_id y el cliente tuvo 3 sesiones, sumas la conversión tres veces. El total atribuido supera al total real — y ya estamos en la reunión del principio, con 8.100 clientes atribuidos sobre 5.300 reales.
- 02.Ignorar el canal "directo". Cuando un usuario escribe tu URL directamente o usa un marcador, la sesión no tiene UTM ni referrer. Si lo excluyes de la atribución, los demás canales se llevan un crédito inflado. Directo es un canal legítimo: puede ser reconocimiento de marca, boca a boca, o un fallo del tracking.
- 03.Ventana de atribución infinita. Si no pones un límite temporal, una sesión de hace 6 meses "cuenta" para la compra de hoy. Normalmente se usa una ventana de 30 días: solo las sesiones de los 30 días anteriores a la conversión entran en el cálculo.
- 04.Comparar ROAS entre modelos sin decirlo. "El ROAS de Google bajó un 20% este mes" — pero resulta que este mes cambiaste de last-click a lineal. El ROAS no bajó: cambiaste la regla de cálculo. Siempre declara qué modelo estás usando.
- 05.CAC sin periodo alineado. Dividir el gasto de enero entre los clientes nuevos de febrero. El gasto y las conversiones deben estar en el mismo periodo, o el CAC no tiene sentido.
Esto te lo van a preguntar en la entrevista: "¿cómo calcularías la atribución si un usuario tiene sesiones en múltiples dispositivos?". La respuesta honesta es: con cookies de terceros desapareciendo, no siempre puedes unir el recorrido cross-device. Se necesita un user_id común (un login), o un modelo probabilístico que las plataformas ofrecen pero tú no puedes auditar. Reconocer la limitación es más valioso que fingir que tienes una solución perfecta.
### Juntando todo: la reunión con la CMO
Volvamos a la reunión del principio. La CMO quiere saber dónde meter el presupuesto del próximo trimestre. Tiene 20.000 euros para repartir entre Google, Facebook y email. Lo que tú le entregas es una tabla con tres columnas: canal, ROAS con last-click, ROAS con lineal. Y una fila extra con el CAC por canal y el ratio LTV/CAC. La tabla cuenta una historia completa: qué canal cierra ventas (last-click), qué canal contribuye al recorrido (lineal), cuánto cuesta cada cliente nuevo por canal (CAC), y si ese coste se justifica con lo que el cliente genera (LTV/CAC).
El email tiene un ROAS espectacular con last-click (es el canal de cierre). Google tiene un ROAS decente con ambos modelos (atrae Y cierra). Facebook tiene un ROAS bajo con last-click pero razonable con lineal (atrae pero no cierra). Tu recomendación: no cortar Facebook, porque es el motor de descubrimiento. Pero sí mover algo de presupuesto hacia Google, que trabaja en todo el embudo. Y mantener email con presupuesto bajo, porque su coste es mínimo y su ROAS es alto naturalmente.
Esa es la diferencia entre un analista que extrae datos y un analista que cambia decisiones. Los números son los mismos. La historia que cuentas con ellos es lo que vale.
### Resumen de técnicas SQL usadas
- ROW_NUMBER() OVER (PARTITION BY conversion_id ORDER BY session_date DESC): elegir la última sesión antes de la conversión (last-click).
- ROW_NUMBER() ... ORDER BY session_date ASC: elegir la primera sesión (first-click).
- COUNT(*) OVER (PARTITION BY conversion_id): contar touchpoints para el reparto lineal.
- SUM(revenue / total_touchpoints): repartir el ingreso equitativamente entre canales (lineal).
- JOIN con costes_campana por channel: unir la atribución con el gasto para calcular ROAS.
- COUNT(DISTINCT user_id) WHERE is_new_customer: contar clientes nuevos para el denominador del CAC.
- Ventana temporal (AND s.session_date >= c.conversion_date - INTERVAL 30 days): limitar la atribución a los últimos 30 días.
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...