meridian.analysis.analyzer.Analyzer

拟合模型后,运行计算来分析原始数据。

子类

class PerformanceData

方法

adstock_decay

查看源代码

计算媒体渠道以及覆盖面和频次渠道的 Adstock 衰减。

实参
confidence_level 先验和后验可信区间的置信度,以介于 0 到 1 之间的数值表示。

返回结果
Pandas DataFrame,包含 channel、time_units、distribution,以及 Adstock 函数的 ci_hici_lomean

baseline_summary_metrics

查看源代码

返回基准摘要指标。

实参
selected_geos 可选列表,包含要纳入的一部分地理位置。默认纳入所有地理位置。
selected_times 可选列表,包含要纳入的一部分时间段。默认纳入所有时间段。
aggregate_geos 布尔值。如果值为 True,则对所有区域的预期结果求和。
aggregate_times 布尔值。如果值为 True,则对所有时间段的预期结果求和。
confidence_level 媒体摘要指标可信区间的置信度,以介于 0 到 1 之间的数值表示。
batch_size 整数,表示每个批次中每条链的抽样次数上限。计算分批次运行,以避免内存耗尽。如果发生内存错误,可以试着减小 batch_size。一般而言,batch_size 值越大,计算速度越快。

返回结果
一个 xr.Dataset,包含以下坐标:metricmeanmedianci_lowci_high)、distribution(先验、后验);且包含以下数据变量:baseline_outcomepct_of_contribution

cpik

查看源代码

计算每个渠道的每个增量 KPI 的费用 (CPIK) 分布。

CPIK 的分子是渠道的总支出。CPIK 的分母是某个渠道的支出为零,且所有其他渠道的支出保持不变时,预期 KPI 的变化。

如果 new_data=None,此方法会根据 Meridian 对象初始化时使用的付费媒体变量的值来计算 CPIK。用户还可以通过 new_data 实参覆盖这些历史数据,前提是新张量有匹配的维度。例如,

new_data = DataTensors(media=new_media, frequency=new_frequency)

如果指定了 selected_geosselected_times,则 CPIK 的分子是所选地理位置和时间段内的总支出。如果用于训练模型的 InputData 的支出没有地理位置和时间维度,系统会抛出异常。(如果 new_data.media_spendnew_data.rf_spend 实参使用的维度与 InputData 支出不同,则系统会抛出异常,因为这很可能是用户错误。)

请注意,CPIK 只是 1/ROI,其中 ROI 是通过调用 roi 方法并设置 use_kpi=True 获得的。

实参
use_posterior 布尔值。如果值为 True,则计算后验分布。否则,将计算先验分布。
new_data 可选。包含 mediamedia_spendreachfrequencyrf_spendrevenue_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

查看源代码

计算先验或后验预期结果。

这将针对每次后验(或先验)形参抽样计算 E(Outcome|Media, RF, Organic media, Organic RF, Non-media treatments, Controls),其中 Outcome 是指 revenue(如果 use_kpi=False)或 kpi(如果 use_kpi=True)。如果未定义 revenue_per_kpiuse_kpi 不能为 False

如果 new_data=None,此方法会根据 Meridian 对象初始化时使用的各独立变量的值来计算预期结果。用户还可以通过 new_data 实参覆盖这些历史数据,前提是新张量有匹配的维度。例如:

new_data=DataTensors(reach=new_reach, frequency=new_frequency)

原则上,可以使用其他时间维度(如未来的预测结果)来计算预期结果。不过,此方法不允许这样做,因为这会增加复杂性:

  1. 此外,还需要相应的价格(每个 KPI 的收入)数据。
  2. 如果模型包含每周效应形参,则需要使用一些方法来估计或预测训练数据窗口以外时间段的这些效应。

实参
use_posterior 布尔值。如果值为 True,则计算预期结果后验分布。否则,将计算先验分布。
new_data 可选的 DataTensors 容器,其中包含可选的新张量:mediareachfrequencyorganic_mediaorganic_reachorganic_frequencynon_media_treatmentscontrols。如果值为 None,则会根据 Meridian 对象初始化时使用的数据张量的原始值来计算预期结果。如果使用 new_data 实参,则会根据 new_data 中传入的张量值以及剩余未设置张量的原始值来计算预期结果。例如,expected_outcome(new_data=DataTensors(reach=new_reach, frequency=new_frequency)) 会根据原始 mediaorganic_mediaorganic_reachorganic_frequencynon_media_treatmentscontrols 张量以及为 reachfrequency 张量传入的新值来计算预期结果。新张量维度必须与 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_kpiinverse_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

查看源代码

