メリディアンには、複数の介入群変数のタイプ(有料メディア、オーガニック メディア、メディア以外の介入群)があります。介入群タイプごとに、事前分布タイプを指定できます。事前分布タイプは、事前分布を設定する特定の指標(ROI、mROI、貢献度、係数など)です。テストなどを通して十分な情報が得られている指標や、モデルの結果を解釈する際に最も重視する指標を選択できます。
メリディアンでは、一般的なビジネス上の考え方に基づいて、各事前分布タイプにデフォルトの事前分布が設定されます。デフォルトの分布は、特定のビジネス分野に関するご自身の専門知識に基づいて変更可能です。これにより、お客様のビジネス感覚により合致した事前分布とすることができます。これらの選択肢とその背後にある根拠を理解することは、お客様のビジネス分野の専門知識をメリディアンに反映させるにあたって不可欠です。
事前分布タイプの定義
メリディアンで使用できる事前分布タイプはそれぞれ次のように定義されます。
- ROI(費用対効果): あるチャネルの増分結果を、そのチャネルに投じたメディア費用で割った比率(
Incremental Outcome / Spend)。これは、特にテスト結果に合わせて調整する場合に、有料メディアでは最も直感的な指標であることがよくあります。 - mROI(限界費用対効果): 特定のチャネルの追加費用の金額単位(1 ドルなど)あたりの費用対効果。mROI が高いチャネルは予算増額の有力な候補となるため、これは予算の最適化を検討する際に役立ちます。
- 貢献度: 合計結果の中であるチャネルの貢献が占める割合(
Incremental Outcome / Total Outcome)。ROI と mROI の事前分布は有料メディアでのみ使用できますが、貢献度事前分布は、オーガニック チャネルやメディア以外の介入群など、費用が関与しないチャネルでも使用できます。
- 係数: メリディアンの回帰モデルにおける特定の介入群の基礎的な統計係数。ROI、mROI、貢献度がビジネス指標であるのに対し、係数は、他のモデル パラメータやデータとの関係を踏まえないとビジネスに照らした解釈が難しい抽象的な統計パラメータです。
次の表に、各介入群タイプで使用できる事前分布タイプをまとめます。
| 事前分布タイプ | 有料メディア | オーガニック メディア | メディア以外の介入群 |
|---|---|---|---|
| ROI | ○* | × | × |
| mROI | ○* | × | × |
| 貢献度 | ○ | ○ | ○ |
| 係数 | ○ | ○ | ○ |
実際のビジネス場面での例
これらの概念をより明確にするために、各タイプの事前分布を実際のビジネス場面で使用する例をご紹介します。
ROI 事前分布の設定:
「最新のブランドリフト調査の結果から、検索広告では 1 ドルあたり約 1.50 ドルの収益が得られると確信している。ROI 事前分布の中央値をこの値に調整する。」
mROI 事前分布の設定:
「ソーシャル メディア広告に 1 ドル追加投入すると、現在の費用レベルでは約 1.10 ドルの収益が見込める。この値を中心に狭い範囲で分布するよう mROI 事前分布を調整する。」
貢献度事前分布の設定:
「デジタル動画広告は、総収益の約 5% を占めていると考えている。貢献度事前分布の中央値をこの値に調整する。」
係数事前分布の設定:
「この変数の基礎となる回帰係数(β)は 0.02 となるはずだ」などといった状況であり、ビジネス ユーザーにはあまり当てはまりません。解釈が入力データと出力指標のスケーリングに大きく依存するため、特定の統計上の目的で使用するデータ サイエンティスト向けです。
介入群の事前分布タイプを選択する際の考慮事項
このセクションでは、有料メディア、オーガニック メディア、メディア以外の介入群に対してさまざまな事前分布タイプを選択する際の指針を、ビジネスとモデリングの両面から説明します。
有料メディアに関する考慮事項
ROI 事前分布は、テスト結果などの事前知識を反映させやすいことが多いため、デフォルトになっています。これは通常、十分な情報に基づく事前分布の最も直感的な選択肢です。
mROI 事前分布は、過去の予算設定に多くの事前知識が反映されている場合や、より慎重な推奨予算を希望する広告主様にとって魅力的な選択肢となることがよくあります。最適な予算配分を過去の予算配分に合わせて抑制し、推奨予算の調整幅を正則化できます。これは、すべてのチャネルで共通の平均値をもつ mROI 事前分布を設定し、標準偏差を調整することで実現できます。事前分布の強度が増すほど(標準偏差が小さいほど)、最適な配分は過去の配分に近づき、推奨予算の調整幅は小さくなります。なお、最適化費用の制約を使用して推奨予算の調整幅を制限することも可能です。その場合、mROI 事前分布を使用する必要はありません。詳しくは、予算の正則化に mROI 事前分布を使用するをご覧ください。
有料メディアでは、貢献度事前分布は ROI 事前分布と非常によく似ています。唯一の違いは、ROI 事前分布の分母はチャネルの費用であるのに対し、貢献度事前分布の分母は合計観測結果である点です。つまり、有料メディアでは、貢献度事前分布は ROI 事前分布に変換でき、ROI 事前分布は貢献度事前分布に変換できます。
係数事前分布は、線形回帰モデルの比較的オーソドックスなパラメータ化です。MMM では、係数の解釈がやや抽象的であるため、十分な情報に基づく事前分布を設定することが困難です。費用対効果はさまざまな地域や期間にわたるチャネルのメディア施策の配分、チャネルのアドストックや収益逓減のパラメータの推定値、チャネルのメディア単価に依存するため、同じ係数値でも、有料メディア チャネルによって費用対効果の値が大きく異なる可能性があります。
結果が収益以外の場合のその他の考慮事項
結果が収益以外の場合(KPI が金額単位ではなく、revenue_per_kpi が指定されていない場合)、有料メディアで利用できる事前分布とその解釈が異なります。PriorDistribution の各パラメータにはデフォルトの分布が設定されていますが、デフォルトが使用されない例外的なケースが 2 つあり、どちらも結果が収益以外の場合に発生します。
金額的な比率を計算できないため、ROI 事前分布の動作が異なります。media_prior_type = 'roi' を使用する場合、デフォルトの事前分布は、代わりに、すべての有料メディア チャネルの合計貢献度に設定されます。つまり、有料メディアによって促進される非金銭的 KPI の合計割合の事前分布が設定されます。ROI 事前分布を使用する場合、有料メディアの合計貢献度に関する専用のアルゴリズムを使ってデフォルト分布が割り当てられます。
mROI 事前分布は、1 ドルあたりの成果項目の限界費用対効果(たとえば、1 ドルあたりの追加登録数)を表します。この値は特定の KPI に大きく依存するため、一律的に適用されるデフォルトを設定することは現実的ではありません。そのため、メリディアンは、収益以外のケースに対して mROI のデフォルト事前分布を提供していません。ご自身のビジネス分野に関する知識に基づいてカスタム事前分布を指定する必要があります。合理的な値の範囲がビジネスごとに大きく異なり、デフォルト値を提供できないため、カスタム分布を指定してください。
貢献度事前分布は、合計結果に対してあるチャネルが占める割合を表すため、結果が収益以外の場合の現実的な選択肢となることがよくあります。この定義は、結果が収益か収益以外かに関係なく当てはまります。
オーガニック メディアに関する考慮事項
貢献度事前分布は、情報に基づく事前分布を設定するにあたって最も直感的な数量値であるため、デフォルトのオプションとなっています。一部のチャネルに期待される貢献度が、他のチャネルよりも大きい場合があります。そのため、ビジネスやマーケティングの戦術に合わせて、事前分布をカスタマイズすることを検討してください。ベータ分布は 0~1 の区間に制限されるため、多くの場合に有用です。
係数事前分布は、線形回帰モデルの比較的オーソドックスなパラメータ化です。有料メディアの場合と同様、係数の解釈がやや抽象的であるため、十分な情報に基づく事前分布を設定することが困難です。貢献度はさまざまな地域や期間にわたるチャネルのメディア施策の配分、チャネルのアドストックや収益逓減のパラメータの推定値に依存するため、同じ係数値でも、オーガニック メディア チャネルによって貢献度が大きく異なる可能性があります。
メディア以外の介入群に関する考慮事項
貢献度事前分布は、情報に基づく事前分布を設定するにあたって最も直感的な数量値であるため、デフォルトのオプションとなっています。事前分布はカスタマイズすることが常に推奨されます。各変数の指定されたベースライン値に応じて、貢献度が正になったり、負になったりする場合や、貢献度の符号が不明な場合もあります。たとえば、特定のベースライン値に価格を設定した場合に、収益にプラスとマイナスのどちらの影響があるのか明確でないかもしれません。あるいは、あるベースライン価格ではプラスの効果をもたらし、別のベースライン価格ではマイナスの効果をもたらすことが事前に予想されているかもしれません。
係数事前分布は、線形回帰モデルの比較的オーソドックスなパラメータ化です。有料メディアやオーガニック メディアの場合と同様、係数の解釈がやや抽象的であるため、十分な情報に基づく事前分布を設定することが困難です。貢献度はさまざまな地域や期間にわたる介入群の価値の配分や、介入群のベースライン値に依存するため、同じ係数値でも、メディア以外の介入群チャネルによって貢献度が大きく異なる可能性があります。
介入群の事前分布タイプを選択する際のフローチャート
次のフローチャートは、介入群の事前分布タイプを選択する際の上述の考慮事項を詳しく示しています。

