Choisir et configurer les types d'a priori de traitement

Dans Meridian, il existe plusieurs types de variables de traitement, à savoir les médias payants, les médias naturels et les traitements non média. Pour chaque type de traitement, vous pouvez spécifier un type d'a priori. Un type d'a priori correspond à la métrique spécifique (ROI, ROIm, contribution ou coefficient, par exemple) sur laquelle vous définissez votre croyance antérieure. Vous pouvez choisir la métrique pour laquelle vous avez le plus de connaissances métier (par exemple, à partir de tests) ou celle qui vous intéresse le plus lorsque vous interprétez les résultats du modèle.

Meridian définit une distribution a priori par défaut pour chaque type d'a priori, en se basant sur une logique commerciale générale. La distribution par défaut peut être remplacée en fonction de votre expertise spécifique dans le domaine pour mieux aligner l'a priori sur votre propre intuition commerciale. Il est essentiel de comprendre ces options et le raisonnement qui les sous-tend pour intégrer l'expertise du domaine dans Meridian.

Définitions des types d'a priori

Voici les définitions des types d'a priori disponibles dans Meridian :

  • ROI (retour sur investissement) : ratio entre le résultat incrémental généré par un canal et le coût des dépenses média de ce canal (Incremental Outcome / Spend). Il s'agit souvent de la métrique la plus intuitive pour les médias payants, en particulier lors de la calibration avec des résultats de tests.
  • ROIm (ROI marginal) : retour sur investissement pour une unité monétaire supplémentaire (un euro, par exemple) dépensée sur un canal donné. Cela est utile pour l'optimisation du budget, car les canaux présentant un ROIm plus élevé sont de bons candidats pour recevoir plus de budget.
  • Contribution : proportion du résultat total attribuable à un canal (Incremental Outcome / Total Outcome). Alors que les a priori de ROI et de ROIm ne peuvent être utilisés que pour les médias payants, les a priori de contribution peuvent servir pour les canaux sans dépenses associées, tels que les canaux naturels ou les traitements non média.
  • Coefficient : coefficient statistique sous-jacent pour un traitement donné dans le modèle de régression de Meridian. Contrairement au ROI, au ROIm et à la contribution, qui sont des métriques commerciales, le coefficient est un paramètre statistique plus abstrait qui est difficile à traduire en termes commerciaux sans le contexte d'autres paramètres et données du modèle.

Le tableau suivant récapitule les types d'a priori qu'il est possible d'utiliser avec chaque type de traitement.

Type d'a priori Médias payants Médias naturels Traitements non média
ROI Oui* Non Non
ROIm Oui* Non Non
Contribution Oui Oui Oui
Coefficient Oui Oui Oui

Exemples en langage commercial

Pour clarifier ces concepts, voici comment vous pourriez exprimer un a priori pour chaque type dans un langage commercial simple :

  • Définir un a priori de ROI :

    "D'après notre dernière étude d'impact, nous sommes convaincus que nos annonces sur le Réseau de Recherche génèrent environ 1,50 € de revenus pour chaque euro dépensé. Je souhaite que l'a priori de ROI soit centré autour de cette valeur."

  • Définir un a priori de ROIm :

    "Si nous dépensions un euro de plus en annonces sur les réseaux sociaux, nous pourrions nous attendre à récupérer environ 1,10 € à notre niveau de dépenses actuel. Je souhaite que l'a priori de ROIm soit centré et étroitement distribué autour de cette valeur."

  • Définir un a priori de contribution :

    "Nous pensons que nos annonces vidéo numériques représentent environ 5 % de nos revenus totaux. Je souhaite que l'a priori de contribution soit centré autour de cette valeur."

  • Définir un a priori de coefficient :

    C'est moins courant pour les utilisateurs professionnels. Cela revient à dire : "Je pense que le coefficient bêta de régression sous-jacent pour cette variable devrait être de 0,02." Cette option est généralement réservée aux data scientists ayant des objectifs statistiques spécifiques, car l'interprétation dépend fortement de la mise à l'échelle des données d'entrée et de la métrique de sortie.

Points à prendre en compte pour choisir les types d'a priori de traitement

Dans cette section, nous abordons la logique commerciale et de modélisation qui sous-tend le choix de différents types d'a priori pour les traitements média payant, média naturel et non média.

