Entropy
ENEmpieza en EPYC
← Laboratorio

Robyn a fondo: lo que puede y lo que no puede decirte

Probamos Robyn en 60 negocios sintéticos donde conocemos el retorno real de cada canal. Sin calibrar, sus planes no fueron mejores que no hacer nada. Con cinco geolifts, decidió tan bien como PyMC-Marketing y Meridian.

Entropy Labs · 14 min de lectura
En este artículo
  1. Cómo lo probamos
  2. Cómo funciona Robyn
  3. Python o R: corrimos ambos y nos quedamos con R
  4. Sin calibrar, Robyn sobreestima los medios
  5. La calibración es lo que vuelve útil a Robyn
  6. Coeficientes fijos: Robyn promedia el canal en el tiempo
  7. Un mundo aditivo: los medios se suman a la base, nunca escalan con ella
  8. Qué puede y qué no puede decir esta evaluación
  9. Si usas Robyn

Robyn es uno de los MMM de código abierto más usados, y suele ser el primero que un equipo instala. Lo probamos en 60 negocios sintéticos donde conocemos el retorno real de cada canal, y le hicimos una sola pregunta: si mueves el presupuesto como dice Robyn, ¿vendes más?

Sin calibrar, no de forma confiable. En nuestro mundo real, seguir el ranking de Robyn capturó prácticamente nada de la ganancia disponible, y en la mitad de los negocios perdió ventas contra dejar el presupuesto como estaba. Con cinco geolifts, Robyn tomó decisiones tan buenas como PyMC-Marketing y Meridian con los mismos cinco lifts, y tuvo el menor sesgo de los tres.

El resto de este texto cubre cómo funciona Robyn, qué versión correr, por qué la calibración pesa tanto, y dos supuestos que Robyn hace sobre el mundo y que ningún ajuste elimina: coeficientes fijos y una respuesta aditiva.

Cómo lo probamos

Construimos tres mundos sintéticos con 20 negocios cada uno. Cada negocio tiene entre 3 y 20 canales de medios, dos o tres años de datos semanales, precios, promociones y su propio margen. Como nosotros generamos las ventas, conocemos el retorno real de cada canal y el presupuesto que maximiza las ventas.

MundoCanalesSemanasQué lo hace difícil
Laboratorio limpio3 a 5156Nada. La inversión no depende de la demanda; poco ruido.
Mundo real5 a 10104Los planners suben la inversión cuando la demanda ya viene; los canales se mueven juntos; promociones y competidores cambian qué tan bien funcionan los medios.
Adversarial10 a 20104Los mismos problemas, más fuertes, y además cambios estructurales.

En los mundos difíciles, la inversión en medios se mueve con la demanda

r = correlación de la inversión semanal con la demanda. Entre más alta, más difícil saber qué causaron los medios.

Demanda (ventas sin medios)Inversión en mediosLaboratorio limpioLa inversión ignora la demandar = -0.03Mundo realLa inversión sigue a la demandar = 0.77AdversarialMás pegada, más ruido, un quiebrer = 0.92Quiebre estructuralSemana 1Semana 52Semana 104
Serie ilustrativa, no del benchmark: un negocio por mundo, 104 semanas, demanda e inversión en índice 10 a 95

Lo que cambia de un mundo a otro es qué tan de cerca sigue la inversión a la demanda. En el laboratorio limpio, la inversión se mueve con su propio calendario, así que un modelo puede ver lo que aportan los medios. En los otros dos, la inversión sube cuando sube la demanda, y en el mundo adversarial un quiebre además mueve ambas al mismo tiempo.

Calificamos cada modelo con un índice de arrepentimiento. Tomamos el ranking de canales del modelo, movemos hasta 30% del presupuesto de sus peores canales a los mejores (con el mismo presupuesto total) y simulamos las ventas. Un índice de 0 significa que el plan del modelo capturó toda la ganancia disponible; 1 significa que le fue igual que no mover nada; arriba de 1, seguir al modelo hizo perder ventas. Reportamos la mediana de los 20 negocios de cada mundo. También reportamos el sesgo, el error relativo promedio del ROAS de cada canal, contra un límite de ±30%.

El índice de arrepentimiento: cuánto de la ganancia posible deja un plan en la mesa