计算一段时间内预期结果与实际结果的对比数据。

实参
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

查看源代码

过滤和/或汇总张量的地理位置和时间维度。

实参
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

查看源代码

计算所有渠道数据中的展示次数汇总值。

实参
new_data 可选的 DataTensors 对象,包含新的 mediareachfrequencyorganic_mediaorganic_reachorganic_frequencynon_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

查看源代码

获取根据时间段汇总的历史支出。

实参
selected_times 要获取历史支出的时间段。如果为“None”,则汇总所有时间点的历史支出。
include_media 是否要包含没有 R&F 数据的付费媒体渠道的支出。
include_rf 是否要包含具有 R&F 数据的付费媒体渠道的支出。

返回结果
具有坐标 channel 且包含数据变量 spendxr.DataArray

可能引发的错误
ValueError include_mediainclude_rf 均为 False 时,会引发 ValueError。

get_rhat

查看源代码

计算模型中每个形参的 R-hat 值。

返回结果
一个 R-hat 值字典,其中每个形参是一个键,值是与形参相对应的 R-hat。

可能引发的错误
NotFittedModelError 如果在调用此方法之前未调用 self.sample_posterior(),则可能会出现此错误。

hill_curves

查看源代码

估计用于绘制每个渠道曲线的 Hill 曲线表。

实参
confidence_level 先验和后验可信区间的置信度,以介于 0 到 1 之间的数值表示。默认值为 0.9
n_bins 绘制直方图时要包含的等宽分箱数量。默认值为 25

返回结果
Hill 曲线 pd.DataFrame,包含以下列:

  • channelmediarf 渠道名称。
  • media_units:媒体(对于 media 渠道)或平均频次(对于 rf 渠道)单位数。
  • distribution:表示 posteriorprior 抽样。
  • ci_hi:Hill 函数值可信区间的上限。
  • ci_lo:Hill 函数值可信区间的下限。
  • mean:每次抽样的 Hill 函数值的逐点平均值。
  • channel_type:表示 mediarf 渠道。
  • scaled_count_histogram:分箱中调整后的媒体单位数或平均频次数值。
  • count_histogram:分箱中实际的媒体单位数或平均频次数值。
  • start_interval_histogram:直方图分箱的媒体单位数或平均频次起点。
  • end_interval_histogram:直方图分箱的媒体单位数或平均频次终点。

incremental_outcome

查看源代码

计算后验或先验增量效果。

这将针对每次后验或先验形参抽样计算每个媒体渠道的媒体效果。增量效果的定义如下:

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_kpiuse_kpi 不能为 False。

如果 new_data=None,此方法会使用 Meridian 对象初始化时使用的张量 mediareachfrequencyorganic_mediaorganic_reachorganic_frequencynon_media_treatmentsrevenue_per_kpi 来计算增量效果。可以使用 new_data 实参来覆盖此行为。例如,new_data=DataTensors(media=new_media) 会使用 new_media 张量以及 reachfrequencyorganic_mediaorganic_reachorganic_frequencynon_media_treatmentsrevenue_per_kpi 张量的原始值来计算增量效果。

此方法中的计算取决于 Meridian 实施过程中的两个关键假设:

  1. 媒体效应的可加性(无互动)。
  2. 模型 KPI 缩放比例的叠加变化与原始 KPI 缩放比例的叠加变化相对应。换句话说,截距和控制效应不会影响媒体效应。这一假设目前成立,因为效果转换仅涉及居中和缩放,不涉及对数转换等过程。