Les a priori de ROI sont définis par défaut, car ils correspondent généralement mieux aux connaissances a priori, telles que les résultats des tests. Il s'agit généralement de l'option la plus intuitive pour définir des a priori reposant sur des informations raisonnablement fiables.

Les a priori de ROIm peuvent souvent être une option intéressante lorsqu'un grand nombre de connaissances a priori ont été utilisées pour définir les budgets historiques ou dans le cas d'annonceurs qui souhaitent des recommandations de budget plus prudentes. Ils fonctionnent en imposant un a priori capable de diminuer la répartition de budget optimale pour s'approcher de la répartition de budget historique, ce qui permet de régulariser les réaffectations de budget recommandées. Pour ce faire, définissez une moyenne d'a priori de ROIm commun sur tous les canaux et ajustez l'écart-type. Plus l'a priori est fort (écart-type plus faible), plus la répartition optimale se rapproche de l'historique et plus les réaffectations de budget recommandées sont faibles. Notez que les contraintes de dépenses d'optimisation offrent un autre moyen de limiter les réaffectations de budget recommandées, ce qui peut permettre de se passer d'a priori de ROIm. Pour en savoir plus, consultez la sous-section Utiliser des a priori de ROIm pour régulariser le budget.

Les a priori de contribution sont très semblables aux a priori de ROI pour les médias payants. La seule différence réside dans le dénominateur : celui de l'a priori de ROI correspond aux dépenses du canal, tandis que le dénominateur de l'a priori de contribution correspond au résultat total observé. Cela signifie que tout a priori de contribution peut être traduit en a priori de ROI, et que tout a priori de ROI peut être traduit en a priori de contribution pour les médias payants.

Les a priori de coefficients correspondent à la paramétrisation la plus traditionnelle pour un modèle de régression linéaire. L'interprétation d'un coefficient étant assez abstraite dans le contexte de MMM, il est compliqué de définir un a priori basé sur des informations fiables. Une valeur de coefficient spécifique peut impliquer des valeurs de ROI très différentes selon les canaux médias payants. En effet, le ROI dépend de la répartition de l'exécution du canal entre les zones géographiques et les périodes, des estimations des paramètres d'adstock et de rendements décroissants du canal, ainsi que du coût par unité média du canal.

Autres points à prendre en compte pour un résultat non lié aux revenus

Lorsque le résultat n'est pas un revenu (c'est-à-dire lorsque le KPI n'est pas exprimé en unités monétaires et que revenue_per_kpi n'est pas fourni), la disponibilité et l'interprétation des a priori de médias payants changent. Chaque paramètre de PriorDistribution possède une distribution par défaut. Il existe deux exceptions où la valeur par défaut n'est pas utilisée, et les deux se produisent lorsque le résultat n'est pas lié aux revenus.

Les a priori de ROI fonctionnent différemment, car il est impossible de calculer un ratio monétaire. En revanche, lorsque vous utilisez media_prior_type = 'roi', l'a priori par défaut est placé sur la contribution totale de tous les canaux médias payants. Cela vous permet de définir un a priori sur la proportion totale du KPI non monétaire générée par les médias payants. Lorsque des a priori de ROI sont utilisés, la valeur par défaut est attribuée selon une méthodologie spéciale de contribution totale des médias payants.

Les a priori de ROIm représentent le rendement marginal en termes d'unités de résultat par euro (par exemple, les inscriptions supplémentaires par euro). Comme cette valeur dépend fortement du KPI spécifique, il est peu pratique de définir une valeur par défaut universelle. Par conséquent, Meridian ne fournit pas d'a priori par défaut pour le ROIm dans les cas non liés aux revenus et vous demande de spécifier un a priori personnalisé en fonction de vos connaissances du domaine. Dans ce cas, une distribution personnalisée doit être fournie. Il n'y a pas de valeur par défaut, car la plage de valeurs raisonnable varie considérablement pour chaque entreprise.

Les a priori de contribution sont souvent un choix pratique pour les résultats non liés aux revenus, car ils représentent la part du résultat total attribuable à un canal. Cette définition reste cohérente, que le résultat soit un revenu ou non.

Points à prendre en compte concernant les médias naturels