Negocio ilustrativo. Cada plan mueve hasta 30% del presupuesto, mismo total. Barras = ventas contra no mover nada.

CapturadaÍndicePlan con el ROAS verdadero+10%100%0.00Plan del modelo A+6%60%0.40Dejar el presupuesto igual0%0%1.00Plan del modelo B-3%-30%1.30arrepentimientosin cambio (índice 1)toda la ganancia (índice 0)
Números ilustrativos · índice = (mejor ganancia − ganancia del plan) ÷ mejor ganancia; arriba de 1, seguir al modelo perdió ventas

El índice se lee como la parte de las ventas incrementales disponibles que un plan deja de capturar. El plan del modelo A obtiene 6 de los 10 puntos disponibles, así que deja 40% en la mesa: índice 0.40. El plan del modelo B vende menos que no hacer nada, así que su índice queda arriba de 1.

Los mundos son sintéticos a propósito. Un negocio real nunca te dice su ROAS verdadero; un conjunto de datos real puede decirte qué modelo reproduce mejor la historia, pero no cuál da la respuesta correcta.

Cómo funciona Robyn

Robyn no ajusta un modelo. Ajusta miles y luego escoge uno. Cada candidato transforma la inversión con un adstock (arrastre) y una curva de saturación, y luego ajusta una regresión ridge de las ventas sobre los medios transformados, una tendencia y estacionalidad de Prophet, y tus variables de contexto. Una búsqueda evolutiva (Nevergrad) propone los parámetros de transformación; cada candidato se califica con dos objetivos: qué tan bien reproduce la historia (NRMSE) y qué tan lejos está su reparto de medios del reparto de la inversión (DECOMP.RSSD). Con pruebas de lift se suma un tercer objetivo: qué tan lejos están los efectos de cada canal de los lifts medidos (MAPE.LIFT).

Robyn ajusta miles de modelos candidatos, los califica y se queda con uno

Cada candidato es una elección de parámetros de adstock y saturación; los lifts solo agregan un puntaje

Inversiónsemanal, por canalAdstockarrastre de lainversión pasadaSaturaciónrendimientosdecrecientes (Hill)Regresión ridgemedios + tendencia yestación + contextoUn modeloelegido por unanalista o una reglaClustersmodelos parecidosagrupadosFrente de Paretomejores balancesentre puntajesCalificar cada unoajuste: NRMSEreparto: DECOMP.RSSDse repite miles de veces;Nevergrad propone nuevos parámetrosPruebas de liftagregan MAPE.LIFTOpcional. Un tercer puntaje que ordenacandidatos ajustados sin los lifts.
El ciclo de Robyn, como lo configuramos en este estudio

De este diseño salen dos consecuencias. Primero, la respuesta depende de cómo eliges entre candidatos, un paso que la mayoría de los usuarios hace a ojo sobre los one-pagers de Robyn. Segundo, en Robyn las pruebas de lift son un filtro sobre qué candidato gana, no una restricción dentro del ajuste. Ese segundo punto explica casi todo lo que pasa en el mundo adversarial.

Python o R: corrimos ambos y nos quedamos con R

Empezamos con robynpy 0.3.6, la versión en Python, porque el resto de nuestro stack está en Python. Antes de confiar en cualquier número, la revisamos línea por línea contra Robyn en R, y encontramos un problema que es de la versión en Python y tres que eran de nuestra configuración. La tabla compara la versión en Python como la corrimos al inicio con Robyn en R como lo corrimos en el estudio.

Diferenciarobynpy 0.3.6Robyn en RDe quién
CalibraciónNo implementada: MAPE.LIFT está fijo en 0 y el calibrador nunca se llamaNativa; MAPE.LIFT es un tercer objetivoDe la versión en Python
Tendencia y estacionalidadApagadasTendencia y estacionalidad de ProphetNuestra
Signo de mediosSin restricción; 7% de los canales salió negativoPositivo (default de R)Nuestra
Búsqueda y selección3 corridas × 1,000 iteraciones; primera solución de Pareto5 corridas × 2,000 iteraciones; mejor representante de cluster en NRMSE + DECOMP.RSSD (+ MAPE.LIFT)Nuestra

