Estamos habituados a oír cada vez más el término Marketing Mix Model (MMM), sin embargo, sigue habiendo muchas dudas sobre su aportación o cómo nos puede ayudar en nuestro día a día. Quienes están en el lado de la analítica de negocio tienen más o menos claro cuáles son sus beneficios aunque desconocen algunas de las limitaciones que puede llegar a acarrear. De igual manera, quienes están en el lado más técnico de los datos no consiguen llegar a percibir el potencial de este tipo de implementaciones. Pero, ¿quién tiene razón entonces? Ni unos, ni otros. Como casi cualquier proyecto o integración en una empresa hay que usarla con conocimiento de causa.
El MMM debe usarse como un complemento a otros análisis, tanto como punto de partida como para validar otros estudios más avanzados. Recordemos aquella máxima del MPV (Minimum Viable Product). A veces es mejor tener una base sobre la que comparar aunque no consigamos que sea perfectamente representativa de la realidad. No tenerla o que se extienda en el tiempo puede ser mucho más perjudicial en términos económicos. También es cierto, que basar todas las campañas de un negocio en un único modelo es cuanto menos realista. Por ello, mi recomendación siempre será usar este tipo de implementaciones teniendo en cuenta otras con las que poder comparar o incluso poder vincular.
Un ejemplo claro y cada vez más habitual, es el uso de los MMM en conjunción con otros desarrollos centrados en el comportamiento «individualizado» de los usuarios como puede ser el método de atribución de Markov’s chain (modelo probabilístico) y el cual es de gran utilidad para entender qué canales son los que convierten. Evidentemente, al igual que el MMM tiene algunos problemas que muchas veces no se tienen en cuenta y que en el ámbito digital a día de hoy son «el pan de cada día»: ausencia de trazas para touch-points, navegación multidispositivo correcta, limitaciones de privacidad, etc. En cualquier caso y debido a su gran utilidad y uso extendido, seguramente hablaré largo y tendido sobre él en posteriores artículos de este Blog. En concreto sobre la posibilidad de utilizar conjuntamente ambas implementaciones.
Con esto simplemente quiero hacer hincapié en la necesidad de tener varios modelos integrados puesto que, tanto al crear uno estadísticamente personalizado para el negocio como al basarse en un framework/librería ya implementada como puede ser Robyn, se pueden cometer errores de base que pueden dar al traste con los resultados finales. No debemos olvidarnos que cualquier configuración o cálculo erróneo, así como una mala comprensión de los requerimientos de negocio pueden dar al traste con cualquier proyecto de este tipo.
Qué es el Marketing Mix Model
Es un proceso estadístico basado en diferentes tipos de análisis de regresión y el cual permite estimar el impacto de nuestras campañas a través de la observación de los diferentes canales de tráfico, teniendo en cuenta siempre la importancia del histórico de los datos ya existentes. Esencialmente se trata de obtener cuál es el aporte y la eficiencia de cada uno de ellos según sus inversiones (gasto). Es un término que desde que fue usado por primera vez en 1949 por Neil Borden ha sufrido numerosas interpretaciones y como consecuencia de ello infinidad de actualizaciones.
En este sentido, existen numerosos desarrollos MMM aunque seguramente el que más fama está cogiendo en los últimos tiempos sea el creado (proyecto open-source) por Meta, el denominado como Robyn. El cual básicamente intenta dar una respuesta a la pregunta de en qué canal y en qué cantidad se debe realizar el esfuerzo económico de una empresa, es decir, cómo distribuir el gasto publicitario para generar mayores beneficios.
Antiguo paradigma | Nuevo paradigma |
---|---|
Modelización manual | Selección automatizada de hiperparámetros |
Modelos estáticos multi-year | Modelos actualizados dinámica y frecuentemente |
Problemas de Multicolinearidad y sobreoajuste (overfitting) | Regresión de Ridge y Regularización |
Estacionalidad manual y variables dummy | Estacionalidad y tendencia modelada (Prophet) |
Solo validación estadística | Validación y calibrado con experimentación |
En este sentido, lo primero que hay que saber sobre este proyecto es la existencia y diferenciación existente entre las variables de pago y las orgánicas, siendo estas últimas las relacionadas con canales a los que no se le atribuyen gastos publicitarios directos.

