在 GitHub 上查看來源
|
包含每個模型參數的先驗分布。
meridian.model.prior_distribution.PriorDistribution(
*,
knot_values: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.Normal(0.0, \n 5.0, name=constants.KNOT_VALUES)),
tau_g_excl_baseline: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.Normal(0.0, \n 5.0, name=constants.TAU_G_EXCL_BASELINE)),
beta_m: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.HalfNormal(5.0,\n name=constants.BETA_M)),
beta_rf: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.HalfNormal(5.0,\n name=constants.BETA_RF)),
beta_om: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.HalfNormal(5.0,\n name=constants.BETA_OM)),
beta_orf: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.HalfNormal(5.0,\n name=constants.BETA_ORF)),
eta_m: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.HalfNormal(1.0,\n name=constants.ETA_M)),
eta_rf: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.HalfNormal(1.0,\n name=constants.ETA_RF)),
eta_om: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.HalfNormal(1.0,\n name=constants.ETA_OM)),
eta_orf: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.HalfNormal(1.0,\n name=constants.ETA_ORF)),
gamma_c: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.Normal(0.0, \n 5.0, name=constants.GAMMA_C)),
gamma_n: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.Normal(0.0, \n 5.0, name=constants.GAMMA_N)),
xi_c: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.HalfNormal(5.0,\n name=constants.XI_C)),
xi_n: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.HalfNormal(5.0,\n name=constants.XI_N)),
alpha_m: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.Uniform(0.0, \n 1.0, name=constants.ALPHA_M)),
alpha_rf: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.Uniform(0.0, \n 1.0, name=constants.ALPHA_RF)),
alpha_om: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.Uniform(0.0, \n 1.0, name=constants.ALPHA_OM)),
alpha_orf: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.Uniform(0.0, \n 1.0, name=constants.ALPHA_ORF)),
ec_m: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.\n TruncatedNormal(0.8, 0.8, 0.1, 10, name=constants.EC_M)),
ec_rf: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.\n TransformedDistribution(tfp.distributions.LogNormal(0.7, 0.4), tfp.\n bijectors.Shift(0.1), name=constants.EC_RF)),
ec_om: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.\n TruncatedNormal(0.8, 0.8, 0.1, 10, name=constants.EC_OM)),
ec_orf: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.\n TransformedDistribution(tfp.distributions.LogNormal(0.7, 0.4), tfp.\n bijectors.Shift(0.1), name=constants.EC_ORF)),
slope_m: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.Deterministic(\n 1.0, name=constants.SLOPE_M)),
slope_rf: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.LogNormal(0.7,\n 0.4, name=constants.SLOPE_RF)),
slope_om: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.Deterministic(\n 1.0, name=constants.SLOPE_OM)),
slope_orf: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.LogNormal(0.7,\n 0.4, name=constants.SLOPE_ORF)),
sigma: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.HalfNormal(5.0,\n name=constants.SIGMA)),
roi_m: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.LogNormal(0.2,\n 0.9, name=constants.ROI_M)),
roi_rf: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.LogNormal(0.2,\n 0.9, name=constants.ROI_RF))
)
PriorDistribution 是 Meridian 的公用程式類別。PriorDistribution 所需的引數形狀取決於傳遞至 Meridian 的模擬選項和資料形狀。舉例來說,ec_m 是代表每個媒體管道半飽和度的參數。ec_m 引數的 batch_shape=[] 或 batch_shape 必須等於媒體管道的數量。在前者情況下,每個媒體管道都會取得相同的優先順序。
如果任何先前的分布有無法廣播至模型規格指定形狀的形狀,系統會在 Meridian 建構時發生錯誤。
參數批次形狀如下:
| 參數 | 批次形狀 |
|---|---|
knot_values |
n_knots |
tau_g_excl_baseline |
n_geos - 1 |
beta_m |
n_media_channels |
beta_rf |
n_rf_channels |
beta_om |
n_organic_media_channels |
beta_orf |
n_organic_rf_channels |
eta_m |
n_media_channels |
eta_rf |
n_rf_channels |
eta_om |
n_organic_media_channels |
eta_orf |
n_organic_rf_channels |
gamma_c |
n_controls |
gamma_n |
n_non_media_channels |
xi_c |
n_controls |
xi_n |
n_non_media_channels |
alpha_m |
n_media_channels |
alpha_rf |
n_rf_channels |
alpha_om |
n_organic_media_channels |
alpha_orf |
n_organic_rf_channels |
ec_m |
n_media_channels |
ec_rf |
n_rf_channels |
ec_om |
n_organic_media_channels |
ec_orf |
n_organic_rf_channels |
slope_m |
n_media_channels |
slope_rf |
n_rf_channels |
slope_om |
n_organic_media_channels |
slope_orf |
n_organic_rf_channels |
sigma |
(σ) |
roi_m |
n_media_channels |
roi_rf |
n_rf_channels |
(σ) 如果 unique_sigma_for_each_geo 為 n_geos,否則為 1
屬性 | |
|---|---|
knot_values
|
時間效果的節點先驗分布。預設分發方式為 Normal(0.0, 5.0)。 |
tau_g_excl_baseline
|
地理區域效果的先前分布情形,代表各個地理區域相對於基準地理區域的平均 KPI。這項參數會廣播至長度為 n_geos - 1 的向量,保留地理順序並排除 baseline_geo。取樣後,Meridian.inference_data 會包含此參數的修改版本,名為 tau_g,長度為 n_geos,且在與 baseline_geo 對應的位置包含零。如果 n_geos = 1,Meridian 就會忽略這個發布。預設分發值為 Normal(0.0, 5.0)。 |
beta_m
|
針對曝光媒體管道 (beta_gm) 的地理層級媒體效果,使用參數進行先前分布,以便進行階層分布。當 media_effects_dist 設為 'normal' 時,就是階層平均值。當 media_effects_dist 設為 'log_normal' 時,它是底層對數轉換 Normal 分布的平均值的階層參數。如果 paid_media_prior_type 為 'roi' 或 'mroi',Meridian 會忽略這項分發作業,並改為優先使用 roi_m。預設分發值為 HalfNormal(5.0)。 |
beta_rf
|
針對觸及數和展示頻率媒體管道 (beta_grf) 的區域層級媒體效果,使用參數進行先前分布,以便進行階層分布。當 media_effects_dist 設為 'normal' 時,就是階層平均值。當 media_effects_dist 設為 'log_normal' 時,它是底層對數轉換 Normal 分布的平均值的階層參數。如果 paid_media_prior_type 為 'roi' 或 'mroi',Meridian 會忽略這項發布,改為使用先前的 roi_m。預設分發值為 HalfNormal(5.0)。 |
beta_om
|
針對自然媒體管道 (beta_gom) 的地理層級媒體效果,以參數為依據的先前分布資料 (階層分布資料)。當 media_effects_dist 設為 'normal' 時,即為階層平均值。當 media_effects_dist 設為 'log_normal' 時,它是底層對數轉換 Normal 分布的平均值的階層參數。如果 use_roi_prior 為 True,Meridian 會忽略這個發布,並改用先前的 roi_om。預設分發方式為 HalfNormal(5.0)。 |
beta_orf
|
針對自然觸及數和頻率媒體管道 (beta_gorf) 的地理層級媒體效果,使用參數的先前分布資料進行階層分布。當 media_effects_dist 設為 'normal' 時,即為階層平均值。當 media_effects_dist 設為 'log_normal' 時,它是底層對數轉換 Normal 分布的平均值的階層參數。如果 use_roi_prior 為 True,Meridian 會忽略這個發布,並改用先前的 roi_orf。預設分發值為 HalfNormal(5.0)。 |
eta_m
|
針對曝光媒體管道 (beta_gm) 的區域層級媒體效果,使用參數的先前分配資料進行階層分配。當 media_effects_dist 設為 'normal' 時,就是階層標準差。當 media_effects_dist 設為 'log_normal' 時,它是底層對數轉換 Normal 分佈的標準差的階層參數。預設分發方式為 HalfNormal(1.0)。 |
eta_rf
|
參數的先前分布資料,用於 RF 媒體管道的地理層級媒體效果分布 (beta_grf)。當 media_effects_dist 設為 'normal' 時,就是分層標準差。當 media_effects_dist 設為 'log_normal' 時,它是底層對數轉換 Normal 分佈的標準差的階層參數。預設分發方式為 HalfNormal(1.0)。 |
eta_om
|
參數的先前分布資料,用於自然媒體管道的地理層級媒體效果階層式分布 (beta_gom)。當 media_effects_dist 設為 'normal' 時,就是階層式標準差。當 media_effects_dist 設為 'log_normal' 時,它是底層對數轉換 Normal 分佈的標準差的階層參數。預設分發方式為 HalfNormal(1.0)。 |
eta_orf
|
參數的先前分布,用於自然無線電頻道 (beta_gorf) 的地理層級媒體效果分布。當 media_effects_dist 設為 'normal' 時,即為層級標準差。當 media_effects_dist 設為 'log_normal' 時,它是底層對數轉換 Normal 分佈標準差的階層參數。預設分發方式為 HalfNormal(1.0)。 |
gamma_c
|
gamma_gc 的階層平均值事前分布,這是地理區域 g 控制項 c 的係數。階層是在地理區域中定義。預設分發值為 Normal(0.0, 5.0)。 |
gamma_n
|
gamma_gn 的階層平均值先前分布情形,這是地理區域 g 的非媒體管道 n 係數。階層是在地理區域中定義。預設分發值為 Normal(0.0, 5.0)。 |
xi_c
|
gamma_gc 的階層標準差先驗分布,即地理區域 g 的控制項 c 係數。階層是在地理區域中定義。預設分發值為 HalfNormal(5.0)。 |
xi_n
|
gamma_gn 的階層標準差先驗分布,這是地理區域 g 的非媒體管道 n 係數。階層是在地理區域中定義。預設分發值為 HalfNormal(5.0)。 |
alpha_m
|
媒體輸入內容的 geometric decay Adstock 參數先前分發情形。預設分發值為 Uniform(0.0, 1.0)。 |
alpha_rf
|
針對 RF 輸入內容,在 geometric decay Adstock 參數上進行先前分發。預設分發值為 Uniform(0.0, 1.0)。 |
alpha_om
|
針對自然媒體輸入內容,先在 geometric decay Adstock 參數上進行分發。預設分發值為 Uniform(0.0, 1.0)。 |
alpha_orf
|
針對自然 RF 輸入內容,先在 geometric decay Adstock 參數上進行分發。預設分發值為 Uniform(0.0, 1.0)。 |
ec_m
|
針對媒體輸入內容,在 half-saturation Hill 參數上進行事前分布。預設分發值為 TruncatedNormal(0.8, 0.8, 0.1, 10)。 |
ec_rf
|
針對 RF 輸入的 half-saturation Hill 參數,進行事前分布。預設分發值為 TransformedDistribution(LogNormal(0.7,
0.4), Shift(0.1))。 |
ec_om
|
針對自然媒體輸入內容,在 half-saturation Hill 參數上進行事前分布。預設分發值為 TruncatedNormal(0.8, 0.8,
0.1, 10)。 |
ec_orf
|
針對自然 RF 輸入的 half-saturation Hill 參數,進行事前分布。預設分發值為 TransformedDistribution(
LogNormal(0.7, 0.4), Shift(0.1))。 |
slope_m
|
針對媒體輸入內容,在 slope Hill 參數上進行事前分布。預設分發值為 Deterministic(1.0)。 |
slope_rf
|
針對 RF 輸入的 slope Hill 參數,進行先驗分佈。預設分發值為 LogNormal(0.7, 0.4)。 |
slope_om
|
針對自然媒體輸入內容,在 slope Hill 參數上進行事前分布。預設分發值為 Deterministic(1.0)。 |
slope_orf
|
針對有機 RF 輸入的 slope Hill 參數,進行事前分布。預設分發值為 LogNormal(0.7, 0.4)。 |
sigma
|
雜訊標準差的事前分布。預設分發方式為 HalfNormal(5.0)。 |
roi_m
|
各媒體管道的 ROI 或 mROI 先前分配值 (視 paid_media_prior_type 的值而定)。如果 paid_media_prior_type 為 'coefficient',Meridian 會忽略這個發布,改用 beta_m。如果 paid_media_prior_type 是 'roi' 或 'mroi',beta_m 會以 roi_m、alpha_m、ec_m、slope_m 和各媒體管道相關支出為決定性函數計算。預設分發方式為 LogNormal(0.2, 0.9) (paid_media_prior_type
== "roi") 和 LogNormal(0.0, 0.5) (paid_media_prior_type ==
"mroi")。如果 kpi_type 為 'non_revenue',且未提供 revenue_per_kpi,則 ROI 會解讀為每花費一個貨幣單位的 KPI 增量單位。在這種情況下:1) 如果 paid_media_prior_type='roi',系統會略過 roi_m 和 roi_rf 的預設值,並將常見的 ROI 前值指派給所有管道,以便在總媒體貢獻度上達成目標平均值和標準差;2) 系統不支援 paid_media_prior_type='mroi'。 |
roi_rf
|
每個觸及數和頻率管道的投資報酬率或 mROI 的先前分布情形 (取決於 paid_media_prior_type 的值)。如果 paid_media_prior_type 為 'coefficient',Meridian 會忽略這個分布,改用 beta_rf。如果 paid_media_prior_type 是 'roi' 或 'mroi',beta_rf 會以 roi_rf、alpha_rf、ec_rf、slope_rf 和與每個媒體管道相關聯的支出,計算為確定性函式。預設分發方式為 LogNormal(0.2, 0.9) (當 paid_media_prior_type == "roi" 時) 和 LogNormal(0.0, 0.5) (當 paid_media_prior_type == "mroi" 時)。如果 kpi_type 為 'non_revenue',且未提供 revenue_per_kpi,系統會將投資報酬率解讀為每花費一單位貨幣的 KPI 增量。在這種情況下:1) 如果 paid_media_prior_type='roi',系統會忽略 roi_m 和 roi_rf 的預設值,並將共同的 ROI 先前指派給所有管道,以便在總媒體貢獻度上達成目標平均值和標準差;2) 系統不支援 paid_media_prior_type='mroi'。 |
方法
broadcast
broadcast(
n_geos: int,
n_media_channels: int,
n_rf_channels: int,
n_organic_media_channels: int,
n_organic_rf_channels: int,
n_controls: int,
n_non_media_channels: int,
sigma_shape: int,
n_knots: int,
is_national: bool,
paid_media_prior_type: str,
set_roi_prior: bool,
kpi: float,
total_spend: np.ndarray
) -> PriorDistribution
傳回具有廣播發布屬性的新 PriorDistribution。
| Args | |
|---|---|
n_geos
|
地理區域數量。 |
n_media_channels
|
使用的媒體管道數量。 |
n_rf_channels
|
使用的觸及數與頻率管道數量。 |
n_organic_media_channels
|
使用的自然媒體管道數量。 |
n_organic_rf_channels
|
使用自然觸及數和頻率管道的數量。 |
n_controls
|
使用的控制項數量。 |
n_non_media_channels
|
使用的非媒體管道數量。 |
sigma_shape
|
描述 sigma 參數形狀的數字。1 (如果是 sigma_for_each_geo=False) 或 n_geos (如果是 sigma_for_each_geo=True)。詳情請參閱 ModelSpec。 |
n_knots
|
使用的節點數量。 |
is_national
|
布林值指標,指出是否會將先前分布資料調整為國家/地區模型。 |
paid_media_prior_type
|
指定媒體係數先前類型的字串。 |
set_roi_prior
|
布林值指標,表示是否應設定 ROI 前。 |
kpi
|
跨區域和時間的完整 KPI 總和。如果 set_roi_prior=True 為必要欄位。 |
total_spend
|
各個媒體管道的支出總和 (依地理區域和時間區間劃分)。如果是 set_roi_prior=True,則為必要屬性。 |
| 傳回 | |
|---|---|
根據指定的資料維度,從先前的發布內容廣播新的 PriorDistribution。 |
| 升起 | |
|---|---|
ValueError
|
如果未為所有管道設定自訂先驗機率。 |
has_deterministic_param
has_deterministic_param(
param: tfp.distributions.Distribution
) -> bool
__eq__
__eq__(
other
)
傳回 self==value。
在 GitHub 上查看來源