La de calibración es la que más pesa. En robynpy 0.3.6, pasarle pruebas de lift al modelo no cambia nada; cualquier corrida "calibrada" de Robyn en Python, en realidad, no está calibrada. El propio equipo de Robyn en Meta ha dicho que la versión en Python no está lista para uso en producción; por ahora, usa R.

Solo agregar Prophet movió mucho a la versión en Python: en el mundo real, su índice de arrepentimiento pasó de 1.21 a 0.84. Todos los números de Robyn a partir de aquí vienen del paquete oficial en R (CRAN), con Prophet, signo positivo y calibración nativa, corrido sobre los mismos 60 negocios que los otros modelos.

Sin calibrar, Robyn sobreestima los medios

Sin pruebas de lift, a Robyn solo le fue bien donde nada es difícil. En el laboratorio limpio, su índice de arrepentimiento mediano fue 0.34. En el mundo real fue 1.02: su plan no hizo nada mejor que dejar el presupuesto como estaba, y perdió ventas en 50% de los negocios. En el mundo adversarial fue 0.96.

Cinco lifts llevaron a Robyn de 1.02 a 0.43 en el mundo real

Índice de arrepentimiento, mediana de 20 negocios por mundo; línea = mitad central de los negocios. Menor es mejor.

0.00.40.81.21.61 = igual que no mover el presupuesto0 = toda la ganancia disponibleLaboratorio limpio0.34Sin lifts0.105 liftsMundo real1.020.43Adversarial0.960.88
Benchmark sintético de Entropy Labs · Robyn oficial en R, 120 ajustes

Los errores van en una sola dirección. El sesgo mediano de ROAS de Robyn fue +160% en el laboratorio limpio, +408% en el mundo real y +1,514% en el adversarial, contra un límite de ±30%. PyMC-Marketing y Meridian con su configuración por default también sobreestimaron, por +738% y +653% en el mundo real. La causa es la misma para los tres: cuando los planners suben la inversión en las semanas en que la demanda ya está subiendo, el modelo ve que medios y ventas se mueven juntos y le da el crédito a los medios. La regresión ridge no te protege de eso; encoge todos los coeficientes hacia cero, pero no puede distinguir qué parte de un pico estacional causaron los medios. Ninguna estructura de modelo ni configuración puede separar esto con datos observacionales; solo un experimento que mueva la inversión independientemente de la demanda, como un geolift, puede hacerlo. Por eso las pruebas de incrementalidad no son opcionales.

El ajuste no nos ayudó a encontrar los buenos modelos. Dentro de cada mundo, la correlación de rangos entre el NRMSE de un modelo y su índice de arrepentimiento fue 0.10, 0.15 y 0.04 (Spearman, todos con p > 0.5). Un modelo de Robyn que reprodujo mejor la historia no produjo un mejor plan.

Esto importa porque el flujo de trabajo de Robyn, y buena parte de la guía que lo rodea, lleva a los analistas hacia los candidatos con mejor R² y menor error (NRMSE y DECOMP.RSSD). Esos puntajes miden qué tan bien un modelo reproduce el pasado, no si sus efectos por canal son correctos. Un modelo sirve solo si sus recomendaciones venden más, y en nuestros datos el ajuste no nos dijo casi nada sobre eso.

La calibración es lo que vuelve útil a Robyn

Cinco geolifts hicieron más por Robyn que cualquier configuración que cambiamos. En el mundo real, su sesgo pasó de +408% a +16% y su índice de arrepentimiento de 1.02 a 0.43. Nuestros lifts simulados se comportan como geo-holdouts reales: cuatro semanas de prueba más cuatro de cooldown, con ruido de medición. Robyn los recibió por su entrada nativa de calibración, con scope total.

Cinco lifts dejaron a Robyn dentro del límite de ±30% en dos de tres mundos

Sesgo mediano de ROAS por canal, antes (gris) y después (verde) de cinco lifts. Escala logarítmica: cada línea es ~3× la anterior.

zona aprobada10%30%100%300%1,000%3,000%Laboratorio limpio+160%−20%Mundo real+408%+16%Adversarial+1,514%+558%
Benchmark sintético de Entropy Labs · Robyn oficial en R, 20 negocios por mundo · el eje muestra el tamaño del sesgo, el signo va en la etiqueta

