モデルを実行する

モデルを実行するときは、モデル仕様を追加してからコマンドを実行し、事前分布と事後分布をサンプリングします。

事後分布からのサンプリングには、マルコフ連鎖モンテカルロ(MCMC)アルゴリズムを使用します。メリディアンでは、ステップサイズとカーネルの適応を伴う 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 サンプリングの順次呼び出しを許可する整数のリストを使用します。リストが指定されている場合、シーケンス内の各要素は windowed_adaptive_nuts 呼び出しの n_chains 引数に対応します。
    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_rate または n_draws のいずれか 1 つのみを指定する必要があります。
    n_draws [1, original_n_draws] でチェーンごとに保持する抽出回数。sampling_rate または n_draws のいずれか 1 つのみを指定する必要があります。
    method 抽出の選択方法。ThinningMethod.SYSTEMATIC(デフォルト)をサポートします。
    seed 再現可能な抽出選択のためのオプションの整数乱数シード。
    preserve_original ブール値フラグ(デフォルトは True)。True の場合、restore_full_posterior() が復元できるように、完全な事後分布のコピーを保存します。

次にモデリング診断を行い、収束を評価し、分布を確認して、モデルの適合度を評価します