Les a priori de contribution constituent l'option par défaut, car ils correspondent à la quantité la plus intuitive pour définir un a priori basé sur des informations fiables. Il est possible que certains canaux génèrent plus de contributions que d'autres. Par conséquent, vous pouvez personnaliser la distribution a priori pour qu'elle corresponde à vos stratégies commerciales et marketing. Une distribution bêta est souvent logique, car elle est limitée à l'intervalle de zéro à un.

Les a priori de coefficients correspondent à la paramétrisation la plus traditionnelle pour un modèle de régression linéaire. Comme pour les médias payants, l'interprétation d'un coefficient est assez abstraite. Il est donc compliqué de définir un a priori basé sur des informations fiables. Une valeur de coefficient spécifique peut impliquer des valeurs de contribution très différentes selon les canaux média naturel. En effet, la contribution dépend de la répartition de l'exécution du canal entre les zones géographiques et les périodes, ainsi que des estimations des paramètres d'adstock et de rendements décroissants du canal.

Points à prendre en compte concernant les traitements non média

Les a priori de contribution constituent l'option par défaut, car ils correspondent à la quantité la plus intuitive pour définir un a priori basé sur des informations fiables. Il est toujours recommandé de configurer la distribution a priori. En fonction de la valeur de référence spécifiée pour chaque variable, vous pouvez vous attendre à ce que la contribution soit positive ou négative (le signe de la contribution peut aussi être inconnu). Par exemple, il n'est pas toujours évident de savoir si définir le prix sur une valeur de référence donnée aura un impact positif ou négatif sur les revenus. Vous pouvez aussi vous attendre a priori à ce qu'un prix ait un impact positif en dessous d'un prix de référence, mais un impact négatif en dessous d'un autre prix de référence.

Les a priori de coefficients correspondent à la paramétrisation la plus traditionnelle pour un modèle de régression linéaire. Comme pour les médias payants et naturels, l'interprétation d'un coefficient est assez abstraite, ce qui rend difficile la définition d'un a priori basé sur des informations fiables. Une valeur de coefficient spécifique peut impliquer des valeurs de contribution très différentes selon les canaux de traitement non média. En effet, la contribution dépend de la répartition des valeurs de traitement entre les zones géographiques et les périodes, ainsi que de la valeur de traitement de référence.

Organigrammes pour choisir les types d'a priori de traitement

Les organigrammes suivants détaillent les points à prendre en compte indiqués ci-dessus en fonction des traitements média payant, média naturel ou non média.

Médias payants

Organigramme détaillant les points à prendre en compte pour choisir le type d'a priori adapté aux médias payants

Traitements média naturel/non média

Organigramme détaillant les points à prendre en compte pour choisir le type d'a priori approprié pour les médias naturels et les traitements non média

Configurer les types d'a priori de traitement

Dans cette section, nous abordons les types d'a priori disponibles pour les traitements média payant, média naturel et non média, ainsi que les différents points à prendre en compte pour les configurer dans la bibliothèque Meridian. Nous fournissons plusieurs extraits de code et exemples pour configurer des types d'a priori pour les types de traitement.

Configurer les a priori média payant

Le type d'a priori média payant est spécifié par les arguments media_prior_type et rf_prior_type de ModelSpec. Le tableau suivant indique les paramètres PriorDistribution associés à chaque type d'a priori.

media_prior_type/rf_prior_type Paramètre dans PriorDistribution
'roi' * (par défaut) roi_m*, roi_rf*
'mroi'* mroi_m*, mroi_rf*
'contribution' contribution_m, contribution_rf
'coefficient' beta_m, beta_rf

La section suivante fournit des exemples hypothétiques de configuration de ces a priori pour un modèle comportant deux canaux médias payants. Les puces expliquent le raisonnement qui sous-tend les paramètres des exemples d'a priori dans le bloc de code qui suit. Les distributions par défaut sont également fournies comme point de référence pour comprendre le processus de configuration de chaque type d'a priori.

  • ROI (roi_m) : configuré ici avec des distributions LogNormal, il est défini sur 1,7 et 2,5 pour correspondre aux études expérimentales sur l'impact.

    Pour information, la distribution par défaut utilise LogNormal(0.2, 0.9), avec une moyenne de 1,22 et une médiane de 1,83.