Con los mismos cinco lifts, las decisiones de Robyn fueron tan buenas como las de los modelos bayesianos en el mundo real: 0.43 contra 0.41 de PyMC-Marketing y 0.42 de Meridian. Fue el único de los tres con sesgo dentro de ±30%. La salvedad está en la cola: aun calibrado, Robyn dejó al 20% de los negocios del mundo real peor que sin hacer nada, contra 0% de PyMC-Marketing y 5% de Meridian.

Con cinco lifts, Robyn empató con los modelos bayesianos en el mundo real

Índice con cinco lifts, mediana de 20 negocios. Menor es mejor; 1 = igual que no mover el presupuesto.

Índice de arrepentimientoNegocios peor queno hacer nada1.0Mundo realRobyn (R)0.4320%PyMC-Marketing0.410%Meridian0.425%AdversarialRobyn (R)0.8835%PyMC-Marketing0.6825%Meridian0.5810%
Benchmark sintético de Entropy Labs · los mismos 20 negocios por mundo, cinco lifts cada uno

El mundo adversarial es donde Robyn se queda atrás. Los lifts llevaron su índice de 0.96 a 0.88; PyMC-Marketing pasó de 1.00 a 0.68 y Meridian de 1.15 a 0.58. Creemos que la razón es el lugar por donde entran los lifts al modelo.

Robyn usa los lifts para escoger un modelo; los bayesianos ajustan con ellos

Robyn: los lifts como filtroPyMC-Marketing, Meridian: evidenciaDatos históricosinversión, ventas, contextoAjustar candidatossin los liftsOrdenar candidatosajuste, reparto, MAPE.LIFTQuedarse con el primeroel candidato menos maloDatos históricosinversión, ventas, contextoUn solo ajustedebe coincidir con ambosModelo calibradocoeficientes jalados por liftsPruebas de liftPruebas de liftSi ningún candidato reproduce la historiay los lifts, los lifts ya no jalan más.El lift mueve el coeficiente de su canaly, por él, el de los demás canales.
Cómo usa cada herramienta los mismos cinco lifts

En PyMC-Marketing y Meridian, un lift es evidencia dentro del ajuste: la posterior tiene que coincidir con los datos y con el experimento al mismo tiempo, así que el lift jala el coeficiente de su canal y, a través de él, el resto. En Robyn, un lift es un puntaje más para ordenar candidatos que ya se ajustaron sin él. Si la confusión es tan fuerte que ningún candidato de la búsqueda reproduce la historia y los lifts a la vez, Robyn escoge el menos malo, y los lifts no pueden jalarlo más. Más iteraciones amplían la búsqueda, pero no cambian ese mecanismo.

Coeficientes fijos: Robyn promedia el canal en el tiempo

Robyn le da a cada canal un solo coeficiente para toda la ventana del modelo. El adstock y la saturación también son fijos. El modelo supone que un peso en Meta en el primer año vendió lo mismo que un peso en Meta en el tercer año, al mismo nivel de inversión.

Eso casi nunca es cierto. El mismo canal cambia en dos o tres años por razones que los datos muestran solo de forma indirecta: la demanda de la categoría sube o baja; el equipo cambia creativos, audiencias y estrategia de puja; una plataforma cambia su algoritmo; el negocio abre tiendas o cambia su catálogo. Cada uno de esos cambios mueve cuánto vende un peso en ese canal. Robyn no puede ver el cambio, así que devuelve el promedio del canal a lo largo de la ventana, y defines el presupuesto del siguiente trimestre con un promedio que no describe al canal de hoy.

Un solo coeficiente promedia un canal que cambió, y lo sobrevalora hoy

Canal ilustrativo, ROAS semanal en tres años. Después de la semana 72 el equipo cambia creativos y operación.

ventana recortada al último año01234Año 1Año 2Año 3nuevos creativos y operaciónCoeficiente fijo de tres años: 2.32+46%Promedio del último año: 1.59Gris: lo que el canal realmente devuelve cada semanaGuiones: un coeficiente que varía en el tiempo (como en PyMC-Marketing) lo siguePunteada: recortar la ventana acierta en el presente, con un tercio de los datos
Serie ilustrativa, no del benchmark: un canal, 156 semanas