实参
use_posterior 布尔值。如果值为 True,则计算增量效果后验分布。否则,将计算先验分布。
new_data 可选的 DataTensors 容器,其中包含可选的张量:mediareachfrequencyorganic_mediaorganic_reachorganic_frequencynon_media_treatmentsrevenue_per_kpi。如果值为 None,则使用提供给 Meridian 对象的 InputData 来计算增量效果。如果提供了 new_data,则使用 new_data 中的新张量和其余张量中的原始值来计算增量效果。例如,incremental_outcome(new_data=DataTensors(media=new_media) 会使用 new_media 以及 reachfrequencyorganic_mediaorganic_reachorganic_frequencynon_media_treatmentsrevenue_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_mediamedia_selected_times 可以选择 new_media 中的任意一部分时间段。如果未提供 new_mediamedia_selected_times 会从 InputData.time 中进行选择。增量效果与在 media_selected_times 实参指定的时间段内执行的媒体在 selected_times 实参指定的时间段内产生的增量 KPI 相对应。对于每个渠道,增量效果的定义为在这些指定时间段内,按 scaling_factor1scaling_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

查看源代码

计算边际投资回报率 (mROI) 先验或后验分布。

mROI 的分子是某个渠道的支出增加一小部分时,预期结果(kpikpi * revenue_per_kpi)的变化。mROI 的分母是渠道总支出中增加的那一小部分。

如果 new_data=None,此方法会根据 Meridian 对象初始化时使用的付费媒体变量的值来计算边际投资回报率。用户还可以通过 new_data 实参覆盖这些历史数据,前提是新张量有匹配的维度。例如,

new_data = DataTensors(media=new_media, frequency=new_frequency)

如果指定了 selected_geosselected_times,则 mROI 分母将基于所选地理位置和时间段内的总支出。如果用于训练模型的 InputData 的支出没有地理位置和时间维度,系统会抛出异常。(如果 new_data.media_spendnew_data.rf_spend 实参使用的维度与 InputData 支出不同,则系统会抛出异常,因为这很可能是用户错误。)

实参
incremental_increase 在计算每个渠道 mROI 的分子时,渠道的支出增加的一小部分。mROI 的分母是渠道总支出中增加的这一部分。仅在边际为 True 时使用。
use_posterior 如果值为 True,则计算后验分布。否则,将计算先验分布。
new_data 可选。包含 mediamedia_spendreachfrequencyrf_spendrevenue_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

查看源代码

计算可最大限度提高后验平均投资回报率的最佳频次。

对于此优化,将使用固定的历史支出,并将频次限制为在所有地理区域和时间段内保持不变。将针对每个地理区域和时间段计算覆盖面,这样一来,即使频次发生变化,展示次数也保持不变。Meridian 能够求解可优化后验平均投资回报率的频次。

实参
freq_grid 频次值列表。将针对列表中的每个频次值计算每个渠道的投资回报率。默认情况下,该列表包含从 1.0 到最大频次之间的数字,以 0.1 为增量。
use_posterior 布尔值。如果值为 True,则生成后验最佳频次。如果值为 False,则生成先验最佳频次。
selected_geos 可选列表,包含要纳入的一部分地理位置。默认纳入所有地理位置。
selected_times 可选列表,包含要纳入的一部分时间段。默认纳入所有时间段。
confidence_level 先验和后验可信区间的置信度,以介于 0 到 1 之间的数值表示。

返回结果
一个 xarray 数据集,包含以下各项:

  • 坐标:frequencyrf_channelmetricmeanmedianci_loci_hi
  • 数据变量:
    • optimal_frequency:可优化后验平均投资回报率的频次。
    • roifreq_grid 中每个频次值的投资回报率。
    • optimized_incremental_outcome:基于最佳频次的增量效果。
    • optimized_pct_of_contribution:基于最佳频次的贡献率百分比。
    • optimized_effectiveness:基于最佳频次的效果。
    • optimized_roi:基于最佳频次的投资回报率。
    • optimized_mroi_by_reach:在最佳频次下,覆盖面略有变化且频次固定不变时的 mROI。
    • optimized_mroi_by_frequency:在最佳频次略有变化且覆盖面固定不变时的 mROI。
    • optimized_cpik:基于最佳频次的 CPIK。

可能引发的错误
NotFittedModelError 如果在调用此方法之前未调用 sample_posterior()(对于 use_posterior=True)或 sample_prior()(对于 use_posterior=False),则可能会出现此错误。
ValueError 如果没有具有覆盖面和频次数据的渠道,则可能会出现此错误。

predictive_accuracy

查看源代码

计算 R-SquaredMAPEwMAPE 拟合优度指标。

如果指定了 revenue_per_kpi,将按收入调整比例 (KPI * revenue_per_kpi) 计算 R-SquaredMAPE(平均绝对百分比误差)和 wMAPE(加权平均绝对百分比误差);如果指定了 revenue_per_kpi = None,则按 KPI 调整比例计算。这与投资回报率的分子(增量效果)中所用的缩放比例相同。

如果指定了 revenue_per_kpi,将按实际收入 (KPI * revenue_per_kpi) 对 wMAPE 的预测误差进行加权;如果 revenue_per_kpi = None,则按 KPI 调整比例进行加权。这意味着,收入高时的百分比误差权重高于收入低时的误差权重。

R-SquaredMAPEwMAPE 在模型级(每个地理位置和时间段一个观测结果)和国家级(将各地理位置的 KPI 或收入结果汇总,因此每个时间段一个观测结果)进行计算。

R-SquaredMAPEwMAPE 是针对全部样本计算的。如果模型对象有任何留出观测结果,则还会针对 TrainTest 子集计算 R-squaredMAPEwMAPE

实参
selected_geos 可选列表,包含要纳入的一部分地理位置。默认纳入所有地理位置。
selected_times 可选列表,包含要纳入的一部分日期。默认纳入所有时间段。
batch_size 整数,表示每个批次中每条链的抽样次数上限。默认情况下,batch_size100。计算分批次运行,以避免内存耗尽。如果发生内存错误,可以试着减小 batch_size。一般而言,batch_size 值越大,计算速度越快。

返回结果
一个 xarray 数据集,包含计算出的 R_SquaredMAPEwMAPE 值,还有坐标 metricgeo_granularityevaluation_set 以及相应的数据变量 value。如果存在 holdout_id,则将数据拆分为 'Train''Test''All Data' 子部分,并针对每个子部分计算这三个指标。

response_curves

查看源代码

用于生成响应曲线 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

查看源代码

计算模型中每个形参的 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:

  • n_params:模型中对应形参的数量。
  • avg_rhat:对应形参的平均 R-hat 值。
  • n_params:模型中对应形参的数量。
  • avg_rhat:对应形参的平均 R-hat 值。
  • max_rhat:对应形参的最大 R-hat 值。
  • percent_bad_rhat:在对应形参的 R-hat 值中,大于 bad_rhat_threshold 的 R-hat 值所占的百分比。
  • row_idx_bad_rhat:大于 bad_rhat_threshold 的 R-hat 值的行索引。
  • col_idx_bad_rhat:大于 bad_rhat_threshold 的 R-hat 值的列索引。

可能引发的错误
NotFittedModelError 如果在调用此方法之前未调用 self.sample_posterior(),则可能会出现此错误。
ValueError 如果某个形参的 R-hat 数组的维度数不是 12,则可能会出现此错误。

roi

查看源代码

计算每个媒体渠道的投资回报率先验或后验分布。

投资回报率的分子是某个渠道的支出设为零,且所有其他渠道的支出保持不变时,预期结果(kpikpi * revenue_per_kpi)的变化。投资回报率的分母是渠道的总支出。

如果 new_data=None,此方法会根据 Meridian 对象初始化时使用的付费媒体变量的值来计算投资回报率。用户还可以通过 new_data 实参覆盖这些历史数据,前提是新张量有匹配的维度。例如,

new_data = DataTensors(media=new_media, frequency=new_frequency)

如果指定了 selected_geosselected_times,则投资回报率分母为所选地理位置和时间段内的总支出。如果用于训练模型的 InputData 的支出没有地理位置和时间维度,系统会抛出异常。(如果 new_data.media_spendnew_data.rf_spend 实参使用的维度与 InputData 支出不同,则系统会抛出异常,因为这很可能是用户错误。)

实参
use_posterior 布尔值。如果值为 True,则计算后验分布。否则,将计算先验分布。
new_data 可选。包含 mediamedia_spendreachfrequencyrf_spendrevenue_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

查看源代码

返回摘要指标。

如果 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" 汇总渠道维度定义 mroieffectiveness 指标 (math.nan)。

实参
new_data 可选的 DataTensors 对象,其中包含可选的新张量:mediareachfrequencyorganic_mediaorganic_reachorganic_frequencynon_media_treatmentscontrolsrevenue_per_kpi。如果提供了 new_data,则系统会使用传入的张量值和其余所有张量原始值来计算摘要指标。新张量维度必须与 meridian.input_data 中相应原始张量的维度一致。如果值为 None,则使用所有张量原始值计算摘要指标。
marginal_roi_by_reach 布尔值。mROI 是指每增加一美元支出带来的回报率。如果此实参的值为 True,则假设每增加一元支出只会影响覆盖面,而频次保持不变。如果此实参的值为 False,则假设每增加一元支出只会影响频次,而覆盖面保持不变。 仅在 include_non_paid_channelsFalse 时使用。
marginal_roi_incremental_increase 在计算每个渠道 mROI 的分子时,渠道的支出增加的一小部分。mROI 的分母是渠道总支出中增加的这一部分。仅在 include_non_paid_channelsFalse 时使用。
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,包含以下坐标:channelmetricmeanmedianci_lowci_high)、distribution(先验、后验);且包含以下非付费数据变量:incremental_outcomepct_of_contributioneffectiveness,以及以下付费数据变量:impressionspct_of_impressionsspendpct_of_spendCPMroimroicpik。只有当 include_non_paid_channelsFalse 时,数据集才会包含付费数据变量。请注意,如果 aggregate_times=False,系统不会报告 roimroicpikeffectiveness 指标,因为这些指标无法按时间段进行明确的解释。