Ejecuta el modelo

Cuando ejecutas el modelo, debes agregar la especificación del modelo y, luego, ejecutar los comandos para crear muestras de la distribución a priori y la distribución a posteriori.

Los algoritmos del método Monte Carlo basado en cadenas de Markov (MCMC) se usan para obtener muestras de la distribución posterior. Meridian usa el método de muestreo No-U-Turn con adaptación de kernel y tamaño del paso.

Para ejecutar el modelo, haz lo siguiente:

  1. Agrega la especificación de tu modelo.

    Ejemplo:

     model_spec = spec.ModelSpec(
         prior=prior_distribution.PriorDistribution(),
         media_effects_dist='log_normal',
         hill_before_adstock=False,
         max_lag=8,
         unique_sigma_for_each_geo=False,
         media_prior_type='roi',
         roi_calibration_period=None,
         rf_prior_type='coefficient',
         rf_roi_calibration_period=None,
         organic_media_prior_type='contribution',
         organic_rf_prior_type='contribution',
         non_media_treatments_prior_type='contribution',
         knots=None,
         baseline_geo=None,
         holdout_id=None,
         control_population_scaling_id=None,
         adstock_decay_spec='geometric',
         enable_aks=False,
     )
     ```
    
  2. Ejecuta los siguientes comandos para obtener muestras de las distribuciones a priori y a posteriori. Configura los parámetros según sea necesario:

    mmm = model.Meridian(input_data=data, model_spec=model_spec)
    mmm.sample_prior(500)
    mmm.sample_posterior(n_chains=7, n_adapt=1000, n_burnin=500, n_keep=1000)
    
    Parámetro Descripción
    n_chains Es la cantidad de muestras de cadenas que se tomarán en paralelo. Para reducir el consumo de memoria, puedes usar una lista de números enteros para permitir las llamadas de muestreo secuenciales del método de MCMC. Una vez que se proporciona una lista, cada elemento de la secuencia corresponde al argumento n_chains para una llamada a windowed_adaptive_nuts.
    n_adapt Es la cantidad de extracciones del método de MCMC por cadena durante las cuales se adaptan el tamaño del paso y el kernel. Estas muestras a posteriori se excluyen siempre.
    n_burnin Es una cantidad adicional de muestras a posteriori MCMC por cadena que se debe excluir una vez que se fijen el tamaño del paso y el kernel. Estas extracciones adicionales pueden ser necesarias para garantizar que todas las cadenas alcancen la distribución estacionaria una vez que se complete la adaptación, pero, en la práctica, a menudo descubrimos que las cadenas alcanzan la distribución estacionaria durante la adaptación y que n_burnin=0 es suficiente.
    n_keep Es la cantidad de extracciones del método de MCMC por cadena que se deben conservar para el análisis y los resultados del modelo.
  3. (Opcional) Adelgaza la distribución a posteriori para obtener iteraciones más rápidas.

    Para acelerar las tareas downstream durante los flujos de trabajo iterativos (como generar informes preliminares de resultados del modelo o evaluar varias situaciones de optimización del presupuesto), puedes reducir el muestreo de las extracciones de la distribución a posteriori con posterior_thinning(). Esto selecciona un subconjunto de extracciones de la distribución a posteriori que preserva la estructura de cada cadena de MCMC mediante un muestreo sistemático para minimizar la autocorrelación:

    # Recommended: 15% sampling rate balances fast iteration with
    # near-approximate inference
    mmm.posterior_thinning(sampling_rate=0.15, preserve_original=True)
    
    # Alternatively, specify the exact number of draws to keep per chain
    # mmm.posterior_thinning(n_draws=150, preserve_original=True)
    

    Si se establece preserve_original=True, puedes restablecer la distribución a posteriori completa en cualquier momento antes de la entrega final:

    mmm.restore_full_posterior()
    
    Parámetro Descripción
    sampling_rate Es la fracción de extracciones que se conservarán por cadena en (0, 1]. Se recomienda 0.15 (15%) para los flujos de trabajo exploratorios. Se debe especificar exactamente uno de los valores sampling_rate o n_draws.
    n_draws Es la cantidad de extracciones que se deben conservar por cadena en [1, original_n_draws]. Se debe especificar exactamente uno de los valores sampling_rate o n_draws.
    method Es el método de selección de extracción. Admite ThinningMethod.SYSTEMATIC (predeterminado).
    seed Es un número entero opcional que se usa como semilla aleatoria para la selección reproducible de extracciones.
    preserve_original Es una marca booleana (True de forma predeterminada). Si es True, guarda una copia de la distribución a posteriori completa para que restore_full_posterior() pueda restablecerla.

A continuación, ejecuta diagnósticos de modelado para analizar la convergencia, verificar las distribuciones y evaluar el ajuste del modelo.