メリディアンでは、結果の増分を費用で割ったものが ROI と定義されます。しかし、KPI が収益ではなく、revenue_per_kpi が InputData に渡されていない場合、結果は収益では表されません。そのため、カスタムの ROI 事前分布を特定するのは難しくなる場合があります。
結果が収益でない場合にカスタム事前分布を設定するには、次のオプションをご検討ください。
カスタムの有料メディア合計貢献度の事前分布
有料メディアによる KPI の増分が KPI 全体に占める割合についておおよその見当がついている場合は、すべてのチャネルに共通の ROI 事前分布を設定することで、有料メディアの合計貢献度の事前分布に特定の平均値と標準偏差を設定できます。設定方法は次のとおりです。
import numpy as np
import tensorflow_probability.substrates.jax as tfp_jax
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))
# Ensure 64-bit float precision to maintain type consistency with JAX
roi_prior = tfp_jax.distributions.LogNormal(
lognormal_mu.astype(np.float64),
lognormal_sigma.astype(np.float64),
)
詳細は次のとおりです。
kpiは、地域と時間全体の KPI の合計です。costは、地域と時間全体でのチャネルあたりの合計費用の配列です。
この例では、すべてのメディアの KPI 貢献度は 50% を中心としており、標準偏差は 15% です。次に、有料メディアの合計貢献度に関する暗黙的な事前分布の平均が 50%、標準偏差が 15% になるように、すべてのチャネルで一定の ROI 事前分布を取得します。得られた事前分布 roi_prior は、roi_m または roi_rf の PriorDistribution コンテナに設定して使用できます。
有料メディアの合計貢献度の事前分布には、個々のチャネルについての事前知識が必要ないという利点があります。ただし、各チャネルについて追加の知識や見解がある場合は、IKPC の事前分布またはチャネルレベルの貢献度の事前分布を設定することを検討してください。
カスタムの費用あたり増分 KPI(IKPC)の事前分布
チャネルの費用あたり増分 KPI(IKPC)について見当がついている場合は、PriorDistribution コンテナ内の roi_m または roi_rf を使用して、IKPC の事前分布を設定できます。revenue_per_kpi が設定されていない場合、メリディアンでは ROI と IKPC は等しくなります。
例:
import numpy as np
import tensorflow_probability.substrates.jax as tfp_jax
roi_prior = tfp_jax.distributions.LogNormal(
np.array([0.5, 0.6, 0.7], dtype=np.float64),
np.array([0.5, 0.5, 0.5], dtype=np.float64),
)
ただし、これをおすすめするのは、すべてのメディア チャネルにカスタムの IKPC 事前分布を設定する場合のみです。これは、revenue_per_kpi=None のデフォルトの ROI 事前分布が、収益 KPI を対象として設計されており、ROI が単位のない尺度になるように設定されているためです。一部のチャネルの IKPC についてのみ見当がついている場合でも、残りのチャネルに対して妥当なデフォルトの IKPC 事前分布を設定する必要があります。IKPC は、新車やチョコレート バーなど、対象の規模によって大きく異なります。そのため、メリディアンには推奨されるデフォルトの IKPC 事前分布がありません。
チャネルレベルの貢献度の事前分布
KPI の増分について、特定のチャネルが貢献している比率がおおよそわかっている場合は、ModelSpec で media_prior_type='contribution' と rf_prior_type='contribution' を設定し、PriorDistribution で contribution_m と contribution_rf の事前分布をカスタマイズすることで、特定のチャネルの貢献度事前分布を設定できます。次に例を示します。
import numpy as np
import tensorflow_probability.substrates.jax as tfp_jax
from meridian.model import prior_distribution, spec
prior = prior_distribution.PriorDistribution(
contribution_m=tfp_jax.distributions.Beta(
np.array([1.0, 5.0], dtype=np.float64),
np.array([99.0, 95.0], dtype=np.float64),
),
contribution_rf=tfp_jax.distributions.Beta(
np.float64(2.0), np.float64(98.0)
),
)
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_jax.distributions.Beta(np.float64(2.0), np.float64(98.0)) はスカラー分布であるため、すべての R&F チャネルにブロードキャストされます)。