En este ejemplo, el coeficiente de tres años dice que el canal devuelve 2.32 por peso. En el último año devolvió 1.59. Un optimizador de presupuesto que lee el coeficiente fijo sobrevalora el canal en 46% y lo sigue alimentando, justo cuando el canal merece menos.

El coeficiente fijo tiene una ventaja real: da una curva por canal, y una curva es fácil de optimizar y fácil de explicarle a un CFO. El costo aparece en la práctica. Cuando el negocio tuvo un cambio de régimen dentro de los datos, la solución habitual es recortar la ventana del modelo (window_start y window_end en Robyn) al periodo posterior al cambio. Eso quita el problema del promedio y crea uno de datos: un modelo ajustado con 12 meses en lugar de 36 tiene un tercio de la historia para separar los medios de la estacionalidad y entre sí. En nuestra experiencia, llegar a un modelo de Robyn que se sostenga en un negocio con cambios de régimen toma varias rondas de recortar ventanas y volver a ajustar, y limita cuánta historia de largo plazo puedes usar.

PyMC-Marketing ofrece otra opción: coeficientes que cambian en el tiempo (time_varying_media y time_varying_intercept, construidos sobre un proceso gaussiano). El efecto del canal se vuelve una curva en el tiempo en lugar de un solo número, y el modelo estima cuánto se le permite moverse. Eso cuesta más datos por parámetro y más cuidado con los priors, y no lo probamos en este benchmark. A cambio, permite conservar tres años de historia sin suponer que el primer año se parece al tercero. Meridian deja que la línea base se mueva en el tiempo (knots), mientras que sus efectos de medios se quedan fijos, igual que en Robyn.

Un lift calibrado también ayuda aquí, con una condición: un lift mide el canal en el momento de la prueba. Un lift de hace 18 meses, metido en un modelo con coeficientes fijos, jala el promedio, no el presente. Corre lifts con regularidad y dale más peso a los recientes.

Un mundo aditivo: los medios se suman a la base, nunca escalan con ella

Robyn escribe las ventas como una suma: base (tendencia, estacionalidad, días festivos, variables de contexto) más la contribución de cada canal. La misma inversión en un canal suma las mismas ventas en una semana floja y en la temporada alta. Precio, promociones y competidores entran como términos adicionales de la suma, así que pueden mover la base, pero no pueden cambiar qué tan bien funcionan los medios.

La mayoría de los negocios con los que trabajamos no se comporta así. Un peso de medios vende más en diciembre que en febrero porque hay más gente lista para comprar; una promoción hace que el mismo anuncio convierta mejor; un competidor que duplica su inversión hace que la tuya funcione peor. En nuestro simulador, las ventas son base × (1 + medios), y los medios dependen de promociones, distribución y presión competitiva.

La misma inversión vende más en temporada alta, y un modelo aditivo no lo ve

Ventas semanales ilustrativas, misma inversión en ambas semanas. Gris: demanda base. Verde: ventas por medios.

Cómo lo ve Robyn: base + medioslos medios suman lo mismo cada semanaCómo suele funcionar: base × (1 + medios)los medios escalan con quien quiere comprar100+20Semana baja160+20Semana alta100+20Semana baja160+32Semana alta+12 con lamisma inversiónAjusta el modelo aditivo al mundo de la derecha y no tiene término para las ventas extra del pico.Se las da a lo que también sube esas semanas, casi siempre la inversión.
Números ilustrativos, no del benchmark

Cuando el mundo multiplica y el modelo suma, el modelo no tiene dónde poner las ventas extra de las semanas pico. Se las da a lo que también sube en esas semanas, que suele ser la inversión. En nuestro laboratorio limpio, cambiar solo ese supuesto en el mismo modelo movió el sesgo de ROAS de +340% (aditivo) a +130% (multiplicativo).

Para ser justos, la forma multiplicativa no es gratis. Si tu negocio se parece más a uno aditivo, un modelo multiplicativo se equivoca en la dirección contraria, y lo confirmamos en una prueba pre-registrada con un mundo aditivo. Lo que se sostuvo en ambos mundos fue la calibración: con cinco lifts, las dos familias tomaron buenas decisiones, sumara o multiplicara el mundo. Esa es la lectura práctica para quien usa Robyn. No puedes cambiar la estructura de Robyn, pero sí puedes corregir sus números con experimentos, y a los experimentos no les importa el álgebra del modelo.

