Ver código-fonte no GitHub
|
Módulo de projeto
O módulo de projeto especifica os parâmetros do experimento e gera divisões geográficas otimizadas (tratamento x controle) com base em dados históricos. As classes de dados que definem os parâmetros de entrada e saída e as funções principais para gerar, comparar e visualizar projetos estão listadas nas seções a seguir.
DesignConfig
Uma classe de configuração que define os parâmetros principais de um experimento do 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 | Descrição |
|---|---|
experiment_duration
|
Duração do experimento, especificada como um datetime.timedelta. Unidades aceitas: weeks e days. |
experiment_types
|
Define a natureza do teste, como retenção parcial, retirada de anúncios ou investimento em regiões específicas. Para experimentos com várias células, é possível atribuir tipos diferentes por célula usando um dicionário. Caso contrário, um único tipo fornecido será aplicado a todas elas. |
methodology
|
O método escolhido para a seleção de projeto, por exemplo, TBR. |
geo_assignment_rule
|
Regra usada para atribuir áreas geográficas a diferentes grupos, como RANDOM ou STRATIFIED_SAMPLING. |
cell_count
|
Número total de células de tratamento. Use cell_count > 1 para cenários com vários tratamentos que compartilham um controle comum. |
alpha
|
Nível de significância do teste. O padrão é 0,1 (90% de confiança). |
power
|
Eficiência estatística desejada (probabilidade de detectar um efeito verdadeiro). O padrão é 0,8. |
test_type
|
O tipo de teste estatístico a ser realizado, por exemplo, ONE_SIDED ou TWO_SIDED. O padrão é TWO_SIDED. |
design_output_count
|
Número de projetos recomendados classificados a serem retornados. O padrão é 10. |
cost_per_incremental_conversion
|
Equivalente a 1 / iROAS desejado se os dados de receita forem usados. Usado para estimar os requisitos de orçamento para experimentos de retenção parcial (célula). Opcional (e ignorado) para experimentos de retirada de anúncio e aumento de investimento em regiões específicas (célula). Para experimentos com várias células, é possível atribuir valores diferentes por célula de retenção usando um dicionário. Se um único ponto flutuante for fornecido para um design de várias células, ele será aplicado a todas as células de retenção. O padrão é 1,0. |
Parâmetros avançados de pesquisa no projeto
| Atributos | Descrição |
|---|---|
n_candidates
|
Número de candidatos para a etapa de pontuação rápida. O padrão é 100.000. |
n_ranked_candidates
|
Número de candidatos com pontuação completa. O padrão é 100. |
max_candidate_generation_retries
|
Número máximo de novas tentativas de geração de candidatos. O padrão é 10. |
seed
|
Semente do gerador de números aleatórios. O padrão é 42. |
slope_tolerance
|
Diferença simétrica máxima permitida para verificação de inclinação. O padrão é 0,2. |
min_r2
|
R2 mínimo permitido para o projeto. O padrão é 0,8. |
num_strata
|
Número de estratos para amostragem estratificada. O padrão é 4. |
k_means_iterations
|
Número de iterações para o clustering k-means. O padrão é 10. |
Orçamento
Restrição de orçamento para uma única célula.
@dataclasses.dataclass
class Budget:
budget: Optional[float] = None
budget_pct: Optional[float] = None
| Atributos | Descrição |
|---|---|
budget
|
O orçamento máximo para o projeto do experimento (por célula), especificado como um valor total. Deve ser especificado para células de retenção. |
budget_pct
|
A mudança percentual máxima do orçamento para o projeto do experimento (por célula). Deve ser especificado para células de retirada de anúncios e investimento em regiões específicas. Precisa ser negativo para retirada de anúncios e positivo para investimento em regiões específicas. |
Restrições
Define restrições operacionais opcionais para o algoritmo de projeto.
@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 | Descrição |
|---|---|
included_control_geos
|
Áreas geográficas específicas que precisam ser incluídas no grupo de controle. |
excluded_geos
|
Áreas geográficas específicas a serem excluídas do projeto do experimento. |
excluded_dates
|
Datas específicas que serão deixadas de fora do projeto do experimento. |
budget_constraint
|
A restrição de orçamento para o projeto do experimento (por célula). Pode ser um valor total de orçamento ou uma mudança percentual no orçamento. Para experimentos com várias células, é possível atribuir valores diferentes por célula usando um dicionário. Caso contrário, o valor único fornecido será aplicado a todas as células. Se a mudança percentual no orçamento não for especificada para uma célula de desativação, o valor padrão será -100%. Para a célula de aumento, o valor padrão é 100%. |
max_conversions_percent
|
O volume máximo de conversão permitido para o grupo experimental. Para designs com várias células, essa porcentagem se refere ao total de todas as células de tratamento. O padrão é 0,3. |
DesignSet
Uma coleção de projetos de experimentos gerados e suas métricas comparativas.
@dataclasses.dataclass
class DesignSet:
designs: dict[str, Design]
design_metrics: pd.DataFrame
| Atributos | Descrição |
|---|---|
designs
|
Um dicionário que mapeia IDs de projeto para objetos Design individuais. |
design_metrics
|
Um DataFrame que contém projetos classificados e as métricas associadas, como MDE e orçamento. |
Colunas DataFrame das métricas do projeto
| Coluna | Descrição |
|---|---|
design_id |
Identificador exclusivo do projeto. |
cell |
O ID da célula de tratamento. |
design_methodology |
A metodologia usada para o projeto. |
r2
|
R2 fora da amostra, calculado ao testar a acurácia preditiva do modelo em dados históricos não usados durante a fase de treinamento inicial. |
mde
|
O efeito mínimo detectável (MDE, na sigla em inglês) representa o menor aumento no KPI principal que o experimento pode detectar com significância estatística. Um MDE menor indica um projeto mais sensível. |
mde_abs
|
O número mínimo de conversões incrementais necessárias.
Ele é calculado como mde * treatment_conversion_volume. |
p_value (AA)
|
O resultado de uma verificação de robustez em que o modelo é aplicado a um período sem tratamento conhecido. Um valor-p maior que o nível de significância (normalmente 0,1) indica que o projeto passa no teste A/A e não é propenso a falsos positivos. |
budget
|
As mudanças necessárias no gasto total projetado com marketing. Em estudos de retirada de anúncios ou investimento em regiões específicas, calculamos com base nos dados de gasto e na mudança percentual do orçamento inserida pelo usuário. Em estudos de retenção, usamos o CpIC para estimar o orçamento necessário. |
design_implied_cpic
|
O custo por conversão incremental (CpIC) implícito no projeto, calculado como o orçamento dividido pelo número mínimo de conversões incrementais necessárias. |
treatment_conversions_pct |
Porcentagem de conversão do grupo experimental. |
treatment_geo_count |
Número de regiões geográficas no grupo experimental. |
Projeto
Representa um único projeto de experimento, incluindo as atribuições geográficas e a configuração usada.
@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 | Descrição |
|---|---|
designs
|
Um dicionário que mapeia os IDs das células de tratamento para os respectivos resultados de PerCellDesign. |
control_geos
|
O conjunto de áreas geográficas atribuídas ao grupo de controle. |
excluded_geos
|
O conjunto de áreas geográficas que foram excluídas do experimento. Inclui regiões geográficas excluídas manualmente pelo usuário e regiões geográficas com outliers detectadas por verificações de qualidade de dados (se configuradas para serem removidas automaticamente). |
excluded_dates
|
Datas excluídas do projeto. Inclui datas excluídas manualmente pelo usuário e datas de outliers detectadas por verificações de qualidade de dados (se configuradas para serem removidas automaticamente). |
design_config
|
O objeto DesignConfig usado para criar esse projeto específico. |
constraints
|
O objeto Constraints aplicado durante a pesquisa do projeto. |
quality_check_result
|
Resultado das verificações de qualidade realizadas nos dados de entrada. |
geo_stratum_labels
|
O rótulo de estrato de cada região geográfica, ordenado pelo nome da região. Ele é usado para análise. |
data
|
Os dados usados para o projeto. São usados para análise. |
| Método | Descrição |
|---|---|
export_to_json |
Exporta o objeto de projeto para um arquivo JSON. |
load_from_json |
Carrega um objeto de projeto de um arquivo JSON. |
PerCellDesign
Contém as atribuições específicas e as métricas estatísticas de uma única célula de tratamento em um projeto.
@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 | Descrição |
|---|---|
treatment_geos
|
O conjunto de áreas geográficas atribuídas ao grupo experimental para essa célula. |
minimum_detectable_effect
|
O menor tamanho do efeito que pode ser detectado pelo projeto. |
design_implied_cpic
|
O custo por conversão incremental (CpIC) implícito no projeto, calculado como o orçamento dividido pelo número mínimo de conversões incrementais necessárias. |
p_value
|
O nível de significância de um teste A/A que verifica se os grupos de tratamento e de controle estão equilibrados antes do início do experimento. |
budget
|
O custo estimado para essa célula de tratamento com base nos parâmetros do experimento. |
counterfactual_conversions
|
Série temporal de conversão contrafactual. Inclui conversões observadas, contrafactuais e por data. É usada para a visualização de dados. |
run_design()
A função principal para gerar e classificar possíveis projetos de experimentos.
def run_design(
data: pd.DataFrame,
design_config: DesignConfig,
constraints: Constraints,
data_quality_check_config: QualityCheckConfig = QualityCheckConfig()
)-> DesignSet
| Parâmetros | Descrição |
|---|---|
data
|
Série temporal histórica de pré-teste que contém date, location, conversions e (opcional) spend. |
design_config |
Parâmetros para o projeto do experimento. |
constraints
|
Restrições operacionais para o projeto do experimento. |
data_quality_check_config
|
Uma opção para configurar verificações automáticas de qualidade de dados. O padrão é remover automaticamente as regiões geográficas sem resposta e as datas de outliers. |
Retorna: um objeto DesignSet que contém uma lista de objetos Design classificados e métricas associadas, como MDE e orçamento.
compare_designs()
Compara vários projetos de experimentos em diferentes metodologias, regras de atribuição ou configurações.
def compare_designs(
data: pd.DataFrame,
design_requirements: list[tuple[DesignConfig, Constraints]],
design_output_count: int = 10,
) -> DesignSet
| Parâmetros | Descrição |
|---|---|
data |
Série temporal histórica de pré-teste. |
design_requirements
|
Uma lista de tuplas, cada uma contendo um objeto DesignConfig e um objeto Constraints. |
design_output_count |
O número de projetos que serão retornados. O padrão é 10. |
Retorna: um DesignSet unificado que contém os projetos classificados de todas as configurações fornecidas.
concat_design_reports()
Concatena vários objetos DesignSet em um só DesignSet.
def concat_design_reports(
design_sets: list[DesignSet], design_output_count: int = 10
) -> DesignSet
| Parâmetros | Descrição |
|---|---|
design_sets
|
Uma lista de objetos DesignSet a serem mesclados. |
design_output_count
|
O número de projetos principais a serem retornados no conjunto mesclado. O padrão é 10. |
Retorna: um único objeto DesignSet que contém todos os projetos, reclassificados com base nas métricas.
plot_design()
Gera uma representação visual de um projeto específico.
def plot_design(
design_to_plot: Design
)
| Parâmetros | Descrição |
|---|---|
design_to_plot |
O objeto Design específico a ser visualizado. |
Descrição: mostra a série temporal de conversões, comparando o grupo experimental com o contrafactual para visualizar a eficácia da divisão geográfica.
Módulo de análise
O módulo de análise calcula o impacto incremental de um experimento concluído usando modelagem contrafactual e inferência robusta. As classes de dados que definem os parâmetros de entrada e saída e as funções principais para gerar e visualizar relatórios de experimentos estão listadas nas seções a seguir.
AnalysisConfig
Parâmetros necessários para executar uma análise de lift em um estudo GeoX que está concluído.
@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 | Descrição |
|---|---|
design
|
As informações específicas de divisão geográfica e procedência usadas durante a fase de projeto. |
analysis_start_date |
Data de início da análise. |
analysis_end_date
|
Data de término da análise, que pode incluir um período de espera. |
pretest_end_date
|
A data de término do período de pré-teste. Se não for informada, o período de pré-teste abrangerá todas as datas anteriores a analysis_start_date. |
excluded_dates
|
Datas específicas a serem excluídas da análise, como dias de outliers. |
alpha
|
Nível de significância. Se omitido, ele será inferido da configuração do projeto. |
test_type
|
O tipo de teste estatístico a ser realizado. Se não for fornecido, ele será inferido da configuração do projeto. |
Parâmetros avançados de análise
| Atributos | Descrição |
|---|---|
n_placebo_candidates
|
Número de candidatos a placebo iniciais gerados antes da seleção. O padrão é 100.000. |
n_top_placebos
|
Número de candidatos a placebo principais e válidos usados para análise. O padrão é 500. |
min_placebo_r2
|
Pontuação mínima de R ao quadrado fora da amostra necessária para que um projeto de placebo seja mantido para análise. O padrão é 0,6. |
min_placebo_count_warning
|
Número de candidatos a placebo válidos que, em caso de valor abaixo, vai gerar um aviso. O padrão é 100. |
min_placebo_count_error
|
Número de candidatos a placebo válidos que, em caso de valor abaixo, vai gerar um erro. O padrão é 10. |
AnalysisResult
Contém a saída estatística agregada de um experimento GeoX correspondente a todas as células.
@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 | Descrição |
|---|---|
results
|
Um dicionário que mapeia cada célula de tratamento ao seu objeto AnalysisMetrics correspondente. |
analysis_config
|
A configuração usada para a análise. |
excluded_geos
|
Regiões excluídas da análise. Inclui todas as regiões excluídas durante a fase de projeto. |
excluded_dates
|
Datas excluídas da análise. Inclui datas que o usuário excluiu manualmente da configuração de análise e datas de outliers e da fase de análise (se configuradas para serem removidas automaticamente). |
quality_check_result
|
Resultado das verificações de qualidade de dados realizadas nos dados de entrada. |
AnalysisMetrics
Contém métricas para a análise de célula única.
@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 | Descrição |
|---|---|
lift
|
A estimativa pontual e os intervalos de confiança para conversões incrementais absolutas. |
percent_lift
|
O aumento percentual estimado com intervalos de confiança. |
cumulative_lift
|
A série temporal de estimativa do aumento de conversão incremental ocorrido durante o período de análise. |
counterfactual_conversions
|
Série temporal de conversão contrafactual. Inclui data, dados observados, dados contrafactuais e intervalos de confiança (somente período de teste). |
pointwise_difference
|
Diferença pontual entre as conversões observadas e contrafactuais. Inclui data, diferença e intervalos de confiança (somente período de teste). |
icpd
|
Conversão incremental por dólar. Equivalente ao iROAS se forem usados os dados de receita. Preenchido se os dados de gastos estiverem disponíveis. |
cumulative_icpd
|
A série temporal de estimativa de conversão incremental por dólar (iCPD, na sigla em inglês) durante o período de análise. Preenchido apenas se os dados de gastos estiverem disponíveis. |
descriptive_metrics
|
Métricas descritivas para uma análise de célula única. Atributo usado para a integração do Meridian. |
Estimativa
Uma estimativa com o intervalo de confiança.
@dataclasses.dataclass
class Estimate:
point_estimate: float
lower_bound: float
upper_bound: float
standard_deviation: float
p_value: float
| Atributos | Descrição |
|---|---|
point_estimate |
O valor estimado principal. |
lower_bound |
O limite mínimo do intervalo de confiança. |
upper_bound |
O limite máximo do intervalo de confiança. |
standard_deviation |
O desvio padrão da estimativa. |
p_value |
O nível de significância associado à estimativa. |
DescriptiveMetrics
Métricas descritivas para uma análise de célula única.
@dataclasses.dataclass
class DescriptiveMetrics:
estimated_bau_spend: Optional[float] = None
| Atributo | Descrição |
|---|---|
estimated_bau_spend
|
Representa o gasto estimado de BAU para as regiões incluídas na análise desta célula (as regiões de tratamento e de controle específicas da célula). Não inclui gastos de outras células de tratamento nem de regiões não experimentais e, portanto, não representa o gasto nacional total do anunciante. |
analyze()
Executa a análise de lift.
def analyze(
data: pd.DataFrame,
analysis_config: AnalysisConfig,
data_quality_check_config: QualityCheckConfig = QualityCheckConfig()
)-> AnalysisResult
| Parâmetros | Descrição |
|---|---|
data
|
Série temporal completa com dados de pré-teste e de teste para todas as regiões. |
analysis_config
|
Configuração que define a metodologia e os períodos. |
data_quality_check_config
|
Uma opção para configurar verificações automáticas de qualidade de dados. O padrão é remover automaticamente as datas de outliers. |
Retorna: um objeto AnalysisResult com métricas para cada célula de tratamento.
plot_analysis()
Gera uma visualização da análise do experimento.
def plot_analysis(
analysis_result: AnalysisResult
)
| Parâmetros | Descrição |
|---|---|
analysis_result
|
A saída estatística da função analyze(). |
Descrição: produz gráficos de série temporal relativos à diferença pontual, contrafactual, aumento cumulativo e iCPD cumulativo para visualizar o impacto incremental estimado de cada célula de tratamento.
Módulo de qualidade de dados
QualityCheckConfig
@dataclasses.dataclass
class QualityCheckConfig:
exclude_geos_no_response: bool = True
exclude_outlier_dates: bool = True
| Atributos | Descrição |
|---|---|
exclude_geos_no_response
|
Determina se as regiões sem resposta durante a fase de projeto serão excluídas automaticamente.
O padrão é True. |
exclude_outlier_dates
|
Determina se as datas de outliers devem ser excluídas automaticamente durante as fases de projeto ou análise. O padrão é True. |
QualityCheckResult
@dataclasses.dataclass
class QualityCheckResult:
quality_check_config: QualityCheckConfig
quality_metrics: pd.DataFrame
outlier_geos: Set[str]
outlier_dates: Set[pd.Timestamp]
| Atributos | Descrição |
|---|---|
quality_check_config
|
As definições de configuração usadas para a verificação de qualidade. |
quality_metrics
|
Um DataFrame que contém métricas detalhadas resultantes da verificação de qualidade. |
outlier_geos
|
O conjunto de áreas geográficas de outliers identificadas sem resposta. |
outlier_dates
|
O conjunto de datas de outliers identificadas durante a verificação de qualidade. |
check_design_data_quality()
def check_design_data_quality(
data: pd.DataFrame,
design_config: DesignConfig,
quality_check_config: QualityCheckConfig
) -> QualityCheckResult
Descrição: verifica a qualidade dos dados de entrada para a fase de projeto. Essa verificação é integrada diretamente ao método run_design(), o que significa que as verificações de qualidade de dados são realizadas automaticamente ao gerar projetos.
Retorna: um objeto QualityCheckResult.
check_analysis_data_quality()
def check_analysis_data_quality(
data: pd.DataFrame,
analysis_config: AnalysisConfig,
quality_check_config: QualityCheckConfig
) -> QualityCheckResult
Descrição: verifica a qualidade dos dados de entrada para a fase de análise.
Essa verificação é integrada diretamente ao método analyze(), o que significa que as verificações de qualidade de dados são realizadas automaticamente durante a análise.
Retorna: um objeto QualityCheckResult.
Ver código-fonte no GitHub