import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution
# -----------------------------------------------------------------------------
# Option 1: ROI (Return on Investment)
# -----------------------------------------------------------------------------
# ROI (LogNormal) -> Means at 1.7 and 2.5
prior = prior_distribution.PriorDistribution(
    roi_m=prior_distribution.PriorDistribution.lognormal_dist_from_mean_std(
        mean=[1.7, 2.5], std=[0.3, 0.5]
    )
)
model_spec = spec.ModelSpec(prior=prior, media_prior_type='roi')
  • ROIm (mroi_m) : configuré avec des distributions étroites, il est défini sur 1,0. Une moyenne commune et un petit écart-type ont été sélectionnés pour les deux canaux afin de faciliter la régularisation de l'optimisation du budget. Une moyenne de 1,0 a été sélectionnée, car les deux canaux sont censés être proches de la saturation.

    À titre de référence, la distribution par défaut utilise LogNormal(0.0, 0.5), avec une moyenne de 1,13 et une médiane de 1.

import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution
# -----------------------------------------------------------------------------
# Option 2: mROI (Marginal Return on Investment)
# -----------------------------------------------------------------------------
# mROI (LogNormal) -> Means at 1.0
prior = prior_distribution.PriorDistribution(
    mroi_m=prior_distribution.PriorDistribution.lognormal_dist_from_mean_std(
        mean=[1.0, 1.0], std=[0.2, 0.2]
    )
)
model_spec = spec.ModelSpec(prior=prior, media_prior_type='mroi')
  • Contribution (contribution_m) : utilise des distributions bêta pour modéliser des "parts d'effet" spécifiques à 3 % et 4 %.

    Pour information, la distribution par défaut utilise Beta(concentration1=1.0, concentration0=99.0) et a une moyenne de 1 %.

import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution
# -----------------------------------------------------------------------------
# Option 3: Media Contribution
# -----------------------------------------------------------------------------
# Contribution (Beta) -> Means at 3% and 4%
prior = prior_distribution.PriorDistribution(
    contribution_m=tfp.distributions.Beta(
        concentration1=[3.0, 4.0], concentration0=[97.0, 96.0]
    )
)
model_spec = spec.ModelSpec(prior=prior, media_prior_type='contribution')
  • Coefficient (beta_m) : utilise des distributions HalfNormal avec des échelles plus étroites (1,0 et 1,5) pour appliquer une régularisation statistique.

    À titre de référence, la distribution par défaut est Normal(0, 5) et elle est considérée comme un a priori faiblement informatif.

import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution
# -----------------------------------------------------------------------------
# Option 4: Media Coefficient
# -----------------------------------------------------------------------------
# Coefficient (HalfNormal) -> Scales at 1.0 and 1.5
prior = prior_distribution.PriorDistribution(
    beta_m=tfp.distributions.HalfNormal(scale=[1.0, 1.5])
)
model_spec = spec.ModelSpec(prior=prior, media_prior_type='coefficient')

Configurer les a priori média naturel

Le type d'a priori des médias naturels est spécifié par les arguments organic_media_prior_type et organic_rf_prior_type. Les options sont 'contribution' et 'coefficient', 'contribution' étant l'option par défaut.

organic_media_prior_type/organic_rf_prior_type Paramètre dans PriorDistribution
'contribution' (par défaut) contribution_om, contribution_orf
'coefficient' beta_om, beta_orf

Exemples de configuration médias naturels

Cette section fournit des exemples de code pour configurer différents types d'a priori pour les traitements média naturel. Les puces expliquent le raisonnement qui sous-tend les paramètres des exemples d'a priori dans le bloc de code qui suit. Les distributions par défaut sont également fournies comme point de référence pour comprendre le processus de configuration de chaque type d'a priori.

  • Contribution (contribution_om) : définissez une distribution bêta avec une moyenne de 3 %.

    À titre de référence, la distribution par défaut est Beta(1.0, 99.0) et elle a une moyenne de 1 %.

import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution
# -----------------------------------------------------------------------------
# Option 1: Organic Media Contribution
# -----------------------------------------------------------------------------
# Contribution (Beta) -> Mean at 3%
prior = prior_distribution.PriorDistribution(
    contribution_om=tfp.distributions.Beta(
        concentration1=[3.0, 3.0], concentration0=[97.0, 97.0]
    )
)
model_spec = spec.ModelSpec(prior=prior, organic_media_prior_type='contribution')
  • Coefficient (beta_om) : utilise une distribution HalfNormal pour appliquer une régularisation statistique plus stricte (échelle 2,0).

    À titre de référence, la distribution par défaut est HalfNormal(5) et elle a une échelle de 5.

import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution
# -----------------------------------------------------------------------------
# Option 2: Organic Media Coefficient
# -----------------------------------------------------------------------------
# Coefficient (HalfNormal) -> Scale at 2.0
prior = prior_distribution.PriorDistribution(
    beta_om=tfp.distributions.HalfNormal(scale=[2.0, 2.0])
)
model_spec = spec.ModelSpec(prior=prior, organic_media_prior_type='coefficient')

Configurer les a priori traitement non média

Le type d'a priori des traitements non média est spécifié par l'argument non_media_treatments_prior_type. Les options sont 'contribution' et 'coefficient', 'contribution' étant l'option par défaut.

Le tableau suivant indique le paramètre PriorDistribution correspondant à chaque non_media_treatments_prior_type, qui peut être utilisé pour personnaliser la distribution a priori.

non_media_treatments_prior_type Paramètre dans PriorDistribution
'contribution' (par défaut) contribution_n
'coefficient' gamma_n

Exemples de configuration traitements non média

Cette section fournit plusieurs exemples de code pour configurer différents types d'a priori pour les traitements non média. Les puces expliquent le raisonnement qui sous-tend les paramètres des exemples d'a priori dans le bloc de code qui suit. Les distributions par défaut sont également fournies comme point de référence pour comprendre le processus de configuration de chaque type d'a priori.

  • Contribution (contribution_n) : définissez une distribution normale tronquée qui concentre la masse à (-5 %) pour le premier traitement et à (5 %) pour le deuxième traitement. Les deux ont une incertitude relativement large (10 %).

    L'a priori pour le premier traitement n'autorise qu'une contribution négative, car il est tronqué pour se situer dans la plage (-100 %, 0 %). Cela peut être raisonnable si le traitement non média est le prix et que le KPI est le nombre d'unités vendues.

    L'a priori pour le deuxième traitement n'autorise qu'une contribution positive, car il est tronqué pour être compris dans la plage (0 %, 100 %). Cela peut être raisonnable si le traitement non média représente une promotion et que le KPI est le nombre d'unités vendues.

    À titre de référence, la distribution par défaut est TruncatedNormal(0.0, 0.1, -1.0, 1.0) et elle est considérée comme un a priori faiblement informatif.

import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution
# -----------------------------------------------------------------------------
# Option 1: Non-Media Treatment Contribution
# -----------------------------------------------------------------------------
# Contribution (TruncatedNormal) -> Loc at -5% and 5%, Scale at 10%
prior = prior_distribution.PriorDistribution(
    contribution_n=tfp.distributions.TruncatedNormal(
        loc=[-0.05, 0.05],
        scale=[0.1, 0.1],
        low=[-1.0, 0.0],
        high=[0.0, 1.0]
    )
)
model_spec = spec.ModelSpec(
    prior=prior,
    non_media_treatments_prior_type='contribution'
)
  • Coefficient (gamma_n) : utilise un Normal(0, 1), dont l'écart-type est inférieur à celui de la distribution par défaut. Parfois, une régularisation plus forte est utile pour réduire la variance a posteriori.

    À titre de référence, la distribution par défaut est Normal(0, 5) et elle est considérée comme un a priori faiblement informatif.

import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution
# -----------------------------------------------------------------------------
# Option 2: Non-Media Treatment Coefficient
# -----------------------------------------------------------------------------
# Coefficient (Normal) -> Loc at 0.0, Scale at 1.0
prior = prior_distribution.PriorDistribution(
    gamma_n=tfp.distributions.Normal(
        loc=[0.0, 0.0], scale=[1.0, 1.0]
    )
)
model_spec = spec.ModelSpec(
    prior=prior,
    non_media_treatments_prior_type='coefficient'
)

Spécifier les arguments d'a priori appropriés

L'objet PriorDistribution comporte un argument pour chaque combinaison de type de traitement et de type d'a priori. Pour chaque type de traitement, seul l'argument correspondant au type d'a priori sélectionné est utilisé. Les autres sont ignorés.

Par exemple, les arguments correspondant aux médias payants sans couverture ni fréquence sont

  • roi_m

  • mroi_m

  • contribution_m

  • beta_m

Si media_prior_type correspond à 'roi', roi_m est utilisé et les autres sont ignorés.

Par exemple, un utilisateur spécifie des a priori pour plusieurs types d'a priori. Toutefois, dans cet exemple, seuls les a priori de contribution sont utilisés, car media_prior_type='contribution'.

Dans l'extrait suivant, notez comment roi_m et mroi_m sont définis, mais seront ignorés, car media_prior_type est défini sur contribution.

import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution

# Set custom prior for all paid media treatment parameters.
prior_dist = prior_distribution.PriorDistribution(
    roi_m=tfp.distributions.LogNormal(0.2, 0.9), # NOT used
    mroi_m=tfp.distributions.LogNormal(0.0, 0.5), # NOT used
    contribution_m=tfp.distributions.Beta(1.0, 99.0), # Used
    beta_m=tfp.distributions.HalfNormal(5.0), # NOT used
)

# Setting the treatment type to 'contribution' means that only the `contribution_m`
# prior will be used. The priors specified on `roi_m`, `mroi_m`, and `beta_m` will be ignored.
spec = spec.ModelSpec(prior=prior_dist, media_prior_type='contribution')

Le comportement concernant la spécification du bon a priori est également détaillé dans l'organigramme suivant.

Organigramme détaillant l'utilisation appropriée des paramètres pour la spécification du modèle

Autres points à prendre en compte

Cette section contient des éléments avancés supplémentaires à prendre en compte lorsque vous choisissez entre différents types d'a priori de traitement dans Meridian.

Personnaliser les a priori de contribution pour les traitements non média

L'a priori de contribution par défaut est une distribution normale tronquée, qui accepte les valeurs positives et négatives. Vous pouvez définir des paramètres propres au traitement sur la distribution normale tronquée pour orienter la masse de probabilité vers des valeurs positives ou négatives. Par exemple, l'extrait de code suivant attribue une distribution Normal(0, 0,1) tronquée de manière symétrique au premier traitement, une distribution HalfNormal(0, 0,2) positive tronquée au deuxième traitement et une distribution HalfNormal(0, 0,1) négative tronquée au troisième traitement.

PriorDistribution(
    contribution_n=tfp.distributions.TruncatedNormal(
        loc=[0, 0, 0],
        scale=[0.1, 0.2, 0.1],
        high=[1, 1, 0],
    )
)

Vous pouvez également utiliser une distribution bêta mise à l'échelle afin de spécifier une distribution positive pour certains traitements et une distribution négative pour d'autres. Par exemple, l'extrait de code suivant attribue un a priori Beta(1, 49) au premier traitement et un a priori Beta(1, 99) négatif au second traitement.

PriorDistribution(
    contribution_n=tfp.distributions.TransformedDistribution(
        tfp.distributions.Beta([1, 1], [49, 99]),
        tfp.bijectors.Scale([1, -1]),
    )
)

Comprendre les a priori induits et la parité des canaux

Lorsque vous spécifiez un a priori sur une métrique (par exemple, le ROI), Meridian induit un a priori sur l'autre (ROIm). Cet a priori induit n'appartient pas à une famille paramétrique standard et dépend d'autres paramètres du modèle, y compris de l'exécution média du canal dans les zones géographiques et les périodes.

Cela a une implication clé pour la parité des canaux : par exemple, même si vous définissez un a priori de ROI commun pour tous les canaux, les a priori de ROIm induits différeront pour chaque canal, et inversement. Par conséquent, si votre objectif est de supposer la parité entre les canaux pour une métrique spécifique, vous devez définir l'a priori directement sur cette métrique à l'aide de la paramétrisation correspondante.

Si vous souhaitez examiner les a priori de ROI et de ROIm induits pour un modèle, vous pouvez appeler sample_prior, puis utiliser la méthode roi ou marginal_roi de la classe Analyzer avec l'argument use_posterior=False.

from meridian.analysis import analyzer
from meridian.model import model
import numpy as np

mmm = model.Meridian(...)
mmm.sample_posterior(...)
analyzer_instance = analyzer.Analyzer(mmm)

# Get the prior distributions using `use_posterior=False`.
roi_prior = analyzer_instance.roi(use_posterior=False)

# This is the induced prior on mROI.
mroi_induced_prior = analyzer_instance.marginal_roi(use_posterior=False)

# The shape of the prior samples is (chains, draws, channels).
# We calculate the mean across the 'chains' and 'draws' axes.
print("Mean of ROI prior per channel:", np.mean(roi_prior, axis=(0, 1)))
print("Mean of induced mROI prior per channel:", np.mean(mroi_induced_prior, axis=(0, 1)))

Avancé : relation d'induction entre le ROIm et le ROI

Bien que l'a priori induit n'appartienne pas à une famille paramétrique standard, nous pouvons dire quelque chose à son sujet. Pour rappel, le ROIm correspond au retour sur investissement pour une unité monétaire supplémentaire (par exemple, un euro) dépensée sur un canal donné.

Pour les canaux basés sur les impressions (ceux sans données de couverture et de fréquence), une unité monétaire supplémentaire de dépenses est allouée en augmentant l'exécution média (par exemple, les impressions).

Lorsque la fonction de Hill d'un canal est concave (par défaut), le ROI global du canal sera toujours supérieur à son ROIm. Cela conduit à une relation prévisible entre les a priori spécifiés et induits :

  • Un a priori de ROI induit un a priori de ROIm strictement inférieur.
  • Un a priori de ROIm induit un a priori de ROI strictement supérieur.

Pour les canaux avec couverture et fréquence, l'unité monétaire supplémentaire de dépenses est allouée en augmentant la couverture tout en conservant une fréquence moyenne fixe.

Pour les canaux avec couverture et fréquence, le ROIm (par couverture) est égal au ROI, car les effets média sont linéaires en termes de couverture dans le modèle Meridian. L'a priori de ROIm de Meridian est appliqué au ROIm par couverture. Par conséquent, le choix entre un a priori de ROI et un a priori de ROIm n'a aucun impact sur l'a priori lui-même pour ces canaux. Toutefois, le choix est important si vous utilisez des distributions par défaut, car elles sont différentes pour les a priori de ROI et de ROIm.

Utiliser des a priori de ROIm pour régulariser le budget

Vous pouvez utiliser des a priori de ROIm pour régulariser les recommandations d'optimisation du budget en les réduisant pour s'approcher de la répartition de budget historique. Cela peut être utile si vous pensez que les budgets historiques étaient déjà proches de la situation optimale.

Pour ce faire, définissez une moyenne d'a priori de ROIm commun sur tous les canaux et utilisez un petit écart-type. Un a priori plus fort (écart-type plus faible) rapproche la répartition optimale de la répartition historique, ce qui entraîne des réaffectations de budget recommandées plus faibles. Par exemple, si vous définissez la moyenne du ROIm sur 1,0, cela suggère qu'aux niveaux de dépenses historiques, un euro supplémentaire dépensé générerait un euro en retour, ce qui implique que le canal est proche de son budget optimal.

import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution

# Assume 2 paid media channels.
# Set a common mROI prior mean of 1.0, suggesting budgets are near optimal.
# Use a very small standard deviation to create a strong prior.
mean_mroi = [1.0, 1.0]
std_mroi = [0.1, 0.1]  # A small std dev creates a strong prior.

lognormal_mroi_regularizing = prior_distribution.PriorDistribution.lognormal_dist_from_mean_std(
    mean_mroi, std_mroi
)

prior_mroi_regularizing = prior_distribution.PriorDistribution(
    mroi_m=lognormal_mroi_regularizing
)

# This ModelSpec will produce more conservative budget recommendations.
model_spec_regularized = spec.ModelSpec(
    prior=prior_mroi_regularizing,
    media_prior_type='mroi'
)

Le volume d'exécution média, et donc la saturation, d'un canal peut varier selon les périodes. Les valeurs de ROIm peuvent donc varier selon les périodes. Si votre objectif est d'utiliser des a priori de ROIm pour régulariser l'optimisation du budget, assurez-vous que la période de l'a priori correspond à la période d'optimisation. Sinon, la régularisation risque de ne pas fonctionner comme prévu.