GitHub 上のソースを見る
|
モデルを適合させた後、計算を実行して元データを分析します。
meridian.analysis.analyzer.Analyzer(
meridian: meridian.model.model.Meridian
)
子クラス
メソッド
adstock_decay
adstock_decay(
confidence_level: float = constants.DEFAULT_CONFIDENCE_LEVEL
) -> pd.DataFrame
メディア チャネルとリーチとフリークエンシー チャネルの adstock の減少を計算します。
| 引数 | |
|---|---|
confidence_level
|
事前分布および事後分布の信頼区間の信頼度。0~1 の値で表されます。 |
| 戻り値 | |
|---|---|
Adstock 関数のチャネル、time_units、distribution、ci_hi、ci_lo、mean を含む Pandas DataFrame。 |
baseline_summary_metrics
baseline_summary_metrics(
selected_geos: (Sequence[str] | None) = None,
selected_times: (Sequence[str] | None) = None,
aggregate_geos: bool = True,
aggregate_times: bool = True,
confidence_level: float = constants.DEFAULT_CONFIDENCE_LEVEL,
batch_size: int = constants.DEFAULT_BATCH_SIZE
) -> xr.Dataset
ベースラインの概要指標を返します。
| 引数 | |
|---|---|
selected_geos
|
対象地域のサブセットを含むリスト(省略可)。デフォルトでは、すべての地域が含まれます。 |
selected_times
|
対象期間のサブセットを含むリスト(省略可)。デフォルトでは、すべての期間が含まれます。 |
aggregate_geos
|
ブール値。True の場合、想定される結果はすべての地域の合算になります。 |
aggregate_times
|
ブール値。True の場合、想定される結果はすべての期間の合算になります。 |
confidence_level
|
メディアの概要指標の信頼区間の信頼度。0~1 の値で表されます。 |
batch_size
|
各バッチでのチェーンあたりの最大抽出数を表す整数。メモリの枯渇を回避するため、計算はバッチで実行されます。メモリエラーが発生した場合は、batch_size を減らしてみてください。計算は通常、batch_size の値が大きいほど高速になります。 |
| 戻り値 | |
|---|---|
metric(mean、median、ci_low、ci_high)、distribution(事前分布、事後分布)の座標を有し、次のデータ変数を含む xr.Dataset: baseline_outcome、pct_of_contribution。 |
cpik
cpik(
use_posterior: bool = True,
new_data: (meridian.analysis.analyzer.DataTensors | None) = None,
selected_geos: (Sequence[str] | None) = None,
selected_times: (Sequence[str] | None) = None,
aggregate_geos: bool = True,
batch_size: int = constants.DEFAULT_BATCH_SIZE
) -> tf.Tensor
各チャネルを対象に、KPI 分布の増分あたりの費用(CPIK)の分布を計算します。
CPIK の分子は、チャネルに対する合計費用です。CPIK の分母は、そのチャネルの費用をゼロに設定し、他のすべてのチャネルの費用を変更しない場合に推定される KPI の変化量です。
new_data=None の場合、このメソッドは Meridian オブジェクトの初期化に使用された有料メディア変数の値に基づいて、CPIK を計算します。ユーザーは new_data 引数を通じて、この過去データをオーバーライドすることもできます。ただし、新しいテンソルのディメンションが一致している場合に限ります。次に例を示します。
new_data = DataTensors(media=new_media, frequency=new_frequency)
selected_geos または selected_times が指定されている場合、CPIK の分子は、その選択されている地域と期間の合計費用になります。モデルのトレーニングに使用される InputData の費用に地域と時間のディメンションがない場合は、例外がスローされます(使用されている引数 new_data.media_spend と new_data.rf_spend のディメンションが InputData の費用と異なる場合は、ユーザー側のエラーである可能性があるため、例外がスローされます)。
なお、CPIK は 1/ROI であり、ROI は use_kpi=True を指定して roi メソッドを呼び出すことで取得されます。
| 引数 | |
|---|---|
use_posterior
|
ブール値。True の場合、事後分布が計算されます。それ以外の場合は、事前分布が計算されます。 |
new_data
|
省略可。media、media_spend、reach、frequency、rf_spend、revenue_per_kpi のデータを含む DataTensors。指定されている場合、cpik は、new_data で渡されたテンソルの値と、残りのすべてのテンソルの元の値を使って計算されます。新しいテンソルのディメンションは、meridian.input_data の対応する元のテンソルのディメンションと一致している必要があります。None の場合、cpik はすべてのテンソルの元の値を使って計算されます。 |
selected_geos
|
対象地域のサブセットを含むリスト(省略可)。デフォルトでは、すべての地域が含まれます。 |
selected_times
|
対象期間のサブセットを含むリスト(省略可)。デフォルトでは、すべての期間が含まれます。 |
aggregate_geos
|
ブール値。True の場合、推定 KPI はすべての地域の合算になります。 |
batch_size
|
各バッチでのチェーンあたりの最大抽出数を表す整数。メモリの枯渇を回避するため、計算はバッチで実行されます。メモリエラーが発生した場合は、batch_size を減らしてみてください。計算は通常、batch_size の値が大きいほど高速になります。 |
| 戻り値 | |
|---|---|
ディメンションが (n_chains, n_draws, n_geos,
(n_media_channels + n_rf_channels)) の CPIK 値のテンソル。aggregate_geos=True の場合、n_geos ディメンションは破棄されます。 |
expected_outcome
expected_outcome(
use_posterior: bool = True,
new_data: (meridian.analysis.analyzer.DataTensors | None) = None,
selected_geos: (Sequence[str] | None) = None,
selected_times: (Sequence[str] | None) = None,
aggregate_geos: bool = True,
aggregate_times: bool = True,
inverse_transform_outcome: bool = True,
use_kpi: bool = False,
batch_size: int = constants.DEFAULT_BATCH_SIZE
) -> tf.Tensor
事前分布または事後分布の想定される結果を計算します。
このメソッドは、事後分布(または事前分布)パラメータの抽出ごとに E(Outcome|Media, RF, Organic media, Organic RF, Non-media
treatments, Controls) を計算します。ここで Outcome は、revenue(use_kpi=False の場合)か kpi(use_kpi=True の場合)を指します。revenue_per_kpi が定義されていない場合、use_kpi は False にできません。
new_data=None の場合、このメソッドは Meridian オブジェクトの初期化に使用された独立変数の値に基づいて、想定される結果を計算します。ユーザーは new_data 引数を通じて、この過去データをオーバーライドすることもできます。ただし、新しいテンソルのディメンションが一致している場合に限ります。次に例を示します。
new_data=DataTensors(reach=new_reach, frequency=new_frequency)
原理上、想定される結果は他の時間ディメンション(今後の予測など)を使って計算することもできますが、この方法では次のような複雑な処理が増えるため、このメソッドでは許可されていません。
- 対応する価格(KPI あたりの収益)データも必要です。
- モデルに週次効果のパラメータが含まれている場合は、トレーニング データ期間外の期間について、その影響を推定または予測するメソッドが必要です。
| 引数 | |
|---|---|
use_posterior
|
ブール値。True の場合、想定される結果の事後分布が計算されます。それ以外の場合は、事前分布が計算されます。 |
new_data
|
省略可能な DataTensors コンテナ(省略可能な次の新しいテンソルを含む: media、reach、frequency、organic_media、organic_reach、organic_frequency、non_media_treatments、controls)。None の場合、想定される結果は Meridian オブジェクトの初期化に使用されたデータテンソルの元の値に応じて計算されます。new_data 引数が使われた場合、想定される結果は、new_data で渡されたテンソルの値と、残りの未設定テンソルの元の値に基づいて計算されます。たとえば expected_outcome(new_data=DataTensors(reach=new_reach,
frequency=new_frequency)) は、元の media、organic_media、organic_reach、organic_frequency、non_media_treatments、controls テンソルと、reach および frequency テンソルの新しい指定値に基づいて、想定される結果を計算します。新しいテンソルのディメンションは、input_data の対応する元のテンソルのディメンションと一致している必要があります。 |
selected_geos
|
対象地域のサブセットを含むリスト(省略可)。デフォルトでは、すべての地域が含まれます。 |
selected_times
|
対象の日付のサブセットを含むリスト(省略可)。ここで指定できるのは、InputData.time の時間ディメンションの座標と一致している値のみです。デフォルトでは、すべての期間が含まれます。 |
aggregate_geos
|
ブール値。True の場合、想定される結果はすべての地域の合算になります。 |
aggregate_times
|
ブール値。True の場合、想定される結果はすべての期間の合算になります。 |
inverse_transform_outcome
|
ブール値。True の場合、InputData に渡された元の KPI または収益(use_kpi に渡された内容に応じる)で想定される結果を返します。False の場合、KpiTransformer による変換後の結果を返します。これは、モデル内での表現方法を反映します。 |
use_kpi
|
ブール値。use_kpi = True の場合、推定 KPI が計算されます。それ以外の場合は、推定収益 (kpi * revenue_per_kpi) が計算されます。revenue_per_kpi が定義されていない場合、または inverse_transform_outcome = False の場合は use_kpi = True が必要です。 |
batch_size
|
各バッチでのチェーンあたりの最大抽出数を表す整数。メモリの枯渇を回避するため、計算はバッチで実行されます。メモリエラーが発生した場合は、batch_size を減らしてみてください。計算は通常、batch_size の値が大きいほど高速になります。 |
| 戻り値 | |
|---|---|
ディメンション (n_chains, n_draws, n_geos,
n_times) の想定される結果(use_kpi 引数に応じて KPI または収益)のテンソル。ディメンション n_geos とディメンション n_times は、それぞれ aggregate_geos=True または aggregate_time=True の場合に破棄されます。 |
| 発生するエラー | |
|---|---|
NotFittedModelError
|
このメソッドを呼び出す前に sample_posterior()(use_posterior=True の場合)または sample_prior()(use_posterior=False の場合)が呼び出されていない場合。 |
expected_vs_actual_data
expected_vs_actual_data(
aggregate_geos: bool = False,
aggregate_times: bool = False,
split_by_holdout_id: bool = False,
confidence_level: float = constants.DEFAULT_CONFIDENCE_LEVEL
) -> xr.Dataset
時間の経過に伴って想定される結果と実際の結果のデータが計算されます。
| 引数 | |
|---|---|
aggregate_geos
|
ブール値。True の場合、予測値、ベースライン、実際の値がすべての地域の合算になります。 |
aggregate_times
|
ブール値。True の場合、予測値、ベースライン、実際の値がすべての期間の合算になります。 |
split_by_holdout_id
|
ブール値。True と holdout_id が存在する場合、データは 'Train'、'Test'、'All Data' のサブセクションに分割されます。 |
confidence_level
|
想定される結果の信頼区間の信頼レベル。値は 0~1 になります。デフォルト: 0.9。 |
| 戻り値 | |
|---|---|
| 想定される結果、ベースラインの結果、実際の結果の指標を含むデータセット。 |
filter_and_aggregate_geos_and_times
filter_and_aggregate_geos_and_times(
tensor: tf.Tensor,
selected_geos: (Sequence[str] | None) = None,
selected_times: (Sequence[str] | Sequence[bool] | None) = None,
aggregate_geos: bool = True,
aggregate_times: bool = True,
flexible_time_dim: bool = False,
has_media_dim: bool = True
) -> tf.Tensor
テンソルの地域と時間のディメンションをフィルタまたは集計します。
| 引数 | |
|---|---|
tensor
|
ディメンションが [..., n_geos, n_times] または [..., n_geos,
n_times, n_channels] のテンソル。ここで n_channels は、メディア チャネル、RF チャネル、すべての有料チャネル(メディアと RF)、またはすべてのチャネル(メディア、RF、メディア以外、オーガニック メディア、オーガニック RF)のいずれかの数です。 |
selected_geos
|
対象地域のサブセットを含むリスト(省略可)。デフォルトでは、すべての地域が含まれます。選択した地域は、InputData.geo の地域と一致している必要があります。 |
selected_times
|
対象とする時間のリスト(省略可)。InputData.time の時間ディメンションの座標のサブセットを含む文字列リスト、またはテンソルの時間ディメンションと同じ長さのブール値リストのいずれかです。デフォルトでは、すべての期間が含まれます。 |
aggregate_geos
|
ブール値。True の場合、テンソルはすべての地域の合算になります。 |
aggregate_times
|
ブール値。True の場合、テンソルはすべての期間の合算になります。 |
flexible_time_dim
|
ブール値。True の場合、テンソルの時間ディメンションは InputData.time の期間数と一致する必要はありません。ここで selected_times を使用する場合は、テンソルの時間ディメンションと同じ長さのブール値リストにする必要があります。 |
has_media_dim
|
ブール値。flexible_time_dim=True の場合にのみ使用されます。それ以外の場合は、テンソルのディメンションに基づいて推定されます。True の場合、テンソルには時間ディメンションの後にメディア ディメンションがあると想定されます。False の場合、テンソルの最後のディメンションは時間ディメンションとみなされます。 |
| 戻り値 | |
|---|---|
| 地域と時間のディメンションがフィルタまたは集計されたテンソル。 |
get_aggregated_impressions
get_aggregated_impressions(
new_data: (meridian.analysis.analyzer.DataTensors | None) = None,
selected_geos: (Sequence[str] | None) = None,
selected_times: (Sequence[str] | None) = None,
aggregate_geos: bool = True,
aggregate_times: bool = True,
optimal_frequency: (Sequence[float] | None) = None,
include_non_paid_channels: bool = True
) -> tf.Tensor
すべてのチャネルのデータ内のインプレッション値を集計して計算します。
| 引数 | |
|---|---|
new_data
|
新しい media、reach、frequency、organic_media、organic_reach、organic_frequency、non_media_treatments のテンソルを含むオプションの DataTensors オブジェクト。new_data 引数が使用されている場合、集計されたインプレッション数は、new_data 引数で渡されたテンソルの値と、残りのすべてのテンソルの元の値を使用して計算されます。新しいテンソルのディメンションは、meridian.input_data の対応する元のテンソルのディメンションと一致している必要があります。None の場合、Meridian オブジェクトの既存のテンソルが使用されます。 |
selected_geos
|
対象地域のサブセットを含むリスト(省略可)。デフォルトでは、すべての地域が含まれます。 |
selected_times
|
対象期間のサブセットを含むリスト(省略可)。デフォルトでは、すべての期間が含まれます。 |
aggregate_geos
|
ブール値。True の場合、想定される結果はすべての地域の合算になります。 |
aggregate_times
|
ブール値。True の場合、想定される結果はすべての期間の合算になります。 |
optimal_frequency
|
ディメンションが n_rf_channels のリスト(省略可)。事後分布の平均費用対効果を最大化するチャネルあたりの最適なフリークエンシーが含まれます。デフォルト値は None で、指標の計算には過去のフリークエンシーが使用されます。 |
include_non_paid_channels
|
ブール値。True の場合、集計にはオーガニック メディア、オーガニック RF、およびメディア以外のチャネルが含まれます。 |
| 戻り値 | |
|---|---|
形状が (n_selected_geos, n_selected_times, n_channels)(地域と時間が集計される場合は (n_channels,))のテンソル。チャネルごとの合計インプレッション値が含まれます。 |
get_historical_spend
get_historical_spend(
selected_times: (Sequence[str] | None),
include_media: bool = True,
include_rf: bool = True
) -> xr.DataArray
期間に基づいて集計された過去の費用を取得します。
| 引数 | |
|---|---|
selected_times
|
過去の費用を取得する期間。「なし」の場合、過去の費用はすべての時点で集計されます。 |
include_media
|
リーチとフリークエンシーのデータがない有料メディア チャネルの費用を含めるかどうか。 |
include_rf
|
リーチとフリークエンシーのデータがある有料メディア チャネルの費用を含めるかどうか。 |
| 戻り値 | |
|---|---|
座標が channel でデータ変数 spend を含む xr.DataArray。 |
| 発生するエラー | |
|---|---|
ValueError
|
include_media と include_rf の両方が False の場合、ValueError が発生します。 |
get_rhat
get_rhat() -> Mapping[str, tf.Tensor]
モデル内の各パラメータの R-hat 値を計算します。
| 戻り値 | |
|---|---|
| R-hat 値の辞書。各パラメータがキーで、値がパラメータに対応する R-hat。 |
| 発生するエラー | |
|---|---|
NotFittedModelError
|
このメソッドを呼び出す前に self.sample_posterior() が呼び出されない場合。 |
hill_curves
hill_curves(
confidence_level: float = constants.DEFAULT_CONFIDENCE_LEVEL,
n_bins: int = 25
) -> pd.DataFrame
各チャネルの曲線のプロットに使用される Hill 曲線テーブルを推定します。
| 引数 | |
|---|---|
confidence_level
|
事前分布および事後分布の信頼区間の信頼度。0~1 の値で表されます。デフォルトは 0.9 です。 |
n_bins
|
プロット用のヒストグラムに含める幅の等しいビンの数。デフォルトは 25 です。
|
| 戻り値 | |
|---|---|
次の列を含む Hill 曲線 pd.DataFrame。
|
incremental_outcome
incremental_outcome(
use_posterior: bool = True,
new_data: (meridian.analysis.analyzer.DataTensors | None) = None,
non_media_baseline_values: (Sequence[float | str] | None) = None,
scaling_factor0: float = 0.0,
scaling_factor1: float = 1.0,
selected_geos: (Sequence[str] | None) = None,
selected_times: (Sequence[str] | Sequence[bool] | None) = None,
media_selected_times: (Sequence[str] | Sequence[bool] | None) = None,
aggregate_geos: bool = True,
aggregate_times: bool = True,
inverse_transform_outcome: bool = True,
use_kpi: bool = False,
include_non_paid_channels: bool = True,
batch_size: int = constants.DEFAULT_BATCH_SIZE
) -> tf.Tensor
事後分布か事前分布の増分結果を計算します。
このメソッドは、事後分布か事前分布のパラメータの抽出ごとに、各メディア チャネルのメディア結果を計算します。増分結果は次のように定義されます。
E(Outcome|Media_1, Controls) - E(Outcome|Media_0, Controls)
ここで、Media_1 は、media_selected_times によって指定された期間のセットを対象とした特定のチャネルでのメディア マーケティングに、scaling_factor1(デフォルトは 1.0)を乗算することを意味します。同様に、Media_0 は、これらの期間を対象としたメディア マーケティングに scaling_factor0(デフォルトは 0.0)を乗算することを意味します。
リーチとフリークエンシーのデータがあるチャネルでは、フリークエンシーは固定され、リーチが調整されます。「結果」とは、use_kpi=False の場合は revenue、use_kpi=True の場合は kpi を指します。revenue_per_kpi が定義されていない場合、use_kpi は False にできません。
new_data=None の場合、このメソッドはメリディアン オブジェクトの初期化に使用された media、reach、frequency、organic_media、organic_reach、organic_frequency、non_media_treatments、および revenue_per_kpi テンソルを使用して、増分結果を計算します。この動作は、new_data 引数でオーバーライドできます。たとえば new_data=DataTensors(media=new_media) は、new_media テンソルと、reach、frequency、organic_media、organic_reach、organic_frequency、non_media_treatments、および revenue_per_kpi テンソルの元の値を使用して、増分結果を計算します。
このメソッドでの計算は、メリディアンの実装時に構築された次の 2 つの重要な仮説に基づきます。
- メディア効果の追加性(インタラクションなし)。
- モデルの KPI スケールの追加の変更は、元の KPI スケールでの追加の変更に対応しています。つまり、切片とコントロールの効果はメディア効果に影響しません。現在この仮説が成立するのは、結果変換に伴う処理が中心化とスケーリングに限られている(対数変換などを伴わない)ためです。
| 引数 | |
|---|---|
use_posterior
|
ブール値。True の場合は、増分結果の事後分布が計算されます。それ以外の場合は、事前分布が計算されます。 |
new_data
|
省略可能な DataTensors コンテナ(省略可能な media、reach、frequency、organic_media、organic_reach、organic_frequency、non_media_treatments、および revenue_per_kpi テンソルを含む)。None の場合、増分結果はメリディアン オブジェクトに指定された InputData を使用して計算されます。new_data が指定されている場合、増分結果は new_data の新しいテンソルと残りのテンソルの元の値を使用して計算されます。たとえば incremental_outcome(new_data=DataTensors(media=new_media) は、new_media と、reach、frequency、organic_media、organic_reach、organic_frequency、non_media_treatments、および revenue_per_kpi の元の値を使用して増分結果を計算します。new_data のテンソルのいずれかに InputData とは異なる数の期間が指定されている場合は、すべてのテンソルに同数の期間を指定する必要があります。 |
non_media_baseline_values
|
形状(n_non_media_channels,)のリスト(省略可)。各要素は、浮動小数点数であるか(指定されたチャネルのベースラインとして固定値が使われることを意味する)、文字列「min」または「max」のいずれか(指定された、メディア以外の介入チャネルの調整値のベースラインとして、グローバルな最小値か最大値が使われることを意味する)です。指定されていない場合は、メディア以外の各介入チャネルのベースラインとして最小値が使われます。 |
scaling_factor0
|
浮動小数点数。media_selected_times で指定された期間に、反事実的シナリオ「Media_0」をスケーリングするための係数。負でない値で、scaling_factor1 より小さい値にする必要があります。 |
scaling_factor1
|
浮動小数点数。media_selected_times で指定された期間に、「Media_1」をスケーリングするための係数。負でない値で、scaling_factor0 より大きい値にする必要があります。 |
selected_geos
|
対象地域のサブセットを含むリスト(省略可)。デフォルトでは、すべての地域が含まれます。 |
selected_times
|
対象とする日付のサブセット、または new_XXX 引数で指定されている期間の数と同じ長さのブール値を含むリスト(省略可)。増分結果は、media_selected_times 引数の期間中に実施されたメディア施策によって、selected_times 引数の期間中に発生した KPI の増分に相当します。なお use_kpi=False の場合、selected_times に含めることができのは revenue_per_kpi の入力データがある期間に限られます。デフォルトでは、revenue_per_kpi データが利用可能なすべての期間が含まれます。 |
media_selected_times
|
対象の日付のサブセット、または new_media で指定されている期間の数と同じ長さのブール値を含むリスト(省略可)。new_media が指定されている場合、media_selected_times は new_media の期間のサブセットを選択できます。new_media が指定されていない場合、media_selected_times は InputData.time から選択します。増分結果は、media_selected_times 引数の期間中に実施されたメディア施策によって、selected_times 引数の期間中に発生した KPI の増分に相当します。各チャネルの増分結果は、指定された期間中にメディア施策を scaling_factor1 と scaling_factor0 によってスケーリングした場合の予測 KPI の差分として定義されます。デフォルトでは、この差分は、過去の施策レベルでの(または new_media で指定された)メディアの場合と、メディア施策がゼロの場合との差になります。デフォルトでは、すべての期間が含まれます。 |
aggregate_geos
|
ブール値。True の場合、増分結果はすべての地域の合算になります。 |
aggregate_times
|
ブール値。True の場合、増分結果はすべての期間の合算になります。 |
inverse_transform_outcome
|
ブール値。True の場合、InputData に渡された元の KPI または収益(use_kpi に渡された内容に応じる)で想定される結果を返します。False の場合、KpiTransformer による変換後の結果を返します。これは、モデル内での表現方法を反映します。 |
use_kpi
|
ブール値。use_kpi = True の場合、推定 KPI が計算されます。それ以外の場合は、推定収益 (kpi * revenue_per_kpi) が計算されます。revenue_per_kpi データが使用できない場合や inverse_transform_outcome = False の場合は use_kpi = True が必要です。 |
include_non_paid_channels
|
ブール値。True の場合は、メディア以外の介入効果とオーガニックの効果が計算に含まれます。False の場合は、有料メディアと RF の効果のみが含まれます。 |
batch_size
|
各バッチでのチェーンあたりの最大抽出数を表す整数。メモリの枯渇を回避するため、計算はバッチで実行されます。メモリエラーが発生した場合は、batch_size を減らしてみてください。計算は通常、batch_size の値が大きいほど高速になります。 |
| 戻り値 | |
|---|---|
ディメンション (n_chains, n_draws, n_geos,
n_times, n_channels) を含む増分結果(use_kpi 引数に応じて KPI か収益のいずれか)のテンソル。include_non_paid_channels=True の場合、n_channel はメディア チャネル、RF チャネル、オーガニック メディア チャネル、オーガニック RF チャネル、メディア以外のチャネルの合計数です。include_non_paid_channels=False の場合、n_channels はメディア チャネルと RF チャネルの合計数です。ディメンション n_geos とディメンション n_times は、それぞれ aggregate_geos=True または aggregate_times=True の場合に破棄されます。 |
| 発生するエラー | |
|---|---|
NotFittedModelError
|
このメソッドを呼び出す前に sample_posterior()(use_posterior=True の場合)または sample_prior()(use_posterior=False の場合)が呼び出されていない場合。 |
ValueError
|
new_media 引数にメディアと同じテンソル形状がない場合。 |
marginal_roi
marginal_roi(
incremental_increase: float = 0.01,
use_posterior: bool = True,
new_data: (meridian.analysis.analyzer.DataTensors | None) = None,
selected_geos: (Sequence[str] | None) = None,
selected_times: (Sequence[str] | None) = None,
aggregate_geos: bool = True,
by_reach: bool = True,
use_kpi: bool = False,
batch_size: int = constants.DEFAULT_BATCH_SIZE
) -> (tf.Tensor | None)
限界費用対効果の事前分布または事後分布を計算します。
限界費用対効果(mROI)の分子は、特定のチャネルの費用をわずかな割合だけ増加させた場合に想定される結果の変化(kpi または kpi * revenue_per_kpi)です。mROI の分母は、そのチャネルの合計費用の対応する部分(合計費用に占める同じ割合の費用)です。
new_data=None の場合、このメソッドは Meridian オブジェクトの初期化に使用された有料メディア変数の値に基づいて、限界費用対効果を計算します。ユーザーは new_data 引数を通じて、この過去データをオーバーライドすることもできます。ただし、新しいテンソルのディメンションが一致している場合に限ります。次に例を示します。
new_data = DataTensors(media=new_media, frequency=new_frequency)
selected_geos または selected_times が指定されている場合、mROI の分母は、選択されている地域と期間の合計費用に基づきます。モデルのトレーニングに使用される InputData の費用に地域と時間のディメンションがない場合は、例外がスローされます(使用されている引数 new_data.media_spend と new_data.rf_spend のディメンションが InputData の費用と異なる場合は、ユーザー側のエラーである可能性があるため、例外がスローされます)。
| 引数 | |
|---|---|
incremental_increase
|
mROI の分子を求める際に、各チャネルの費用をごくわずかに増やす割合。mROI の分母は、チャネルの合計費用のこの割合です。限界が True の場合にのみ使用されます。 |
use_posterior
|
True の場合、事後分布が計算されます。それ以外の場合は、事前分布が計算されます。 |
new_data
|
省略可。media、media_spend、reach、frequency、rf_spend、revenue_per_kpi のデータを含む DataTensors。指定されている場合、限界費用対効果は、new_data で渡されたテンソルの値と、残りのすべてのテンソルの元の値を使って計算されます。新しいテンソルのディメンションは、meridian.input_data の対応する元のテンソルのディメンションと一致している必要があります。None の場合、限界費用対効果は、すべてのテンソルの元の値を使って計算されます。 |
selected_geos
|
省略可。対象地域のサブセットが含まれます。デフォルトでは、すべての地域が含まれます。 |
selected_times
|
省略可。対象期間のサブセットが含まれます。デフォルトでは、すべての期間が含まれます。 |
aggregate_geos
|
True の場合、推定収益はすべての地域の合算になります。 |
by_reach
|
リーチとフリークエンシーのデータがあるチャネルに使用します。True の場合、指定したフリークエンシーに固定した状態でのリーチ別の mROI を返します。False の場合、指定したリーチに固定した状態でのフリークエンシー別の mROI を返します。 |
use_kpi
|
False の場合、収益を使用して mROI の分子が計算されます。それ以外の場合は、KPI を使用して mROI の分子が計算されます。 |
batch_size
|
各バッチのチェーンあたりの最大抽出数。メモリの枯渇を回避するため、計算はバッチで実行されます。メモリエラーが発生した場合は、batch_size を減らしてみてください。計算は通常、batch_size の値が大きいほど高速になります。 |
| 戻り値 | |
|---|---|
ディメンションが (n_chains, n_draws, n_geos,
(n_media_channels + n_rf_channels)) の mROI 値のテンソル。aggregate_geos=True の場合、n_geos ディメンションは破棄されます。 |
optimal_freq
optimal_freq(
freq_grid: (Sequence[float] | None) = None,
use_posterior: bool = True,
selected_geos: (Sequence[str | int] | None) = None,
selected_times: (Sequence[str | int] | None) = None,
confidence_level: float = constants.DEFAULT_CONFIDENCE_LEVEL
) -> xr.Dataset
事後分布の平均費用対効果を最大化する最適なフリークエンシーを計算します。
この最適化では、過去の費用が使用され、その値は固定されます。また、フリークエンシーは、すべての地域と期間で一定に制限されます。リーチは、フリークエンシーが変化してもインプレッション数が変わらないように、地域と期間ごとに計算されます。Meridian は、事後分布の平均費用対効果が最適化されるフリークエンシーの解を求めます。
| 引数 | |
|---|---|
freq_grid
|
フリークエンシー値のリスト。各チャネルの費用対効果は、リスト内のフリークエンシーの値ごとに計算されます。デフォルトでは、リストには 1.0 から最大フリークエンシーまでの数値が、0.1 刻みで含まれます。 |
use_posterior
|
ブール値。True の場合、事後分布の最適なフリークエンシーが生成されます。False の場合、事前分布の最適なフリークエンシーが生成されます。 |
selected_geos
|
対象地域のサブセットを含むリスト(省略可)。デフォルトでは、すべての地域が含まれます。 |
selected_times
|
対象期間のサブセットを含むリスト(省略可)。デフォルトでは、すべての期間が含まれます。 |
confidence_level
|
事前分布および事後分布の信頼区間の信頼度。0~1 の値で表されます。 |
| 戻り値 | |
|---|---|
次を含む xarray データセット。
|
| 発生するエラー | |
|---|---|
NotFittedModelError
|
このメソッドを呼び出す前に sample_posterior()(use_posterior=True の場合)または sample_prior()(use_posterior=False の場合)が呼び出されていない場合。 |
ValueError
|
リーチとフリークエンシーのデータがあるチャネルがない場合。 |
predictive_accuracy
predictive_accuracy(
selected_geos: (Sequence[str] | None) = None,
selected_times: (Sequence[str] | None) = None,
batch_size: int = constants.DEFAULT_BATCH_SIZE
) -> xr.Dataset
R-Squared、MAPE、wMAPE の適合度指標の有効性を計算します。
R-Squared、MAPE(平均絶対誤差率)、wMAPE(重み付き絶対誤差率)は、revenue_per_kpi が指定されている場合は収益スケール(KPI * revenue_per_kpi)で計算され、revenue_per_kpi = None の場合は KPI スケールで計算されます。これは、費用対効果の分子(増分結果)で使用されるスケールと同じです。
wMAPE の予測誤差は、revenue_per_kpi が指定されている場合は実際の収益(KPI * revenue_per_kpi)で重み付けされ、revenue_per_kpi = None の場合は KPI スケールで重み付けされます。つまり、収益が高い場合の誤差率は、収益が低い場合の誤差率よりも重視されます。
R-Squared、MAPE、wMAPE は、モデルレベル(地域と期間ごとに 1 つの観測値)と国内レベル(地域全体の KPI または収益成果を集計して、期間ごとに 1 つの観測値)の両方で計算されます。
R-Squared、MAPE、wMAPE はサンプル全体に対して計算されます。モデル オブジェクトにホールドアウト観測値がある場合、Train および Test のサブセットに対しても R-squared、MAPE、wMAPE が計算されます。
| 引数 | |
|---|---|
selected_geos
|
対象地域のサブセットを含むリスト(省略可)。デフォルトでは、すべての地域が含まれます。 |
selected_times
|
対象の日付のサブセットを含むリスト(省略可)。デフォルトでは、すべての期間が含まれます。 |
batch_size
|
各バッチでのチェーンあたりの最大抽出数を表す整数。デフォルトでは、batch_size は 100 となっています。メモリの枯渇を回避するため、計算はバッチで実行されます。メモリエラーが発生した場合は、batch_size を減らしてみてください。計算は通常、batch_size の値が大きいほど高速になります。 |
| 戻り値 | |
|---|---|
計算された R_Squared、MAPE、wMAPE の値を含む xarray データセット。座標は metric、geo_granularity、evaluation_set、付属するデータ変数は value です。holdout_id が存在する場合、データは 'Train'、'Test'、'All Data' のサブセクションに分割され、それぞれに対して 3 つの指標が計算されます。 |
response_curves
response_curves(
spend_multipliers: (list[float] | None) = None,
use_posterior: bool = True,
selected_geos: (Sequence[str] | None) = None,
selected_times: (Sequence[str] | None) = None,
by_reach: bool = True,
use_optimal_frequency: bool = False,
confidence_level: float = constants.DEFAULT_CONFIDENCE_LEVEL,
batch_size: int = constants.DEFAULT_BATCH_SIZE
) -> xr.Dataset
応答曲線 xarray.Dataset を生成するメソッド。
応答曲線は、各メディア チャネルの地域と期間全体での過去の分布パターンを前提として、国内レベルで計算されます。チャネルの応答曲線が計算される x-values を取得するため、乗数リストが各メディア チャネルの過去の合計費用に適用されます。
| 引数 | |
|---|---|
spend_multipliers
|
乗数のリスト。各チャネルの合計費用にこれらの係数を掛けて、そのチャネルの曲線を計算する値を取得します。 |
use_posterior
|
ブール値。True の場合、事後分布の応答曲線が生成されます。False の場合、事前分布の応答曲線が生成されます。 |
selected_geos
|
対象地域のサブセットを含むリスト(省略可)。デフォルトでは、すべての地域が含まれます。 |
selected_times
|
対象の時間ディメンションのサブセットを含むリスト(省略可)。デフォルトでは、すべての期間が含まれます。時間ディメンションの文字列と整数は Meridian.n_times と一致している必要があります。 |
by_reach
|
ブール値。リーチとフリークエンシーがあるチャネルの場合。True の場合、リーチ別に応答曲線をプロットします。False の場合、フリークエンシー別に応答曲線をプロットします。 |
use_optimal_frequency
|
True の場合、最適なフリークエンシーを使用して応答曲線をプロットします。デフォルトは False です。
|
confidence_level
|
事前分布および事後分布の信頼区間の信頼度。0~1 の値で表されます。 |
batch_size
|
各バッチでのチェーンあたりの最大抽出数を表す整数。メモリの枯渇を回避するため、計算はバッチで実行されます。メモリエラーが発生した場合は、batch_size を減らしてみてください。計算は通常、batch_size の値が大きいほど高速になります。 |
| 戻り値 | |
|---|---|
応答曲線を可視化するために必要なデータを含む xarray.Dataset。 |
rhat_summary
rhat_summary(
bad_rhat_threshold: float = 1.2
) -> pd.DataFrame
モデル内の各パラメータの R-hat 値の概要を計算します。
チェーン収束に関する Gelman と Rubin(1992 年)の潜在的スケール縮小(一般に R-hat と呼ばれる)の概要を示します。これは、チェーン間の(平均値の)分散が、チェーンが均一に分布した場合に想定される分散をどの程度超過するかを測定する収束診断指標です。値が 1.0 に近いほど、収束が進んでいることを示します。R-hat が 1.2 に満たない場合は近似収束を示しており、多くの問題で妥当なしきい値になります(Brooks および Gelman、1998 年)。
| 参考文献 | |
|---|---|
| Andrew Gelman および Donald B. Rubin。Inference from Iterative Simulation Using Multiple Sequences。Statistical Science、7(4):457-472、1992 年。 Stephen P. Brooks および Andrew Gelman。General Methods for Monitoring Convergence of Iterative Simulations。Journal of Computational and Graphical Statistics、7(4)、1998 年。 |
| 引数 | |
|---|---|
bad_rhat_threshold
|
どの程度の R-hat 値を不適切と見なすかを決定するしきい値。 |
| 戻り値 | |
|---|---|
次の列を含む DataFrame。
|
| 発生するエラー | |
|---|---|
NotFittedModelError
|
このメソッドを呼び出す前に self.sample_posterior() が呼び出されない場合。 |
ValueError
|
パラメータの R-hat 配列のディメンション数が 1 または 2 ではない場合。 |
roi
roi(
use_posterior: bool = True,
new_data: (meridian.analysis.analyzer.DataTensors | None) = None,
selected_geos: (Sequence[str] | None) = None,
selected_times: (Sequence[str] | None) = None,
aggregate_geos: bool = True,
use_kpi: bool = False,
batch_size: int = constants.DEFAULT_BATCH_SIZE
) -> tf.Tensor
各メディア チャネルの費用対効果の事前分布または事後分布を計算します。
費用対効果の分子は、特定のチャネルの費用をゼロに設定し、他のすべてのチャネルの費用を変更しない場合に想定される結果の変化(kpi または kpi *
revenue_per_kpi)です。費用対効果の分母は、チャネルの合計費用です。
new_data=None の場合、このメソッドは Meridian オブジェクトの初期化に使用された有料メディア変数の値に基づいて、費用対効果を計算します。ユーザーは new_data 引数を通じて、この過去データをオーバーライドすることもできます。ただし、新しいテンソルのディメンションが一致している場合に限ります。次に例を示します。
new_data = DataTensors(media=new_media, frequency=new_frequency)
selected_geos または selected_times が指定されている場合、費用対効果の分母は、選択されている地域と期間の合計費用です。モデルのトレーニングに使用される InputData の費用に地域と時間のディメンションがない場合は、例外がスローされます(使用されている引数 new_data.media_spend と new_data.rf_spend のディメンションが InputData の費用と異なる場合は、ユーザー側のエラーである可能性があるため、例外がスローされます)。
| 引数 | |
|---|---|
use_posterior
|
ブール値。True の場合、事後分布が計算されます。それ以外の場合は、事前分布が計算されます。 |
new_data
|
省略可。media、media_spend、reach、frequency、rf_spend、revenue_per_kpi のデータを含む DataTensors。指定されている場合、ROI は new_data で渡されたテンソルの値と、残りのすべてのテンソルの元の値を使って計算されます。新しいテンソルのディメンションは、meridian.input_data の対応する元のテンソルのディメンションと一致している必要があります。None の場合、費用対効果はすべてのテンソルの元の値を使って計算されます。 |
selected_geos
|
対象地域のサブセットを含むリスト(省略可)。デフォルトでは、すべての地域が含まれます。 |
selected_times
|
対象期間のサブセットを含むリスト(省略可)。デフォルトでは、すべての期間が含まれます。 |
aggregate_geos
|
ブール値。True の場合、推定収益はすべての地域の合算になります。 |
use_kpi
|
False の場合、収益を使用して費用対効果の分子が計算されます。それ以外の場合は、KPI を使用して費用対効果の分子が計算されます。 |
batch_size
|
各バッチでのチェーンあたりの最大抽出数を表す整数。メモリの枯渇を回避するため、計算はバッチで実行されます。メモリエラーが発生した場合は、batch_size を減らしてみてください。計算は通常、batch_size の値が大きいほど高速になります。 |
| 戻り値 | |
|---|---|
ディメンションが (n_chains, n_draws, n_geos,
(n_media_channels + n_rf_channels)) の費用対効果の値のテンソル。aggregate_geos=True の場合、n_geos ディメンションは破棄されます。 |
summary_metrics
summary_metrics(
new_data: (meridian.analysis.analyzer.DataTensors | None) = None,
marginal_roi_by_reach: bool = True,
marginal_roi_incremental_increase: float = 0.01,
selected_geos: (Sequence[str] | None) = None,
selected_times: (Sequence[str] | None) = None,
aggregate_geos: bool = True,
aggregate_times: bool = True,
optimal_frequency: (Sequence[float] | None) = None,
use_kpi: bool = False,
confidence_level: float = constants.DEFAULT_CONFIDENCE_LEVEL,
batch_size: int = constants.DEFAULT_BATCH_SIZE,
include_non_paid_channels: bool = False
) -> xr.Dataset
概要指標を返します。
new_data=None の場合、このメソッドは Meridian オブジェクトの初期化に使用されたデータ変数の値に基づいて、すべての指標を計算します。ユーザーは new_data 引数を通じて、この過去データをオーバーライドすることもできます。ただし、新しいテンソルのディメンションが一致している場合に限ります。次に例を示します。
new_data = DataTensors(
media=new_media,
frequency=new_frequency,
non_media_treatments=new_non_media_treatments)
集計されたチャネル ディメンション "All Paid Channels" では、mroi 指標と effectiveness 指標は定義されていません(math.nan)。
| 引数 | |
|---|---|
new_data
|
オプションの DataTensors オブジェクト(オプションの新しいテンソルを含む: media、reach、frequency、organic_media、organic_reach、organic_frequency、non_media_treatments、controls、revenue_per_kpi)。指定されている場合、概要指標は、new_data で渡されたテンソルの値と、残りのすべてのテンソルの元の値を使って計算されます。新しいテンソルのディメンションは、meridian.input_data の対応する元のテンソルのディメンションと一致している必要があります。None の場合、概要指標はすべてのテンソルの元の値を使って計算されます。 |
marginal_roi_by_reach
|
ブール値。限界費用対効果(mROI)は、費用を 1 ドル追加した場合の費用対効果として定義されます。この引数が True の場合、費用の追加はリーチにのみ影響し、フリークエンシーは一定に保たれると仮定されます。この引数が False の場合、費用の追加はフリークエンシーにのみ影響し、リーチは一定に保たれると仮定されます。include_non_paid_channels が False の場合に限って使われます。 |
marginal_roi_incremental_increase
|
mROI の分子を求める際に、各チャネルの費用をごくわずかに増やす割合。mROI の分母は、チャネルの合計費用のこの割合です。include_non_paid_channels が False の場合に限って使われます。 |
selected_geos
|
対象地域のサブセットを含むリスト(省略可)。デフォルトでは、すべての地域が含まれます。 |
selected_times
|
対象期間のサブセットを含むリスト(省略可)。デフォルトでは、すべての期間が含まれます。 |
aggregate_geos
|
ブール値。True の場合、想定される結果はすべての地域の合算になります。 |
aggregate_times
|
ブール値。True の場合、想定される結果はすべての期間の合算になります。False の場合、ROI、mROI、有効性、CPIK は、期間ごとの明確な解釈がないため、レポートされません。 |
optimal_frequency
|
ディメンションが n_rf_channels のリスト(省略可)。事後分布の平均費用対効果を最大化するチャネルあたりの最適なフリークエンシーが含まれます。デフォルト値は None で、指標の計算には過去のフリークエンシーが使用されます。 |
use_kpi
|
ブール値。True の場合、概要指標は KPI を使用して計算されます。False の場合、概要指標は収益を使用して計算されます。 |
confidence_level
|
概要指標の信頼区間の信頼度。0~1 の値で表されます。 |
batch_size
|
各バッチでのチェーンあたりの最大抽出数を表す整数。メモリの枯渇を回避するため、計算はバッチで実行されます。メモリエラーが発生した場合は、batch_size を減らしてみてください。計算は通常、batch_size の値が大きいほど高速になります。 |
include_non_paid_channels
|
ブール値。True の場合、無料チャネル(オーガニック メディア、オーガニックのリーチとフリークエンシー、メディア以外の介入)も概要に含まれますが、費用に依存しない指標のみがレポートされます。False の場合、有料チャネル(メディア、リーチ、フリークエンシー)のみが概要に含まれますが、費用に依存する指標も含まれます。デフォルト: False。 |
| 戻り値 | |
|---|---|
channel、metric(mean、median、ci_low、ci_high)、distribution(事前分布、事後分布)の座標を有し、無料データ変数(incremental_outcome、pct_of_contribution、effectiveness)と有料データ変数(impressions、pct_of_impressions、spend、pct_of_spend、CPM、roi、mroi、cpik)を含む xr.Dataset。有料データ変数は、include_non_paid_channels が False の場合にのみ含まれます。aggregate_times=False の場合、roi、mroi、cpik、effectiveness の指標は、期間ごとの明確な解釈がないため、レポートされません。 |
GitHub 上のソースを見る