Este documento descreve cenários de orçamento fixo e flexível e mostra exemplos de código para ajudar você a personalizar a otimização do orçamento.
Orçamento fixo: maximizar o ROI ou o KPI incremental
Nesse cenário, para um determinado orçamento, você pode encontrar a alocação ideal em vários canais e táticas para maximizar o retorno do investimento (ROI). Se kpi_type
for definido como "sem receita" e revenue_per_kpi
for desconhecido, o cenário de orçamento fixo vai encontrar a alocação ideal para maximizar o KPI incremental.
Esse cenário representa as configurações padrão e é executado quando você chama o método optimize()
da classe BudgetOptimizer
sem outros argumentos. Também é possível modificar o cenário de orçamento fixo alterando a janela de tempo de otimização, inserindo orçamentos diferentes e alocações de gastos de mídia pré-otimizadas e indicando os limites mínimo e máximo para os gastos com mídia.
Exemplo de código
O exemplo de código a seguir mostra um cenário de orçamento fixo personalizado:
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),
)
Parâmetros-chave
selected_times
: tupla que contém as dimensões do horário de início e término para o período em que a otimização será executada. As dimensões de tempo precisam estar alinhadas às do Meridian. Por padrão, todos os períodos são usados.Exemplo
Para modificar o período:
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
: número que indica o valor total do cenário de orçamento fixo. O padrão é o orçamento histórico.Exemplo
Para alterar o orçamento para
70_000_000
:budget_optimizer = optimizer.BudgetOptimizer(meridian) opt = budget_optimizer.optimize(budget=70_000_000)
pct_of_spend
: lista numérica de tamanhon_paid_channels
que contém as alocações percentuais do gasto do canal. A ordem tem que corresponder a(InputData.media + InputData.reach)
com valores entre 0 e 1, totalizando1
. Por padrão, a alocação histórica é usada. O orçamento e a alocação são usados juntos para determinar o gasto não otimizado da mídia, que é a base para calcular as métricas de performance não otimizadas (por exemplo, ROI) e estabelecer a faixa viável de gastos em mídia de acordo com as restrições definidas.Exemplo
Para especificar a alocação:
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
: lista numérica de tamanhon_paid_channels
para usar diversas restrições de gastos em canais diferentes ou um único valorfloat
como a mesma restrição de gastos para todos os canais de mídia. Se fornecida como uma matriz indexada por canal, a ordem precisa corresponder a(InputData.media + InputData.reach)
. Indica o limite mínimo do gasto de mídia. Esse limite é((1 - spend_constraint_lower) * budget * allocation)
. O valor inserido deve ser entre 0 e 1. O valor padrão é 0,3 (70% do gasto de mídia) para um orçamento fixo e 1 (0% do gasto de mídia) para um orçamento flexível.Exemplo
Para alterar a restrição de gastos mais baixa:
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
: lista numérica de tamanhon_paid_channels
para usar diversas restrições de gastos em canais diferentes ou um único valorfloat
como a mesma restrição de gastos para todos os canais de mídia. Se fornecida como uma matriz indexada por canal, a ordem precisa corresponder a(InputData.media + InputData.reach)
. Indica o limite máximo do gasto de mídia. Esse limite é(1 + spend_constraint_upper) * budget * allocation)
. O valor padrão é 0,3 (130% do gasto de mídia) para um orçamento fixo e 1 (200% do gasto de mídia) para um orçamento flexível.Exemplo
Para alterar a restrição de gasto máximo:
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 )
Orçamento flexível: meta de ROI mínimo
Nesse cenário, para um orçamento flexível, insira uma meta específica de ROI mínimo. Essa opção permite descobrir qual é o orçamento máximo que você pode gastar sem limite até que o ROI geral atinja X no nível total de marketing. O Meridian recomenda um orçamento máximo e uma alocação ideal do orçamento em todos os canais de mídia para alcançar a meta de ROI. A restrição de ROI desejado é aplicada ao ROI total de marketing, e não ao canal.
Exemplo de código
O exemplo de código a seguir mostra um cenário de orçamento flexível personalizado com uma meta de ROI mínimo:
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,
)
Parâmetros-chave
fixed_budget
: booleano que indica se é uma otimização de orçamento fixo ou flexível. O padrão éTrue
, indicando um orçamento fixo. SeFalse
, você também precisa especificartarget_roi
outarget_mroi
.target_roi
: ponto flutuante que indica a restrição de ROI desejado. Usado apenas para cenários de orçamento flexível. A restrição é aplicada quando o ROI do gasto de mídia total atingetarget_roi
.Exemplo
Para mudar para o cenário de orçamento flexível e definir a meta de ROI como
1
:budget_optimizer = optimizer.BudgetOptimizer(meridian) opt = budget_optimizer.optimize(fixed_budget=False, target_roi=1)
selected_times
: tupla que contém as dimensões do horário de início e término para o período em que a otimização será executada. As dimensões de tempo precisam estar alinhadas às do Meridian. Por padrão, todos os períodos são usados.pct_of_spend
: lista numérica de tamanhon_paid_channels
que contém a alocação percentual do gasto de mídia. A ordem tem que corresponder a(InputData.media + InputData.reach)
com valores entre 0 e 1, totalizando1
. Por padrão, a alocação histórica é usada. O orçamento e a alocação são usados juntos para determinar o gasto não otimizado da mídia, que é a base para calcular as métricas de performance não otimizadas (por exemplo, ROI) e estabelecer a faixa viável de gastos em mídia de acordo com as restrições definidas.spend_constraint_lower
: lista numérica de tamanhon_paid_channels
para usar diversas restrições de gastos em canais diferentes ou um único valorfloat
como a mesma restrição de gastos para todos os canais de mídia. Se fornecida como uma matriz indexada por canal, a ordem precisa corresponder a(InputData.media + InputData.reach)
. Indica o limite mínimo do gasto de mídia. Esse limite é((1 - spend_constraint_lower) * budget * allocation)
. O valor inserido deve ser entre 0 e 1. O valor padrão é 0,3 (70% do gasto de mídia) para um orçamento fixo e 1 (0% do gasto de mídia) para um orçamento flexível.spend_constraint_upper
: lista numérica de tamanhon_paid_channels
para usar diversas restrições de gastos em canais diferentes ou um único valorfloat
como a mesma restrição de gastos para todos os canais de mídia. Se fornecida como uma matriz indexada por canal, a ordem precisa corresponder a(InputData.media + InputData.reach)
. Indica o limite máximo do gasto de mídia. Esse limite é(1 + spend_constraint_upper) * budget * allocation)
. O valor padrão é 0,3 (130% do gasto de mídia) para um orçamento fixo e 1 (200% do gasto de mídia) para um orçamento flexível.
Orçamento flexível: meta de ROI marginal
Nesse cenário, para um orçamento flexível, insira uma meta de ROI marginal para o gasto incremental. Essa opção informa qual é o orçamento máximo que você pode gastar sem limite até que o ROI marginal de cada canal de mídia atinja a meta de ROI marginal. Ainda é possível que o ROI marginal de alguns canais não seja igual à meta devido à faixa viável de gastos em mídia. No entanto, o ROI marginal vai diminuir em direção à meta de ROI marginal. A meta de ROI marginal é aplicada no canal, e não no total de marketing.
Exemplo de código
O exemplo de código a seguir mostra um cenário de orçamento flexível personalizado com uma meta de ROI marginal:
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,
)
Parâmetros-chave
fixed_budget
: booleano que indica se é uma otimização de orçamento fixo ou flexível. O padrão éTrue
, indicando um orçamento fixo. Se forFalse
, você precisará especificartarget_roi
outarget_mroi
.target_mroi
: ponto flutuante que indica a restrição de ROI marginal desejado. Usado apenas para cenários de orçamento flexível. A restrição é aplicada quando o ROI marginal do gasto de mídia total atingetarget_mroi
.Exemplo
Para mudar para o cenário de orçamento flexível e definir a meta de ROI marginal como
1
:budget_optimizer = optimizer.BudgetOptimizer(meridian) opt = budget_optimizer.optimize(fixed_budget=False, target_mroi=1)
selected_times
: tupla que contém as dimensões do horário de início e término para o período em que a otimização será executada. As dimensões de tempo precisam estar alinhadas às do Meridian. Por padrão, todos os períodos são usados.pct_of_spend
: lista numérica de tamanhon_paid_channels
que contém a alocação percentual do gasto de mídia. A ordem tem que corresponder a(InputData.media + InputData.reach)
com valores entre 0 e 1, totalizando1
. Por padrão, a alocação histórica é usada. O orçamento e a alocação são usados juntos para determinar o gasto não otimizado da mídia, que é a base para calcular as métricas de performance não otimizadas (por exemplo, ROI) e estabelecer a faixa viável de gastos em mídia de acordo com as restrições definidas.spend_constraint_lower
: lista numérica de tamanhon_paid_channels
para usar diversas restrições de gastos em canais diferentes ou um único valorfloat
como a mesma restrição de gastos para todos os canais de mídia. Se fornecida como uma matriz indexada por canal, a ordem precisa corresponder a(InputData.media + InputData.reach)
. Indica o limite mínimo do gasto de mídia. Esse limite é((1 - spend_constraint_lower) * budget * allocation)
. O valor inserido deve ser entre 0 e 1. O valor padrão é 0,3 (70% do gasto de mídia) para um orçamento fixo e 1 (0% do gasto de mídia) para um orçamento flexível.spend_constraint_upper
: lista numérica de tamanhon_paid_channels
para usar diversas restrições de gastos em canais diferentes ou um único valorfloat
como a mesma restrição de gastos para todos os canais de mídia. Se fornecida como uma matriz indexada por canal, a ordem precisa corresponder a(InputData.media + InputData.reach)
. Indica o limite máximo do gasto de mídia. Esse limite é(1 + spend_constraint_upper) * budget * allocation)
. O valor padrão é 0,3 (130% do gasto de mídia) para um orçamento fixo e 1 (200% do gasto de mídia) para um orçamento flexível.