Depois da criação do modelo, você precisa avaliar a convergência, depurar, se necessário, e avaliar o ajuste dele.
Avaliar a convergência
A avaliação ajuda a garantir a integridade do modelo.
O comando plot_rhat_boxplot
em visualizer.ModelDiagnostics()
resume e calcula a redução de escala potencial de Gelman & Rubin (1992) para a convergência de cadeia, comumente chamada de R-hat.
Esse diagnóstico de convergência mede o grau em que a variância (das médias) entre as cadeias excede o valor esperado caso as cadeias fossem distribuídas de maneira idêntica.
Há um único valor de R-hat para cada parâmetro do modelo. O boxplot resume a distribuição desses valores nos índices. Por exemplo, a caixa correspondente ao rótulo do eixo x beta_gm
resume a distribuição dos valores de R-hat no índice geográfico g
e no índice de canal m
.
Valores próximos de 1,0 indicam convergência. R-hat < 1,2 indica a convergência aproximada e é um limite razoável para muitos problemas (Brooks & Gelman, 1998).
Geralmente, a falta de convergência ocorre por um destes motivos: o modelo está mal especificado para os dados, o que pode estar na probabilidade (especificação) ou na priori, ou não há burn-in suficiente, ou seja, n_adapt + n_burnin
não é grande o suficiente.
Se você tiver dificuldade, consulte Conseguir a convergência de MCMC.
Gerar um boxplot de R-hat
Execute os comandos:
model_diagnostics = visualizer.ModelDiagnostics(meridian)
model_diagnostics.plot_rhat_boxplot()
Exemplo de saída:
Gerar gráficos das trajetórias e de densidade
Crie gráficos das trajetórias e de densidade para amostras de Monte Carlo via cadeias de Markov (MCMC) para avaliar a convergência e a estabilidade nas cadeias. No gráfico das trajetórias, cada traço representa a sequência de valores gerados pelo algoritmo MCMC à medida que ele explora o espaço de parâmetros. Ele mostra como o algoritmo passa por diferentes valores de parâmetros em iterações sucessivas. Nesses gráficos, evite áreas planas, em que a cadeia permanece no mesmo estado por muito tempo ou tem muitas etapas consecutivas em uma direção.
Os gráficos de densidade à esquerda mostram a distribuição de densidade dos valores da amostra para um ou mais parâmetros obtidos pelo algoritmo MCMC. É neles que você vai saber se as cadeias convergiram para uma distribuição de densidade estável.
Este exemplo mostra como gerar gráficos das trajetórias e de densidade:
parameters_to_plot=["roi_m"]
for params in parameters_to_plot:
az.plot_trace(
meridian.inference_data,
var_names=params,
compact=False,
backend_kwargs={"constrained_layout": True},
)
Exemplo de saída:
Verificar as distribuições a priori e a posteriori
Quando há poucas informações nos dados, as duas distribuições são parecidas. Para mais informações, consulte Quando as distribuições a priori e a posteriori são iguais.
Canais com poucos gastos são mais suscetíveis a ter as distribuições a priori e a posteriori de ROI parecidas. Para corrigir o problema, recomendamos excluir os canais com gastos muito baixos ou combiná-los com outros canais ao preparar os dados para a MMM.
Execute os comandos a seguir para representar a distribuição a posteriori e a priori de ROI para cada canal de mídia:
model_diagnostics = visualizer.ModelDiagnostics(meridian)
model_diagnostics.plot_prior_and_posterior_distribution()
Exemplo de saída: (clique na imagem para ampliar).
Por padrão, plot_prior_and_posterior_distribution()
gera as distribuições a posteriori e a priori de ROI. No entanto, é possível transmitir parâmetros específicos do modelo para plot_prior_and_posterior_distribution()
, como mostrado neste exemplo:
model_diagnostics.plot_prior_and_posterior_distribution('beta_m')
Avaliar o ajuste do modelo
Depois de otimizar a convergência, avalie o ajuste do modelo. Para mais informações, consulte Avaliar o ajuste do modelo em Pós-modelagem.
Com a Modelagem de Marketing Mix (MMM), você precisa usar medidas indiretas para avaliar a inferência causal e procurar resultados que façam sentido. Sugestões:
- Executar métricas para R ao quadrado, erro percentual absoluto médio (MAPE) e erro percentual absoluto médio ponderado (WMAPE).
- Gerar gráficos para a receita ou o KPI esperado x real, dependendo do
kpi_type
e da disponibilidade darevenue_per_kpi
.
Executar métricas R ao quadrado, MAPE e WMAPE
As métricas de qualidade do ajuste podem ser usadas como uma verificação de confiança de que a estrutura do modelo está adequada e não tem muitos parâmetros. ModelDiagnostics
calcula as métricas de qualidade do ajuste R-Squared
, MAPE
e wMAPE
. Se holdout_id
for definido no Meridian, R-squared
, MAPE
e wMAPE
também serão calculados para os subconjuntos Train
e Test
. As métricas de qualidade do ajuste são uma medida de acurácia preditiva, o que normalmente não é a meta de uma MMM,
mas funcionam como uma verificação de confiança útil.
Execute estes comandos para gerar as métricas R-quadrado, MAPE e WMAPE:
model_diagnostics = visualizer.ModelDiagnostics(meridian)
model_diagnostics.predictive_accuracy_table()
Exemplo de saída:
Gerar gráficos de valores esperados x reais
Esses gráficos podem ser úteis como um método indireto para avaliar o ajuste do modelo.
Nacional: gráficos de valores esperados x reais
Represente a receita ou o KPI real ao lado dos valores esperados do modelo no nível nacional para ajudar a avaliar o ajuste do modelo. O valor de referência é a estimativa contrafactual do modelo para receita (ou KPI) se não houvesse execução de mídia. Estimar a receita para que ela seja o mais próximo possível do real não é necessariamente a meta de uma MMM, mas funciona como uma verificação de confiança útil.
Execute estes comandos para representar a receita (ou KPI) real versus os valores esperados para dados nacionais:
model_fit = visualizer.ModelFit(meridian)
model_fit.plot_model_fit()
Exemplo de saída:
Região geográfica: gráficos de valores esperados x reais
Crie esses gráficos no nível da região para avaliar o ajuste do modelo. Se houver muitas regiões, mostre apenas as maiores.
Execute estes comandos para representar a receita (ou KPI) real versus os valores esperados para as regiões geográficas:
model_fit = visualizer.ModelFit(meridian)
model_fit.plot_model_fit(n_top_largest_geos=2,
show_geo_level=True,
include_baseline=False,
include_ci=False)
Exemplo de saída:
Analise os resultados do modelo quando considerar que ele está bem ajustado.