モデルの診断を実行する

モデルを構築したら、収束を評価し、必要に応じてモデルをデバッグしてから、モデルの適合度を評価する必要があります。

収束を評価する

モデルの完全性を確保するために、モデルの収束を評価します。

visualizer.ModelDiagnostics() の plot_rhat_boxplot コマンドは、連鎖の収束のゲルマンおよびルービン(1992 年)の潜在的スケール減少(一般に R-hat と呼ばれます)を要約して計算します。この収束診断は、連鎖間の分散(平均)が、連鎖が均一に分布している場合に想定される分散をどの程度超過しているかを測定します。

モデルのパラメータごとに R-hat 値が 1 つずつあります。箱ひげチャートは、インデックス全体の R-hat 値の分布を要約したものです。たとえば、beta_gm の X 軸のラベルに対応する箱は、地域インデックス g とチャネル インデックス m の両方における R-hat 値の分布を要約しています。

値が 1.0 に近いほど、収束が進んでいることを示します。R-hat が 1.2 に満たない場合は近似収束を示しており、多くの問題で妥当なしきい値になります(ブルックスおよびゲルマン、1998 年)。収束がない場合、原因は通常、尤度(モデル仕様)または事前分布でデータに対するモデルの指定が著しく間違っているか、十分なバーンインが行われていない(n_adapt + n_burnin が十分に大きくない)ことのいずれかです。

収束が難しい場合は、MCMC の収束を達成するをご確認ください。

R-hat 箱ひげチャートを生成する

次のコマンドを実行して、R-hat 箱ひげチャートを生成します。

model_diagnostics = visualizer.ModelDiagnostics(mmm)
model_diagnostics.plot_rhat_boxplot()

出力例:

R-hat 箱ひげチャート

トレース プロットと密度プロットを生成する

マルコフ連鎖モンテカルロ法(MCMC)サンプルのトレース プロットと密度プロットを生成すると、連鎖間の収束と安定性を評価できます。トレース プロットの各トレースは、MCMC アルゴリズムがパラメータ空間を探索する際に生成された値のシーケンスを表します。アルゴリズムが反復処理を繰り返す中で、パラメータのさまざまな値をどのように処理するかを示しています。トレース プロットでは、チェーンが同じ状態に長時間とどまったり、一方向に連続して進みすぎたりする平坦な領域が生じないようにしてください。

左側の密度プロットは、MCMC アルゴリズムによって得られた 1 つ以上のパラメータのサンプル値の密度分布を可視化します。密度プロットでは、チェーンが安定した密度分布に収束していることを確認します。

次の例は、トレース プロットと密度プロットを生成する方法を示しています。

parameters_to_plot=["roi_m"]
for params in parameters_to_plot:
  az.plot_trace(
      meridian.inference_data,
      var_names=params,
      compact=False,
      backend_kwargs={"constrained_layout": True},
  )

出力例:

トレース プロットと密度プロット

事前分布と事後分布を確認する

データに情報が少ない場合、事前分布と事後分布は類似します。詳細については、事後分布が事前分布と同一の場合をご覧ください。

特に費用が少ないチャネルでは、費用対効果の事後分布が費用対効果の事前分布と類似する傾向があります。この問題を解決するには、MMM 用のデータの準備する際に、費用が非常に少ないチャネルを除外するか、他のチャネルと統合することをおすすめします。

次のコマンドを実行して、各メディア チャネルの費用対効果事後分布を費用対効果事前分布と比較してプロットします。

model_diagnostics = visualizer.ModelDiagnostics(mmm)
model_diagnostics.plot_prior_and_posterior_distribution()

出力例:(画像をクリックして拡大)

分布

デフォルトでは、plot_prior_and_posterior_distribution() は費用対効果の事後分布と事前分布を生成します。ただし、次の例に示すように、特定のモデル パラメータを plot_prior_and_posterior_distribution() に渡すことができます。

model_diagnostics.plot_prior_and_posterior_distribution('beta_m')

モデルの適合度を評価する

モデルの収束が最適化されたら、モデルの適合度を評価します。詳細については、モデリング後のモデルの適合度を評価するをご確認ください。

マーケティング ミックス モデリング(MMM)では、間接的な測定値に基づいて因果推論を評価し、妥当な結果を探す必要があります。次の 2 つの方法がおすすめです。

  • 決定係数、平均絶対誤差率(MAPE)、加重平均絶対誤差率(wMAPE)の指標の使用
  • kpi_type と revenue_per_kpi の可用性に応じた収益または KPI の予測値と実測値の比較プロットの生成

決定係数、MAPE、wMAPE の指標を使用する

適合度指標は、モデルの構造が適切であり、過剰にパラメータ化されていないことを確認するための信頼性チェックとしても使用できます。ModelDiagnostics は、適合度指標である R-Squared、MAPE、wMAPE を計算します。ModelSpec で holdout が設定されている場合は、R-squared、MAPE、wMAPE のサブセットについても Train および Test が計算されます。適合度指標は予測精度を測るものであり、通常は MMM の目的ではありません。ただし、これらの指標は有用な信頼性チェックとして機能します。

次のコマンドを実行すると、決定係数、MAPE、wMAPE の指標を生成できます。

model_diagnostics = visualizer.ModelDiagnostics(mmm)
model_diagnostics.predictive_accuracy_table()

出力例:

指標の出力

予測値と実測値のプロットを生成する

予測値と実測値のプロットを使用すると、モデルの適合度を間接的に評価できます。

全国: 予測値と実測値のプロット

モデルの収益または KPI の予測値と、収益または KPI の実測値を全国レベルでプロットすると、モデルの適合度を評価できます。ベースラインは、メディア使用がなかった場合の収益(または KPI)を対象とした、モデルの反事実的条件法による推定値です。MMM の目的は、必ずしも収益を実際の収益にできるだけ近い値で推定することではありませんが、これはモデルの信頼性を確認するうえで役立ちます。

次のコマンドを実行すると、全国レベルのデータの収益(または KPI)の実測値と予測値をプロットできます。

model_fit = visualizer.ModelFit(mmm)
model_fit.plot_model_fit()

出力例:

収益の実測値と予測値のグラフ

地域: 予測値と実測値のプロット

地域レベルで予測値と実測値の比較プロットを作成して、モデルの適合度を評価できます。地域の数が多い場合は、規模の大きい地域のみを表示することをおすすめします。

次のコマンドを実行すると、地域の収益(または KPI)の実測値と予測値をプロットできます。

model_fit = visualizer.ModelFit(mmm)
model_fit.plot_model_fit(n_top_largest_geos=2,
                         show_geo_level=True,
                         include_baseline=False,
                         include_ci=False)

出力例:

地域別の実際の収益と推定収益の比較グラフ

モデルの適合度に満足したら、モデルの結果を分析します。