介入群の事前分布タイプを設定する
このセクションでは、有料メディア、オーガニック メディア、メディア以外の介入群で使用できる事前分布タイプと、メリディアン ライブラリでそれらを設定する際のさまざまな考慮事項について説明します。各介入群タイプで各事前分布タイプを設定するためのいくつかのコード スニペットと例が提示されています。
有料メディアの事前分布を設定する
有料メディアの事前分布タイプは、ModelSpec の media_prior_type 引数と rf_prior_type 引数で指定します。次の表に、事前分布の各タイプに関連付けられている PriorDistribution パラメータを示します。
media_prior_type/rf_prior_type |
PriorDistribution のパラメータ |
|---|---|
'roi'*(デフォルト) |
roi_m*、roi_rf* |
'mroi'* |
mroi_m*、mroi_rf* |
'contribution' |
contribution_m、contribution_rf |
'coefficient' |
beta_m、beta_rf |
有料メディアの設定例
次のセクションでは、2 つの有料メディア チャネルからなるモデルで、これらの事前分布を設定する方法の例を示します。箇条書きの箇所は、それに続くコードブロックが示す事前分布の設定例の根拠を説明しています。事前分布の各タイプの設定プロセスを理解するための参考用に、デフォルト分布も提示しています。
ROI(
roi_m): ここでは、リフト調査のテスト結果に合わせて、対数正規分布の平均値を 1.7 と 2.5 に設定しています。参考までに、デフォルトの分布では
LogNormal(0.2, 0.9)を使用し、平均値は 1.22、中央値は 1.83 です。
import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution
# -----------------------------------------------------------------------------
# Option 1: ROI (Return on Investment)
# -----------------------------------------------------------------------------
# ROI (LogNormal) -> Means at 1.7 and 2.5
prior = prior_distribution.PriorDistribution(
roi_m=prior_distribution.PriorDistribution.lognormal_dist_from_mean_std(
mean=[1.7, 2.5], std=[0.3, 0.5]
)
)
model_spec = spec.ModelSpec(prior=prior, media_prior_type='roi')
mROI(
mroi_m): 平均値 1.0 の狭い分布に設定されています。予算の最適化を正則化するために、両方のチャネルに共通の平均値と小さな標準偏差を選択しています。平均値として 1.0 が選択したのは、両チャネルが飽和状態に近いと考えられるためです。参考までに、デフォルトの分布では
LogNormal(0.0, 0.5)が使用され、平均値は 1.13、中央値は 1 です。
import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution
# -----------------------------------------------------------------------------
# Option 2: mROI (Marginal Return on Investment)
# -----------------------------------------------------------------------------
# mROI (LogNormal) -> Means at 1.0
prior = prior_distribution.PriorDistribution(
mroi_m=prior_distribution.PriorDistribution.lognormal_dist_from_mean_std(
mean=[1.0, 1.0], std=[0.2, 0.2]
)
)
model_spec = spec.ModelSpec(prior=prior, media_prior_type='mroi')
貢献度(
contribution_m): ベータ分布を使用して、特定の「効果への貢献度」を 3% と 4% としてモデル化します。参考までに、デフォルトの分布では
Beta(concentration1=1.0, concentration0=99.0)が使用され、平均値は 1% です。
import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution
# -----------------------------------------------------------------------------
# Option 3: Media Contribution
# -----------------------------------------------------------------------------
# Contribution (Beta) -> Means at 3% and 4%
prior = prior_distribution.PriorDistribution(
contribution_m=tfp.distributions.Beta(
concentration1=[3.0, 4.0], concentration0=[97.0, 96.0]
)
)
model_spec = spec.ModelSpec(prior=prior, media_prior_type='contribution')
係数(
beta_m): 比較的狭いスケール(1.0 と 1.5)の半正規分布を使用して、統計的正則化を適用します。参考までに、デフォルトの分布は
Normal(0, 5)であり、弱情報事前分布と見なされます。
import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution
# -----------------------------------------------------------------------------
# Option 4: Media Coefficient
# -----------------------------------------------------------------------------
# Coefficient (HalfNormal) -> Scales at 1.0 and 1.5
prior = prior_distribution.PriorDistribution(
beta_m=tfp.distributions.HalfNormal(scale=[1.0, 1.5])
)
model_spec = spec.ModelSpec(prior=prior, media_prior_type='coefficient')
オーガニック メディアの事前分布を設定する
オーガニック メディアの事前分布タイプは organic_media_prior_type と organic_rf_prior_type の各引数で指定します。選択肢としては 'contribution' と 'coefficient' があり、デフォルトは 'contribution' です。
organic_media_prior_type/organic_rf_prior_type |
PriorDistribution のパラメータ |
|---|---|
'contribution'(デフォルト) |
contribution_om、contribution_orf |
'coefficient' |
beta_om、beta_orf |
オーガニック メディアの設定例
このセクションでは、介入群がオーガニック メディアである場合の、さまざまなタイプの事前分布を設定するためのコードサンプルを示します。箇条書きの箇所は、それに続くコードブロックが示す事前分布の設定例の根拠を説明しています。事前分布の各タイプの設定プロセスを理解するための参考用に、デフォルト分布も提示しています。
貢献度(
contribution_om): 平均値 3% のベータ分布を設定します。参考までに、デフォルトの分布は
Beta(1.0, 99.0)で、平均値は 1% です。
import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution
# -----------------------------------------------------------------------------
# Option 1: Organic Media Contribution
# -----------------------------------------------------------------------------
# Contribution (Beta) -> Mean at 3%
prior = prior_distribution.PriorDistribution(
contribution_om=tfp.distributions.Beta(
concentration1=[3.0, 3.0], concentration0=[97.0, 97.0]
)
)
model_spec = spec.ModelSpec(prior=prior, organic_media_prior_type='contribution')
係数(
beta_om): 半正規分布を使用し、より厳密な統計的正則化を適用します(スケール 2.0)。参考までに、デフォルトの分布は
HalfNormal(5)で、スケールは 5 です。
import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution
# -----------------------------------------------------------------------------
# Option 2: Organic Media Coefficient
# -----------------------------------------------------------------------------
# Coefficient (HalfNormal) -> Scale at 2.0
prior = prior_distribution.PriorDistribution(
beta_om=tfp.distributions.HalfNormal(scale=[2.0, 2.0])
)
model_spec = spec.ModelSpec(prior=prior, organic_media_prior_type='coefficient')
メディア以外の介入群の事前分布を設定する
メディア以外の介入群の事前分布タイプは、non_media_treatments_prior_type 引数で指定します。'contribution' と 'coefficient' から選択でき、デフォルトは 'contribution' です。
次の表に、各 non_media_treatments_prior_type に対応する PriorDistribution パラメータを示します。これらのパラメータを使用して、事前分布をカスタマイズできます。
non_media_treatments_prior_type |
PriorDistribution のパラメータ |
|---|---|
'contribution'(デフォルト) |
contribution_n |
'coefficient' |
gamma_n |
メディア以外の介入群の設定例
このセクションでは、介入群がメディア以外である場合の、さまざまなタイプの事前分布を設定するためのコードサンプルを示します。箇条書きの箇所は、それに続くコードブロックが示す事前分布の設定例の根拠を説明しています。事前分布の各タイプの設定プロセスを理解するための参考用に、デフォルト分布も提示しています。
貢献度(
contribution_n): 最初の介入群では(-5%)に、2 番目の介入群では(5%)に質量が集中する切断正規分布を設定します。どちらも比較的高い不確実性(10%)を持ちます。最初の介入群の事前分布は、範囲が(-100%, 0%)に切断されるため、負の貢献度のみが許容されます。メディア以外の介入群として価格が設定され、KPI が販売単位数である場合、このような事前分布の適用が妥当であると考えられます。
2 つ目の介入群の事前分布は、範囲が(0%, 100%)に切断されるため、正の貢献度のみが許容されます。メディア以外の介入群としてプロモーションが設定され、KPI が販売単位数である場合は、このような事前分布の適用が妥当であると考えられます
参考までに、デフォルトの分布は
TruncatedNormal(0.0, 0.1, -1.0, 1.0)であり、弱情報事前分布と見なされます。
import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution
# -----------------------------------------------------------------------------
# Option 1: Non-Media Treatment Contribution
# -----------------------------------------------------------------------------
# Contribution (TruncatedNormal) -> Loc at -5% and 5%, Scale at 10%
prior = prior_distribution.PriorDistribution(
contribution_n=tfp.distributions.TruncatedNormal(
loc=[-0.05, 0.05],
scale=[0.1, 0.1],
low=[-1.0, 0.0],
high=[0.0, 1.0]
)
)
model_spec = spec.ModelSpec(
prior=prior,
non_media_treatments_prior_type='contribution'
)
係数(
gamma_n): デフォルトの分布よりも標準偏差が小さいNormal(0, 1)を使用します。事後分散を小さくするには、正則化を強化すると効果的な場合があります。参考までに、デフォルトの分布は
Normal(0, 5)であり、弱情報事前分布と見なされます。
import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution
# -----------------------------------------------------------------------------
# Option 2: Non-Media Treatment Coefficient
# -----------------------------------------------------------------------------
# Coefficient (Normal) -> Loc at 0.0, Scale at 1.0
prior = prior_distribution.PriorDistribution(
gamma_n=tfp.distributions.Normal(
loc=[0.0, 0.0], scale=[1.0, 1.0]
)
)
model_spec = spec.ModelSpec(
prior=prior,
non_media_treatments_prior_type='coefficient'
)
適切な事前分布の引数を指定する
PriorDistribution オブジェクトには、介入群タイプと事前分布タイプの組み合わせごとに引数があります。各介入群タイプについて、選択した事前分布タイプに対応する引数のみが使用され、他の引数は無視されます。
たとえば、R&F 以外の有料メディアに対応する引数は以下のとおりです。
roi_mmroi_mcontribution_mbeta_m
media_prior_type が 'roi' の場合、roi_m が使用され、他は無視されます。
たとえば、ユーザーが複数のタイプの事前分布を指定したとしても、media_prior_type='contribution' であるため、この例では貢献度事前分布のみが使用されます。
次のスニペットでは、roi_m と mroi_m が定義されていますが、media_prior_type が contribution に設定されているため、それらは無視されます。
import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution
# Set custom prior for all paid media treatment parameters.
prior_dist = prior_distribution.PriorDistribution(
roi_m=tfp.distributions.LogNormal(0.2, 0.9), # NOT used
mroi_m=tfp.distributions.LogNormal(0.0, 0.5), # NOT used
contribution_m=tfp.distributions.Beta(1.0, 99.0), # Used
beta_m=tfp.distributions.HalfNormal(5.0), # NOT used
)
# Setting the treatment type to 'contribution' means that only the `contribution_m`
# prior will be used. The priors specified on `roi_m`, `mroi_m`, and `beta_m` will be ignored.
spec = spec.ModelSpec(prior=prior_dist, media_prior_type='contribution')
次のフローチャートも、適切な事前分布を指定する際の流れを詳しく示しています。

