运行模型

运行模型时,您需要添加模型规范,然后运行命令,对先验分布和后验分布进行抽样。

模型采用了马尔可夫链蒙特卡洛 (MCMC) 算法从后验分布中抽样。Meridian 使用 No-U-Turn 抽样方法,此方法可以自适应调整步长和核。

如要运行模型,请执行以下操作:

  1. 添加模型规范。

    示例:

     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. 运行以下命令,从先验分布和后验分布中进行抽样。根据需要配置形参:

    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)
    
    形参 说明
    n_chains 要并行抽样的链数量。为了减少内存消耗,您可以使用一个整数列表,按顺序进行 MCMC 抽样调用。如果使用列表,序列中的每个元素都对应一个 n_chains 实参,用以调用 windowed_adaptive_nuts
    n_adapt 每条链上在步长和核调整期间进行的 MCMC 抽样次数。这些抽样结果始终会被排除在最终样本之外。
    n_burnin 在确定步长和核后,每条链上要额外排除的 MCMC 抽样次数。这些额外的抽样可能是为了确保所有链在完成自适应调整后都能达到稳定分布状态,但在实际应用中,我们通常会发现这些链在自适应调整期间就能达到稳定分布状态,因此 n_burnin=0 就够了。
    n_keep 每条链上要保留的 MCMC 抽样次数,抽取的样本将用于模型分析和生成结果。
  3. (可选)对后验分布进行抽稀,以加快迭代速度。

    为了加快迭代工作流中下游任务的处理速度(例如生成初步模型结果报告或评估多个预算优化情景),您可以使用 posterior_thinning() 对后验样本进行降采样。此方法采用系统抽样,从每个 MCMC 链中选取一个保留链结构的后验抽样子集,以最大限度地降低自相关性:

    # 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)
    

    如果设置了 preserve_original=True,您可以在最终交付前的任何时间恢复完整的后验分布:

    mmm.restore_full_posterior()
    
    形参 说明
    sampling_rate (0, 1] 中每条链要保留的抽样比例。建议:对于探索性工作流,使用0.15 (15%)。必须且只能指定 sampling_raten_draws 中的一个。
    n_draws [1, original_n_draws] 中每条链要保留的抽样次数。必须且只能指定 sampling_raten_draws 中的一个。
    method 抽样选择方法。支持 ThinningMethod.SYSTEMATIC(默认值)。
    seed 一个可选的整数随机种子,用于确保抽样选择结果的可重现性。
    preserve_original 一个布尔值标志(默认值为 True)。如果为 True,则会保存完整后验分布的副本,以便 restore_full_posterior() 可以将其恢复。

接下来,运行建模诊断以评估收敛性、查看分布和评估模型拟合度