このドキュメントでは、予算が固定のシナリオと柔軟なシナリオについて説明し、予算の最適化をカスタマイズする方法を理解するためのコード例も示します。
固定予算: ROI を最大化する、または KPI の増分を最大化する
このシナリオでは、特定の予算で投資収益率(ROI)を最大化するために、各種チャネルと戦略に割り当てるべき最適な予算配分を把握できます。kpi_type
が収益以外のタイプで 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
になる必要があります。デフォルトでは、過去の配分が使用されます。予算と配分は、最適化されていないメディアレベルの費用を決めるために併用されます。決定された費用は、最適化されていないパフォーマンス指標(ROI など)の計算と、費用の制約を踏まえた実現可能なメディアレベルの費用範囲の割り出しに使われます。例
配分を指定するには:
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 )
柔軟な予算: 目標最小 ROI
この柔軟な予算のシナリオでは、具体的な最小 ROI の目標値を入力します。このシナリオでは、総合的なマーケティング レベルで全体的な ROI が X に達するまで、予算の制約なしで使える最大予算額を把握できます。Meridian は、ROI の目標値を達成するための最大推奨予算と、メディア チャネル全体での最適な予算配分を提示します。なお、目標 ROI の制約は、チャネルレベルではなく、総合的なマーケティング レベルで適用されます。
コード例
次のコード例は、目標 ROI の最小値を指定してカスタマイズされた柔軟な予算のシナリオを示しています。
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
: 目標 ROI の制約を示す浮動小数点値。柔軟な予算のシナリオだけで使われます。合計メディア費用の ROI がtarget_roi
に達した時点で、予算が制約されます。例
柔軟な予算のシナリオに切り替えて、目標 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
になる必要があります。デフォルトでは、過去の配分が使用されます。予算と配分は、最適化されていないメディアレベルの費用を決めるために併用されます。決定された費用は、最適化されていないパフォーマンス指標(ROI など)の計算と、費用の制約を踏まえた実現可能なメディアレベルの費用範囲の割り出しに使われます。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%)です。
柔軟な予算: 目標限界 ROI
この柔軟な予算のシナリオでは、増分費用に関する限界 ROI の目標値を入力します。このシナリオでは、各メディア チャネルの限界 ROI が目標限界 ROI に達するまで、予算の制約なしで使える最大予算額を把握できます。その場合も、メディア費用の実現可能な範囲が原因で、一部のチャネルの限界 ROI が目標限界 ROI と同じにならない可能性があります。ただし、限界 ROI は目標限界 ROI に向かって実質的に縮小していきます。なお、目標限界 ROI は、総合的なマーケティング レベルではなく、チャネルレベルで適用されます。
コード例
次のコード例は、目標限界 ROI を指定してカスタマイズされた柔軟な予算のシナリオを示しています。
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
: 目標限界 ROI の制約を示す浮動小数点値。柔軟な予算のシナリオだけで使われます。合計メディア費用の限界 ROI がtarget_mroi
に達した時点で、予算が制約されます。例
柔軟な予算のシナリオに切り替えて、目標限界 ROI を
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
になる必要があります。デフォルトでは、過去の配分が使用されます。予算と配分は、最適化されていないメディアレベルの費用を決めるために併用されます。決定された費用は、最適化されていないパフォーマンス指標(ROI など)の計算と、費用の制約を踏まえた実現可能なメディアレベルの費用範囲の割り出しに使われます。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%)です。