![]() |
拟合模型后,运行计算来分析原始数据。
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 之间的数值表示。 |
返回结果 | |
---|---|
Pandas DataFrame,包含 channel、time_units 、distribution,以及 Adstock 函数的 ci_hi 、ci_lo 和 mean 。
|
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 值越大,计算速度越快。
|
返回结果 | |
---|---|
一个 xr.Dataset ,包含以下坐标:metric (mean 、median 、ci_low 、ci_high )、distribution (先验、后验);且包含以下数据变量: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 是通过调用 roi
方法并设置 use_kpi=True
获得的。
实参 | |
---|---|
use_posterior
|
布尔值。如果值为 True ,则计算后验分布。否则,将计算先验分布。
|
new_data
|
可选。包含 media 、media_spend 、reach 、frequency 、rf_spend 和 revenue_per_kpi 数据的 DataTensor。如果提供了 new_data ,则会使用传入的张量值和其余所有张量原始值来计算 CPIK。新张量维度必须与 meridian.input_data 中相应原始张量的维度一致。如果为 None ,则使用所有张量原始值来计算 CPIC。 |
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) 的预期结果(KPI 或收入,取决于 use_kpi 实参)张量。如果 aggregate_geos=True ,则舍弃 n_geos 维度;如果 aggregate_time=True ,则舍弃 n_times 维度。
|
可能引发的错误 | |
---|---|
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
|
可选的 DataTensors 对象,包含新的 media 、reach 、frequency 、organic_media 、organic_reach 、organic_frequency 和 non_media_treatments 张量。如果使用 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
|
要获取历史支出的时间段。如果为“None”,则汇总所有时间点的历史支出。 |
include_media
|
是否要包含没有 R&F 数据的付费媒体渠道的支出。 |
include_rf
|
是否要包含具有 R&F 数据的付费媒体渠道的支出。 |
返回结果 | |
---|---|
具有坐标 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)。
对于具有覆盖面和频次数据的渠道,频次保持不变,覆盖面可以按比例缩放。“Outcome”是指 revenue
(如果 use_kpi=False
)或 kpi
(如果 use_kpi=True
)。如果未定义 revenue_per_kpi
,use_kpi
不能为 False。
如果 new_data=None
,此方法会使用 Meridian 对象初始化时使用的张量 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
张量的原始值来计算增量效果。
此方法中的计算取决于 Meridian 实施过程中的两个关键假设:
- 媒体效应的可加性(无互动)。
- 模型 KPI 缩放比例的叠加变化与原始 KPI 缩放比例的叠加变化相对应。换句话说,截距和控制效应不会影响媒体效应。这一假设目前成立,因为效果转换仅涉及居中和缩放,不涉及对数转换等过程。
实参 | |
---|---|
use_posterior
|
布尔值。如果值为 True ,则计算增量效果后验分布。否则,将计算先验分布。
|
new_data
|
可选的 DataTensors 容器,其中包含可选的张量:media 、reach 、frequency 、organic_media 、organic_reach 、organic_frequency 、non_media_treatments 和 revenue_per_kpi 。如果值为 None ,则使用提供给 Meridian 对象的 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 值越大,计算速度越快。
|
返回结果 | |
---|---|
增量效果(KPI 或收入,取决于 use_kpi 实参)张量,维度为 (n_chains, n_draws, n_geos,
n_times, n_channels) 。如果 include_non_paid_channels=True ,则 n_channel 是媒体、RF、自然媒体和自然 RF 以及非媒体渠道的总数。如果 include_non_paid_channels=False ,则 n_channels 是媒体和 RF 渠道的总数。如果 aggregate_geos=True ,则舍弃 n_geos 维度;如果 aggregate_times=True ,则舍弃 n_times 维度。
|
可能引发的错误 | |
---|---|
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) 先验或后验分布。
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 数据的 DataTensor。如果提供了 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
拟合优度指标。
如果指定了 revenue_per_kpi
,将按收入调整比例 (KPI * revenue_per_kpi
) 计算 R-Squared
、MAPE
(平均绝对百分比误差)和 wMAPE
(加权平均绝对百分比误差);如果指定了 revenue_per_kpi = None
,则按 KPI 调整比例计算。这与投资回报率的分子(增量效果)中所用的缩放比例相同。
如果指定了 revenue_per_kpi
,将按实际收入 (KPI * revenue_per_kpi
) 对 wMAPE
的预测误差进行加权;如果 revenue_per_kpi = None
,则按 KPI 调整比例进行加权。这意味着,收入高时的百分比误差权重高于收入低时的误差权重。
R-Squared
、MAPE
和 wMAPE
在模型级(每个地理位置和时间段一个观测结果)和国家级(将各地理位置的 KPI 或收入结果汇总,因此每个时间段一个观测结果)进行计算。
R-Squared
、MAPE
和 wMAPE
是针对全部样本计算的。如果模型对象有任何留出观测结果,则还会针对 Train
和 Test
子集计算 R-squared
、MAPE
和 wMAPE
。
实参 | |
---|---|
selected_geos
|
可选列表,包含要纳入的一部分地理位置。默认纳入所有地理位置。 |
selected_times
|
可选列表,包含要纳入的一部分日期。默认纳入所有时间段。 |
batch_size
|
整数,表示每个批次中每条链的抽样次数上限。默认情况下,batch_size 为 100 。计算分批次运行,以避免内存耗尽。如果发生内存错误,可以试着减小 batch_size 。一般而言,batch_size 值越大,计算速度越快。
|
返回结果 | |
---|---|
一个 xarray 数据集,包含计算出的 R_Squared 、MAPE 和 wMAPE 值,还有坐标 metric 、geo_granularity 、evaluation_set 以及相应的数据变量 value 。如果存在 holdout_id ,则将数据拆分为 'Train' 、'Test' 和 'All Data' 子部分,并针对每个子部分计算这三个指标。
|
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 数据的 DataTensor。如果提供了 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 是指每增加一美元支出带来的回报率。如果此实参的值为 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 ,系统不会报告投资回报率、边际投资回报率、效果和 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 。
|
返回结果 | |
---|---|
一个 xr.Dataset ,包含以下坐标: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 。只有当 include_non_paid_channels 为 False 时,数据集才会包含付费数据变量。请注意,如果 aggregate_times=False ,系统不会报告 roi 、mroi 、cpik 和 effectiveness 指标,因为这些指标无法按时间段进行明确的解释。 |