Variables orgánicas permitidas para definir canales no de pago
Además, existe un «cajón de sastre» denominado variables de contexto que permiten detallar más aún características concretas como puede ser la necesidad de diferenciar entre días de vacaciones o eventos a la hora de tenerlas en cuenta en el modelado de las series temporales que se generarán a través de Prophet (es necesario leer este artículo al completo para comprenderlo).
Por otro lado y siguiendo con las características generales de Robyn, es primordial detallar sus principales beneficios. Es la forma más fácil para entender cómo nos puede ayudar a impulsar cualquier negocio digital:
- Minimizar el sesgo humano e incrementar la precisión.
- Evidencia empírica a través de los datos.
- Toma de decisiones fácilmente accionables.
Minimizar el sesgo humano e incrementar la precisión
Para ello, Robyn utiliza varias características y procesos que se pueden resumir tal que:
- Valores automáticos de las curvas de saturación y adStock. Se usa para ello la optimización automática de hiperparámetros multi-objetive con un algoritmo evolutivo que permita minimizar el error del modelo final y el de calibración así como reducir la distancia de descomposición.
- Regresión de Ridge y Regularización. Este tipo de técnicas unido a las particularidades del análisis de regresión de Ridge permiten reducir los problemas derivados de la multicolinealidad en variables independientes o lo que es lo mismo, que no existe una correlación insalvable entre variables explicativas. Además, previenen de que surjan errores de overfitting que dificulten el aprendizaje, la precisión y el rendimiento.
- Descomposición estacional. Para ello, Robyn usa la librería open-source Prophet. Esta se usa para predecir series temporales a través de la descomposición de la tendencia y la estacionalidad de las variables estudiadas (inputs).

Pareto Front para seleccionar el modelo más óptimo en Robyn y Descomposición de series temporales con Prophet
Evidencia empírica a través de los datos
Se pueden llevar a cabo experimentos o realizar ensayos de control aleatorios (RCT, Randomized Control Trials) con la intención de combinarlos con los distintos modelos del MMM y así producir resultados cercanos a la práctica. En torno a esto podemos detallar la utilización de las siguientes técnicas y baremos:
- Error de porcentaje medio absoluto (MAPE). Detalla la diferencia porcentual entre los resultados experimentales y el KPI a predecir (por ejemplo, nº de transacciones por cada canal), se utiliza como error de calibración.
- Función objetivo adicional para la optimización de hiperparámetros. El modelo de Robyn se calibra minimizando el error entre los resultados previstos del MMM y los actuales para el canal y el período de tiempo dados.
- Mayor peso para los datos empíricos para la optimización de Pareto. Como los experimentos proporcionan datos empíricos, Robyn aplica un peso más fuerte a la calibración MAPE con la intención de garantizar resultados más cercanos al experimento.
Toma de decisiones fácilmente accionables
Una de las funciones más útiles de Robyn es la posibilidad de tomar decisiones ágiles para cualquier negocio. Aún y todo es necesario reiterar la necesidad de tener en cuenta otras implementaciones que ayuden a elegir los mejores resultados.
- Budget allocator. Robyn usa un NLS (small non-linear solver) que permite restricciones iguales y desiguales y lo ayuda a definir la asignación presupuestaria óptima para los próximos ciclos.
- Ley de los rendimientos decrecientes. El modelo muestra las curvas para cada canal con el objetivo de poder observar los puntos de inflexión y el lugar óptimo para la inversión. El budget allocator trata de maximizar el rendimiento de cada canal recorriendo las curvas reduciendo y aumentando la inversión.

Budget allocator y Rendimientos decrecientes por canal
La teoría de los rendimientos decrecientes sostiene que cada unidad adicional de publicidad aumenta la respuesta, pero a un ritmo decreciente. Este principio clave de marketing se refleja en los MMM como una transformación variable. Entonces, a medida que aumenta el gasto, la respuesta cambia y, según la curva, entendemos cuál es la respuesta marginal. Estas curvas son extremadamente útiles en las etapas finales de MMM, donde buscamos comprender cómo podemos asignar presupuestos de manera más óptima entre todos nuestros canales de medios.
En el caso de Robyn, para poder controlar la saturación se debe configurar la función Hill, la cual es una función de 2 parámetros Alpha (controla la forma de la curva) y Gamma (controla el punto de inflexión). Por lo tanto, cuanto mayor es Alpha, la forma de la curva será más cercana a una ‘S’ y el punto de inflexión se mostrará más tarde; y por el contrario, cuanto menor es Alpha su forma se aproximará a la de una letra ‘C’. Se suele recomendar una configuración inicial tal que c(0.3, 1).

