結果が収益でない場合にカスタムの事前分布を設定する

メリディアンでは、結果の増分を費用で割ったものが ROI と定義されます。しかし、KPI が収益ではなく、revenue_per_kpiInputData に渡されていない場合、結果は収益では表されません。そのため、カスタムの ROI 事前分布を特定するのは難しくなる場合があります。

結果が収益でない場合にカスタム事前分布を設定するには、次のオプションをご検討ください。

カスタムの有料メディア合計貢献度の事前分布

有料メディアによる KPI の増分の全体に対する割合がおおよそわかっている場合は、次のように処理することで、メディアの合計貢献度の平均と標準偏差が特定の値に設定された共通の ROI 事前分布をすべてのチャネルに設定できます。

p_mean = 0.5  # prior mean proportion of KPI incremental due to all media
p_sd = 0.15  # prior std dev proportion of KPI incremental to all media
roi_mean = p_mean * kpi / np.sum(cost)
roi_sd = p_sd * kpi / np.sqrt(np.sum(np.power(cost, 2)))
lognormal_sigma = np.sqrt(np.log(roi_sd**2 / roi_mean**2 + 1))
lognormal_mu = np.log(roi_mean * np.exp(-lognormal_sigma**2 / 2))
roi_prior = tfp.distributions.LogNormal(
    lognormal_mu.astype(np.float32),
    lognormal_sigma.astype(np.float32),
)

ここで、

  • kpi は、地域と時間全体の KPI の合計です。
  • cost は、地域と時間全体でのチャネルあたりの合計費用の配列です。

この例では、すべてのメディアの KPI 貢献度は 50% を中心としており、標準偏差は 15% です。次に、有料メディアの合計貢献度に関する暗黙的な事前分布の平均が 50%、標準偏差が 15% になるように、すべてのチャネルで一定の ROI 事前分布を取得します。得られた事前分布 roi_prior は、roi_m または roi_rfPriorDistribution コンテナに設定して使用できます。

有料メディアの合計貢献度の事前分布は、個々のチャネルのおおよその値がわかっている必要がないため、有用な場合があります。ただし、各チャネルに関する追加の知識や直感がある場合は、IKPC の事前分布またはチャネルレベルの貢献度の事前分布を設定することを検討してください。

カスタムの費用あたり増分 KPI(IKPC)の事前分布

チャネルの費用あたり増分 KPI(IKPC)のおおよその値がわかっている場合は、PriorDistribution コンテナで roi_m または roi_rf を使用して IKPC の事前分布を設定できます。revenue_per_kpi が設定されていない場合、ROI はメリディアンの IKPC と同等です。

例:

roi_prior = tfp.distributions.LogNormal([0.5, 0.6, 0.7], [0.5, 0.5, 0.5])

ただし、これは、すべてのメディア チャネルにカスタムの IKPC の事前分布を設定する場合にのみおすすめします。revenue_per_kpi=None のデフォルトの ROI 事前分布は、ROI が単位なしスケールである収益 KPI 用に設計されていることから、データに適さない傾向があるためです。IKPC がおおよそわかっているチャネルが一部だけの場合でも、その他のチャネルに対し、妥当なデフォルトの IKPC の事前分布を設定する必要があります。IKPC は、新登場の車やチョコバーなど、スケールに大きく依存するため、メリディアンには推奨されるデフォルトの IKPC の事前分布はありません。

チャネルレベルの貢献度の事前分布

KPI の増分について、特定のチャネルが貢献している比率がおおよそわかっている場合は、ModelSpecmedia_prior_type='contribution'rf_prior_type='contribution' を設定し、PriorDistributioncontribution_mcontribution_rf の事前分布をカスタマイズすることで、特定のチャネルの貢献度事前分布を設定できます。次に例を示します。

prior = prior_distribution.PriorDistribution(
    contribution_m=tfp.distributions.Beta([1, 5], [99, 95]),
    contribution_rf=tfp.distribution.Beta(2, 98),
)
model_spec = spec.ModelSpec(
    prior=prior,
    media_prior_type="contribution",
    rf_prior_type="contribution",
)

この例では、2 つのメディア チャネルがあります。1 つ目には、平均が 1% の貢献度事前分布 Beta(1, 99) を割り当てます。2 つ目には、平均が 5% の貢献度事前分布 Beta(5, 95) を割り当てます。R&F チャネルには、平均が 2% の貢献度事前分布 Beta(2, 98) をそれぞれ割り当てます。(tfp.distribution.Beta(2, 98) はスカラー分布であるため、すべての R&F チャネルにブロードキャストされます)。