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 taillen_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 longueurn_paid_channels
permettant d'utiliser différentes contraintes de dépenses pour différents canaux, ou une seule valeurfloat
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 longueurn_paid_channels
permettant d'utiliser différentes contraintes de dépenses pour différents canaux, ou une seule valeurfloat
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 estTrue
, ce qui indique un budget fixe. Si la valeur estFalse
, vous devez également spécifiertarget_roi
outarget_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 atteinttarget_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 taillen_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 longueurn_paid_channels
permettant d'utiliser différentes contraintes de dépenses pour différents canaux, ou une seule valeurfloat
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 longueurn_paid_channels
permettant d'utiliser différentes contraintes de dépenses pour différents canaux, ou une seule valeurfloat
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 estTrue
, ce qui indique un budget fixe. Si la valeur estFalse
, vous devez spécifiertarget_roi
outarget_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 atteinttarget_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 taillen_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 longueurn_paid_channels
permettant d'utiliser différentes contraintes de dépenses pour différents canaux, ou une seule valeurfloat
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 longueurn_paid_channels
permettant d'utiliser différentes contraintes de dépenses pour différents canaux, ou une seule valeurfloat
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.