その他の考慮事項
このセクションでは、メリディアンでさまざまな介入群の事前分布タイプを選択する際のその他の高度な考慮事項について説明します。
メディア以外の介入群の貢献度事前分布をカスタマイズする
貢献度事前分布のデフォルトは切断正規分布であり、正の値と負の値の両方が許可されます。切断正規分布に介入群固有のパラメータを設定して、確率質量を正または負の値にシフトできます。たとえば、次のコード スニペットでは、最初の介入群には左右対称に切断された分布 Normal(0, 0.1)、2 番目の介入群には正側のみの分布 HalfNormal(0, 0.2)、3 番目の介入群には負側のみの分布 HalfNormal(0, 0.1) を割り当てています。
PriorDistribution(
contribution_n=tfp.distributions.TruncatedNormal(
loc=[0, 0, 0],
scale=[0.1, 0.2, 0.1],
high=[1, 1, 0],
)
)
または、拡張されたベータ分布を使用して、一部の介入群には正の分布を指定し、他の介入群には負の分布を指定することもできます。たとえば、次のコード スニペットでは、最初の介入群に Beta(1, 49) の事前分布、2 番目の介入群に Beta(1, 99) の負の事前分布を割り当てています。
PriorDistribution(
contribution_n=tfp.distributions.TransformedDistribution(
tfp.distributions.Beta([1, 1], [49, 99]),
tfp.bijectors.Scale([1, -1]),
)
)
導出される事前分布とチャネル間の均等性について
1 つの指標(ROI など)の事前分布を指定すると、メリディアンはもう一方の指標(mROI)の事前分布を導出します。この導出される事前分布は標準的なパラメトリック ファミリーに属さず、さまざまな地域や期間にわたるチャネルのメディア施策など、他のモデル パラメータに依存します。
これは、チャネル間の均等性に関してある重要な事項を示唆しています。たとえば、すべてのチャネルに共通の ROI 事前分布を設定した場合でも、導出される mROI 事前分布はチャネルごとに異なります。逆も同様です。したがって、特定の指標についてチャネル間の均等性を想定することが目標である場合は、その指標に対応するパラメータを使用して、その指標自体の事前分布を設定する必要があります。
あるモデルについて導出される ROI 事前分布と mROI 事前分布を調べたい場合は、sample_prior を呼び出した後、use_posterior=False 引数を指定して Analyzer クラスの roi メソッドか marginal_roi メソッドを使用します。
from meridian.analysis import analyzer
from meridian.model import model
import numpy as np
mmm = model.Meridian(...)
mmm.sample_posterior(...)
analyzer_instance = analyzer.Analyzer(mmm)
# Get the prior distributions using `use_posterior=False`.
roi_prior = analyzer_instance.roi(use_posterior=False)
# This is the induced prior on mROI.
mroi_induced_prior = analyzer_instance.marginal_roi(use_posterior=False)
# The shape of the prior samples is (chains, draws, channels).
# We calculate the mean across the 'chains' and 'draws' axes.
print("Mean of ROI prior per channel:", np.mean(roi_prior, axis=(0, 1)))
print("Mean of induced mROI prior per channel:", np.mean(mroi_induced_prior, axis=(0, 1)))
上級: mROI と導出される ROI(およびその逆)の関係
導出される事前分布は標準的なパラメトリック ファミリーに属するものではありませんが、いくらかは一般化できます。mROI は、特定のチャネルでの追加費用の金額単位(1 ドルなど)あたりの費用対効果であることを思い出してください。
リーチとフリークエンシーのデータがないインプレッション ベースのチャネルでは、追加費用の金額単位をメディア施策(インプレッションなど)のスケールアップとして表現できます。
チャネルの Hill 関数が凹状である場合(デフォルト)、チャネルの全体的な ROI は常に mROI よりも高くなります。これは、指定した事前分布と導出される事前分布の間に予測可能な関係があることを意味します。
- ROI 事前分布から導出される mROI 事前分布は、ROI 事前分布よりも厳密に小さくなります。
- mROI 事前分布から導出される ROI 事前分布は、mROI 事前分布よりも厳密に大きくなります。
リーチとフリークエンシー(R&F)チャネルでは、追加費用の金額単位をリーチのスケールアップとして表現できます。その際、平均フリークエンシーは固定とします。
メリディアン モデルでは、R&F チャネルのメディア効果はリーチに対して線形となるため、mROI(リーチベース)は ROI と等しくなります。メリディアンの R&F チャネルの mROI 事前分布はリーチベースであるため、ROI 事前分布と mROI 事前分布のどちらを選んでも事前分布自体は同じになります。ただし、ROI 事前分布と mROI 事前分布はデフォルトの分布が異なるため、デフォルトの分布を使用する場合は、どちらを選ぶかが重要になります。
予算の正則化に mROI 事前分布を使用する
mROI 事前分布を使用して、推奨予算の調整幅を過去の予算配分に合わせて抑制することで、予算の最適化における推奨予算を正則化できます。これは、過去の予算がすでに最適に近いと思われる場合に便利です。
これは、すべてのチャネルで共通の平均値をもつ mROI 事前分布を設定し、標準偏差を小さくすることで実現できます。事前分布の強度が高いほど(標準偏差が小さいほど)、最適な配分は過去の配分に近づき、推奨予算の調整幅が小さくなります。たとえば、mROI の平均値を 1.0 に設定した場合、過去の費用レベルで、費用を 1 ドル増やして得られる収益が 1 ドルであり、チャネルの予算がほぼ最適であることを意味します。
import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution
# Assume 2 paid media channels.
# Set a common mROI prior mean of 1.0, suggesting budgets are near optimal.
# Use a very small standard deviation to create a strong prior.
mean_mroi = [1.0, 1.0]
std_mroi = [0.1, 0.1] # A small std dev creates a strong prior.
lognormal_mroi_regularizing = prior_distribution.PriorDistribution.lognormal_dist_from_mean_std(
mean_mroi, std_mroi
)
prior_mroi_regularizing = prior_distribution.PriorDistribution(
mroi_m=lognormal_mroi_regularizing
)
# This ModelSpec will produce more conservative budget recommendations.
model_spec_regularized = spec.ModelSpec(
prior=prior_mroi_regularizing,
media_prior_type='mroi'
)
チャネルのメディア施策の量とその飽和度は、期間によって変化する可能性があります。そのため、mROI 値は期間によって異なる場合があります。mROI 事前分布を使用して予算の最適化を正則化することが目標の場合は、事前分布の期間が最適化の期間と一致するようにしてください。そうしないと、正則化が意図したとおりに機能しない可能性があります。
- 最適化期間を調整する:
BudgetOptimizer.optimize()のselected_time引数を使用します。コードサンプルについては、selected_geos と selected_times でモデルの結果をフィルタするをご覧ください。 - mROI 事前分布の期間を調整する:
ModelSpecのroi_calibration_period引数とrf_roi_calibration_period引数を使用します。どちらの期間も、デフォルトではモデリング期間全体が対象となります。