Desde hace tiempo, me encuentro una y otra vez con la misma inquietud, tanto en agencias como en clientes: ¿Cómo atribuir correctamente las conversiones? O cómo justificar que ciertos tipos de campañas son importantes en el proceso aunque no reporten conversiones directas.
Ya vimos por aquí en un post anterior que las plataformas publicitarias miden de manera diferente, y este es uno de los problemas fundamentales en esta historia. Si cada cual funciona bajo un modelo de atribución distinto, no son comparables. Y aunque tanto Google como Meta están haciendo esfuerzos por generar métricas para que algunos tipos de campañas puedan compararse entre sí, no es más que poner un parche en un problema que es sistémico y al que le faltan toneladas de pedagogía.
El objetivo de este post es presentar una herramienta desarrollada precisamente para dar luz sobre este tema y que ayude a entender el customer journey y a ser capaces de justificar nuestra estrategia publicitaria. (Sí, la DemandGen convierte y vamos a ver cómo).
Arremánguense que vamos al lío.
El problema que intentamos resolver
Recordemos brevemente el dilema: cada plataforma (Google Analytics, Google Ads, Meta Ads, etc) tiene un modelo de atribución diferente: mientras que Meta utiliza un modelo tradicional de last clic en el que tiene en cuenta las visualizaciones de los anuncios, Google usa lo que llama “basado en datos” que funciona como una caja negra basándose en el número de contactos con la web y asigna la conversión de manera proporcional a su contribución en ella. Decir esto y no decir nada es más o menos lo mismo.
Si has llegado hasta aquí, probablemente ya sabes que no existe una solución perfecta o definitiva para resolver el dilema de la atribución, pero hoy quiero compartir una herramienta que puede acercarnos a una comprensión más profunda y práctica: un modelo de atribución basado en cadenas de Markov.
Mi objetivo es que cualquiera, incluso aunque jamás se haya acercado a un código de programación, pueda usar la herramienta. Se puede ejecutar en un Colab con lo que no necesitas descargar nada ni aprender nada más que dos cosas básicas de funcionamiento del Colab: cómo se cargan archivos desde Drive y como ejecutar el código. El script está preparado para avisarte si cometes algunos de los errores comunes así que piérdele el miedo al código y empieza a trastear con él. Al final de este artículo encontrarás el enlace al Github.
Cadenas de Markov: Un enfoque probabilístico para la atribución
Las cadenas de Markov son un modelo matemático utilizado para representar procesos estocásticos, es decir, procesos aleatorios en los que la probabilidad de un evento futuro depende únicamente del estado presente, independientemente de la secuencia de eventos pasados que llevaron a ese estado. Estas cadenas deben su nombre al matemático ruso Andrey Markov (1856-1922), quien desarrolló este concepto a principios del siglo XX como parte de su trabajo en teoría de probabilidad. Markov estaba interesado en sistemas donde los eventos futuros dependen sólo del estado actual y no de la secuencia de eventos que precedieron a ese estado.
Vamos a verlo con un ejemplo y una aplicación, que se entenderá mejor.
Un ejemplo clásico es la meteorología. El tiempo que va a hacer mañana no es completamente aleatorio, tiene relación con el que hace hoy.
Una aplicación de las cadenas de Markov son los sistemas de recomendaciones tipo Netflix o Spotify donde te recomiendan la siguiente canción en función de lo que estás escuchando.
Aplicado al marketing digital, la ruta que sigue un usuario a lo largo de los puntos de contacto con la web hasta que convierte se puede entender como un proceso estocástico. Un usuario puede entrar por una campaña de DemandGen, luego por una de Meta orientada al upper funnel, luego por una de marca, después por una PMax y finalmente convertir. Este proceso es aleatorio pero como disponemos de la información de las rutas que siguen los usuarios para realizar la compra, podemos establecer las probabilidades de cada paso en la ruta y es aquí donde utilizamos a Markov.
Análisis de la atribución de marketing con Cadenas de Markov
En este texto quiero presentar una herramienta que he desarrollado basada en el modelo de las Cadenas de Markov capaz de dar sentido al dilema de la atribución. Este modelo no resuelve al 100% esta situación, ya que toma los datos del informe de rutas de atribución de Google Analytics 4 o de Google Ads con el sesgo que eso implica pero ofrece una información muy valiosa para entender cómo fluyen los usuarios a través de las diferentes campañas interactuando entre sí y con otros canales existentes dentro del mix de campañas o el mix de canales en la estrategia de marketing.
Esta herramienta tiene las siguientes particularidades:
- Considera el recorrido completo del usuario evaluando todas las interacciones que llevaron a la conversión.
- Combina diferentes enfoques: Esta propuesta integra tres modelos, el efecto de eliminación (removal effect), el primer clic (first touch) y un método «balanced» que integra tanto el efecto de eliminación como el de primer contacto en una proporción 40%/60%. Esta proporción está pensada para darle mayor peso a los canales de entrada, tradicionalmente minusvalorados por GA4.
- Incluye un proceso de convergencia: Al probar distintos números de iteraciones, comprobamos cuándo los resultados dejan de cambiar significativamente entre dos ejecuciones con diferente número de iteraciones, buscando un equilibrio entre estabilidad y tiempo de espera.
- Visualización: El diagrama Sankey muestra de manera intuitiva cómo fluyen los usuarios entre los diferentes canales antes de convertir y te permite identificar visualmente campañas como DemandGen cuya participación se circunscribe al upper funnel y la atribución que le adjudican es muy pobre, sin embargo es el punto de contacto de muchos clientes y por tanto, en un entorno tan saturado, una de las maneras de crecer.
Para implementar este modelo con tus propios datos, necesitarás un CSV con las columnas ‘path’ y ‘conversions’, donde ‘path’ contiene la secuencia de campañas o canales separados por el separador (por defecto ‘ > ‘) y ‘conversions’ que indica el número de conversiones para cada ruta.
Estos datos los puedes encontrar en el informe de rutas de atribución de GA4 que se encuentra en la sección de publicidad. Google Ads también tiene su apartado de rutas de atribución en la sección de objetivos y por supuesto, se puede obtener de BigQuery. En el repositorio de GitHub he incluido un csv de prueba para que pruebes el script de inmediato.
Implementación práctica
El algoritmo desarrollado sigue estos pasos:
- Carga y procesamiento de datos: Como en todo trabajo de análisis de datos esta es la parte más importante. Antes de descargar los datos debemos saber qué tipo de información estamos buscando y como agrupar los datos. Yo lo aplico para analizar la estrategia publicitaria y cómo interactúan las diferentes campañas con el tráfico directo, orgánico y el email marketing. Para esto me descargo el archivo con las rutas de conversión filtradas por campañas y hago un procesado inicial de la información obtenida buscando la granularidad óptima de la información. Por ejemplo, si el objetivo es analizar cómo impactan las campañas de publicidad no es necesario tener 20 campañas de email marketing. Y por supuesto, es muy importante que el tráfico esté bien etiquetado así que revisa bien que las UTMs de todos tus links incluyan el valor de campaña.
- Creación de la matriz de transición y simulación Monte Carlo: El modelo construye una matriz que representa las probabilidades de que un usuario se mueva de una campaña o canal de marketing a otro a lo largo de su recorrido. Utilizando simulaciones Monte Carlo, el algoritmo genera miles de caminos aleatorios siguiendo estas probabilidades para estimar con precisión la tasa de conversión base del sistema completo. Esta simulación estadística captura tanto los patrones directos como las interacciones complejas entre canales.
- Cálculo de efectos: Para cada canal o campaña, se obtiene:
- El efecto de eliminarlo (¿Cuánto disminuye la probabilidad de conversión?).
- La importancia del canal como primer punto de contacto.
- Combinación ponderada: aplicamos la fórmula 60/40 para obtener la atribución final.
- Análisis de convergencia: Ejecutamos el modelo con diferentes números de iteraciones y verificamos la estabilidad de los resultados.
- Visualización del flujo de usuarios: obtendremos el diagrama Sankey donde podremos ver cómo fluyen los usuarios entre canales de tráfico y campañas y la descarga de los resultados obtenidos para el posterior análisis.
Interpretación de los resultados
El modelo de atribución basado en Cadenas de Markov va a generar un archivo csv con los resultados de los modelos de atribución por cada canal o campaña que hayamos incorporado. A continuación explico cómo interpretar cada métrica:
Atribución (%)
Esta métrica representa el porcentaje de participación que otorga el modelo a cada punto de contacto. La métrica está calculada bajo el modelo “balanced” que da un 40% al modelo de “first touch” y un 60% al modelo “removal effect”.
Esta es la parte más controvertida de la propuesta ya que la decisión de otorgar el 40/60 se fundamenta en el objetivo de darle más relevancia a campañas provenientes de canales de display como Meta o TikTok que son tradicionalmente infravalorados por Google Analytics. Es la parte más abierta a debate del modelo ya que el propio Markov tiene en cuenta los puntos intermedios de las rutas y por tanto también incluye los puntos iniciales pero aquí mi idea es sobrevalorar el primer contacto ya que va a provenir en un porcentaje importante de redes sociales. La contribución del anuncio post visualización es importante en la atribución de la conversión. Este efecto, que sí tienen en cuenta las plataformas como TikTok Ads o Meta Ads, Google Analytics 4 no lo puede medir y este es uno de los puntos de fricción del dilema de la atribución.
Apariciones
Indica el número de veces que un canal aparece en las rutas de conversión. Un alto número de apariciones sugiere que el canal tiene una presencia constante en el recorrido del cliente.
Removal Effect (%)
Esta es quizás la métrica más importante del análisis. El Removal Effect presenta el porcentaje de conversiones que se perderían si se eliminara completamente un canal o campaña específica y es la característica principal del modelo de Markov. La interpretación según los valores sería:
- Valores altos: Un canal con un valor de removal effect alto indica que es crucial en el proceso de conversión. Si este canal se eliminara, la probabilidad de conversión disminuiría significativamente.
- Valores medianos: Estos canales tienen una influencia moderada en las conversiones. Son importantes pero no críticos.
- Valores bajos: Estos canales tienen poca influencia en el proceso de conversión. Su eliminación apenas afectaría la probabilidad de conversión.
- Removal Effect nulo: Sugiere que si este canal fuera eliminado, las conversiones se mantendrían, probablemente redirigidas a través de otros canales. Esto puede indicar:
- Redundancia funcional: Otros canales pueden cumplir el mismo rol en el recorrido del cliente.
- Canal de apoyo: Aunque participa en el proceso, no es determinante para que ocurra la conversión final.
- Eficiencia del ecosistema: El ecosistema de marketing es lo suficientemente robusto para compensar la ausencia de este canal.
First Touch (%)
Representa el porcentaje de veces que un canal funciona como primer punto de contacto en el recorrido del cliente. Un valor alto sugiere que el canal es efectivo para la captación inicial y generación de conciencia de marca. Esto es importante para valorar aquellas campañas que por sí solas no van a generar conversiones directas, pero son fundamentales en la captación de tráfico frío. Aquí es donde vamos a ver las campañas de alta intencionalidad de Meta Ads o las de DemandGen que muy probablemente no estén consiguiendo conversiones o si lo hacen, su rentabilidad sea muy baja, pero gracias al diagrama Sankey y a esta tabla podemos justificar que son muy importantes en la adquisición de tráfico frio y por tanto en el crecimiento del negocio.
Análisis de estabilidad
Los modelos matemáticos tienen que demostrar estabilidad para que podamos fiarnos de la solución que ofrecen. La estabilidad de este modelo va a depender de la selección del número de iteraciones en el Monte Carlo, de la decisión de cómo agrupar los datos en el proceso de análisis exploratorio de datos y de la diferencia de valores entre diferentes iteraciones.
Cuando entre dos ejecuciones consecutivas con diferentes números de iteraciones el valor de la diferencia entre los resultados queda por debajo del 10%, asumo que el modelo ha convergido y las soluciones son estables y confiables.
El conjunto de gráficos que ofrece este modelo son:
1. Tiempo de ejecución vs. Iteraciones
Este gráfico muestra cómo varía el tiempo de ejecución del modelo en función del número de iteraciones realizadas. En el eje X se representa el número de iteraciones y en el eje Y, el tiempo total que tarda el proceso en completarse, medido en segundos. Si el algoritmo es estable el tiempo debe crecer de manera más o menos lineal.
2. Probabilidad de conversión vs. Iteraciones
Este gráfico presenta cómo cambia la probabilidad de conversión estimada conforme se incrementa el número de iteraciones. El eje X corresponde al número de iteraciones, mientras que el eje Y muestra la probabilidad calculada de conversión por el modelo.
3. Canales con atribución > 0 vs. Iteraciones
Aquí se muestra el número de canales que reciben una atribución positiva (es decir, una participación mayor que cero en las conversiones) según el número de iteraciones. El eje X representa las iteraciones y el eje Y el número de canales con atribución asignada.
4. Diferencia % en top 10 canales
Este gráfico muestra el porcentaje de diferencia promedio en las atribuciones de los 10 canales principales entre ejecuciones consecutivas con diferentes números de iteraciones. En el eje X se representan los rangos de comparación entre iteraciones y en el eje Y se muestra la diferencia porcentual promedio en la atribución.
Os muestro un caso práctico.
El modelo va a funcionar y converger antes cuantos menos canales o campañas tengamos, así que hago correr el modelo de varias maneras, con todas las campañas y luego agrupadas por tipología. Así puedo saber si aquellas que aparentemente no convierten están participando de la conversión y de qué manera.
Voy haciendo correr el modelo al principio con 5 pasos empezando por pocas iteraciones: 25.000, 50.000, 75.000 y 100.000, a ver qué progresión tiene. El objetivo, como comentaba anteriormente es lograr estabilidad en la respuesta para poder asumirla como correcta y para eso me fijo en el gráfico de diferencia en top 10% de canales. Cuando el gráfico muestra una diferencia menor del 10% asumo las soluciones como estables.

