Ver el código fuente en GitHub |
Módulo de diseño
El módulo de diseño especifica los parámetros del experimento y genera divisiones geográficas optimizadas (tratamiento frente a control) en función de los datos históricos. Las clases de datos que definen los parámetros de entrada y de salida, y las funciones principales para generar, comparar y visualizar diseños se enumeran en las secciones que siguen.
DesignConfig
Es una clase de configuración que define los parámetros principales de un experimento de 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
| Atributos | Descripción |
|---|---|
experiment_duration
|
Es la duración del experimento, especificada como datetime.timedelta. Unidades admitidas: weeks y days. |
experiment_types
|
Define la naturaleza de la prueba, como aislamiento, supresión o aumento. En el caso de los experimentos de varias celdas, se pueden asignar diferentes tipos por celda con un diccionario. De lo contrario, se aplica un único tipo proporcionado a todas las celdas. |
methodology
|
Es el método elegido para la selección del diseño, por ejemplo, TBR. |
geo_assignment_rule
|
Es la regla que se usa para asignar áreas geográficas a diferentes grupos, como RANDOM o STRATIFIED_SAMPLING. |
cell_count
|
Es la cantidad total de celdas de tratamiento. Usa cell_count > 1 para situaciones de varios tratamientos que comparten un control común. |
alpha
|
Es el nivel de significancia de la prueba. El valor predeterminado es 0.1 (90% de confianza). |
power
|
Es el poder estadístico objetivo (probabilidad de detectar un efecto verdadero). El valor predeterminado es 0.8. |
test_type
|
Es el tipo de prueba estadística que se realizará, por ejemplo, ONE_SIDED o TWO_SIDED. El valor predeterminado es TWO_SIDED. |
design_output_count
|
Es la cantidad de diseños recomendados y clasificados que se devolverán. El valor predeterminado es 10. |
cost_per_incremental_conversion
|
Equivale a 1 / ROAS incremental objetivo si se usan datos de ingresos. Se usa para estimar los requisitos de presupuesto de los experimentos de aislamiento (celda). Opcional (y se ignora) para los experimentos de supresión y de aumento (celda). En los experimentos de varias celdas, se pueden asignar valores diferentes por celda de aislamiento con un diccionario. Si se proporciona un solo valor de número de punto flotante para un diseño de varias celdas, se aplicará a todas las celdas de aislamiento. El valor predeterminado es 1.0. |
Parámetros de búsqueda de diseño avanzados
| Atributos | Descripción |
|---|---|
n_candidates
|
Es la cantidad de candidatos para el paso de puntuación rápida. El valor predeterminado es 100,000. |
n_ranked_candidates
|
Es la cantidad de candidatos con puntuación completa. El valor predeterminado es 100. |
max_candidate_generation_retries
|
Cantidad máxima de reintentos de generación de candidatos. El valor predeterminado es 10. |
seed
|
Es el valor de origen del generador de números aleatorios. El valor predeterminado es 42. |
slope_tolerance
|
Es la diferencia simétrica máxima permitida para la verificación de la pendiente. El valor predeterminado es 0.2. |
min_r2
|
Es el valor mínimo permitido de R2 para el diseño. El valor predeterminado es 0.8. |
num_strata
|
Es la cantidad de estratos para el muestreo estratificado. El valor predeterminado es 4. |
k_means_iterations
|
Es la cantidad de iteraciones para el agrupamiento en clústeres de k-means. El valor predeterminado es 10. |
Presupuesto
Restricción de presupuesto para una sola celda.
@dataclasses.dataclass
class Budget:
budget: Optional[float] = None
budget_pct: Optional[float] = None
| Atributos | Descripción |
|---|---|
budget
|
Es el presupuesto máximo para el diseño del experimento (por celda), especificado como un importe de presupuesto total. Debe especificarse para las celdas de aislamiento. |
budget_pct
|
Es el cambio porcentual máximo del presupuesto para el diseño del experimento (por celda). Se debe especificar para las celdas de supresión y aumento. Debe ser negativo para la estrategia de supresión y positivo para la de aumento. |
Limitaciones
Define restricciones operativas opcionales para el algoritmo de diseño.
@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
| Atributos | Descripción |
|---|---|
included_control_geos
|
Son las áreas geográficas específicas que se deben incluir en el grupo de control. |
excluded_geos
|
Son las áreas geográficas específicas que se excluirán del diseño del experimento. |
excluded_dates
|
Son las fechas específicas que se excluirán del diseño del experimento. |
budget_constraint
|
Es la restricción de presupuesto para el diseño del experimento (por celda). Podría ser un importe de presupuesto total o un cambio en el porcentaje del presupuesto. En el caso de los experimentos de varias celdas, se pueden asignar valores diferentes por celda con un diccionario. De lo contrario, se aplica el único valor proporcionado a todas las celdas. Si no se especifica el cambio porcentual del presupuesto para una celda de supresión, el valor predeterminado es -100%. Para la celda de aumento, el valor predeterminado es 100%. |
max_conversions_percent
|
Es la cantidad máxima de conversiones permitida para el grupo de tratamiento. En el caso de los diseños de varias celdas, este porcentaje se refiere al total de todas las celdas de tratamiento. El valor predeterminado es 0.3. |
DesignSet
Es una colección de diseños de experimentos generados y sus métricas comparativas.
@dataclasses.dataclass
class DesignSet:
designs: dict[str, Design]
design_metrics: pd.DataFrame
| Atributos | Descripción |
|---|---|
designs
|
Es un diccionario que asigna IDs de diseño a objetos Design individuales. |
design_metrics
|
Es un DataFrame que contiene diseños clasificados y sus métricas asociadas, como el MDE y el presupuesto. |
Diseña métricas para DataFrame columnas
| Columna | Descripción |
|---|---|
design_id |
Es el identificador único del diseño. |
cell |
Es el ID de la celda de tratamiento. |
design_methodology |
Es la metodología que se usó para el diseño. |
r2
|
Es el R2 fuera de la muestra, que se calcula probando la exactitud predictiva del modelo con datos históricos que no se usaron durante la fase de entrenamiento inicial. |
mde
|
El efecto mínimo detectable (MDE) representa el aumento más pequeño en el KPI principal que el experimento puede detectar con importancia estadística. Un MDE más bajo indica un diseño más sensible. |
mde_abs
|
Es la cantidad mínima de conversiones incrementales requeridas.
Se calcula como mde * treatment_conversion_volume. |
p_value (AA)
|
Es el resultado de una verificación de solidez en la que el modelo se aplica a un período sin tratamiento conocido. Un valor p mayor que el nivel de significancia (por lo general, 0.1) indica que el diseño supera la prueba A/A y no es propenso a falsos positivos. |
budget
|
Son los cambios necesarios en la inversión de marketing total proyectada. En los estudios de supresión o aumento, lo calculamos en función de los datos de inversión y el cambio porcentual del presupuesto que ingresa el usuario. En los estudios de aislamiento, usamos el CpIC para estimar el presupuesto requerido. |
design_implied_cpic
|
Es el costo por conversión incremental (CpIC) implícito en el diseño, que se calcula dividiendo el presupuesto por la cantidad mínima de conversiones incrementales requeridas. |
treatment_conversions_pct |
Es el porcentaje de conversiones del grupo de tratamiento. |
treatment_geo_count |
Es la cantidad de ubicaciones geográficas en el grupo de tratamiento. |
Diseño
Representa un solo diseño de experimento, incluidas las asignaciones geográficas y la configuración utilizada.
@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'
| Atributos | Descripción |
|---|---|
designs
|
Es un diccionario que asigna los IDs de las celdas de tratamiento a sus respectivos resultados de PerCellDesign. |
control_geos
|
Es el conjunto de áreas geográficas asignadas al grupo de control. |
excluded_geos
|
Es el conjunto de áreas geográficas que se excluyeron del experimento. Incluye las ubicaciones geográficas excluidas de forma manual por el usuario y las atípicas detectadas por las verificaciones de calidad de los datos (si se configuraron para quitarse automáticamente). |
excluded_dates
|
Fechas excluidas del diseño. Incluye las fechas excluidas de forma manual por el usuario y las de valores atípicos detectadas por las verificaciones de calidad de los datos (si se configuraron para quitarse automáticamente). |
design_config
|
Es el objeto DesignConfig que se usa para crear este diseño específico. |
constraints
|
Es el objeto Constraints que se aplicó durante la búsqueda de diseño. |
quality_check_result
|
Es el resultado de las verificaciones de calidad de los datos realizadas en los datos de entrada. |
geo_stratum_labels
|
Es la etiqueta de estrato de cada ubicación geográfica, ordenada por el nombre de la ubicación. Se utiliza para el análisis. |
data
|
Son los datos que se usan para el diseño. Se utilizan para el análisis. |
| Método | Descripción |
|---|---|
export_to_json |
Exporta el objeto de diseño a un archivo JSON. |
load_from_json |
Carga un objeto de diseño desde un archivo JSON. |
PerCellDesign
Contiene las asignaciones específicas y las métricas estadísticas de una sola celda de tratamiento dentro de un diseño.
@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
| Atributos | Descripción |
|---|---|
treatment_geos
|
Es el conjunto de áreas geográficas asignadas al grupo de tratamiento de esta celda. |
minimum_detectable_effect
|
Es el tamaño del efecto más pequeño que el diseño tiene la capacidad de detectar. |
design_implied_cpic
|
Es el costo por conversión incremental (CpIC) implícito en el diseño, que se calcula dividiendo el presupuesto por la cantidad mínima de conversiones incrementales requeridas. |
p_value
|
Es el nivel de significancia de una prueba A/A que verifica que los grupos de tratamiento y de control estén equilibrados antes de que comience el experimento. |
budget
|
Es el costo estimado de esta celda de tratamiento en función de los parámetros del experimento. |
counterfactual_conversions
|
Es la serie temporal de conversiones contrafácticas. Incluye la fecha, las conversiones observadas y las contrafácticas. Se usa para trazar. |
run_design()
Es la función principal para generar y clasificar posibles diseños de experimentos.
def run_design(
data: pd.DataFrame,
design_config: DesignConfig,
constraints: Constraints,
data_quality_check_config: QualityCheckConfig = QualityCheckConfig()
)-> DesignSet
| Parámetros | Descripción |
|---|---|
data
|
Es una serie temporal histórica previa a la prueba que contiene date, location, conversions y, de forma opcional, spend. |
design_config |
Son los parámetros para el diseño del experimento. |
constraints
|
Son las restricciones operativas para el diseño del experimento. |
data_quality_check_config
|
Es una opción para configurar verificaciones automáticas de la calidad de los datos. La configuración predeterminada consiste en quitar automáticamente las ubicaciones geográficas sin respuesta y las fechas con valores atípicos. |
Devuelve: Un objeto DesignSet que contiene una lista de objetos Design clasificados y métricas asociadas, como el MDE y el presupuesto.
compare_designs()
Compara varios diseños de experimentos con diferentes metodologías, reglas de asignación o parámetros de configuración.
def compare_designs(
data: pd.DataFrame,
design_requirements: list[tuple[DesignConfig, Constraints]],
design_output_count: int = 10,
) -> DesignSet
| Parámetros | Descripción |
|---|---|
data |
Son las series temporales históricas previas a la prueba. |
design_requirements
|
Es una lista de tuplas, cada una con un objeto DesignConfig y un objeto Constraints. |
design_output_count |
Es la cantidad de diseños que se devolverán. El valor predeterminado es 10. |
Devuelve: Un DesignSet unificado que contiene los diseños clasificados de todos los parámetros de configuración proporcionados.
concat_design_reports()
Concatena varios objetos DesignSet en un solo DesignSet clasificado.
def concat_design_reports(
design_sets: list[DesignSet], design_output_count: int = 10
) -> DesignSet
| Parámetros | Descripción |
|---|---|
design_sets
|
Es una lista de objetos DesignSet que se combinarán. |
design_output_count
|
Es la cantidad de diseños principales que se mostrarán en el conjunto combinado. El valor predeterminado es 10. |
Devuelve: Un solo objeto DesignSet que contiene todos los diseños, reclasificados según sus métricas.
plot_design()
Genera una representación visual de un diseño específico.
def plot_design(
design_to_plot: Design
)
| Parámetros | Descripción |
|---|---|
design_to_plot |
Es el objeto Design específico que se visualizará. |
Descripción: Traza la serie temporal de las conversiones. Para ello, compara el grupo de tratamiento con la situación contrafáctica para visualizar la efectividad de la segmentación geográfica.
Módulo de análisis
El módulo de análisis calcula el impacto incremental de un experimento completado con un modelado contrafáctico y una inferencia sólida. Las clases de datos que definen los parámetros de entrada y de salida, y las funciones principales para generar y visualizar los informes de experimentos se enumeran en las siguientes secciones.
AnalysisConfig
Son los parámetros necesarios para ejecutar un análisis de efectividad de un estudio de GeoX completado.
@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
| Atributos | Descripción |
|---|---|
design
|
Es la información específica de la división geográfica y la procedencia que se usó durante la fase de diseño |
analysis_start_date |
Es la fecha de inicio del análisis. |
analysis_end_date
|
Es la fecha de finalización del análisis, que puede incluir un período de inactividad. |
pretest_end_date
|
Es la fecha de finalización del período previo a la prueba. Si no se proporciona, el período previo a la prueba incluirá todas las fechas anteriores a analysis_start_date. |
excluded_dates
|
Son las fechas específicas que se excluirán del análisis, como los días con valores atípicos. |
alpha
|
Es el nivel de significancia. Si se omite, se infiere de la configuración de diseño. |
test_type
|
Es el tipo de prueba estadística que se realizará. Si no se proporciona, se inferirá de la configuración de diseño. |
Parámetros de análisis avanzados
| Atributos | Descripción |
|---|---|
n_placebo_candidates
|
Es la cantidad de candidatos placebo iniciales que se generaron antes de la selección. El valor predeterminado es 100,000. |
n_top_placebos
|
Es la cantidad de candidatos placebo válidos principales que se usaron para el análisis. El valor predeterminado es 500. |
min_placebo_r2
|
Es la puntuación mínima de R cuadrado fuera de la muestra que se requiere para que un diseño de placebo se conserve para el análisis. El valor predeterminado es 0.6 |
min_placebo_count_warning
|
Es la cantidad de candidatos de placebo válidos por debajo de la cual se registrará una advertencia. El valor predeterminado es 100. |
min_placebo_count_error
|
Es la cantidad de candidatos de placebo válidos por debajo de la cual se generará un error. El valor predeterminado es 10. |
AnalysisResult
Contiene el resultado estadístico agregado de un experimento de GeoX en todas las celdas.
@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
| Atributos | Descripción |
|---|---|
results
|
Es un diccionario que asigna cada celda de tratamiento a su objeto AnalysisMetrics correspondiente. |
analysis_config
|
Es la configuración que se usa para el análisis. |
excluded_geos
|
Son las ubicaciones geográficas excluidas del análisis. Incluye todas las ubicaciones geográficas excluidas durante la fase de diseño. |
excluded_dates
|
Son las fechas excluidas del análisis. Incluye las fechas excluidas de la configuración del análisis de forma manual por el usuario y las fechas de los valores atípicos de la fase de análisis (si se configuraron para quitarse automáticamente). |
quality_check_result
|
Es el resultado de las verificaciones de calidad de los datos realizadas en los datos de entrada. |
AnalysisMetrics
Contiene métricas para un análisis de una sola celda.
@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
| Atributos | Descripción |
|---|---|
lift
|
Es la estimación puntual y los intervalos de confianza de las conversiones incrementales absolutas. |
percent_lift
|
Es el porcentaje estimado de efectividad con intervalos de confianza. |
cumulative_lift
|
Es la serie temporal de las estimaciones de efectividad de las conversiones incrementales durante el período de análisis. |
counterfactual_conversions
|
Es la serie temporal de conversiones contrafácticas. Incluye la fecha, los valores observados, los contrafácticos y los intervalos de confianza (solo para el período de prueba). |
pointwise_difference
|
Es la diferencia puntual entre las conversiones observadas y las contrafácticas. Incluye la fecha, la diferencia y los intervalos de confianza (solo el período de prueba). |
icpd
|
Son las conversiones incrementales por dólar. Equivale al ROAS incremental si se usan datos de ingresos. Se completa si hay datos de inversión disponibles. |
cumulative_icpd
|
Es la serie temporal de las estimaciones de conversiones incrementales por dólar (iCPD) durante el período de análisis. Solo se completa si hay datos de inversión disponibles. |
descriptive_metrics
|
Son las métricas descriptivas para un análisis de una sola celda. Se usan para la integración de Meridian. |
Estimación
Una estimación con su intervalo de confianza.
@dataclasses.dataclass
class Estimate:
point_estimate: float
lower_bound: float
upper_bound: float
standard_deviation: float
p_value: float
| Atributos | Descripción |
|---|---|
point_estimate |
Es el valor estimado principal. |
lower_bound |
Es el límite inferior del intervalo de confianza. |
upper_bound |
Es el límite superior del intervalo de confianza. |
standard_deviation |
Es la desviación estándar de la estimación. |
p_value |
Es el nivel de significancia asociado con la estimación. |
DescriptiveMetrics
Son las métricas descriptivas para un análisis de una sola celda.
@dataclasses.dataclass
class DescriptiveMetrics:
estimated_bau_spend: Optional[float] = None
| Atributo | Descripción |
|---|---|
estimated_bau_spend
|
Representa la inversión estimada en condiciones normales para las ubicaciones geográficas incluidas en el análisis de esta celda (las ubicaciones geográficas de tratamiento de la celda específica más las ubicaciones geográficas de control). No incluye la inversión de otras celdas de tratamiento ni de ubicaciones geográficas no experimentales y, por lo tanto, no representa la inversión nacional total del anunciante. |
analyze()
Ejecuta el análisis de efectividad.
def analyze(
data: pd.DataFrame,
analysis_config: AnalysisConfig,
data_quality_check_config: QualityCheckConfig = QualityCheckConfig()
)-> AnalysisResult
| Parámetros | Descripción |
|---|---|
data
|
Es una serie temporal completa que contiene datos previos a la prueba y de la prueba para todas las ubicaciones geográficas. |
analysis_config
|
Es la configuración que define la metodología y los períodos. |
data_quality_check_config
|
Es una opción para configurar verificaciones automáticas de la calidad de los datos. De forma predeterminada, se quitan automáticamente las fechas atípicas. |
Devuelve: Un objeto AnalysisResult que contiene métricas para cada celda de tratamiento.
plot_analysis()
Genera una visualización del análisis del experimento.
def plot_analysis(
analysis_result: AnalysisResult
)
| Parámetros | Descripción |
|---|---|
analysis_result
|
Es el resultado estadístico de la función analyze(). |
Descripción: Produce gráficos de series temporales para el impacto contrafáctico, la diferencia puntual y la efectividad y el iCPD acumulados para visualizar el impacto incremental estimado de cada celda de tratamiento.
Módulo de calidad de los datos
QualityCheckConfig
@dataclasses.dataclass
class QualityCheckConfig:
exclude_geos_no_response: bool = True
exclude_outlier_dates: bool = True
| Atributos | Descripción |
|---|---|
exclude_geos_no_response
|
Determina si se deben excluir automáticamente las ubicaciones geográficas sin respuesta durante la fase de diseño.
El valor predeterminado es True. |
exclude_outlier_dates
|
Determina si se deben excluir automáticamente las fechas con valores atípicos durante las fases de diseño o análisis. El valor predeterminado es True. |
QualityCheckResult
@dataclasses.dataclass
class QualityCheckResult:
quality_check_config: QualityCheckConfig
quality_metrics: pd.DataFrame
outlier_geos: Set[str]
outlier_dates: Set[pd.Timestamp]
| Atributos | Descripción |
|---|---|
quality_check_config
|
Son los parámetros de configuración que se usan para la verificación de calidad. |
quality_metrics
|
Un DataFrame que contiene métricas detalladas que resultan de la verificación de calidad |
outlier_geos
|
Es el conjunto de áreas geográficas atípicas identificadas sin respuesta. |
outlier_dates
|
Es el conjunto de fechas de valores atípicos identificados que se detectaron durante la verificación de calidad. |
check_design_data_quality()
def check_design_data_quality(
data: pd.DataFrame,
design_config: DesignConfig,
quality_check_config: QualityCheckConfig
) -> QualityCheckResult
Descripción: Verifica la calidad de los datos de entrada para la fase de diseño. Esta verificación se integra directamente en el método run_design(), lo que significa que las verificaciones de calidad de los datos se realizan automáticamente cuando se generan los diseños.
Devuelve: Un objeto QualityCheckResult.
check_analysis_data_quality()
def check_analysis_data_quality(
data: pd.DataFrame,
analysis_config: AnalysisConfig,
quality_check_config: QualityCheckConfig
) -> QualityCheckResult
Descripción: Verifica la calidad de los datos de entrada para la fase de análisis.
Esta verificación se integra directamente en el método analyze(), lo que significa que las verificaciones de calidad de los datos se realizan automáticamente durante el análisis.
Devuelve: Un objeto QualityCheckResult.
Ver el código fuente en GitHub