Cenários de otimização do orçamento

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 tamanho n_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, totalizando 1. 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 tamanho n_paid_channels para usar diversas restrições de gastos em canais diferentes ou um único valor float 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 tamanho n_paid_channels para usar diversas restrições de gastos em canais diferentes ou um único valor float 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. Se False, você também precisa especificar target_roi ou target_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 atinge target_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 tamanho n_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, totalizando 1. 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 tamanho n_paid_channels para usar diversas restrições de gastos em canais diferentes ou um único valor float 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 tamanho n_paid_channels para usar diversas restrições de gastos em canais diferentes ou um único valor float 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 for False, você precisará especificar target_roi ou target_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 atinge target_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 tamanho n_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, totalizando 1. 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 tamanho n_paid_channels para usar diversas restrições de gastos em canais diferentes ou um único valor float 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 tamanho n_paid_channels para usar diversas restrições de gastos em canais diferentes ou um único valor float 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.