Meridian proporciona una calibración automatizada de las distribuciones a priori con experimentos anteriores a través de CalibrationBuilder para automatizar la traducción de los resultados de los experimentos de incrementalidad en distribuciones a priori del ROI para los canales de medios pagados y de alcance y frecuencia. El compilador acepta resultados de cualquier fuente de experimentos y cuenta con una integración directa para Meridian GeoX que optimiza el flujo de trabajo.
La calibración requiere definir una distribución a priori de Meridian, y los resultados de los experimentos de incrementalidad son una forma sólida de impulsar esa intuición. Sin embargo, los MMM y los experimentos difieren en aspectos importantes, específicamente en su alcance, plazo y duración. Para ayudarte a cerrar esta brecha, el CalibrationBuilder está diseñado para tener en cuenta estas diferencias de forma automática, lo que traduce los resultados de tu experimento en distribuciones a priori sólidas.
CalibrationBuilder resuelve estas diferencias aplicando automáticamente ajustes a los resultados del experimento antes de combinarlos en una sola distribución a priori calibrada por canal.
El flujo de trabajo consta de los siguientes pasos:
- Registro de experimentos: El usuario agrega resultados de experimentos genéricos o de Meridian GeoX a un canal.
- Aplicación de ajustes:
CalibrationBuildercalcula y aplica ajustes de inversión, visitas recientes y duración. - Combinación de distribuciones:
CalibrationBuildercombina las distribuciones ajustadas de todos los experimentos registrados con la actualización bayesiana. - Ajuste de distribuciones paramétricas:
CalibrationBuilderajusta una familia de distribuciones paramétricas (LogNormal, Gamma o Normal) a la distribución a posteriori para producir las distribuciones a priori finales deroi_myroi_rf.
Paso 1: Registra experimentos
Puedes registrar experimentos con la API de Python de CalibrationBuilder. El compilador admite dos tipos de fuentes de experimentos:
- Experimentos de Meridian GeoX: Se registran con
with_meridian_geox_experiment_result. Acepta directamente el objetoAnalysisResultde la herramienta GeoX de Google.CalibrationBuilderextrae automáticamente la estimación puntual, el error estándar, la inversión y las fechas del experimento deAnalysisResultpara calcular los ajustes. - Experimentos genéricos: Se registran con
with_incrementality_experiment_result. Son útiles para experimentos que no son de GeoX en los que especificas manualmente la estimación puntual, el error estándar, la inversión y las fechas.
Para obtener explicaciones interactivas completas del código, consulta la Demostración de calibración de distribuciones a priori.
Paso 2: Aplica los ajustes de calibración
Un experimento y un MMM tienen diferentes objetivos y condiciones de medición. Para cerrar esta brecha, Meridian ajusta la estimación puntual del experimento (la escala por un factor \(\gamma\)) y aumenta el error estándar (ajusta la varianza por un factor \(\tau\)) para reflejar la incertidumbre adicional de traducir el experimento al MMM.
La media ajustada (\(\mu_{adj}\)) y la desviación estándar (\(\sigma_{adj}\)) de un solo experimento se calculan de la siguiente manera:
Donde:
- \(\mu_{exp}\) es la estimación puntual del experimento.
- \(\sigma_{exp}\) es el error estándar del experimento.
- \(\gamma_{duration}\) es el factor de escala de la duración (se calcula automáticamente; el valor de referencia es \(1.0\) cuando el experimento captura el 100% del efecto de Adstock).
- \(\gamma_{user}\) es un ajuste opcional de la estimación puntual especificado por el usuario (el valor predeterminado es \(0\)).
- \(\tau_{spend}\), \(\tau_{recency}\)y \(\tau_{duration}\) son los ajustes de varianza para la inversión, las visitas recientes y la duración, respectivamente (se calculan automáticamente; el valor de referencia es \(0.0\) cuando no se necesita ningún ajuste).
- \(\tau_{user}\) es un ajuste opcional del error estándar especificado por el usuario (el valor predeterminado es \(0\)).
Automatización y valores predeterminados
Mientras que \(\gamma_{user}\) y \(\tau_{user}\) permiten un ajuste manual y se establecen de forma predeterminada en \(0\), a los otros ajustes (\(\tau_{spend}\), \(\tau_{recency}\),\(\tau_{duration}\)y \(\gamma_{duration}\)) los calcula automáticamente CalibrationBuilder:
- Experimentos de Meridian GeoX: El cálculo del ajuste está completamente automatizado.
CalibrationBuilderextrae directamente \(\mu_{exp}\) y\(\sigma_{exp}\) de las métricas de GeoXicpd(metrics.icpd.point_estimateymetrics.icpd.standard_deviation), la inversión del experimento deestimated_bau_spend(metrics.descriptive_metrics.estimated_bau_spend) y las fechas de inicio y finalización deanalysis_config(analysis_config.analysis_start_dateyanalysis_config.analysis_end_date). Los experimentos de KPI que no son de ingresos se convierten automáticamente a la escala de ingresos usando elrevenue_per_kpidel modelo. No es necesario que proporciones manualmente los parámetros de inversión, duración o fecha. - Experimentos genéricos:
CalibrationBuildercalcula los ajustes con las mismas fórmulas de los argumentos de inversión, fecha de inicio y fecha de finalización que proporcionas enwith_incrementality_experiment_result. - Valores predeterminados del modelo: Los cálculos de la duración usan los parámetros de decaimiento de
CalibrationBuilder, que se establecen de forma predeterminada enadstock_decay_spec='geometric',alpha=0.5ymax_lag=8(que coinciden con los valores predeterminados deModelSpec). Los cálculos de las visitas recientes usan una semivida fija de 52 semanas (1 año).
Ajuste de la inversión
El ajuste de la inversión (\(\tau_{spend}\)) tiene en cuenta las diferencias en la escala y la intensidad de la inversión. Por lo general, un experimento abarca solo una fracción de la inversión total observada en la ventana del MMM. Para comparar la escala de inversión independientemente de la duración del experimento, Meridian compara la inversión diaria promedio del experimento con la inversión diaria promedio del canal durante el período modelado.
En el caso de los experimentos de Meridian GeoX, la inversión del experimento se extrae automáticamente de estimated_bau_spend en el AnalysisResult de GeoX (en metrics.descriptive_metrics.estimated_bau_spend).
El ajuste de inversión se calcula de la siguiente manera:
Donde \(r\) es la proporción de inversión que compara las tasas de inversión diaria promedio:
Donde:
- \[\text{experiment_avg_daily_spend} = \frac{\text{experiment_total_spend}}{\text{experiment_duration_days}}\]
\[\text{channel_avg_daily_spend} = \frac{\text{total_channel_spend}}{\text{model_duration_days}}\]
Si la tasa de inversión diaria del experimento coincide con la del canal (\(r = 1.0\)), entonces \(\tau_{spend} = 0.0\) (no se agrega incertidumbre).
A medida que la tasa de inversión del experimento se convierte en una fracción más pequeña (o más grande) de la tasa de inversión del canal (\(r \rightarrow 0\)), \(\tau_{spend}\) aumenta, lo que amplía la distribución a priori.
La proporción de inversión \(r\) también tiene en cuenta las diferencias en el nivel de detalle de los medios. Por ejemplo, si ejecutas un experimento a nivel de la campaña, pero modelas a nivel del canal en el MMM, el porcentaje de inversión del experimento se comparará con el porcentaje de inversión total del canal. Si la campaña representa una gran parte de la actividad del canal, será más representativa de este y habrá menos incertidumbre cuando se traduzcan los resultados. Por el contrario, si se trata de una campaña pequeña, el ajuste será mayor para reflejar la incertidumbre de escalar la efectividad de esa campaña a todo el canal.
Ajuste de visitas recientes
El ajuste de visitas recientes otorga más peso a los experimentos más recientes, ya que pueden ser más precisos para modelar los resultados incrementales actualizados. Cuanto más tiempo haya pasado desde que se realizó el experimento hasta el final del período de modelado del MMM, menos probable será que sus resultados reflejen la realidad empresarial actual.
En el caso de los experimentos de Meridian GeoX, la fecha de finalización se extrae automáticamente de analysis_config.analysis_end_date en el AnalysisResult de GeoX.
El ajuste de visitas recientes se calcula con un decaimiento exponencial con una semivida de 52 semanas (1 año):
Donde \(w\) es la cantidad de semanas que transcurrieron entre la fecha de finalización del experimento y la última fecha modelada en el MMM.
- Si el experimento finalizó en la última fecha modelada (\(w = 0\)), entonces, \(\lambda = 1.0\) y \(\tau_{recency} = 0.0\).
- En el caso de los experimentos más antiguos, \(\lambda\) disminuye, lo que hace que \(\tau_{recency}\) aumente y agregue más incertidumbre.
- Si la última fecha modelada es anterior al experimento, no se aplica ningún ajuste (\(\tau_{recency} = 0.0\)).
Ajuste de la duración
El ajuste de la duración (\(\gamma_{duration}\) y \(\tau_{duration}\)) tiene en cuenta la diferencia entre la duración del experimento (\(D\), en semanas) y la ventana de retraso máxima del modelo (\(L\), en semanas).
En los experimentos de Meridian GeoX, la duración del experimento (\(D\)) se calcula automáticamente a partir de analysis_config.analysis_start_date y analysis_config.analysis_end_date en el AnalysisResult de GeoX.
Debido a que los efectos del marketing se extienden en el tiempo (modelados por el decaimiento de Adstock), es posible que un experimento breve no capture el efecto completo a largo plazo de la inversión en medios. Por el contrario, si el experimento es muy largo, es posible que capture efectos más allá de la ventana de retraso truncada del modelo.
Meridian calcula la proporción de captura (\(p\)), que es la proporción de los pesos de decaimiento de Adstock totales capturados durante las semanas activas del experimento.
Supongamos que \(w_s\) son los pesos de decaimiento calculados con la función de decaimiento de Adstock (geométrica o binomial) con una tasa de decaimiento de \(\alpha\) en la ventana del modelo \(L +
1\) (configurada en CalibrationBuilder, con los valores predeterminados de adstock_decay_spec='geometric', alpha=0.5 y max_lag=8):
- Si la duración del experimento es menor o igual que la ventana del modelo (\(D
\le L + 1\)), se aplica lo siguiente:
- Decaimiento binomial y geométrico: La proporción de captura \(p\) es la suma de los pesos de decaimiento normalizados hasta \(D\):
- Si la duración del experimento es mayor que la ventana del modelo (\(D > L + 1\)), se aplica lo siguiente:
- Decaimiento binomial: Los pesos binomiales decaen a cero dentro de la ventana de visualización, por lo que el experimento captura todos los efectos posibles: \(p = 1.0\)
- Decaimiento geométrico: Los pesos geométricos decaen de forma infinita, por lo que el numerador incluye la cola de la serie geométrica hasta \(D - 1\):
La proporción de captura \(p\) está limitada a un valor mínimo de \(10^{-6}\) y a un valor máximo de \(1.0\) (para el decaimiento binomial).
Con \(p\), los ajustes de duración son los siguientes:
- Factor de escala de la estimación puntual:
Si el experimento es más corto que la ventana del modelo (\(p < 1.0\)), la estimación puntual se escala verticalmente (\(\gamma_{duration} > 1.0\)) para estimar el efecto completo a largo plazo. Si el experimento es más largo (\(p > 1.0\) para el decaimiento geométrico), la estimación puntual se reduce verticalmente (\(\gamma_{duration} < 1.0\)).
- Ajuste del error estándar:
Si el experimento es más corto (\(p < 1.0\)), agrega incertidumbre (\(\tau_{duration} > 0.0\)) porque se extrapola la cola no observada del efecto. Si el experimento es más largo o igual (\(p \ge 1.0\)), no se agrega incertidumbre adicional (\(\tau_{duration} = 0.0\)).
Paso 3: Combina los experimentos
Si registras varios experimentos para un solo canal, Meridian los combina (junto con un baseline_prior opcional) usando la actualización bayesiana.
Según el teorema de Bayes, la densidad de la distribución a posteriori del ROI del canal es proporcional al producto de la distribución a priori de referencia y las probabilidades de todos los experimentos independientes:
Donde la función de probabilidad de cada experimento \(i\) es la siguiente:
Ten en cuenta que podemos considerar esta definición de producto como su propio modelo bayesiano. Matemáticamente, tratamos cada experimento ajustado como una observación contaminada del ROI real del canal. El modelo se formula de la siguiente manera:
Donde:
- \(\mu_{adj,i}\) es la estimación puntual ajustada para el experimento \(i\).
- \(\sigma_{adj,i}\) es el error estándar ajustado para el experimento \(i\).
- \(\text{ROI}\) es el parámetro de ROI verdadero y desconocido que se estimará para el canal.
- \(\pi(\cdot)\) es la distribución de
baseline_prior. Si no se especifica una distribución a priori de referencia, se usa una distribución a priori uniforme incorrecta y plana sobre números reales positivos (\(\pi(\text{ROI}) \propto 1\) para \(\text{ROI} > 0\)). - \(N\) es la cantidad de experimentos registrados.
El compilador evalúa esta densidad de la distribución a posteriori de forma numérica en una cuadrícula de parámetros adaptables para encontrar la distribución combinada. Consulta el Apéndice técnico para obtener más detalles.
Paso 4: Ajusta y compila la distribución a priori calibrada
Por último, Meridian ajusta una familia de distribuciones paramétricas estándar (LogNormal, Gamma o Normal) a la distribución a posteriori numérica calculada en el paso 3.
Las familias de distribuciones candidatas se eligen según baseline_prior: LogNormal y Gamma siempre se consideran, mientras que Normal se evalúa cuando la distribución a priori de referencia permite un soporte negativo. La forma de distribución que mejor se ajusta se elige minimizando la pérdida de entropía cruzada (equivalente a minimizar la divergencia KL) en relación con la distribución a posteriori numérica.
Una vez que se encuentra la distribución a priori óptima para cada canal calibrado, CalibrationBuilder las une. En el caso de los canales que no se calibraron, CalibrationBuilder asigna la distribución a priori personalizada proporcionada en custom_prior. La distribución a priori del ROI predeterminada de \(\text{LogNormal}(0.2, 0.9)\) solo se usa si no se proporciona una distribución a priori personalizada para ese canal.
El resultado final de build() es una clase de datos CalibratedPriors que contiene lo siguiente:
priors.roi_m: Es unCalibratedDistribution(subclase deIndependentMultivariateDistribution) que representa la distribución a priori calibrada para los canales de medios pagados.priors.roi_rf: Es unCalibratedDistribution(subclase deIndependentMultivariateDistribution) que representa la distribución a priori calibrada para los canales de alcance y frecuencia.
Estas distribuciones calibradas se pasan a PriorDistribution y, luego, a ModelSpec para inicializar el modelo de Meridian.
Apéndice técnico
En esta sección, se proporcionan las formulaciones matemáticas y los detalles algorítmicos que subyacen al cálculo numérico de la distribución a posteriori y al ajuste de la distribución de CalibrationBuilder.
Formulación de la distribución a posteriori
Para un canal determinado, supongamos que \(\theta\) representa el ROI real del canal. Observa los resultados del experimento ajustados de forma independiente de\(N\) . Para cada experimento \(i \in \{1, \ldots, N\}\), hay una estimación puntual ajustada \(\mu_{adj,i}\) y un error estándar ajustado \(\sigma_{adj,i}\).
Supongamos que cada estimación puntual ajustada es una observación distribuida de forma normal en torno al ROI verdadero:
La función de probabilidad para el experimento \(i\)es la siguiente:
Si se proporciona un baseline_prior, denota su función de densidad de probabilidad como\(\pi(\theta)\). Si no se proporciona una distribución a priori de referencia, usa una distribución a priori uniforme incorrecta y plana sobre los valores positivos, \(\pi(\theta) \propto I_{\{\theta > 0\}}\), donde\(I\) es la función indicadora.
Según el teorema de Bayes, la densidad a posteriori del ROI del canal, \(p(\theta \mid \{\mu_{adj,i}, \sigma_{adj,i}\})\), es proporcional al producto de la distribución a priori y las probabilidades de todos los experimentos independientes:
Integración numérica basada en cuadrículas
Dado que la distribución a posteriori \(p(\theta \mid \{\mu_{adj,i}, \sigma_{adj,i}\})\) puede no tener una forma analítica estándar (como cuando se usan distribuciones a priori de referencia no normales, como LogNormal o Gamma), Meridian la evalúa numéricamente en una cuadrícula.
- Paso de exploración: Primero, Meridian realiza un paso de "exploración" para ubicar la región de masa de probabilidad alta. Define una cuadrícula amplia centrada en la media empírica de las distribuciones y encuentra el rango que contiene el\(99.8\%\) de la probabilidad acumulada (desde el percentil \(0.1\)hasta el percentil \(99.9\)).
- Evaluación de cuadrícula fina: Luego, construye una cuadrícula fina de 10,000 puntos espaciados de manera uniforme en este rango resuelto \([\theta_{\text{min}}, \theta_{\text{max}}]\) y evalúa la densidad a posteriori no normalizada en cada punto.
Normalización: La densidad se normaliza con la integración de la suma de Riemann:
$$ p(\theta_j \mid \{\mu_{adj,i}, \sigma_{adj,i}\}) = \frac{u(\theta_j)}{\sum_k u(\theta_k)\Delta\theta} $$donde \(u(\theta)\) es la densidad a posteriori no normalizada, \(\theta_j\) es el \(j\)punto de la cuadrícula y \(\Delta\theta\) es el tamaño del paso.
Ajuste de distribución
Una vez que se calcula la FDP numérica a posteriori en la cuadrícula, Meridian ajusta una distribución paramétrica \(q(\theta; \phi)\) (donde \(\phi\) representa los parámetros de distribución) para aproximar la distribución a posteriori.
Meridian determina las familias de distribuciones candidatas según el soporte de la distribución a priori de referencia:
- Compatibilidad no negativa (predeterminada): Si no se proporciona una distribución a priori de referencia (que, de forma predeterminada, es compatible con valores no negativos) o si la distribución a priori de referencia restringe la compatibilidad a valores no negativos (como
LogNormaloGamma), Meridian considera las familias de distribuciones LogNormal (\((0, \infty)\)) y Gamma (\((0, \infty)\)), y no considera la distribución Normal. - Compatibilidad con valores negativos: Si la distribución a priori de referencia asigna una densidad de probabilidad finita a los valores negativos (como
Normal), Meridian considera la distribución Normal (definida en \((-\infty, \infty)\)) y también las distribuciones LogNormal y Gamma.
Para cada familia candidata, Meridian encuentra los parámetros \(\phi\) que minimizan la pérdida de entropía cruzada entre la distribución a posteriori numérica \(p(\theta)\) y la distribución candidata \(q(\theta; \phi)\):
Minimizar esta pérdida es matemáticamente equivalente a minimizar la divergencia de Kullback-Leibler \(D_{KL}(p \parallel q)\) de la aproximación\(q\) a la distribución posterior numérica verdadera \(p\).
Meridian utiliza el algoritmo de optimización L-BFGS-B para encontrar los parámetros óptimos. La familia de distribuciones que logra la pérdida más baja se selecciona como la distribución a priori calibrada final para el canal.