Scénarios d'optimisation du budget

Ce document décrit des scénarios à budget fixe et flexible, et fournit un exemple de code pour vous aider à comprendre comment personnaliser l'optimisation de votre budget.

Budget fixe : maximiser le ROI ou le KPI incrémental

Dans ce scénario, pour un budget donné, vous pouvez trouver l'allocation optimale entre les canaux et les tactiques afin de maximiser le retour sur investissement (ROI). Si kpi_type est défini sur "non-revenue" et que revenue_per_kpi est inconnu, le scénario à budget fixe trouve l'allocation optimale pour maximiser le KPI incrémental.

Ce scénario correspond aux paramètres par défaut et s'exécute si vous appelez la méthode optimize() à partir de la classe BudgetOptimizer sans argument supplémentaire. Vous pouvez également modifier le scénario à budget fixe en modifiant la période d'optimisation, en saisissant des allocations de budget et de dépenses média pré-optimisées distinctes, et en indiquant les limites inférieure et supérieure pour les dépenses média.

Exemple de code

L'exemple de code suivant illustre un scénario à budget fixe personnalisé :

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),
)

Paramètres clés

  • selected_times : tuple contenant les dimensions de l'heure de début et de fin pour la durée d'exécution de l'optimisation. Les dimensions temporelles doivent correspondre aux dimensions temporelles de Meridian. Par défaut, toutes les périodes sont utilisées.

    Exemple

    Pour modifier la plage de dates :

    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 : nombre indiquant le budget total pour le scénario à budget fixe. Correspond par défaut au budget historique.

    Exemple

    Pour modifier le budget sur 70_000_000 :

    budget_optimizer = optimizer.BudgetOptimizer(meridian)
    opt = budget_optimizer.optimize(budget=70_000_000)
    
  • pct_of_spend : liste numérique de taille n_paid_channels contenant les allocations en pourcentage des dépenses par canal. L'ordre doit correspondre à (InputData.media + InputData.reach) avec des valeurs comprises entre 0 et 1, dont la somme est égale à 1. Par défaut, l'allocation historique est utilisée. Le budget et l'allocation sont utilisés conjointement pour déterminer les dépenses média non optimisées, qui sont utilisées pour calculer les métriques de performances non optimisées (par exemple, le ROI) et créer la plage possible de dépenses média avec les contraintes de dépenses.

    Exemple

    Pour spécifier l'allocation :

    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 : liste numérique de longueur n_paid_channels permettant d'utiliser différentes contraintes de dépenses pour différents canaux, ou une seule valeur float comme contrainte de dépenses unique pour tous les canaux média. Si l'ordre est défini en tant que tableau indexé par canal, il doit correspondre à (InputData.media + InputData.reach). Indique la limite inférieure des dépenses média. La limite inférieure des dépenses média est ((1 - spend_constraint_lower) * budget * allocation). La valeur saisie doit être comprise entre 0 et 1. La valeur par défaut est 0,3 (soit 70 % des dépenses média) pour un budget fixe et 1 (soit 0 % des dépenses média) pour un budget flexible.

    Exemple

    Pour modifier la contrainte de dépenses minimale :

    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 : liste numérique de longueur n_paid_channels permettant d'utiliser différentes contraintes de dépenses pour différents canaux, ou une seule valeur float comme contrainte de dépenses unique pour tous les canaux média. Si l'ordre est défini en tant que tableau indexé par canal, il doit correspondre à (InputData.media + InputData.reach). Indique la limite supérieure des dépenses média. La limite supérieure des dépenses média est (1 + spend_constraint_upper) * budget * allocation). La valeur par défaut est 0,3 (soit 130 % des dépenses média) pour un budget fixe et 1 (soit 200 % des dépenses média) pour un budget flexible.

    Exemple

    Pour modifier la contrainte de dépenses maximale :

    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
    )
    

Budget flexible : ROI minimal cible

Dans ce scénario, pour un budget flexible, vous saisissez un ROI cible minimal spécifique. Cette option vous permet de déterminer le budget maximal que vous pouvez dépenser sans limite de budget jusqu'à ce que le ROI global atteigne X pour l'ensemble de l'effort marketing. Meridian fournit un budget maximal recommandé, ainsi qu'une allocation optimale du budget sur les différents canaux média, pour atteindre ce ROI cible. En particulier, la contrainte de ROI cible est appliquée au niveau du ROI marketing global, et non au niveau du canal.

Exemple de code

L'exemple de code suivant illustre un scénario à budget flexible personnalisé avec un ROI minimal cible :

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,
)