Qué puede y qué no puede decir esta evaluación

Lo que Robyn hace bien, en nuestros datos: te muestra cada candidato que probó y por qué lo ordenó así, su calibración funciona en R, y con lifts alcanzó el menor sesgo de todos los modelos que corrimos en el mundo real. Lo que no puede hacer: representar un canal cuyo efecto cambia en el tiempo, representar medios que escalan con la demanda, o usar un lift como algo más que un filtro de candidatos.

Los límites de nuestra prueba:

  • Mundos sintéticos. Están construidos para parecerse a los negocios que vemos, pero son nuestros. Un mundo donde la inversión no sigue a la demanda favorecería a todos los modelos.
  • Nuestro simulador es multiplicativo. Es deliberado: creemos que los negocios reales multiplican, con efectos que cambian en el tiempo y canales y eventos que modifican el retorno de los demás. Aun así, pone en desventaja a la estructura aditiva de Robyn antes de calibrar. Lo decimos arriba, y la prueba pre-registrada con un mundo aditivo es nuestro control.
  • Una regla de selección fija. Escogemos el representante de cluster con el mejor puntaje combinado. Un analista real escoge leyendo los one-pagers de Robyn, algo que ningún benchmark puede reproducir. Un buen analista puede hacerlo mejor que nuestra regla; uno con prisa, peor.
  • Una sola configuración. Adstock geométrico, saturación Hill, 5 corridas × 2,000 iteraciones, sin días festivos (nuestras fechas son sintéticas). Un adstock Weibull o una búsqueda más larga pueden cambiar algunos números.
  • Los intervalos no son comparables. Los intervalos de Robyn son la dispersión del ROI entre los modelos del cluster elegido, no incertidumbre posterior, así que no comparamos su cobertura con la de los modelos bayesianos.
  • Lo que no guardamos. En esta corrida guardamos las métricas resumen de cada modelo, no sus estimaciones por canal, así que todavía no podemos mostrar en qué parte del ranking de canales están los errores de Robyn.
  • El cambio de signo no está explicado. La versión en Python, como la corrimos al inicio, subestimó los medios (−56%); Robyn en R los sobreestimó (+408%). Entre las dos corridas cambiaron cuatro cosas, así que no podemos atribuir el cambio a ninguna en particular.

Si usas Robyn

  1. Usa Robyn en R. Mientras la versión en Python no implemente la calibración, usa el paquete de CRAN. Si tienes que usar la versión en Python, confirma en tu versión que MAPE.LIFT no es una constante.
  2. Prende Prophet y mantén el signo positivo en medios. Sin tendencia ni estacionalidad, ridge reparte la demanda estacional entre el intercepto y los medios de forma inconsistente.
  3. No escojas por ajuste. El NRMSE no predijo qué modelos tomaron buenas decisiones. Escoge entre los candidatos que coinciden con tus lifts.
  4. Calibra antes de mover presupuesto. Cinco lifts llevaron a Robyn de no ser mejor que no hacer nada al nivel de los modelos bayesianos en el mundo real. Sin lifts, trata su ROAS como una hipótesis de ranking, no como un número.
  5. Vigila los cambios de régimen. Si un canal cambió (nuevos creativos, nueva estrategia de puja, un mercado nuevo), Robyn va a promediar el antes y el después. Recorta la ventana o renueva los lifts, y ten claro cuál de las dos elegiste.
  6. Espera que le dé de más a los medios en temporada alta. Es la estructura aditiva. Los lifts corrigen el nivel de cada canal; no cambian la estructura, así que lee con cuidado las contribuciones de temporada alta.
  7. En negocios con mucha confusión, considera un modelo donde los lifts entren en la verosimilitud. En nuestro mundo adversarial, los lifts ayudaron menos a Robyn que a PyMC-Marketing y Meridian.

La pregunta con la que empezamos fue en qué MMM confiar. Después de 120 ajustes de Robyn, creemos que esa pregunta importa menos que si calibras o no. Robyn sin lifts tomó decisiones que no fueron mejores que no hacer nada; Robyn con cinco lifts las tomó tan bien como los otros dos. El modelo que eliges pone el techo; los experimentos que corres deciden qué tan cerca llegas a él.

También de Entropy Labs.

Calibremos el tuyo.