Reducción de los rendimientos o saturación de las curvas en Robyn
Adstock rates
Los efectos de la publicidad tienden a retrasarse y decaer en el tiempo tras una exposición inicial. Debido a que dependerá de casuístcas como el reconocimiento de marca o el recuerdo que genere el anuncio, las configuraciones iniciales tendrán que llevarse a cabo en base a la experiencia de negocio previa con respecto a la puesta en marcha de campañas publicitarias. Lógicamente, de este conocimiento dependerán los resultados finales los cuales seguramente deberán optimizarse a lo largo del tiempo. Hay varias tipos de adstock a seleccionar:
- Geométrico. Curva exponencial decreciente (1 parámetro).
- Weibull function. Similar a la anterior pero teniendo en cuenta tasas de descomposición que varían a lo largo del tiempo (decaimiento flexible) y dos tipos de parámetros: Forma y Escala. En comparación con la opción Geométrica cuya tasa de decaimiento es fija, ésta es flexible.
- CDF. En la función de distribución acumulativa (Cumulative Distribution Function), el parámetro Forma controla la forma de la curva de caída. El límite recomendado suele ser c(0.0001, 2). Cuanto más grande es la forma, más parecida a la letra S y cuanto más pequeña, más forma de L. Para el parámetro Escala se recomienda c(0, 0.1), ya que este parámetro puede alargar ampliamente la vida del Adstock.
- PDF. La función de densidad de probabilidad (Probability Density Function) de Weibull es similar a la anterior con la diferencia de que ofrece un efecto de retardo. Por defecto, se recomienda para la Forma c(0.0001, 10), a no ser que interese un efecto de retardo fuerte, en cuyo caso se recomienda c(2.0001, 10). En ambos casos, para la Escala sería c(0, 0,1).

Opciones posibles de Adstock
Por último antes de terminar, ya solo falta poner en práctica toda la teoría previamente explicada y para ello nada mejor que hacerlo a través de este caso práctico de Robyn en el Github de Facebook.
Puede que te encuentres algún problema a la hora de ejecutar el código, sin embargo y en base a mi experiencia aplicando este MMM en diversos proyectos, puedo resumir los puntos de fricción en:
- Versión de R o Python antigua > packageVersion(«Robyn«) [Línea 27]
- Uso multi-core > Sys.setenv(R_FUTURE_FORK_ENABLE = «true«) … [Línea 32 y 33]
- Necesidad de instalar Nevergrad > Debe hacerse previo a la instalación de Robyn. Es una librería Python que puede usarse también en R a través de la librería Reticulate, la cual puede generar un entorno virtual (r-reticulate) en el que usarla. Su función principal es servir como plataforma de optimización gradient-free ajustando parámetros e hiperparámetros de la mejor manera posible.
- Almacenamiento de los modelos > Tanto las especificaciones de los modelos creados como las de las actualizaciones se guardan en ficheros json con rutas concretas.
install.packages("reticulate") library(reticulate)
virtualenv_create("r-reticulate") py_install("nevergrad", pip = TRUE) use_virtualenv("r-reticulate", required = TRUE) library(Robyn) packageVersion("Robyn") Sys.setenv(R_FUTURE_FORK_ENABLE = "true") options(future.fork.enable = TRUE) create_files <- TRUE # Resto del código de la práctica...
Espero que este artículo te haya servido al menos de inspiración y que te sea de gran utilidad en tus próximos proyectos. Si quieres seguir aprendiendo sobre este tipo de implementaciones de Analítica avanzada o saber más en torno al Marketing Digital, te invito a que visites el resto de artículos de mi Blog. ¡Seguro que no te defraudarán! ¡Hasta el próximo artículo!