本文档介绍了固定预算和灵活预算方案,并提供了示例代码,有助于您了解如何自定义预算优化方案。
固定预算:尽可能提高投资回报率或增量 KPI
在这种预算既定的方案中,您可以确定各渠道间的最优分配比例,以及实现投资回报率 (ROI) 最大化的策略。如果将 kpi_type
设置为 non-revenue,且 revenue_per_kpi
未知,则固定预算方案会确定出最优分配比例,以尽可能提高增量 KPI。
此方案是默认设置,如果您调用 BudgetOptimizer
类中的 optimize()
方法而不使用任何其他实参,就会运行此方案。您还可以通过以下方式修改固定预算方案:更改优化时间窗口,输入不同的预算和预先优化的媒体支出分配比例,指明媒体支出的下限和上限。
示例代码
以下代码示例展示了自定义的固定预算方案:
budget_optimizer = optimizer.BudgetOptimizer(meridian)
pct_of_spend = {
'Channel0': 0.2,
'Channel1': 0.2,
'Channel2': 0.2,
'Channel3': 0.1,
'Channel4': 0.2,
'Channel5': 0.1,
}
spend_constraint = {
'Channel0': 0.3,
'Channel1': 0.2,
'Channel2': 0.3,
'Channel3': 0.3,
'Channel4': 0.3,
'Channel5': 0.2,
}
build_channel_args = meridian.input_data.get_paid_channels_argument_builder()
optimization_results = budget_optimizer.optimize(
selected_times=('2023-01-16', '2024-01-15'),
budget=70_000_000,
pct_of_spend=build_channel_args(**pct_of_spend),
spend_constraint_lower=build_channel_args(**spend_constraint),
spend_constraint_upper=build_channel_args(**spend_constraint),
)
关键形参
selected_times
:一个元组,包含要运行优化的时段的开始和结束时间维度。时间维度应与 Meridian 时间维度保持一致。默认情况下,系统会使用所有时间段。示例
修改日期范围:
budget_optimizer = optimizer.BudgetOptimizer(meridian) opt = budget_optimizer.optimize(selected_times=('2023-01-16','2024-01-15')) # date range from week 100 to 200
budget
:表示固定预算方案总预算的数字。默认为历史预算。示例
将预算更改为
70_000_000
:budget_optimizer = optimizer.BudgetOptimizer(meridian) opt = budget_optimizer.optimize(budget=70_000_000)
pct_of_spend
:大小为n_paid_channels
的数字列表,其中包含渠道支出的分配百分比。顺序必须与(InputData.media + InputData.reach)
一致,值介于 0 到 1 之间,总和为1
。默认情况下,系统会采用既往的分配比例。系统会结合使用预算和分配比例来确定未优化的媒体级支出,该支出用于计算未优化的效果指标(例如投资回报率),并根据支出限制建立可行的媒体级支出范围。示例
指定分配比例:
budget_optimizer = optimizer.BudgetOptimizer(meridian) opt = budget_optimizer.optimize( pct_of_spend=build_channel_args( Channel0=0.2, Channel1=0.2, Channel2=0.2, Channel4=0.1, Channel5=0.2, Channel6=0.1, ), # non-optimized allocation is 20% to Channel0, 20% to Channel1 etc )
spend_constraint_lower
:长度为n_paid_channels
的数字列表,用于对不同的渠道施加不同的支出限制;也可以使用单个float
值,以对所有媒体渠道施加相同的支出限制。如果以渠道索引数组的形式提供,则顺序必须与(InputData.media + InputData.reach)
一致。表示媒体级支出的下限。媒体级支出的下限为((1 - spend_constraint_lower) * budget * allocation)
。输入的值必须介于 0 到 1 之间。对于固定预算,默认值为 0.3(即媒体支出的 70%);对于灵活预算,默认值为 1(即媒体支出的 0%)。示例
更改支出下限:
budget_optimizer = optimizer.BudgetOptimizer(meridian) build_channel_args = build_channel_args.with_default_value(0.3) opt = budget_optimizer.optimize( spend_constraint_lower=build_channel_args( Channel1=0.2, Channel5=0.2, ), # change the lower bound to 70%, 80%, 70%, 70%, 70% and 80% of media spends )
spend_constraint_upper
:长度为n_paid_channels
的数字列表,用于对不同的渠道施加不同的支出限制;也可以使用单个float
值,以对所有媒体渠道施加相同的支出限制。如果以渠道索引数组的形式提供,则顺序必须与(InputData.media + InputData.reach)
一致。表示媒体级支出的上限。媒体级支出的上限为(1 + spend_constraint_upper) * budget * allocation)
。对于固定预算,默认值为 0.3(即媒体支出的 130%);对于灵活预算,默认值为 1(即媒体支出的 200%)。示例
更改支出上限:
budget_optimizer = optimizer.BudgetOptimizer(meridian) build_channel_args = build_channel_args.with_default_value(0.3) opt = budget_optimizer.optimize( spend_constraint_upper=build_channel_args( Channel1=0.2, Channel5=0.2, ), # change the upper bound to 130%, 120%, 130%, 130%, 130% and 120% of media spends )
灵活预算:设置最低投资回报率目标值
在这种灵活预算方案中,您需要输入一个特定的最低投资回报率目标值。通过这种可选方案,您可以确定若没有任何预算限制,在整个营销层面上总体投资回报率达到 X 之前,您可以花费的最高预算是多少。Meridian 会提供建议的最高预算以及各媒体渠道间的最优预算分配比例,以实现该投资回报率目标值。值得注意的是,投资回报率目标值限制适用于总体营销投资回报率层面,而非渠道层面。
示例代码
下面的代码示例展示了一种自定义的灵活预算方案,其中设置了最低投资回报率目标值:
budget_optimizer = optimizer.BudgetOptimizer(meridian)
optimization_results = budget_optimizer.optimize(
selected_times=('2023-01-16','2024-01-15'),
fixed_budget=False,
spend_constraint_lower=0.5,
spend_constraint_upper=0.5,
target_roi=1,
)
关键形参
fixed_budget
:一个布尔值,表示是固定预算优化方案还是灵活预算优化方案。默认为True
,表示固定预算。如果是False
,您还必须指定target_roi
或target_mroi
。target_roi
:表示投资回报率目标值限制的浮点数。仅用于灵活预算方案。当总媒体支出的投资回报率达到target_roi
时,预算会受到限制。示例
改用灵活预算方案并将投资回报率目标值设置为
1
:budget_optimizer = optimizer.BudgetOptimizer(meridian) opt = budget_optimizer.optimize(fixed_budget=False, target_roi=1)
selected_times
:一个元组,包含要运行优化的时段的开始和结束时间维度。时间维度应与 Meridian 时间维度保持一致。默认情况下,系统会使用所有时间段。pct_of_spend
:大小为n_paid_channels
的数字列表,其中包含媒体支出的分配百分比。顺序必须与(InputData.media + InputData.reach)
一致,值介于 0 到 1 之间,总和为1
。默认情况下,系统会采用既往的分配比例。系统会结合使用预算和分配比例来确定未优化的媒体级支出,该支出用于计算未优化的效果指标(例如投资回报率),并根据支出限制建立可行的媒体级支出范围。spend_constraint_lower
:长度为n_paid_channels
的数字列表,用于对不同的渠道施加不同的支出限制;也可以使用单个float
值,以对所有媒体渠道施加相同的支出限制。如果以渠道索引数组的形式提供,则顺序必须与(InputData.media + InputData.reach)
一致。表示媒体级支出的下限。媒体级支出的下限为((1 - spend_constraint_lower) * budget * allocation)
。输入的值必须介于 0 到 1 之间。对于固定预算,默认值为 0.3(即媒体支出的 70%);对于灵活预算,默认值为 1(即媒体支出的 0%)。spend_constraint_upper
:长度为n_paid_channels
的数字列表,用于对不同的渠道施加不同的支出限制;也可以使用单个float
值,以对所有媒体渠道施加相同的支出限制。如果以渠道索引数组的形式提供,则顺序必须与(InputData.media + InputData.reach)
一致。表示媒体级支出的上限。媒体级支出的上限为(1 + spend_constraint_upper) * budget * allocation)
。对于固定预算,默认值为 0.3(即媒体支出的 130%);对于灵活预算,默认值为 1(即媒体支出的 200%)。
灵活预算:设置边际投资回报率目标值
在这种灵活预算方案中,您需要为增量支出输入边际投资回报率目标值。通过这种方案,您可以确定若没有预算限制,在每个媒体渠道的边际投资回报率达到边际投资回报率目标值之前,您可以花费的最高预算是多少。由于媒体支出的可行范围有限,某些渠道的边际投资回报率仍有可能不等于边际投资回报率目标值。不过,边际投资回报率实际上会趋近于边际投资回报率目标值。值得注意的是,边际投资回报率目标值适用于渠道层面,而不是整个营销层面。
示例代码
下面的代码示例展示了一种自定义的灵活预算方案,其中设置了边际投资回报率目标值:
budget_optimizer = optimizer.BudgetOptimizer(meridian)
optimization_results = budget_optimizer.optimize(
selected_times=('2023-01-16','2024-01-15'),
fixed_budget=False,
spend_constraint_lower=0.5,
spend_constraint_upper=0.5,
target_mroi=1,
)
关键形参
fixed_budget
:一个布尔值,表示是固定预算优化方案还是灵活预算优化方案。默认为True
,表示固定预算。如果是False
,您必须指定target_roi
或target_mroi
。target_mroi
:表示边际投资回报率目标值限制的浮点数。仅用于灵活预算方案。当总媒体支出的边际投资回报率达到target_mroi
时,预算会受到限制。示例
改用灵活预算方案并将边际投资回报率目标值设置为
1
:budget_optimizer = optimizer.BudgetOptimizer(meridian) opt = budget_optimizer.optimize(fixed_budget=False, target_mroi=1)
selected_times
:一个元组,包含要运行优化的时段的开始和结束时间维度。时间维度应与 Meridian 时间维度保持一致。默认情况下,系统会使用所有时间段。pct_of_spend
:大小为n_paid_channels
的数字列表,其中包含媒体支出的分配百分比。顺序必须与(InputData.media + InputData.reach)
一致,值介于 0 到 1 之间,总和为1
。默认情况下,系统会采用既往的分配比例。系统会结合使用预算和分配比例来确定未优化的媒体级支出,该支出用于计算未优化的效果指标(例如投资回报率),并根据支出限制建立可行的媒体级支出范围。spend_constraint_lower
:长度为n_paid_channels
的数字列表,用于对不同的渠道施加不同的支出限制;也可以使用单个float
值,以对所有媒体渠道施加相同的支出限制。如果以渠道索引数组的形式提供,则顺序必须与(InputData.media + InputData.reach)
一致。表示媒体级支出的下限。媒体级支出的下限为((1 - spend_constraint_lower) * budget * allocation)
。输入的值必须介于 0 到 1 之间。对于固定预算,默认值为 0.3(即媒体支出的 70%);对于灵活预算,默认值为 1(即媒体支出的 0%)。spend_constraint_upper
:长度为n_paid_channels
的数字列表,用于对不同的渠道施加不同的支出限制;也可以使用单个float
值,以对所有媒体渠道施加相同的支出限制。如果以渠道索引数组的形式提供,则顺序必须与(InputData.media + InputData.reach)
一致。表示媒体级支出的上限。媒体级支出的上限为(1 + spend_constraint_upper) * budget * allocation)
。对于固定预算,默认值为 0.3(即媒体支出的 130%);对于灵活预算,默认值为 1(即媒体支出的 200%)。