ベースラインを評価する

ベースラインとは、すべての介入群変数がベースライン値に設定されている反事実的シナリオで期待される結果のことです。有料メディアとオーガニック メディアの場合、ベースライン値は 0 です。メディア以外の介入群変数の場合、ベースライン値は、観測された変数の最小値(デフォルト)、最大値、またはユーザー指定の浮動小数点数に設定できます。ベースラインを推定することで、有料メディア、オーガニック メディア、その他のメディア以外の介入群を実施しなかった場合にどのような結果になっていたかを把握できます。このような推定は介入群の因果推論に必要であるため、ベースラインを評価することは重要です。

負のベースラインを評価する

結果(収益または KPI、用語集を参照)の値は負になることはできません。したがって、ベースラインが負の場合、介入群効果の因果推論に統計的な誤りがあることを示しています。他の統計モデルと同様にメリディアンでも統計的誤差は想定されています。ただし、ベースラインが極端な負になった場合は、想定外の誤差が発生してます。

モデルの結果でベースラインが極端な負になった場合は明らかに、モデルの設定、モデルの適合に使用されるデータ、または事前分布の調整が必要です(負の、または低いベースラインを緩和するを参照)。このような場合、より正確で信頼性が高い分析情報を提供できるモデルを目指して、より徹底した反復的なモデル開発プロセスが求められます。

メリディアンが統計的かつ確率的なモデルであることを利用して、負のベースラインは確率的な手法で評価できます。具体的には、期間全体で集計されたベースラインが負になる事後確率を考慮します。この確率が高すぎると、モデルの結果に大きな統計誤差が生じる可能性があります。この確率は Analyzer.negative_baseline_probability メソッドで計算できます。

from meridian.analysis import analyzer
from meridian.model import model
import numpy as np

mmm = model.Meridian(...)
mmm.sample_posterior(...)
a = analyzer.Analyzer(mmm)
posterior_negative_baseline_prob = a.negative_baseline_probability()

別の方法として、チャンネル貢献度グラフなどで、期間全体にわたって集計されたベースラインの点推定を確認することもできます。ただし、メリディアンは統計的かつ確率的なモデルであるため、点推定には大きな不確実性が伴う可能性があることに注意してください。ベースラインの点推定値が負である場合、必ずしもモデルの偏りを示しているわけではありません。この誤差は、偏りまたは分散のどちらからも生じる可能性があります(二乗誤差のバイアス - バリアンス分解を参照)。これは、データの情報量が限られている場合に特に当てはまります(必要なデータ量を参照)。

モデル適合度グラフなどに表示される、値が負に断片的に低下する期間を過度に重視する必要はありません。断片的に発生する特に小さな低下は、統計モデルに固有の軽微な誤差です。

負のベースラインと貢献率

「合計貢献度が観測結果の 100% を超える」(増分結果が観測結果を超える場合に発生)と「負のベースライン」(増分結果が想定結果を超える場合に発生)には、若干の違いがあります。合計想定結果の事後分布は通常、合計観測結果の周囲に非常に密集して分布していますが、想定結果の事前分布は通常、分散が大きく、観測結果を中心としていません。したがって、負のベースラインの事前確率を評価してもあまり意味がありません。そのため、観測結果の貢献度が 100% を超える確率を評価することをおすすめします。

また、モデルが分散の大きい revenue_per_kpi 値を使用している場合、合計想定結果が合計観測結果と異なる場合があります。通常、推定 KPI の合計は、観測された KPI の合計に非常に近くなりますが、revenue_per_kpi の分散が大きい場合、合計想定結果と合計観測結果に差異が生じる可能性があります。

負のベースライン、または低いベースラインを緩和する

最初のステップとして、介入群の合計貢献度が、合計観測結果の 100% を超える事前確率を計算します。

from meridian.model import model
from meridian.analyzer import analyzer
import numpy as np

mmm = model.Meridian(...)
mmm.sample_prior(1000)
a = analyzer.Analyzer(mmm)
outcome = mmm.kpi
if mmm.revenue_per_kpi is not None:
  outcome *= mmm.revenue_per_kpi
total_outcome = np.sum(outcome)
prior_contribution = a.incremental_outcome(use_posterior=False) / total_outcome
total_prior_contribution = np.sum(prior_contribution, -1)
np.mean(total_prior_contribution > 1, (0, 1))

次のステップとして、各介入群の貢献度が 100% を超える事前確率を次の式で計算します。

np.mean(prior_contribution > 1, (0, 1))

これらの事前確率が高すぎると、特にデータの情報量が限られている場合(事後分布が事前分布と同じ場合を参照)は、負のベースラインの問題が発生する可能性があります。事前分布に対する以下の調整点を考慮に入れ、前述の確認項目を使用してカスタム事前分布を再評価します。

  • 負のベースラインは、介入群効果に過剰な貢献度が割り当てられていることを意味します。この問題を軽減するには、介入群の合計貢献度が、合計観測結果の 100% を超える事前確率を減らした、介入群効果のカスタム事前分布を設定します(介入群の事前分布のタイプを選択する方法を参照)。特に、カスタムの contribution 事前分布タイプが適切な場合があります。
  • 費用と ROI の両方が高いチャネルは、そのチャネルの結果が 100% を超え、ベースラインが負になる可能性があります。たとえば、結果が収益で、チャンネルの費用が総収益の 20% の場合、ROI が 5.0 であれば、そのチャンネルが収益の 100% を獲得していること(つまり、チャンネルの貢献度が 100%)になります。実際の費用対効果は 5.0 よりはるかに低い可能性があり、これを反映して事前分布 ROI を設定すると、負のベースラインを回避できます。経験則として、チャネルの 90 パーセンタイル ROI 事前分布は、チャネルの貢献度が 100% を超えることを意味するものではありません。
  • 有料メディアに過剰な貢献度が割り当てられている場合は、メディア全体の貢献度を踏まえて ROI 事前分布を設定することを検討してください。これにより、メディア全体の貢献度が 100% を超える事前確率が低くなります。詳細については、メディア全体の貢献度の事前分布を設定するをご覧ください。

事前分布の調整に加え、次のような原因も考慮できます。

  • 質の高いコントロール変数(メディア施策とレスポンスの両方に影響するコントロール変数)がモデルに十分にない。理にかなう場合は、より有意義なコントロール変数や、人口スケーリング コントロール変数(検索ボリュームなど)を追加することを検討してください。メリディアンは、デフォルトではコントロール変数を人口でスケーリングしません。コントロール変数を人口でスケーリングするには、ModelSpeccontrol_population_scaling_id を使用します。
  • モデルによって時間効果が十分に説明されていない。knots を増やすか、より適切なノットの位置を選択することを検討してください。

傾向と季節性のベースラインを評価する

モデル適合性チャートなどに表示されるベースライン期間が、ベース需要の予想トレンドと季節性に一致しているかどうかを評価します。ベースラインが予想期間中の傾向や季節性を捉えていない場合、その期間の周辺のノットをさらに選択すること(ノットの位置を指定するリストに knots を設定することで)を検討してください。また、ベース需要の傾向や季節性を説明できるコントロール変数も検討します(コントロール変数を参照)。