Gráfico Sankey
El gráfico Sankey interactivo aporta una visualización gráfica de la interacción de las campañas entre sí y con otros canales de tráfico.
Uno de los objetivos que buscaba cuando pensé en este script es que me sirviera para justificar el uso de tipologías de campañas que tienen un rendimiento muy bajo pero aportan tráfico, amplían la base de audiencias y lo más importante, participan en la conversión atrayendo tráfico que de otra manera no habría llegado. Con el gráfico Sankey interactivo puedes apoyar toda tu argumentación en este sentido y además entender cómo se comunican las campañas entre sí, entre plataformas y con otro tipo de canales. (A los SEOs les encantará ver como el canal orgánico es fundamental en la conversión).
Insights estratégicos
Al analizar de manera holística los resultados podemos extraer varias conclusiones estratégicas:
- Canales con alta atribución pero bajo removal effect pueden estar recibiendo más crédito del merecido. Son participantes frecuentes pero potencialmente sustituibles en el proceso de conversión.
- Canales con baja atribución pero alto removal effect merecen mayor atención e inversión, ya que están jugando un rol crucial que no es completamente reconocido.
- Canales con Removal Effect cero requieren una evaluación más profunda para analizar si se están duplicando esfuerzos de otros canales más efectivos, si su presencia es necesaria como apoyo aunque no influyan directamente en la conversión final o si podrían estos recursos redirigirse a canales con mayor impacto.
Esta interpretación multidimensional nos permite ir más allá de la simple atribución y comprender la verdadera dinámica del recorrido del cliente hacia la conversión.
Conclusiones: Un paso adelante en la atribución
Si bien este modelo no resuelve completamente el dilema de la atribución (para eso existen los modelos MMM como Robyn o Meridian), proporciona una perspectiva mucho más rica y nos permite entender cómo interactúan las diferentes campañas y canales en el customer journey y justificar decisiones estratégicas.
Te dejo el link al Colab para que puedas probarlo con tus datos o con los datos de prueba que encontrarás en el mismo repositorio: