![]() |
Exécute des calculs pour analyser les données brutes après l'ajustement du modèle.
meridian.analysis.analyzer.Analyzer(
meridian: meridian.model.model.Meridian
)
Classes enfants
Méthodes
adstock_decay
adstock_decay(
confidence_level: float = constants.DEFAULT_CONFIDENCE_LEVEL
) -> pd.DataFrame
Calcule la diminution de l'adstock pour les canaux de médias, de couverture et de fréquence.
Args | |
---|---|
confidence_level
|
Niveau de confiance pour les intervalles crédibles a priori et a posteriori, représenté par une valeur comprise entre zéro et un. |
Renvoie | |
---|---|
DataFrame Pandas contenant le canal, time_units , la distribution, ci_hi , ci_lo et mean pour la fonction Adstock.
|
baseline_summary_metrics
baseline_summary_metrics(
selected_geos: (Sequence[str] | None) = None,
selected_times: (Sequence[str] | None) = None,
aggregate_geos: bool = True,
aggregate_times: bool = True,
confidence_level: float = constants.DEFAULT_CONFIDENCE_LEVEL,
batch_size: int = constants.DEFAULT_BATCH_SIZE
) -> xr.Dataset
Renvoie les métriques récapitulatives de référence.
Args | |
---|---|
selected_geos
|
Liste facultative contenant un sous-ensemble de zones géographiques à inclure. Par défaut, toutes les zones géographiques sont incluses. |
selected_times
|
Liste facultative contenant un sous-ensemble de périodes à inclure. Par défaut, toutes les périodes sont incluses. |
aggregate_geos
|
Valeur booléenne. Si la valeur est True , le résultat attendu est cumulé pour toutes les régions.
|
aggregate_times
|
Valeur booléenne. Si la valeur est True , le résultat attendu est cumulé pour toutes les périodes.
|
confidence_level
|
Niveau de confiance pour les intervalles crédibles des métriques récapitulatives sur les médias, représenté par une valeur comprise entre zéro et un. |
batch_size
|
Entier représentant le nombre maximal de tirages par chaîne dans chaque lot. Le calcul est exécuté par lots pour éviter d'épuiser la mémoire. Si une erreur de mémoire se produit, essayez de réduire batch_size . Le calcul sera généralement plus rapide avec des valeurs batch_size plus élevées.
|
Renvoie | |
---|---|
Un xr.Dataset avec les coordonnées metric (mean , median ,
ci_low ,ci_high ),distribution (a priori et a posteriori) contenant les variables de données suivantes : baseline_outcome , pct_of_contribution .
|
cpik
cpik(
use_posterior: bool = True,
new_data: (meridian.analysis.analyzer.DataTensors
| None) = None,
selected_geos: (Sequence[str] | None) = None,
selected_times: (Sequence[str] | None) = None,
aggregate_geos: bool = True,
batch_size: int = constants.DEFAULT_BATCH_SIZE
) -> tf.Tensor
Calcule la distribution du coût par KPI incrémental pour chaque canal.
Le numérateur du CPIK correspond aux dépenses totales sur le canal. Le dénominateur du CPIK désigne la variation du KPI attendu lorsque les dépenses d'un canal sont définies sur zéro, ce qui laisse les dépenses de tous les autres canaux inchangées.
Si new_data=None
, cette méthode calcule le CPIK en fonction des valeurs des variables des médias payants avec lesquelles l'objet Meridian a été initialisé. L'utilisateur peut également remplacer ces données historiques par le biais de l'argument new_data
, à condition que les dimensions des nouveaux tenseurs correspondent. Par exemple,
new_data = DataTensors(media=new_media, frequency=new_frequency)
Si selected_geos
ou selected_times
sont spécifiées, le numérateur du CPIK correspond alors aux dépenses totales pour les périodes et les zones géographiques sélectionnées. Une exception est générée si les dépenses des InputData utilisées pour entraîner le modèle ne comportent pas de dimensions géographiques et temporelles. Si les arguments new_data.media_spend
et new_data.rf_spend
sont utilisés avec des dimensions différentes de celles des dépenses des InputData, une exception sera générée, car il s'agit probablement d'une erreur de l'utilisateur.
Notez que le CPIK est simplement égal à 1/ROI (le ROI étant obtenu à partir d'un appel à la méthode roi
avec use_kpi=True
).
Args | |
---|---|
use_posterior
|
Valeur booléenne. Si True , la distribution a posteriori est calculée. Sinon, c'est celle a priori qui l'est.
|
new_data
|
Facultatif. DataTensors contenant les données media , media_spend , reach , frequency , rf_spend et revenue_per_kpi . Si cela est fourni, le CPIK est calculé à l'aide des valeurs des tenseurs transmises dans new_data et des valeurs d'origine de tous les autres tenseurs. Les dimensions des nouveaux tenseurs doivent correspondre à celles des tenseurs d'origine correspondants de meridian.input_data . Si la valeur est None , le CPIK est calculé à l'aide des valeurs d'origine de tous les tenseurs.
|
selected_geos
|
Liste facultative contenant un sous-ensemble de zones géographiques à inclure. Par défaut, toutes les zones géographiques sont incluses. |
selected_times
|
Liste facultative contenant un sous-ensemble de périodes à inclure. Par défaut, toutes les périodes sont incluses. |
aggregate_geos
|
Valeur booléenne. Si la valeur est True , le KPI attendu est cumulé pour toutes les régions.
|
batch_size
|
Entier représentant le nombre maximal de tirages par chaîne dans chaque lot. Le calcul est exécuté par lots pour éviter d'épuiser la mémoire. Si une erreur de mémoire se produit, essayez de réduire batch_size . Le calcul sera généralement plus rapide avec des valeurs batch_size plus élevées.
|
Renvoie | |
---|---|
Tensor de valeurs de CPIK avec des dimensions (n_chains, n_draws, n_geos,
(n_media_channels + n_rf_channels)) . La dimension n_geos est supprimée si aggregate_geos=True .
|
expected_outcome
expected_outcome(
use_posterior: bool = True,
new_data: (meridian.analysis.analyzer.DataTensors
| None) = None,
selected_geos: (Sequence[str] | None) = None,
selected_times: (Sequence[str] | None) = None,
aggregate_geos: bool = True,
aggregate_times: bool = True,
inverse_transform_outcome: bool = True,
use_kpi: bool = False,
batch_size: int = constants.DEFAULT_BATCH_SIZE
) -> tf.Tensor
Calcule le résultat attendu a priori ou a posteriori.
Cela permet de calculer E(Outcome|Media, RF, Organic media, Organic RF, Non-media
treatments, Controls)
pour chaque tirage de paramètre a posteriori (ou a priori), où Outcome
fait référence à revenue
si use_kpi=False
ou à kpi
si use_kpi=True
. Lorsque revenue_per_kpi
n'est pas défini, use_kpi
ne peut pas être False
.
Si new_data=None
, cette méthode calcule le résultat attendu en fonction des valeurs des variables indépendantes avec lesquelles l'objet Meridian a été initialisé. L'utilisateur peut également remplacer ces données historiques par le biais de l'argument new_data
, à condition que les dimensions des nouveaux Tensors correspondent. Exemple :
new_data=DataTensors(reach=new_reach, frequency=new_frequency)
En principe, le résultat attendu peut être calculé avec d'autres dimensions temporelles (pour les prédictions futures, par exemple). Toutefois, cela n'est pas autorisé avec cette méthode en raison des complexités supplémentaires qu'elle engendre :
- Les données de prix correspondantes (revenus par KPI) seraient également nécessaires.
- Si le modèle contient des paramètres d'effet hebdomadaires, une méthode est nécessaire pour estimer ou prédire ces effets pour les périodes situées en dehors de la fenêtre de données d'entraînement.
Args | |
---|---|
use_posterior
|
Valeur booléenne. Si la valeur est True , la distribution a posteriori du résultat attendu est calculée. Sinon, c'est celle a priori qui l'est.
|
new_data
|
Conteneur DataTensors facultatif avec de nouveaux Tensors facultatifs : media , reach , frequency , organic_media , organic_reach , organic_frequency , non_media_treatments , controls . Si la valeur est None , le résultat attendu est calculé en fonction des valeurs d'origine des Tensors de données avec lesquels l'objet Meridian a été initialisé. Si l'argument new_data est utilisé, le résultat attendu est calculé en fonction des valeurs des Tensors transmis dans new_data et des valeurs d'origine des autres Tensors non définis. Par exemple, expected_outcome(new_data=DataTensors(reach=new_reach,
frequency=new_frequency)) calcule le résultat attendu en fonction des tenseurs d'origine media , organic_media , organic_reach , organic_frequency , non_media_treatments et controls , et des nouvelles valeurs données pour les tenseurs reach et frequency . Les dimensions des nouveaux tenseurs doivent correspondre à celles des tenseurs d'origine correspondants de input_data .
|
selected_geos
|
Liste facultative contenant un sous-ensemble de zones géographiques à inclure. Par défaut, toutes les zones géographiques sont incluses. |
selected_times
|
Liste facultative contenant un sous-ensemble de dates à inclure.
Les valeurs acceptées ici doivent correspondre aux coordonnées de la dimension temporelle de InputData.time . Par défaut, toutes les périodes sont incluses.
|
aggregate_geos
|
Valeur booléenne. Si la valeur est True , le résultat attendu est cumulé pour toutes les régions.
|
aggregate_times
|
Valeur booléenne. Si la valeur est True , le résultat attendu est cumulé pour toutes les périodes.
|
inverse_transform_outcome
|
Valeur booléenne. Si la valeur est True , renvoie le résultat attendu dans le KPI ou le revenu d'origine (en fonction de ce qui est transmis à use_kpi ), tel qu'il a été envoyé à InputData . Si la valeur est "False", renvoie le résultat après la transformation par KpiTransformer , ce qui reflète la façon dont il est représenté dans le modèle.
|
use_kpi
|
Valeur booléenne. Si la valeur est use_kpi = True , le KPI attendu est calculé. Sinon, ce sont les revenus attendus (kpi * revenue_per_kpi) qui le sont.
use_kpi = True est obligatoire si revenue_per_kpi n'est pas défini ou si inverse_transform_outcome = False .
|
batch_size
|
Entier représentant le nombre maximal de tirages par chaîne dans chaque lot. Le calcul est exécuté par lots pour éviter d'épuiser la mémoire. Si une erreur de mémoire se produit, essayez de réduire batch_size . Le calcul sera généralement plus rapide avec des valeurs batch_size plus élevées.
|
Renvoie | |
---|---|
Tensor du résultat attendu (KPI ou revenu, en fonction de l'argument use_kpi ) avec les dimensions (n_chains, n_draws, n_geos,
n_times) . Les dimensions n_geos et n_times seront supprimées si aggregate_geos=True ou aggregate_time=True , respectivement.
|
Génère | |
---|---|
NotFittedModelError
|
si sample_posterior() (pour use_posterior=True ) ou sample_prior() (pour use_posterior=False ) n'a pas été appelé avant cette méthode.
|
expected_vs_actual_data
expected_vs_actual_data(
aggregate_geos: bool = False,
aggregate_times: bool = False,
split_by_holdout_id: bool = False,
confidence_level: float = constants.DEFAULT_CONFIDENCE_LEVEL
) -> xr.Dataset
Calcule les données pour le résultat attendu par rapport au résultat réel au fil du temps.
Args | |
---|---|
aggregate_geos
|
Valeur booléenne. Si la valeur est True , les valeurs attendues, de référence et réelles sont cumulées pour toutes les régions.
|
aggregate_times
|
Valeur booléenne. Si la valeur est True , les valeurs attendues, de référence et réelles sont cumulées sur toutes les périodes.
|
split_by_holdout_id
|
Valeur booléenne. Si True et holdout_id existent, les données sont divisées en sous-sections 'Train' , 'Test' et 'All Data' .
|
confidence_level
|
Niveau de confiance pour les intervalles crédibles du résultat attendu, représenté par une valeur comprise entre zéro et un. Valeur par défaut : 0.9
|
Renvoie | |
---|---|
Un ensemble de données contenant les métriques sur les résultats attendus, de référence et réels. |
filter_and_aggregate_geos_and_times
filter_and_aggregate_geos_and_times(
tensor: tf.Tensor,
selected_geos: (Sequence[str] | None) = None,
selected_times: (Sequence[str] | Sequence[bool] | None) = None,
aggregate_geos: bool = True,
aggregate_times: bool = True,
flexible_time_dim: bool = False,
has_media_dim: bool = True
) -> tf.Tensor
Filtre et/ou agrège les dimensions géographiques et temporelles d'un Tensor.
Args | |
---|---|
tensor
|
Tensor avec des dimensions [..., n_geos, n_times] ou [..., n_geos,
n_times, n_channels] , où n_channels correspond au nombre de canaux média, de canaux avec couverture et fréquence, de canaux payants ("média" et "avec couverture et fréquence") ou de tous les canaux ("média", "avec couverture et fréquence", "non média", "média naturel", "avec couverture et fréquence naturelles").
|
selected_geos
|
Liste facultative contenant un sous-ensemble de zones géographiques à inclure. Par défaut, toutes les zones géographiques sont incluses. Les zones géographiques sélectionnées doivent correspondre à celles de InputData.geo .
|
selected_times
|
Liste facultative des périodes à inclure. Il peut s'agir d'une liste de chaînes contenant un sous-ensemble de coordonnées de la dimension temporelle de InputData.time ou d'une liste booléenne dont la longueur est égale à la dimension temporelle du Tensor. Par défaut, toutes les périodes sont incluses.
|
aggregate_geos
|
Valeur booléenne. Si la valeur est True , le Tensor est cumulé pour tous les zones géographiques.
|
aggregate_times
|
Valeur booléenne. Si la valeur est True , le Tensor est cumulé pour toutes les périodes.
|
flexible_time_dim
|
Valeur booléenne. Si la valeur est True , la dimension temporelle du Tensor ne correspond pas forcément au nombre de périodes dans InputData.time . Dans ce cas, si vous utilisez selected_times , il doit s'agir d'une liste booléenne dont la longueur est égale à la dimension temporelle du Tensor.
|
has_media_dim
|
Valeur booléenne. Utilisée uniquement si flexible_time_dim=True . Sinon, elles est supposée en fonction des dimensions du Tensor. Si la valeur est True , le Tensor est supposé avoir une dimension média suivant la dimension temporelle. Si la valeur est False , la dernière dimension du Tensor est supposée être la dimension temporelle.
|
Renvoie | |
---|---|
Un Tensor avec des dimensions géographiques et temporelles filtrées et/ou agrégées. |
get_aggregated_impressions
get_aggregated_impressions(
new_data: (meridian.analysis.analyzer.DataTensors
| None) = None,
selected_geos: (Sequence[str] | None) = None,
selected_times: (Sequence[str] | None) = None,
aggregate_geos: bool = True,
aggregate_times: bool = True,
optimal_frequency: (Sequence[float] | None) = None,
include_non_paid_channels: bool = True
) -> tf.Tensor
Calcule les valeurs d'impressions agrégées dans les données de tous les canaux.
Args | |
---|---|
new_data
|
Objet DataTensors facultatif contenant les nouveaux tenseurs media , reach , frequency , organic_media , organic_reach , organic_frequency et non_media_treatments . Si l'argument new_data est utilisé, les impressions agrégées sont calculées à l'aide des valeurs des tenseurs transmises dans l'argument new_data et des valeurs d'origine de tous les autres tenseurs. Les dimensions des nouveaux tenseurs doivent correspondre à celles des tenseurs d'origine correspondants de meridian.input_data . Si la valeur est None , les tenseurs existants de l'objet Meridian sont utilisés.
|
selected_geos
|
Liste facultative contenant un sous-ensemble de zones géographiques à inclure. Par défaut, toutes les zones géographiques sont incluses. |
selected_times
|
Liste facultative contenant un sous-ensemble de périodes à inclure. Par défaut, toutes les périodes sont incluses. |
aggregate_geos
|
Valeur booléenne. Si la valeur est True , le résultat attendu est cumulé pour toutes les régions.
|
aggregate_times
|
Valeur booléenne. Si la valeur est True , le résultat attendu est cumulé pour toutes les périodes.
|
optimal_frequency
|
Liste facultative avec la dimension n_rf_channels contenant la fréquence optimale par canal, qui maximise le ROI moyen a posteriori. La valeur par défaut est None et la fréquence historique est utilisée pour calculer les métriques.
|
include_non_paid_channels
|
Valeur booléenne. Si la valeur est True , les canaux média naturel, les canaux avec couverture et fréquence naturelles et les canaux non média sont inclus dans l'agrégation.
|
Renvoie | |
---|---|
Un Tensor de forme (n_selected_geos, n_selected_times, n_channels) (ou (n_channels,) si les zones géographiques et les périodes sont agrégées) avec des valeurs d'impression agrégées par canal.
|
get_historical_spend
get_historical_spend(
selected_times: (Sequence[str] | None),
include_media: bool = True,
include_rf: bool = True
) -> xr.DataArray
Récupère les dépenses historiques agrégées en fonction de la période.
Args | |
---|---|
selected_times
|
Période associée aux dépenses historiques à obtenir. Si vous n'en sélectionnez aucune, les dépenses historiques seront agrégées pour tous les points temporels. |
include_media
|
Indique s'il faut inclure les dépenses des canaux média payants qui ne disposent pas de données de couverture et de fréquence. |
include_rf
|
Indique s'il faut inclure les dépenses des canaux média payants comportant des données de couverture et de fréquence. |
Renvoie | |
---|---|
Un xr.DataArray avec la coordonnée channel et contient la variable de données spend .
|
Génère | |
---|---|
ValueError
|
Une erreur ValueError lorsque include_media et include_rf sont tous les deux définis sur "False".
|
get_rhat
get_rhat() -> Mapping[str, tf.Tensor]
Calcule les valeurs R-hat pour chaque paramètre du modèle.
Renvoie | |
---|---|
Dictionnaire de valeurs R-hat où chaque paramètre est une clé et les valeurs sont des valeurs R-hat correspondant au paramètre. |
Génère | |
---|---|
NotFittedModelError
|
Si self.sample_posterior() n'est pas appelé avant cette méthode. |
hill_curves
hill_curves(
confidence_level: float = constants.DEFAULT_CONFIDENCE_LEVEL,
n_bins: int = 25
) -> pd.DataFrame
Estime les tableaux des courbes de Hill utilisés pour représenter les courbes de chaque canal.
Args | |
---|---|
confidence_level
|
Niveau de confiance pour les intervalles crédibles a priori et a posteriori, représenté par une valeur comprise entre zéro et un. La valeur par défaut est 0.9 .
|
n_bins
|
Nombre de bins de même largeur à inclure dans l'histogramme pour la représentation graphique. La valeur par défaut est 25 .
|
Renvoie | |
---|---|
Courbes de Hill pd.DataFrame avec les colonnes suivantes :
|
incremental_outcome
incremental_outcome(
use_posterior: bool = True,
new_data: (meridian.analysis.analyzer.DataTensors
| None) = None,
non_media_baseline_values: (Sequence[float | str] | None) = None,
scaling_factor0: float = 0.0,
scaling_factor1: float = 1.0,
selected_geos: (Sequence[str] | None) = None,
selected_times: (Sequence[str] | Sequence[bool] | None) = None,
media_selected_times: (Sequence[str] | Sequence[bool] | None) = None,
aggregate_geos: bool = True,
aggregate_times: bool = True,
inverse_transform_outcome: bool = True,
use_kpi: bool = False,
include_non_paid_channels: bool = True,
batch_size: int = constants.DEFAULT_BATCH_SIZE
) -> tf.Tensor
Calcule le résultat incrémental a posteriori ou a priori.
Cela permet de calculer le résultat média de chaque canal média pour chaque tirage de paramètre a posteriori ou a priori. Le résultat incrémental est défini comme suit :
E(Outcome|Media_1, Controls)
moins E(Outcome|Media_0, Controls)
Ici, Media_1
signifie que l'exécution média pour un canal donné est multipliée par scaling_factor1
(1,0 par défaut) pour l'ensemble des périodes spécifiées par media_selected_times
. De même, Media_0
signifie que l'exécution média est multipliée par scaling_factor0
(0,0 par défaut) pour ces périodes.
Pour les canaux disposant de données de couverture et de fréquence, la fréquence est fixe, tandis que la couverture est mise à l'échelle. "Outcome" fait référence à revenue
si use_kpi=False
ou à kpi
si use_kpi=True
. Lorsque revenue_per_kpi
n'est pas défini, use_kpi
ne peut pas être "False".
Si new_data=None
, cette méthode calcule le résultat incrémental à l'aide des tenseurs media
, reach
, frequency
, organic_media
, organic_reach
, organic_frequency
, non_media_treatments
et revenue_per_kpi
avec lesquels l'objet Meridian a été initialisé. Ce comportement peut être remplacé par l'argument new_data
. Par exemple, new_data=DataTensors(media=new_media)
calcule le résultat incrémental à l'aide du tenseur new_media
et des valeurs d'origine des tenseurs reach
, frequency
, organic_media
, organic_reach
, organic_frequency
, non_media_treatments
et revenue_per_kpi
.
Le calcul de cette méthode repose sur deux hypothèses clés incluses dans l'implémentation de Meridian :
- Additivité des effets média (aucune interaction).
- Les modifications additives apportées à l'échelle de KPI du modèle correspondent aux modifications additives apportées à l'échelle de KPI d'origine. En d'autres termes, les effets d'interception et de contrôle n'ont aucune influence sur les effets média. Cette hypothèse est actuellement valable, car la transformation du résultat n'implique que le centrage et la mise à l'échelle (pas de transformations logarithmiques, par exemple).
Args | |
---|---|
use_posterior
|
Valeur booléenne. Si la valeur est True , la distribution a posteriori du résultat incrémental est calculée. Sinon, c'est celle a priori qui l'est.
|
new_data
|
Conteneur DataTensors facultatif avec des tenseurs facultatifs : media , reach , frequency , organic_media , organic_reach , organic_frequency , non_media_treatments et revenue_per_kpi . Si la valeur est None , le résultat incrémental est calculé à l'aide des InputData fournies à l'objet Meridian. Si new_data est fourni, le résultat incrémental est calculé à l'aide des nouveaux tenseurs dans new_data et des valeurs d'origine des autres tenseurs. Par exemple, incremental_outcome(new_data=DataTensors(media=new_media) calcule le résultat incrémental à l'aide de new_media et des valeurs d'origine de reach , frequency , organic_media , organic_reach , organic_frequency , non_media_treatments et revenue_per_kpi . Si l'un des tenseurs de new_data est fourni avec un nombre de périodes différent de celui de InputData , tous les tenseurs doivent être fournis avec le même nombre de périodes.
|
non_media_baseline_values
|
Liste de formes facultative (n_non_media_channels). Chaque élément est soit un float (la valeur fixe est alors utilisée comme référence pour le canal donné), soit l'une des chaînes "min" ou "max" (la valeur minimale ou maximale globale est alors utilisée comme référence pour les valeurs mises à l'échelle du canal de traitement non_media donné). Si aucune valeur n'est fournie, la valeur minimale est utilisée comme référence pour chaque canal de traitement non_media. |
scaling_factor0
|
Valeur float. Facteur utilisé pour mettre à l'échelle le scénario contrefactuel "Media_0" pendant les périodes spécifiées dans media_selected_times . Doit être non négatif et inférieur à scaling_factor1 .
|
scaling_factor1
|
Valeur float. Facteur utilisé pour mettre à l'échelle "Media_1" pendant les périodes sélectionnées spécifiées dans media_selected_times . Doit être non négatif et supérieur à scaling_factor0 .
|
selected_geos
|
Liste facultative contenant un sous-ensemble de zones géographiques à inclure. Par défaut, toutes les zones géographiques sont incluses. |
selected_times
|
Liste facultative contenant un sous-ensemble de dates à inclure ou des valeurs booléennes dont la durée est égale au nombre de périodes dans les arguments new_XXX , le cas échéant. Le résultat incrémental correspond au KPI incrémental généré lors de l'argument selected_times par le média exécuté lors de l'argument media_selected_times . Notez que si use_kpi=False , selected_times ne peut inclure que les périodes pour lesquelles les données d'entrée sont revenue_per_kpi . Par défaut, toutes les périodes sont incluses lorsque des données revenue_per_kpi sont disponibles.
|
media_selected_times
|
Liste facultative contenant un sous-ensemble de dates à inclure ou des valeurs booléennes dont la durée est égale au nombre de périodes dans new_media , le cas échéant. Si new_media est fourni, media_selected_times peut sélectionner n'importe quel sous-ensemble de périodes dans new_media . Si new_media n'est pas fourni, media_selected_times effectue une sélection à partir d'InputData.time . Le résultat incrémental correspond au KPI incrémental généré lors de l'argument selected_times par le média exécuté lors de l'argument media_selected_times . Pour chaque canal, le résultat incrémental est défini comme la différence entre le KPI attendu lorsque l'exécution média est mise à l'échelle par scaling_factor1 et lorsqu'elle est mise à l'échelle par scaling_factor0 au cours de ces périodes spécifiées. Par défaut, la différence se fait entre les médias ayant des niveaux d'exécution historiques, ou selon la valeur fournie dans new_media , et ceux n'ayant aucune exécution. Par défaut, toutes les périodes sont incluses.
|
aggregate_geos
|
Valeur booléenne. Si la valeur est True , le résultat incrémental est cumulé pour toutes les régions.
|
aggregate_times
|
Valeur booléenne. Si la valeur est True , le résultat incrémental est cumulé pour toutes les périodes.
|
inverse_transform_outcome
|
Valeur booléenne. Si la valeur est True , renvoie le résultat attendu dans le KPI ou le revenu d'origine (en fonction de ce qui est transmis à use_kpi ), tel qu'il a été envoyé à InputData . Si la valeur est "False", renvoie le résultat après la transformation par KpiTransformer , ce qui reflète la façon dont il est représenté dans le modèle.
|
use_kpi
|
Valeur booléenne. Si la valeur est use_kpi = True , le KPI attendu est calculé. Sinon, ce sont les revenus attendus (kpi * revenue_per_kpi) qui le sont.
use_kpi = True est obligatoire si les données revenue_per_kpi ne sont pas disponibles ou si inverse_transform_outcome = False .
|
include_non_paid_channels
|
Valeur booléenne. Si la valeur est True , les traitements non média et les effets naturels sont inclus dans le calcul. Si la valeur est False , seuls les médias payants et les effets de la couverture/fréquence sont inclus.
|
batch_size
|
Entier représentant le nombre maximal de tirages par chaîne dans chaque lot. Le calcul est exécuté par lots pour éviter d'épuiser la mémoire. Si une erreur de mémoire se produit, essayez de réduire batch_size . Le calcul sera généralement plus rapide avec des valeurs batch_size plus élevées.
|
Renvoie | |
---|---|
Tenseur du résultat incrémental (KPI ou revenus, selon l'argument use_kpi ) avec les dimensions (n_chains, n_draws, n_geos,
n_times, n_channels) . Si include_non_paid_channels=True , n_channel correspond au nombre total de canaux média, canaux avec couverture et fréquence, canaux média naturel, canaux avec couverture et fréquence naturelles, et canaux non média. Si include_non_paid_channels=False , n_channels correspond au nombre total de canaux média et de canaux avec couverture et fréquence. Les dimensions n_geos et n_times seront supprimées si aggregate_geos=True ou aggregate_times=True , respectivement.
|
Génère | |
---|---|
NotFittedModelError
|
Si sample_posterior() (pour use_posterior=True ) ou sample_prior() (pour use_posterior=False ) n'a pas été appelé avant cette méthode.
|
ValueError
|
Si les arguments new_media n'ont pas la même forme de Tensor que le média.
|
marginal_roi
marginal_roi(
incremental_increase: float = 0.01,
use_posterior: bool = True,
new_data: (meridian.analysis.analyzer.DataTensors
| None) = None,
selected_geos: (Sequence[str] | None) = None,
selected_times: (Sequence[str] | None) = None,
aggregate_geos: bool = True,
by_reach: bool = True,
use_kpi: bool = False,
batch_size: int = constants.DEFAULT_BATCH_SIZE
) -> (tf.Tensor | None)
Calcule la distribution a priori et a posteriori du ROI marginal.
Le numérateur du ROI marginal (ROIm) correspond à la variation du résultat attendu (kpi
ou kpi * revenue_per_kpi
) lorsque les dépenses d'un canal sont augmentées d'une petite fraction. Le dénominateur du ROIm est la petite fraction correspondante des dépenses totales du canal.
Si new_data=None
, cette méthode calcule le ROI marginal en fonction des valeurs des variables des médias payants avec lesquelles l'objet Meridian a été initialisé. L'utilisateur peut également remplacer ces données historiques par le biais de l'argument new_data
, à condition que les dimensions des nouveaux tenseurs correspondent. Par exemple,
new_data = DataTensors(media=new_media, frequency=new_frequency)
Si selected_geos
ou selected_times
sont spécifiées, le dénominateur du ROIm est alors basé sur les dépenses totales pour les périodes et les zones géographiques sélectionnées. Une exception est générée si les dépenses des InputData utilisées pour entraîner le modèle ne comportent pas de dimensions géographiques et temporelles. Si les arguments new_data.media_spend
et new_data.rf_spend
sont utilisés avec des dimensions différentes de celles des dépenses des InputData, une exception sera générée, car il s'agit probablement d'une erreur de l'utilisateur.
Args | |
---|---|
incremental_increase
|
Petite fraction par laquelle les dépenses de chaque canal sont augmentées lors du calcul du numérateur de leur ROIm. Le dénominateur du ROIm correspond à cette fraction des dépenses totales du canal. Utilisé uniquement si le ROI marginal est True .
|
use_posterior
|
Si la valeur est True , la distribution a posteriori est calculée.
Sinon, c'est celle a priori qui l'est.
|
new_data
|
Facultatif. DataTensors contenant les données media , media_spend , reach , frequency , rf_spend et revenue_per_kpi . Si cela est fourni, le ROI marginal est calculé à l'aide des valeurs des tenseurs transmises dans new_data et des valeurs d'origine de tous les autres tenseurs. Les dimensions des nouveaux tenseurs doivent correspondre à celles des tenseurs d'origine correspondants de meridian.input_data . Si la valeur est None , le ROI marginal est calculé à l'aide des valeurs d'origine de tous les tenseurs.
|
selected_geos
|
Facultatif. Contient un sous-ensemble de zones géographiques à inclure. Par défaut, toutes les zones géographiques sont incluses. |
selected_times
|
Facultatif. Contient un sous-ensemble de périodes à inclure. Par défaut, toutes les périodes sont incluses. |
aggregate_geos
|
Si la valeur est True , les revenus attendus sont cumulés pour toutes les régions.
|
by_reach
|
Utilisé pour un canal avec couverture et fréquence. Si la valeur est True , renvoie le ROIm par couverture pour une fréquence fixe donnée. Si la valeur est False , renvoie le ROIm par fréquence pour une couverture fixe donnée.
|
use_kpi
|
Si la valeur est False , les revenus sont utilisés pour calculer le numérateur du ROIm.
Sinon, c'est le KPI qui est utilisé.
|
batch_size
|
Nombre maximal de tirages par chaîne dans chaque lot. Le calcul est exécuté par lots pour éviter l'épuisement de la mémoire. Si une erreur de mémoire se produit, essayez de réduire batch_size . Le calcul sera généralement plus rapide avec des valeurs batch_size plus élevées.
|
Renvoie | |
---|---|
Tensor de valeurs de ROIm avec des dimensions (n_chains, n_draws, n_geos,
(n_media_channels + n_rf_channels)) . La dimension n_geos est supprimée si aggregate_geos=True .
|
optimal_freq
optimal_freq(
freq_grid: (Sequence[float] | None) = None,
use_posterior: bool = True,
selected_geos: (Sequence[str | int] | None) = None,
selected_times: (Sequence[str | int] | None) = None,
confidence_level: float = constants.DEFAULT_CONFIDENCE_LEVEL
) -> xr.Dataset
Calcule la fréquence optimale permettant de maximiser le ROI moyen a posteriori.
Pour cette optimisation, les dépenses historiques sont utilisées et restent fixes. La fréquence est également limitée pour rester constante dans toutes les régions géographiques et les périodes. La couverture est calculée pour chaque zone géographique et chaque période afin que le nombre d'impressions ne change pas lorsque la fréquence varie. Meridian permet de gérer la fréquence à laquelle le ROI moyen a posteriori est optimisé.
Args | |
---|---|
freq_grid
|
Liste des valeurs de fréquence. Le ROI de chaque canal est calculé pour chaque valeur de fréquence de la liste. Par défaut, la liste inclut les nombres de 1.0 à la fréquence maximale par incréments de 0.1 .
|
use_posterior
|
Valeur booléenne. Si la valeur est True , les fréquences optimales a posteriori sont générées. Si la valeur est False , celles a priori sont générées.
|
selected_geos
|
Liste facultative contenant un sous-ensemble de zones géographiques à inclure. Par défaut, toutes les zones géographiques sont incluses. |
selected_times
|
Liste facultative contenant un sous-ensemble de périodes à inclure. Par défaut, toutes les périodes sont incluses. |
confidence_level
|
Niveau de confiance pour les intervalles crédibles a priori et a posteriori, représenté par une valeur comprise entre zéro et un. |
Renvoie | |
---|---|
Un ensemble de données xarray contenant les valeurs suivantes :
|
Génère | |
---|---|
NotFittedModelError
|
Si sample_posterior() (pour use_posterior=True ) ou sample_prior() (pour use_posterior=False ) n'a pas été appelé avant cette méthode.
|
ValueError
|
Si aucun canal ne dispose de données de couverture et de fréquence. |
predictive_accuracy
predictive_accuracy(
selected_geos: (Sequence[str] | None) = None,
selected_times: (Sequence[str] | None) = None,
batch_size: int = constants.DEFAULT_BATCH_SIZE
) -> xr.Dataset
Calcule les métriques sur la qualité de l'ajustement R-Squared
, MAPE
et wMAPE
.
R-Squared
, MAPE
(erreur absolue moyenne en pourcentage) et wMAPE
(erreur absolue moyenne pondérée en pourcentage) sont calculés sur l'échelle des revenus (KPI * revenue_per_kpi
) lorsque revenue_per_kpi
est spécifié, ou sur l'échelle du KPI lorsque revenue_per_kpi = None
. Il s'agit de la même échelle que celle utilisée dans le numérateur du ROI (résultat incrémental).
Les erreurs de prédiction dans wMAPE
sont pondérées par les revenus réels (KPI * revenue_per_kpi
) lorsque revenue_per_kpi
est spécifié ou par l'échelle du KPI lorsque revenue_per_kpi = None
. Cela signifie que les erreurs en pourcentage avec des revenus élevés sont pondérées plus fortement que celles avec des revenus faibles.
R-Squared
, MAPE
et wMAPE
sont calculés à la fois au niveau du modèle (une seule observation par zone géographique et par période) et au niveau national (agrégation des résultats pour le KPI ou les revenus dans les zones géographiques afin de n'effectuer qu'une seule observation par période).
R-Squared
, MAPE
et wMAPE
sont calculés pour l'ensemble de l'échantillon. Si l'objet du modèle comporte des observations de validation, R-squared
, MAPE
et wMAPE
seront également calculés pour les sous-ensembles Train
et Test
.
Args | |
---|---|
selected_geos
|
Liste facultative contenant un sous-ensemble de zones géographiques à inclure. Par défaut, toutes les zones géographiques sont incluses. |
selected_times
|
Liste facultative contenant un sous-ensemble de dates à inclure. Par défaut, toutes les périodes sont incluses. |
batch_size
|
Entier représentant le nombre maximal de tirages par chaîne dans chaque lot. La valeur par défaut de batch_size est 100 . Le calcul est exécuté par lots pour éviter d'épuiser la mémoire. Si une erreur de mémoire se produit, essayez de réduire batch_size . Le calcul sera généralement plus rapide avec des valeurs batch_size plus élevées.
|
Renvoie | |
---|---|
Un ensemble de données xarray contenant les valeurs R_Squared , MAPE et wMAPE calculées, avec les coordonnées metric , geo_granularity et evaluation_set , ainsi que la variable de données value qui les accompagne. Si holdout_id existe, les données sont réparties en sous-sections 'Train' , 'Test' et 'All Data' , et les trois métriques sont calculées pour chacune d'elles.
|
response_curves
response_curves(
spend_multipliers: (list[float] | None) = None,
use_posterior: bool = True,
selected_geos: (Sequence[str] | None) = None,
selected_times: (Sequence[str] | None) = None,
by_reach: bool = True,
use_optimal_frequency: bool = False,
confidence_level: float = constants.DEFAULT_CONFIDENCE_LEVEL,
batch_size: int = constants.DEFAULT_BATCH_SIZE
) -> xr.Dataset
Méthode permettant de générer un xarray.Dataset avec des courbes de réponse.
Les courbes de réponse sont calculées au niveau national, en supposant le modèle de diffusion historique dans les zones géographiques et les périodes pour chaque canal média. Une liste de multiplicateurs est appliquée au total des dépenses historiques de chaque canal média pour obtenir les x-values
avec lesquelles la courbe de réponse du canal est calculée.
Args | |
---|---|
spend_multipliers
|
Liste des multiplicateurs. Le total des dépenses de chaque canal est multiplié par ces facteurs pour obtenir les valeurs avec lesquelles la courbe est calculée pour ce canal. |
use_posterior
|
Valeur booléenne. Si la valeur est True , les courbes de réponse a posteriori seront générées. Si la valeur est False , ce sont celles a priori qui seront générées.
|
selected_geos
|
Liste facultative contenant un sous-ensemble de zones géographiques à inclure. Par défaut, toutes les zones géographiques sont incluses. |
selected_times
|
Liste facultative contenant un sous-ensemble de dimensions temporelles à inclure. Par défaut, toutes les périodes sont incluses. Les chaînes et les entiers des dimensions temporelles doivent correspondre à Meridian.n_times .
|
by_reach
|
Valeur booléenne. Pour les canaux avec couverture et fréquence. Si la valeur est True , la courbe de réponse est représentée en fonction de la couverture. Si la valeur est False , elle est représentée en fonction de la fréquence.
|
use_optimal_frequency
|
Si la valeur est True , la fréquence optimale est utilisée pour représenter les courbes de réponse. La valeur par défaut est False .
|
confidence_level
|
Niveau de confiance pour les intervalles crédibles a priori et a posteriori, représenté par une valeur comprise entre zéro et un. |
batch_size
|
Entier représentant le nombre maximal de tirages par chaîne dans chaque lot. Le calcul est exécuté par lots pour éviter d'épuiser la mémoire. Si une erreur de mémoire se produit, essayez de réduire batch_size . Le calcul sera généralement plus rapide avec des valeurs batch_size plus élevées.
|
Renvoie | |
---|---|
Un xarray.Dataset contenant les données nécessaires pour visualiser les courbes de réponse.
|
rhat_summary
rhat_summary(
bad_rhat_threshold: float = 1.2
) -> pd.DataFrame
Calcule un récapitulatif des valeurs R-hat pour chaque paramètre du modèle.
Résume la réduction potentielle de l'échelle de Gelman et Rubin (1992) pour la convergence de la chaîne, communément appelée R-hat. Il s'agit d'une mesure de diagnostic de convergence qui évalue le degré auquel la variance (des moyennes) entre les chaînes dépasse les résultats que vous pourriez attendre si les chaînes étaient distribuées de manière identique. Les valeurs proches de 1,0 indiquent une convergence. Un R-hat inférieur à 1,2 indique une convergence approximative et constitue un seuil raisonnable pour de nombreux problèmes (Brooks et Gelman, 1998).
Références | |
---|---|
Andrew Gelman et Donald B. Rubin. "Inference from Iterative Simulation Using Multiple Sequences". Statistical Science, 7(4):457-472, 1992. Stephen P. Brooks et Andrew Gelman. "General Methods for Monitoring Convergence of Iterative Simulations". Journal of Computational and Graphical Statistics, 7(4), 1998. |
Args | |
---|---|
bad_rhat_threshold
|
Seuil permettant de déterminer quelles valeurs R-hat sont considérées comme incorrectes. |
Renvoie | |
---|---|
Un DataFrame avec les colonnes suivantes :
|
Génère | |
---|---|
NotFittedModelError
|
Si self.sample_posterior() n'est pas appelé avant cette méthode.
|
ValueError
|
Si le nombre de dimensions du tableau R-hat pour un paramètre n'est pas 1 ni 2 .
|
roi
roi(
use_posterior: bool = True,
new_data: (meridian.analysis.analyzer.DataTensors
| None) = None,
selected_geos: (Sequence[str] | None) = None,
selected_times: (Sequence[str] | None) = None,
aggregate_geos: bool = True,
use_kpi: bool = False,
batch_size: int = constants.DEFAULT_BATCH_SIZE
) -> tf.Tensor
Calcule la distribution a priori ou a posteriori du ROI pour chaque canal média.
Le numérateur du ROI correspond à la variation du résultat attendu (kpi
ou kpi *
revenue_per_kpi
) lorsque les dépenses d'un canal sont définies sur zéro et que celles de tous les autres canaux restent les mêmes. Le dénominateur du ROI correspond aux dépenses totales du canal.
Si new_data=None
, cette méthode calcule le ROI en fonction des valeurs des variables des médias payants avec lesquelles l'objet Meridian a été initialisé. L'utilisateur peut également remplacer ces données historiques par le biais de l'argument new_data
, à condition que les dimensions des nouveaux tenseurs correspondent. Par exemple,
new_data = DataTensors(media=new_media, frequency=new_frequency)
Si selected_geos
ou selected_times
sont spécifiées, le dénominateur du ROI correspond alors aux dépenses totales pour les périodes et les zones géographiques sélectionnées. Une exception est générée si les dépenses des InputData utilisées pour entraîner le modèle ne comportent pas de dimensions géographiques et temporelles. Si les arguments new_data.media_spend
et new_data.rf_spend
sont utilisés avec des dimensions différentes de celles des dépenses des InputData, une exception sera générée, car il s'agit probablement d'une erreur de l'utilisateur.
Args | |
---|---|
use_posterior
|
Valeur booléenne. Si la valeur est True , la distribution a posteriori est calculée. Sinon, c'est celle a priori qui l'est.
|
new_data
|
Facultatif. DataTensors contenant les données media , media_spend , reach , frequency , rf_spend et revenue_per_kpi . Si cela est fourni, le ROI est calculé à l'aide des valeurs des tenseurs transmises dans new_data et des valeurs d'origine de tous les autres tenseurs. Les dimensions des nouveaux tenseurs doivent correspondre à celles des tenseurs d'origine correspondants de meridian.input_data . Si la valeur est None , le ROI est calculé à l'aide des valeurs d'origine de tous les tenseurs.
|
selected_geos
|
Liste facultative contenant un sous-ensemble de zones géographiques à inclure. Par défaut, toutes les zones géographiques sont incluses. |
selected_times
|
Liste facultative contenant un sous-ensemble de périodes à inclure. Par défaut, toutes les périodes sont incluses. |
aggregate_geos
|
Valeur booléenne. Si la valeur est True , les revenus attendus sont cumulés pour toutes les régions.
|
use_kpi
|
Si la valeur est False , les revenus sont utilisés pour calculer le numérateur du ROI.
Sinon, c'est le KPI qui est utilisé.
|
batch_size
|
Entier représentant le nombre maximal de tirages par chaîne dans chaque lot. Le calcul est exécuté par lots pour éviter d'épuiser la mémoire. Si une erreur de mémoire se produit, essayez de réduire batch_size . Le calcul sera généralement plus rapide avec des valeurs batch_size plus élevées.
|
Renvoie | |
---|---|
Tensor de valeurs de ROI avec des dimensions (n_chains, n_draws, n_geos,
(n_media_channels + n_rf_channels)) . La dimension n_geos est supprimée si aggregate_geos=True .
|
summary_metrics
summary_metrics(
new_data: (meridian.analysis.analyzer.DataTensors
| None) = None,
marginal_roi_by_reach: bool = True,
marginal_roi_incremental_increase: float = 0.01,
selected_geos: (Sequence[str] | None) = None,
selected_times: (Sequence[str] | None) = None,
aggregate_geos: bool = True,
aggregate_times: bool = True,
optimal_frequency: (Sequence[float] | None) = None,
use_kpi: bool = False,
confidence_level: float = constants.DEFAULT_CONFIDENCE_LEVEL,
batch_size: int = constants.DEFAULT_BATCH_SIZE,
include_non_paid_channels: bool = False
) -> xr.Dataset
Renvoie des métriques récapitulatives.
Si new_data=None
, cette méthode calcule toutes les métriques en fonction des valeurs des variables de données avec lesquelles l'objet Meridian a été initialisé. L'utilisateur peut également remplacer ces données historiques par le biais de l'argument new_data
, à condition que les dimensions des nouveaux tenseurs correspondent. Par exemple,
new_data = DataTensors(
media=new_media,
frequency=new_frequency,
non_media_treatments=new_non_media_treatments)
Notez que les métriques mroi
et effectiveness
ne sont pas définies (math.nan
) pour la dimension de canal agrégée "All Paid Channels"
.
Args | |
---|---|
new_data
|
Objet DataTensors facultatif avec de nouveaux tenseurs facultatifs : media , reach , frequency , organic_media , organic_reach , organic_frequency , non_media_treatments , controls , revenue_per_kpi . Si cela est fourni, les métriques récapitulatives sont calculées à l'aide des valeurs des tenseurs transmises dans new_data et des valeurs d'origine de tous les autres tenseurs. Les dimensions des nouveaux tenseurs doivent correspondre à celles des tenseurs d'origine correspondants de meridian.input_data . Si la valeur est None , les métriques récapitulatives sont calculées à l'aide des valeurs d'origine de tous les tenseurs.
|
marginal_roi_by_reach
|
Valeur booléenne. Le ROI marginal (ROIm) correspond au retour sur le prochain euro dépensé. Si cet argument est True , le prochain euro dépensé n'est censé avoir d'impact que sur la couverture, tandis que la fréquence reste constante. Si cet argument est False , le prochain euro dépensé n'est censé avoir d'impact que sur la fréquence, tandis que la couverture reste constante.
Cet argument n'est utilisé que lorsque include_non_paid_channels est False .
|
marginal_roi_incremental_increase
|
Petite fraction par laquelle les dépenses de chaque canal sont augmentées lors du calcul du numérateur de leur ROIm. Le dénominateur du ROIm correspond à cette fraction des dépenses totales du canal. Cet argument n'est utilisé que lorsque include_non_paid_channels est False .
|
selected_geos
|
Liste facultative contenant un sous-ensemble de zones géographiques à inclure. Par défaut, toutes les zones géographiques sont incluses. |
selected_times
|
Liste facultative contenant un sous-ensemble de périodes à inclure. Par défaut, toutes les périodes sont incluses. |
aggregate_geos
|
Valeur booléenne. Si la valeur est True , le résultat attendu est cumulé pour toutes les régions.
|
aggregate_times
|
Valeur booléenne. Si la valeur est True , le résultat attendu est cumulé pour toutes les périodes. Notez que si la valeur est False , le ROI, le ROIm, l'efficacité et le CPIK ne sont pas indiqués, car ils n'ont pas d'interprétation claire par période.
|
optimal_frequency
|
Liste facultative avec la dimension n_rf_channels contenant la fréquence optimale par canal, qui maximise le ROI moyen a posteriori. La valeur par défaut est None et la fréquence historique est utilisée pour calculer les métriques.
|
use_kpi
|
Valeur booléenne. Si la valeur est True , les métriques récapitulatives sont calculées à l'aide du KPI.
Si la valeur est False , elles sont calculées à l'aide des revenus.
|
confidence_level
|
Niveau de confiance pour les intervalles crédibles des métriques récapitulatives, représenté par une valeur comprise entre zéro et un. |
batch_size
|
Entier représentant le nombre maximal de tirages par chaîne dans chaque lot. Le calcul est exécuté par lots pour éviter d'épuiser la mémoire. Si une erreur de mémoire se produit, essayez de réduire batch_size . Le calcul sera généralement plus rapide avec des valeurs batch_size plus élevées.
|
include_non_paid_channels
|
Valeur booléenne. Si la valeur est True , les canaux non payants (traitements média naturel, avec couverture et fréquence naturelles, et non média) sont inclus dans le récapitulatif, mais seules les métriques non liées aux dépenses sont indiquées. Si la valeur est False , seuls les canaux payants (média, avec couverture et fréquence) sont inclus, mais le récapitulatif contient également les métriques liées aux dépenses. Valeur par défaut : False .
|
Renvoie | |
---|---|
Un xr.Dataset avec les coordonnées channel , metric (mean , median , ci_low , ci_high ), distribution (a priori et a posteriori) contenant les variables de données non payantes suivantes : incremental_outcome , pct_of_contribution , effectiveness , et les variables de données payantes suivantes : impressions , pct_of_impressions , spend , pct_of_spend , CPM , roi , mroi , cpik . Les variables de données payantes ne sont incluses que lorsque include_non_paid_channels est défini sur False . Notez que les métriques roi , mroi , cpik et effectiveness ne sont pas indiquées lorsque aggregate_times=False , car elles n'ont pas d'interprétation claire par période.
|