Introdução à Integração no Meridian
No domínio da análise de atribuição de mídia, o uso de um único modelo de Marketing Mix (MMM) muitas vezes não consegue capturar adequadamente a complexidade das interações de mercado. O Meridian, um framework MMM open-source, permite a integração de múltiplos modelos para melhorar a robustez e a precisão das previsões. Este artigo compara dois métodos de integração fundamentais — Votação e Empilhamento — e explora suas implementações e desempenho dentro do ecossistema Meridian.
Fundamentos dos Métodos de Entegração
Método de Votação por Média Ponderada
A votação por média ponderada é uma técnica que combina as previsões de múltiplos modelos independentes, atribuindo um peso a cada um. É particularmente útil quando se deseja estabilizar as previsões sem introduzir complexidade adicional. A implementação no Meridian envolve a extração das distribuições preditivas posteriores de cada modelo treinado.
# Exemplo de implementação de um agregador de votos
def agregador_votos(modelos_treinados, pesos=None):
# Extrai as previsões preditivas posteriores
previsoes_posteriores = []
for mdl in modelos_treinados:
distribuicao_pred = mdl.resultados_inferencia.posterior_predictive
previsoes_posteriores.append(distribuicao_pred)
# Define pesos uniformes se não fornecidos
if pesos is None:
pesos = np.ones(len(modelos_treinados)) / len(modelos_treinados)
# Calcula a média ponderada
previsao_final = np.zeros_like(previsoes_posteriores[0])
for peso, pred in zip(pesos, previsoes_posteriores):
previsao_final += peso * pred
return previsao_final
Este método alavanca a geração de amostras MCMC via a classe AmostradorPosterior para obter as previsões de cada modelo base.
Método de Empilhamento com Meta-modelo
O empilhamento (stacking) emprega uma abordagem de dois estágios, onde as previsões dos modelos base servem como novas features para um meta-modelo. Este meta-modelo aprende a melhor forma de combinar as previsões, capturando relações complexas entre os modelos. É ideal para conjuntos de dados com fortes efeitos interativos entre canais.
# Exemplo de implementação de um integrador por empilhamento
def empilhamento_por_meta_modelo(modelos_base, meta_learner, dados_entrada, alvos_reais):
# Gera a matriz de features do meta-modelo
features_meta = []
for mdl in modelos_base:
predicao = mdl.predict(dados_entrada)
features_meta.append(predicao)
matriz_meta = np.column_stack(features_meta)
# Treina o meta-modelo nos dados de validação
meta_learner.fit(matriz_meta, alvos_reais)
return meta_learner
Ferramentas como o módulo InterpolacaoSplines do Meridian podem ser utilizadas para construir o meta-modelo, permitindo modelagem não-linear.
Comparação dos Fluxos de Implementação
Pré-processamento e Engenharia de Features
A escolha do método de integração impacta diretamente a etapa de preparação dos dados. A tabela a seguir resume as principais diferenças.
| Aspecto | Método de Votação | Método de Empilhamento |
|---|---|---|
| Dados de Entrada para Integração | Dados brutos de mídia e covariáveis | Previsões geradas pelos modelos base |
| Transformação Comum | Padronização usando transformadores |
Criação de features de resíduo |
| Divisão de Dados | Amostragem estratificada por segmento de campanha | Validação cruzada temporal |
Suporte a Computação Paralela
O framework Meridian otimiza o treinamento de múltiplos modelos através do parâmetro iteracoes_paralelas no amostrador posterior. O método de votação se beneficia diretamente deste recurso para treinar todos os modelos base simultaneamente.
# Treinamento paralelo de múltiplos modelos base
from joblib import Parallel, delayed
def treinar_modelo_individuo(dados, especificacao):
modelo = Meridian(dados, especificacao)
modelo.amostrar_posterior(cadeias=2, amostras_mantidas=1000)
return modelo
# Executa o treinamento em paralelo
especificacoes_modelos = [criar_spec_variada(i) for i in range(5)]
modelos_treinados = Parallel(n_jobs=5)(
delayed(treinar_modelo_individuo)(dados_processados, spec)
for spec in especificacoes_modelos
)
Avaliação de Desempenho e Análise
Comparativo de Métricas de Erro
Utilizando um conjunto de dados demonstrativo de e-commerce, os métodos foram avaliados. A tabela abaixo apresenta os resultados.
| Métrica | Integração por Votação | Integração por Empilhamento | Modelo Único (Referência) |
|---|---|---|---|
| Erro Médio Absoluto (MAE) | 4.2% | 3.8% | 5.7% |
| Raiz do Erro Quadrático Médio (RMSE) | 6.3% | 5.9% | 7.8% |
| Custo Computacional Relativo | Baixo | Alto | Médio |
Diretrizes para Seleção e Otimização
Fluxo de Decisão
A escolha entre votação e empilhamento deve seguir um processo estrutuardo. Considere primeiro a natureza do seu problema de mídia. Se a prioridade for rapidez de iteração e interpretabilidade, e se os canais de mídia operam de forma relativamente independente, a votação é uma escolha robusta. Para cenários onde as interações entre canais são complexas e o tempo de processamento não é um gargalo crítico, o empilhamento pode oferecer ganhos de precisão superiores.
Sugestões de Otimização de Hipreparâmetros
- Para Votação: Ajuste o parâmetro
dist_efeitos_midiano arquivo de especificação do modelo (especificacao.json) para controlar a diversidade entre os modelos base. - Para Empilhamento: Valide o número de nós na interpolação por splines utilizando testes unitários presentes em
teste_splines.py. - Em ambos: Empregue o módulo
otimizador_orcamentopara validar se a integração de modelos melhora a alocação de recursos de mídia.