Paramètres clés

  • fixed_budget : valeur booléenne indiquant s'il s'agit d'une optimisation à budget fixe ou flexible. La valeur par défaut est True, ce qui indique un budget fixe. Si la valeur est False, vous devez également spécifier target_roi ou target_mroi.

  • target_roi : valeur float indiquant la contrainte de ROI cible. Utilisée uniquement pour les scénarios à budget flexible. Le budget est limité lorsque le ROI des dépenses média totales atteint target_roi.

    Exemple

    Pour passer à un scénario à budget flexible et définir le ROI cible sur 1 :

    budget_optimizer = optimizer.BudgetOptimizer(meridian)
    opt = budget_optimizer.optimize(fixed_budget=False, target_roi=1)
    
  • selected_times : tuple contenant les dimensions de l'heure de début et de fin pour la durée d'exécution de l'optimisation. Les dimensions temporelles doivent correspondre aux dimensions temporelles de Meridian. Par défaut, toutes les périodes sont utilisées.

  • pct_of_spend : liste numérique de taille n_paid_channels contenant l'allocation en pourcentage des dépenses média. L'ordre doit correspondre à (InputData.media + InputData.reach) avec des valeurs comprises entre 0 et 1, dont la somme est égale à 1. Par défaut, l'allocation historique est utilisée. Le budget et l'allocation sont utilisés conjointement pour déterminer les dépenses média non optimisées, qui sont utilisées pour calculer les métriques de performances non optimisées (par exemple, le ROI) et créer la plage possible de dépenses média avec les contraintes de dépenses.

  • spend_constraint_lower : liste numérique de longueur n_paid_channels permettant d'utiliser différentes contraintes de dépenses pour différents canaux, ou une seule valeur float comme contrainte de dépenses unique pour tous les canaux média. Si l'ordre est défini en tant que tableau indexé par canal, il doit correspondre à (InputData.media + InputData.reach). Indique la limite inférieure des dépenses média. La limite inférieure des dépenses média est ((1 - spend_constraint_lower) * budget * allocation). La valeur saisie doit être comprise entre 0 et 1. La valeur par défaut est 0,3 (soit 70 % des dépenses média) pour un budget fixe et 1 (soit 0 % des dépenses média) pour un budget flexible.

  • spend_constraint_upper : liste numérique de longueur n_paid_channels permettant d'utiliser différentes contraintes de dépenses pour différents canaux, ou une seule valeur float comme contrainte de dépenses unique pour tous les canaux média. Si l'ordre est défini en tant que tableau indexé par canal, il doit correspondre à (InputData.media + InputData.reach). Indique la limite supérieure des dépenses média. La limite supérieure des dépenses média est (1 + spend_constraint_upper) * budget * allocation). La valeur par défaut est 0,3 (soit 130 % des dépenses média) pour un budget fixe et 1 (soit 200 % des dépenses média) pour un budget flexible.

Budget flexible : ROI marginal cible

Dans ce scénario, pour un budget flexible, vous saisissez un ROI marginal cible pour les dépenses incrémentales. Cette option indique le budget maximal que vous pouvez dépenser sans limite de budget jusqu'à ce que le ROI marginal de chaque canal média atteigne le ROI marginal cible. Il est toujours possible que le ROI marginal de certains canaux ne soit pas égal au ROI marginal cible en raison de la plage possible de dépenses média. Toutefois, le ROI marginal se réduira effectivement pour s'approcher du ROI marginal cible. Il convient de noter que le ROI marginal cible est appliqué au niveau du canal et non à l'ensemble de l'effort marketing.

Exemple de code

Les exemples de code suivants illustrent un scénario à budget flexible personnalisé avec un ROI marginal cible :

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,
)

Paramètres clés

  • fixed_budget : valeur booléenne indiquant s'il s'agit d'une optimisation à budget fixe ou flexible. La valeur par défaut est True, ce qui indique un budget fixe. Si la valeur est False, vous devez spécifier target_roi ou target_mroi.

  • target_mroi : valeur float indiquant la contrainte de ROI marginal cible. Utilisée uniquement pour les scénarios à budget flexible. Le budget est limité lorsque le ROI marginal des dépenses média totales atteint target_mroi.

    Exemple

    Pour passer à un scénario à budget flexible et définir le ROI marginal cible sur 1 :

    budget_optimizer = optimizer.BudgetOptimizer(meridian)
    opt = budget_optimizer.optimize(fixed_budget=False, target_mroi=1)
    
  • selected_times : tuple contenant les dimensions de l'heure de début et de fin pour la durée d'exécution de l'optimisation. Les dimensions temporelles doivent correspondre aux dimensions temporelles de Meridian. Par défaut, toutes les périodes sont utilisées.

  • pct_of_spend : liste numérique de taille n_paid_channels contenant l'allocation en pourcentage des dépenses média. L'ordre doit correspondre à (InputData.media + InputData.reach) avec des valeurs comprises entre 0 et 1, dont la somme est égale à 1. Par défaut, l'allocation historique est utilisée. Le budget et l'allocation sont utilisés conjointement pour déterminer les dépenses média non optimisées, qui sont utilisées pour calculer les métriques de performances non optimisées (par exemple, le ROI) et créer la plage possible de dépenses média avec les contraintes de dépenses.

  • spend_constraint_lower : liste numérique de longueur n_paid_channels permettant d'utiliser différentes contraintes de dépenses pour différents canaux, ou une seule valeur float comme contrainte de dépenses unique pour tous les canaux média. Si l'ordre est défini en tant que tableau indexé par canal, il doit correspondre à (InputData.media + InputData.reach). Indique la limite inférieure des dépenses média. La limite inférieure des dépenses média est ((1 - spend_constraint_lower) * budget * allocation). La valeur saisie doit être comprise entre 0 et 1. La valeur par défaut est 0,3 (soit 70 % des dépenses média) pour un budget fixe et 1 (soit 0 % des dépenses média) pour un budget flexible.

  • spend_constraint_upper : liste numérique de longueur n_paid_channels permettant d'utiliser différentes contraintes de dépenses pour différents canaux, ou une seule valeur float comme contrainte de dépenses unique pour tous les canaux média. Si l'ordre est défini en tant que tableau indexé par canal, il doit correspondre à (InputData.media + InputData.reach). Indique la limite supérieure des dépenses média. La limite supérieure des dépenses média est (1 + spend_constraint_upper) * budget * allocation). La valeur par défaut est 0,3 (soit 130 % des dépenses média) pour un budget fixe et 1 (soit 200 % des dépenses média) pour un budget flexible.