Afficher la source sur GitHub
|
Module de conception
Le module de conception spécifie les paramètres du test et génère des répartitions géographiques optimisées (groupe de traitement par rapport au groupe de contrôle) en fonction des données historiques. Les classes de données qui définissent les paramètres d'entrée et de sortie, ainsi que les fonctions principales permettant de générer, de comparer et de visualiser les conceptions, sont listées dans les sections suivantes.
DesignConfig
Classe de configuration qui définit les paramètres principaux d'un test Meridian GeoX.
@dataclasses.dataclass
class DesignConfig:
experiment_duration: datetime.timedelta
experiment_types: Union[
ExperimentType,
dict[str, ExperimentType],
] = ExperimentType.HOLDBACK
methodology: Methodology = Methodology.TBR
geo_assignment_rule: GeoAssignmentRule = GeoAssignmentRule.STRATIFIED_SAMPLING
cell_count: int = 1
alpha: float = 0.1
power: float = 0.8
test_type: TestType = TestType.TWO_SIDED
design_output_count: int = 10
cost_per_incremental_conversion: Union[float, dict[str, float]] = 1.0
n_candidates: int = 100_000
n_ranked_candidates: int = 100
max_candidate_generation_retries: int = 10
seed: int = 42
slope_tolerance: float = 0.2
min_r2: float = 0.8
num_strata: int = 4
k_means_iterations: int = 10
| Attributs | Description |
|---|---|
experiment_duration
|
Durée du test, spécifiée en tant que datetime.timedelta. Unités acceptées : weeks et days. |
experiment_types
|
Définit la nature du test, par exemple holdback, go-dark ou heavy-up. Pour les tests multicellulaires, différents types peuvent être attribués à chaque cellule à l'aide d'un dictionnaire. Sinon, un seul type fourni est appliqué à toutes les cellules. |
methodology
|
Méthode choisie pour la sélection de la conception, par exemple TBR. |
geo_assignment_rule
|
Règle utilisée pour attribuer des zones géographiques à différents groupes, comme RANDOM ou STRATIFIED_SAMPLING. |
cell_count
|
Nombre total de cellules de traitement. Utilisez cell_count > 1 pour les scénarios multitraitements partageant un contrôle commun. |
alpha
|
Seuil de signification du test. La valeur par défaut est 0,1 (90 % de confiance). |
power
|
Puissance statistique cible (probabilité de détecter un effet réel). La valeur par défaut est 0,8. |
test_type
|
Type de test statistique à effectuer, par exemple ONE_SIDED ou TWO_SIDED. La valeur par défaut est TWO_SIDED. |
design_output_count
|
Nombre de conceptions recommandées classées à renvoyer. La valeur par défaut est 10. |
cost_per_incremental_conversion
|
Équivaut à 1 / ROAS incrémental cible si les données sur les revenus sont utilisées. Utilisé pour estimer les besoins budgétaires des tests holdback (cellule). Facultatif (et ignoré) pour les tests go-dark et heavy-up (cellule). Pour les tests multicellulaires, différentes valeurs peuvent être attribuées à chaque cellule holdback à l'aide d'un dictionnaire. Si un seul float est fourni pour une conception multicellulaire, il sera appliqué à toutes les cellules holdback. La valeur par défaut est 1,0. |
Paramètres avancés de recherche de conception
| Attributs | Description |
|---|---|
n_candidates
|
Nombre de candidats pour l'étape de notation rapide. La valeur par défaut est 100 000. |
n_ranked_candidates
|
Nombre de candidats entièrement évalués. La valeur par défaut est 100. |
max_candidate_generation_retries
|
Nombre maximal de tentatives de génération de candidats. La valeur par défaut est 10. |
seed
|
Graine du générateur de nombres aléatoires. La valeur par défaut est 42. |
slope_tolerance
|
Différence symétrique maximale autorisée pour la vérification de la pente. La valeur par défaut est 0,2. |
min_r2
|
R2 minimal autorisé pour la conception. La valeur par défaut est 0,8. |
num_strata
|
Nombre de strates pour l'échantillonnage stratifié. La valeur par défaut est 4. |
k_means_iterations
|
Nombre d'itérations pour le clustering k-moyennes. La valeur par défaut est 10. |
Budget
Contrainte budgétaire pour une seule cellule.
@dataclasses.dataclass
class Budget:
budget: Optional[float] = None
budget_pct: Optional[float] = None
| Attributs | Description |
|---|---|
budget
|
Budget maximal pour la conception du test (par cellule), spécifié sous la forme d'un montant total de budget. Doit être spécifié pour les cellules holdback. |
budget_pct
|
Variation maximale en pourcentage du budget pour la conception du test (par cellule). Doit être spécifiée pour les cellules go-dark et heavy-up. Doit être négative pour le type go-dark et positive pour le type heavy-up. |
Contraintes
Définit des contraintes opérationnelles facultatives pour l'algorithme de conception.
@dataclasses.dataclass
class Constraints:
included_control_geos: Set[str]
excluded_geos: Set[str]
excluded_dates: Set[pd.Timestamp]
budget_constraint: Union[Budget, dict[str, Budget], None] = None
max_conversions_percent: Optional[float] = 0.3
| Attributs | Description |
|---|---|
included_control_geos
|
Zones géographiques spécifiques devant être incluses dans le groupe de contrôle. |
excluded_geos
|
Zones géographiques spécifiques à exclure de la conception du test. |
excluded_dates
|
Dates spécifiques à exclure de la conception du test. |
budget_constraint
|
Contrainte budgétaire pour la conception du test (par cellule). Il peut s'agir d'un montant total du budget ou d'une variation en pourcentage. Pour les tests multicellulaires, différentes valeurs peuvent être attribuées à chaque cellule à l'aide d'un dictionnaire. Sinon, la seule valeur fournie est appliquée à toutes les cellules. Si la variation en pourcentage du budget n'est pas spécifiée pour une cellule go-dark, la valeur par défaut est -100 %. Pour une cellule heavy-up, la valeur par défaut est de 100 %. |
max_conversions_percent
|
Volume de conversions maximal autorisé pour le groupe de traitement. Pour les conceptions multicellulaires, ce pourcentage correspond au total de toutes les cellules de traitement. La valeur par défaut est 0,3. |
DesignSet
Ensemble de conceptions de tests générées et de leurs métriques comparatives.
@dataclasses.dataclass
class DesignSet:
designs: dict[str, Design]
design_metrics: pd.DataFrame
| Attributs | Description |
|---|---|
designs
|
Dictionnaire mappant les ID de conception à des objets Design individuels. |
design_metrics
|
DataFrame contenant les conceptions classées et leurs métriques associées, telles que l'effet minimal détectable et le budget. |
Colonnes de métriques de conception DataFrame
| Colonne | Description |
|---|---|
design_id |
Identifiant unique de la conception. |
cell |
ID de la cellule de traitement. |
design_methodology |
Méthodologie utilisée pour la conception. |
r2
|
R2 hors échantillon, calculé en testant la justesse prédictive du modèle sur des données historiques non utilisées lors de la phase d'entraînement initiale. |
mde
|
L'effet minimal détectable (MDE, Minimum Detectable Effect) représente la plus petite amélioration du KPI principal que le test est en mesure de détecter avec une pertinence statistique. Plus le MDE est faible, plus la conception est sensible. |
mde_abs
|
Nombre minimal de conversions incrémentales requis.
Il est calculé comme suit : mde * treatment_conversion_volume. |
p_value (AA)
|
Résultat d'un contrôle de robustesse où le modèle est appliqué à une période sans traitement connu. Une valeur p supérieure au seuil de signification (généralement 0,1) indique que la conception réussit le test A/A et n'est pas sujette aux faux positifs. |
budget
|
Modifications nécessaires des dépenses marketing totales prévues. Dans les études go-dark ou heavy-up, ceci est calculé en fonction des données de dépenses et de la variation en pourcentage du budget saisie par l'utilisateur. Dans les études holdback, le CpIC est utilisé pour estimer le budget requis. |
design_implied_cpic
|
Coût par conversion incrémentale (CpIC) implicite de la conception, calculé en divisant le budget par le nombre minimal de conversions incrémentales requis. |
treatment_conversions_pct |
Pourcentage de conversion du groupe de traitement. |
treatment_geo_count |
Nombre de zones géographiques dans le groupe de traitement. |
Conception
Représente une conception de test unique, y compris les attributions géographiques et la configuration utilisée.
@dataclasses.dataclass
class Design:
designs: dict[str, PerCellDesign]
control_geos: Set[str]
excluded_geos: Set[str]
excluded_dates: Set[pd.Timestamp]
design_config: Optional[DesignConfig] = None
constraints: Optional[Constraints] = None
quality_check_result: Optional[QualityCheckResult] = None
geo_stratum_labels: Optional[JnpArray] = None
data: Optional[pd.DataFrame] = None
def export_to_json(self) -> str
@classmethod
def load_from_json(cls, json_str: str) -> 'Design'
| Attributs | Description |
|---|---|
designs
|
Dictionnaire mappant les ID de cellule de traitement à leurs résultats PerCellDesign respectifs. |
control_geos
|
Ensemble des zones géographiques attribuées au groupe de contrôle. |
excluded_geos
|
Ensemble des zones géographiques exclues du test. Inclut les zones géographiques exclues manuellement par l'utilisateur et les zones géographiques aberrantes détectées par les contrôles de qualité des données (si elles sont configurées pour être supprimées automatiquement). |
excluded_dates
|
Dates exclues de la conception. Inclut les dates exclues manuellement par l'utilisateur et les dates aberrantes détectées par les contrôles de qualité des données (si elles sont configurées pour être supprimées automatiquement). |
design_config
|
Objet DesignConfig utilisé pour créer cette conception spécifique. |
constraints
|
Objet Constraints appliqué lors de la recherche de conception. |
quality_check_result
|
Résultat des contrôles de qualité des données effectués sur les données d'entrée. |
geo_stratum_labels
|
Libellé de strate de chaque zone géographique, classé par nom de zone géographique. Ceci est utilisé à des fins d'analyse. |
data
|
Données utilisées pour la conception. Ceci est utilisé à des fins d'analyse. |
| Méthode | Description |
|---|---|
export_to_json |
Exporte l'objet de conception vers un fichier JSON. |
load_from_json |
Charge un objet de conception à partir d'un fichier JSON. |
PerCellDesign
Contient les attributions spécifiques et les métriques statistiques d'une seule cellule de traitement dans une conception.
@dataclasses.dataclass
class PerCellDesign:
treatment_geos: Set[str]
minimum_detectable_effect: float
design_implied_cpic: float
p_value: float
budget: float
counterfactual_conversions: Optional[pd.DataFrame] = None
| Attributs | Description |
|---|---|
treatment_geos
|
Ensemble des zones géographiques attribuées au groupe de traitement pour cette cellule. |
minimum_detectable_effect
|
La plus petite taille d'effet que la conception est capable de détecter. |
design_implied_cpic
|
Coût par conversion incrémentale (CpIC) implicite de la conception, calculé en divisant le budget par le nombre minimal de conversions incrémentales requis. |
p_value
|
Seuil de signification d'un test A/A vérifiant que les groupes de traitement et de contrôle sont équilibrés avant le début du test. |
budget
|
Coût estimé pour cette cellule de traitement en fonction des paramètres du test. |
counterfactual_conversions
|
Série temporelle de conversion contrefactuelle. Inclut la date, les conversions observées et contrefactuelles. Ceci est utilisé à des fins de représentation graphique. |
run_design()
Fonction principale permettant de générer et de classer les conceptions de tests potentielles.
def run_design(
data: pd.DataFrame,
design_config: DesignConfig,
constraints: Constraints,
data_quality_check_config: QualityCheckConfig = QualityCheckConfig()
)-> DesignSet
| Paramètres | Description |
|---|---|
data
|
Série temporelle historique de prétest contenant date, location, conversions et (facultatif) spend. |
design_config |
Paramètres de la conception du test. |
constraints
|
Contraintes opérationnelles pour la conception du test. |
data_quality_check_config
|
Option permettant de configurer des contrôles automatiques de la qualité des données. Par défaut, les zones géographiques sans réponse et les dates aberrantes sont automatiquement supprimées. |
Renvoie : un objet DesignSet contenant une liste d'objets Design classés et les métriques associées, telles que l'effet minimal détectable et le budget.
compare_designs()
Compare plusieurs conceptions de test selon différentes méthodologies, règles d'attribution ou configurations.
def compare_designs(
data: pd.DataFrame,
design_requirements: list[tuple[DesignConfig, Constraints]],
design_output_count: int = 10,
) -> DesignSet
| Paramètres | Description |
|---|---|
data |
Série temporelle historique de prétest. |
design_requirements
|
Liste de tuples, chacun contenant un objet DesignConfig et un objet Constraints. |
design_output_count |
Nombre de conceptions à renvoyer. La valeur par défaut est 10. |
Renvoie : un DesignSet unifié contenant les conceptions classées de toutes les configurations fournies.
concat_design_reports()
Concatène plusieurs objets DesignSet en un seul DesignSet classé.
def concat_design_reports(
design_sets: list[DesignSet], design_output_count: int = 10
) -> DesignSet
| Paramètres | Description |
|---|---|
design_sets
|
Liste d'objets DesignSet à fusionner. |
design_output_count
|
Nombre de conceptions principales à renvoyer dans l'ensemble fusionné. La valeur par défaut est 10. |
Résultat : un seul objet DesignSet contenant toutes les conceptions, reclassées en fonction de leurs métriques.
plot_design()
Génère une représentation visuelle d'une conception spécifique.
def plot_design(
design_to_plot: Design
)
| Paramètres | Description |
|---|---|
design_to_plot |
Objet Design spécifique à visualiser. |
Description : représente graphiquement la série temporelle des conversions, en comparant le groupe de traitement au contrefactuel pour visualiser l'efficacité de la répartition géographique.
Module d'analyse
Le module d'analyse calcule l'impact incrémental d'un test terminé à l'aide d'une modélisation contrefactuelle et d'une inférence robuste. Les classes de données qui définissent les paramètres d'entrée et de sortie, ainsi que les fonctions principales permettant de générer et de visualiser les rapports de test, sont listées dans les sections suivantes.
AnalysisConfig
Paramètres requis pour exécuter une analyse de l'impact d'une étude GeoX terminée.
@dataclasses.dataclass
class AnalysisConfig:
design: Design
analysis_start_date: pd.Timestamp
analysis_end_date: pd.Timestamp
pretest_end_date: Optional[pd.Timestamp] = None
excluded_dates: Set[pd.Timestamp]
alpha: Optional[float] = None
test_type: Optional[TestType] = None
n_placebo_candidates: int = 100_000
n_top_placebos: int = 500
min_placebo_r2: float = 0.6
min_placebo_count_warning: int = 100
min_placebo_count_error: int = 10
| Attributs | Description |
|---|---|
design
|
Informations spécifiques sur la répartition géographique et la provenance utilisées lors de la phase de conception. |
analysis_start_date |
Date de début de l'analyse. |
analysis_end_date
|
Date de fin de l'analyse, qui peut inclure une période d'attente. |
pretest_end_date
|
Date de fin de la période de prétest. Si cette information n'est pas fournie, la période de prétest correspondra à toutes les dates antérieures à analysis_start_date. |
excluded_dates
|
Dates spécifiques à exclure de l'analyse, telles que les jours aberrants. |
alpha
|
Seuil de signification. S'il est omis, il est déduit à partir de la configuration de la conception. |
test_type
|
Type de test statistique à effectuer. S'il n'est pas fourni, il sera déduit à partir de la configuration de la conception. |
Paramètres d'analyse avancés
| Attributs | Description |
|---|---|
n_placebo_candidates
|
Nombre de candidats placebo initiaux générés avant la sélection. La valeur par défaut est 100 000. |
n_top_placebos
|
Nombre des meilleurs candidats placebo valides utilisés pour l'analyse. La valeur par défaut est 500. |
min_placebo_r2
|
Score R-carré hors échantillon minimal requis pour qu'une conception placebo soit conservée pour l'analyse. La valeur par défaut est 0,6. |
min_placebo_count_warning
|
Nombre de candidats placebo valides en dessous duquel un avertissement sera consigné. La valeur par défaut est 100. |
min_placebo_count_error
|
Nombre de candidats placebo valides en dessous duquel une erreur sera générée. La valeur par défaut est 10. |
AnalysisResult
Contient le résultat statistique agrégé d'un test GeoX sur toutes les cellules.
@dataclasses.dataclass
class AnalysisResult:
results: dict[str, AnalysisMetrics]
analysis_config: AnalysisConfig
excluded_geos: Set[str]
excluded_dates: Set[pd.Timestamp]
quality_check_result: Optional[QualityCheckResult] = None
| Attributs | Description |
|---|---|
results
|
Dictionnaire mappant chaque cellule de traitement à l'objet AnalysisMetrics correspondant. |
analysis_config
|
Configuration utilisée pour l'analyse. |
excluded_geos
|
Zones géographiques exclues de l'analyse. Inclut toutes les zones géographiques exclues lors de la phase de conception. |
excluded_dates
|
Dates exclues de l'analyse. Inclut les dates exclues manuellement par l'utilisateur de la configuration de l'analyse et les dates aberrantes de la phase d'analyse (si elles sont configurées pour être supprimées automatiquement). |
quality_check_result
|
Résultat des contrôles de qualité des données effectués sur les données d'entrée. |
AnalysisMetrics
Contient des métriques pour l'analyse d'une seule cellule.
@dataclasses.dataclass
class AnalysisMetrics:
lift: Estimate
percent_lift: Estimate
cumulative_lift: pd.DataFrame
counterfactual_conversions: pd.DataFrame
pointwise_difference: pd.DataFrame
icpd: Optional[Estimate] = None
cumulative_icpd: Optional[pd.DataFrame] = None
descriptive_metrics: Optional[DescriptiveMetrics] = None
| Attributs | Description |
|---|---|
lift
|
Estimation ponctuelle et intervalles de confiance pour les conversions incrémentales absolues. |
percent_lift
|
Pourcentage d'impact estimé avec les intervalles de confiance. |
cumulative_lift
|
Série temporelle des estimations de l'impact des conversions incrémentales sur la période d'analyse. |
counterfactual_conversions
|
Série temporelle de conversion contrefactuelle. Inclut la date, les valeurs observées, les valeurs contrefactuelles et les intervalles de confiance (période de test uniquement). |
pointwise_difference
|
Différence ponctuelle entre les conversions observées et contrefactuelles. Inclut la date, la différence et les intervalles de confiance (période de test uniquement). |
icpd
|
Conversions incrémentales par dollar. Équivaut au ROAS incrémental si des données sur les revenus sont utilisées. Ceci est renseigné si des données sur les dépenses sont disponibles. |
cumulative_icpd
|
Série temporelle des estimations de conversion incrémentale par dollar (iCPD) sur la période d'analyse. Ceci n'est renseigné que si des données sur les dépenses sont disponibles. |
descriptive_metrics
|
Métriques descriptives pour l'analyse d'une seule cellule. Ceci est utilisé pour l'intégration de Meridian. |
Estimation
Une estimation avec son intervalle de confiance.
@dataclasses.dataclass
class Estimate:
point_estimate: float
lower_bound: float
upper_bound: float
standard_deviation: float
p_value: float
| Attributs | Description |
|---|---|
point_estimate |
Valeur estimée principale. |
lower_bound |
Limite inférieure de l'intervalle de confiance. |
upper_bound |
Limite supérieure de l'intervalle de confiance. |
standard_deviation |
Écart type de l'estimation. |
p_value |
Seuil de signification associé à l'estimation. |
DescriptiveMetrics
Métriques descriptives pour l'analyse d'une seule cellule.
@dataclasses.dataclass
class DescriptiveMetrics:
estimated_bau_spend: Optional[float] = None
| Attribut | Description |
|---|---|
estimated_bau_spend
|
Représente l'estimation des dépenses habituelles (BAU) pour les zones géographiques incluses dans l'analyse de cette cellule (les zones géographiques de traitement de la cellule spécifique et les zones géographiques de contrôle). Cet attribut n'inclut pas les dépenses des autres cellules de traitement ni des zones géographiques non expérimentales. Il ne représente donc pas les dépenses nationales totales de l'annonceur. |
analyze()
Exécute l'analyse de l'impact.
def analyze(
data: pd.DataFrame,
analysis_config: AnalysisConfig,
data_quality_check_config: QualityCheckConfig = QualityCheckConfig()
)-> AnalysisResult
| Paramètres | Description |
|---|---|
data
|
Série temporelle complète contenant les données de prétest et de test pour toutes les zones géographiques. |
analysis_config
|
Configuration définissant la méthodologie et les périodes. |
data_quality_check_config
|
Option permettant de configurer des contrôles automatiques de la qualité des données. Par défaut, les dates aberrantes sont automatiquement supprimées. |
Renvoie : un objet AnalysisResult contenant les métriques de chaque cellule de traitement.
plot_analysis()
Génère une visualisation de l'analyse du test.
def plot_analysis(
analysis_result: AnalysisResult
)
| Paramètres | Description |
|---|---|
analysis_result
|
Résultat statistique de la fonction analyze(). |
Description : produit des graphiques de séries temporelles pour les valeurs contrefactuelles, la différence ponctuelle, le lift cumulé et l'iCPD cumulé afin de visualiser l'impact incrémental estimé pour chaque cellule de traitement.
Module sur la qualité des données
QualityCheckConfig
@dataclasses.dataclass
class QualityCheckConfig:
exclude_geos_no_response: bool = True
exclude_outlier_dates: bool = True
| Attributs | Description |
|---|---|
exclude_geos_no_response
|
Détermine s'il faut exclure automatiquement les zones géographiques sans réponse pendant la phase de conception.
La valeur par défaut est True. |
exclude_outlier_dates
|
Détermine s'il faut exclure automatiquement les dates aberrantes lors des phases de conception ou d'analyse. La valeur par défaut est True. |
QualityCheckResult
@dataclasses.dataclass
class QualityCheckResult:
quality_check_config: QualityCheckConfig
quality_metrics: pd.DataFrame
outlier_geos: Set[str]
outlier_dates: Set[pd.Timestamp]
| Attributs | Description |
|---|---|
quality_check_config
|
Paramètres de configuration utilisés pour le contrôle qualité. |
quality_metrics
|
DataFrame contenant les métriques détaillées résultant du contrôle qualité. |
outlier_geos
|
Ensemble des zones géographiques aberrantes identifiées sans réponse. |
outlier_dates
|
Ensemble des dates aberrantes identifiées lors du contrôle qualité. |
check_design_data_quality()
def check_design_data_quality(
data: pd.DataFrame,
design_config: DesignConfig,
quality_check_config: QualityCheckConfig
) -> QualityCheckResult
Description : vérifie la qualité des données d'entrée pour la phase de conception. Cette vérification est intégrée directement à la méthode run_design(), ce qui signifie que les contrôles de la qualité des données sont effectués automatiquement lors de la génération des conceptions.
Renvoie : un objet QualityCheckResult.
check_analysis_data_quality()
def check_analysis_data_quality(
data: pd.DataFrame,
analysis_config: AnalysisConfig,
quality_check_config: QualityCheckConfig
) -> QualityCheckResult
Description : vérifie la qualité des données d'entrée pour la phase d'analyse.
Cette vérification est intégrée directement à la méthode analyze(), ce qui signifie que les contrôles de la qualité des données sont effectués automatiquement pendant l'analyse.
Renvoie : un objet QualityCheckResult.
Afficher la source sur GitHub