Escolher e configurar tipos de distribuições a priori de tratamento

No Meridian, há vários tipos de variáveis de tratamento, como mídia paga, mídia orgânica ou tratamentos que não são de mídia. Para cada tipo de tratamento, é possível especificar um tipo de distribuição a priori, que é a métrica específica (como ROI, mROI, contribuição ou coeficiente) em que você define sua crença a priori. Você pode escolher a métrica que conhece melhor (por exemplo, de experimentos) ou a que mais importa ao interpretar os resultados do modelo.

O Meridian define uma distribuição a priori padrão, e cada tipo de distribuição é com base em alguma lógica de negócios geral. A distribuição padrão pode ser substituída de acordo com sua experiência em um domínio específico para alinhá-la melhor à sua intuição de negócios. Entender essas opções e o raciocínio por trás delas é fundamental para incorporar a experiência no domínio ao Meridian.

Definições dos tipos de distribuições a priori

Estas são as opções disponíveis no Meridian:

  • ROI (retorno do investimento): a proporção entre o resultado incremental gerado por um canal e o custo do gasto de mídia desse canal (Incremental Outcome / Spend). Geralmente, essa é a métrica mais intuitiva para mídia paga, principalmente ao calibrar com resultados de experimentos.
  • mROI (ROI marginal): o retorno do investimento de uma unidade monetária adicional (por exemplo, um real) gasta em um determinado canal. Ele é útil para a otimização de orçamento, já que os canais com maior mROI são bons candidatos para receber mais orçamento.
  • Contribuição: a proporção do resultado total atribuível a um canal (Incremental Outcome / Total Outcome). Enquanto as distribuições a priori de ROI e mROI só podem ser usadas para mídia paga, as distribuições a priori de contribuição podem ser usadas para canais sem gastos associados, como canais orgânicos ou tratamentos que não são de mídia.
  • Coeficiente: o coeficiente estatístico de um determinado tratamento no modelo de regressão do Meridian. Diferente do ROI, do mROI e da contribuição, que são métricas de negócios, o coeficiente é um parâmetro estatístico mais abstrato e difícil de traduzir em termos de negócios sem o contexto de outros parâmetros e dados do modelo.

A tabela a seguir resume quais tipos de distribuições podem ser usados com cada tipo de tratamento.

Tipo de distribuição a priori Mídia paga Mídia orgânica Tratamentos que não são de mídia
ROI Sim* Não Não
mROI Sim* Não Não
Contribuição Sim Sim Sim
Coeficiente Sim Sim Sim

Exemplos de linguagem de negócios

Para esclarecer melhor esses conceitos, confira como você pode expressar uma distribuição a priori para cada tipo em linguagem simples de negócios:

  • Definir uma distribuição a priori de ROI:

    "Com base no nosso estudo de Lift mais recente, temos certeza de que nossos anúncios de pesquisa geram cerca de R$ 1,50 de receita para cada real gasto. Quero que a distribuição a priori de ROI seja centrada nesse valor".

  • Definir uma distribuição a priori de mROI:

    "Se gastarmos mais um real em anúncios de rede social, esperamos receber cerca de R$ 1,10 no nosso nível de gastos atual. Quero que a distribuição a priori de mROI seja centralizada e bem distribuída em torno desse valor".

  • Definir uma distribuição a priori de contribuição:

    "Acreditamos que nossos anúncios em vídeo digitais são responsáveis por cerca de 5% da nossa receita total. Quero que a distribuição a priori da contribuição seja centrada nesse valor".

  • Definir uma distribuição a priori de coeficiente:

    Isso é menos comum para usuários comerciais. É como dizer: "Acredito que o beta de regressão para essa variável seja 0,02". Normalmente, isso é reservado para cientistas de dados com metas estatísticas específicas, já que a interpretação depende muito do escalonamento dos dados de entrada e da métrica de saída.

Considerações para escolher tipos de distribuições a priori de tratamento

Nesta seção, abordamos a lógica de negócios e de modelagem para escolher diferentes tipos de distribuições a priori em mídia paga, mídia orgânica e tratamentos que não são de mídia.

As distribuições a priori de ROI são o padrão porque geralmente se alinham melhor com o conhecimento prévio, como resultados de experimentos. Essa é geralmente a opção mais intuitiva para definir distribuições a priori razoavelmente bem informadas.

As distribuições a priori de mROI costumam ser uma opção interessante quando muito do conhecimento foi usado para definir orçamentos históricos ou para anunciantes que querem recomendações de orçamento mais conservadoras. Elas funcionam impondo uma distribuição a priori capaz de reduzir a alocação de orçamento ideal para a alocação de orçamento histórica, regularizando as mudanças de orçamento recomendadas. Para isso, é necessário definir uma distribuição a priori de mROI comum em todos os canais e ajustar o desvio padrão. Quanto mais forte for a distribuição a priori (desvio padrão menor), mais próxima a alocação ideal ficará do histórico e menores serão as mudanças de orçamento recomendadas. As restrições de gasto de otimização são outra maneira de limitar as mudanças recomendadas no orçamento, eliminando a necessidade de distribuições a priori de mROI. Para mais detalhes, consulte a subseção Usar distribuições a priori de mROI para regularização de orçamento.

As distribuições a priori de contribuição são muito parecidas com as de ROI para mídia paga. A única diferença é que o denominador da distribuição a priori de ROI é o gasto do canal, enquanto o denominador da distribuição a priori de contribuição é o resultado observado total. Isso significa que qualquer contribuição a priori pode ser convertida em uma distribuição a priori de ROI, e qualquer distribuição a priori de ROI pode ser convertida em uma distribuição a priori de contribuição para mídia paga.

As distribuições a priori de coeficiente são a parametrização mais tradicional para um modelo de regressão linear. No contexto da MMM, a interpretação de um coeficiente é um pouco abstrata, o que dificulta a definição de uma distribuição a priori informada. Um valor de coeficiente específico pode implicar valores de ROI significativamente diferentes para diversos canais de mídia paga. Isso acontece porque o ROI depende da distribuição de execução do canal em regiões geográficas e períodos, das estimativas dos parâmetros de adstock e retornos decrescentes, além do custo por unidade de mídia do canal.

Outras considerações para resultados que não são de receita

Quando o resultado não é de receita (o KPI não está em unidades monetárias e revenue_per_kpi não é fornecido), a disponibilidade e a interpretação das distribuições a priori de mídia paga mudam. Cada parâmetro de PriorDistribution tem uma distribuição padrão. Há duas exceções em que o padrão não é usado, e ambas ocorrem quando o resultado não é de receita.

As distribuições a priori de ROI funcionam de maneira diferente porque não é possível calcular uma proporção monetária. Em vez disso, quando você usa media_prior_type = 'roi', a distribuição a priori padrão é colocada na contribuição total de todos os canais de mídia paga. Isso permite definir uma distribuição a priori na proporção total do KPI não monetário gerado pela mídia paga. Quando as distribuições a priori de ROI são usadas, o padrão é atribuído de acordo com uma metodologia especial de contribuição total de mídia paga.

As distribuições a priori de mROI representam o retorno marginal em termos de unidades de resultado por real (por exemplo, inscrições adicionais por real). Como esse valor depende muito do KPI específico, um padrão universal é impraticável. Por isso, o Meridian não oferece uma distribuição a priori padrão para o mROI em casos não relacionados a receita e exige que você especifique uma distribuição a priori personalizada com base no seu conhecimento do domínio. Nessas situações, é necessário fornecer uma distribuição personalizada. Não há um padrão porque o intervalo razoável de valores varia muito para cada empresa.

As distribuições a priori de contribuição costumam ser uma escolha prática para resultados que não são de receita porque representam a proporção do resultado total atribuível a um canal. Essa definição permanece consistente, seja o resultado de receita ou não.

Considerações sobre mídia orgânica

As distribuições a priori de contribuição são a opção padrão porque são a quantidade mais intuitiva para definir uma distribuição a priori informada. Alguns canais podem ter contribuições maiores do que outros. Por isso, considere personalizar a distribuição a priori de acordo com suas táticas comerciais e de marketing. Uma distribuição Beta geralmente é adequada porque é restrita ao intervalo de zero a um.

As distribuições a priori de coeficiente são a parametrização mais tradicional para um modelo de regressão linear. Assim como na mídia paga, a interpretação de um coeficiente é um pouco abstrata, o que dificulta a definição de uma distribuição a priori informada. Um valor de coeficiente específico pode implicar valores de contribuição significativamente diferentes para diversos canais de mídia orgânica. Isso acontece porque a contribuição depende da distribuição de execução do canal em regiões geográficas e períodos e das estimativas dos parâmetros de adstock e retornos decrescentes do canal.

Considerações sobre tratamentos que não são de mídia

As distribuições a priori de contribuição são a opção padrão porque são a quantidade mais intuitiva para definir uma distribuição a priori informada. É sempre bom configurar a distribuição a priori. Dependendo do valor de referência especificado de cada variável, a contribuição pode ser positiva ou negativa, ou o sinal da contribuição pode ser desconhecido. Por exemplo, pode não ficar claro se definir o preço para um determinado valor de referência teria um impacto positivo ou negativo na receita. Ou talvez você espere que o preço tenha um impacto positivo em um valor de referência, mas um impacto negativo em outro valor de referência.

As distribuições a priori de coeficiente são a parametrização mais tradicional para um modelo de regressão linear. Assim como acontece com a mídia paga e orgânica, a interpretação de um coeficiente é um pouco abstrata, o que dificulta a definição de uma distribuição a priori informada. Um valor de coeficiente específico pode implicar valores de contribuição significativamente diferentes para diversos canais de tratamento que não são de mídia. Isso acontece porque a contribuição depende da distribuição de valores do tratamento em regiões geográficas e períodos e do valor de referência do tratamento.

Fluxograma para escolher tipos de distribuições a priori de tratamento

Este fluxograma detalha as considerações mencionadas acima necessárias ao decidir qual tipo de distribuição a priori de tratamento selecionar.

Fluxograma que detalha as considerações para escolher o tipo de distribuição a priori certo para um determinado tratamento

Configurar tipos de distribuições a priori de tratamento

Nesta seção, abordamos os tipos de distribuições a priori disponíveis para mídia paga, mídia orgânica e tratamentos que não são de mídia, além de diferentes considerações para configurá-los na biblioteca do Meridian. Fornecemos vários snippets de código e exemplos para configurar tipos de distribuições a priori em todos os tipos de tratamento.

Configurar distribuições a priori de mídia paga

O tipo de distribuição a priori da mídia paga é especificado pelos argumentos media_prior_type e rf_prior_type de ModelSpec. A tabela a seguir mostra quais parâmetros de PriorDistribution estão associados a cada tipo de distribuição.

media_prior_type/rf_prior_type Parâmetro em PriorDistribution
'roi' * (padrão) roi_m*, roi_rf*
'mroi'* mroi_m*, mroi_rf*
'contribution' contribution_m, contribution_rf
'coefficient' beta_m, beta_rf

A seção a seguir apresenta exemplos hipotéticos de como configurar essas distribuições a priori para um modelo com dois canais de mídia paga. Os marcadores explicam o raciocínio por trás das configurações de exemplo anteriores no bloco de código a seguir. As distribuições padrão também são fornecidas como ponto de referência para entender o processo de configuração de cada tipo de distribuição a priori.

  • ROI (roi_m): configurado aqui com médias de distribuições lognormais em 1,7 e 2,5 para se alinhar aos estudos de Lift experimental.

    Como referência, a distribuição padrão usa LogNormal(0.2, 0.9), com uma média de 1,22 e uma mediana de 1,83.

import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution
# -----------------------------------------------------------------------------
# Option 1: ROI (Return on Investment)
# -----------------------------------------------------------------------------
# ROI (LogNormal) -> Means at 1.7 and 2.5
prior = prior_distribution.PriorDistribution(
    roi_m=prior_distribution.PriorDistribution.lognormal_dist_from_mean_std(
        mean=[1.7, 2.5], std=[0.3, 0.5]
    )
)
model_spec = spec.ModelSpec(prior=prior, media_prior_type='roi')
  • mROI (mroi_m): configurado com médias de distribuições restritas em 1,0. Uma média comum e um desvio padrão pequeno foram selecionados para os dois canais para ajudar a regularizar a otimização do orçamento. Uma média de 1,0 foi selecionada porque os dois canais estão perto da saturação.

    Como referência, a distribuição padrão usa LogNormal(0.0, 0.5), com uma média de 1,13 e uma mediana de 1.

import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution
# -----------------------------------------------------------------------------
# Option 2: mROI (Marginal Return on Investment)
# -----------------------------------------------------------------------------
# mROI (LogNormal) -> Means at 1.0
prior = prior_distribution.PriorDistribution(
    mroi_m=prior_distribution.PriorDistribution.lognormal_dist_from_mean_std(
        mean=[1.0, 1.0], std=[0.2, 0.2]
    )
)
model_spec = spec.ModelSpec(prior=prior, media_prior_type='mroi')
  • Contribuição (contribution_m): usa distribuições beta para modelar "parcelas de efeito" específicas em 3% e 4%.

    Como referência, a distribuição padrão usa Beta(concentration1=1.0, concentration0=99.0) e tem uma média de 1%.

import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution
# -----------------------------------------------------------------------------
# Option 3: Media Contribution
# -----------------------------------------------------------------------------
# Contribution (Beta) -> Means at 3% and 4%
prior = prior_distribution.PriorDistribution(
    contribution_m=tfp.distributions.Beta(
        concentration1=[3.0, 4.0], concentration0=[97.0, 96.0]
    )
)
model_spec = spec.ModelSpec(prior=prior, media_prior_type='contribution')
  • Coeficiente (beta_m): usa distribuições HalfNormal com escalas mais restritas (1,0 e 1,5) para aplicar a regularização estatística.

    Como referência, a distribuição padrão é Normal(0, 5) e é considerada uma distribuição a priori pouco informativa.

import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution
# -----------------------------------------------------------------------------
# Option 4: Media Coefficient
# -----------------------------------------------------------------------------
# Coefficient (HalfNormal) -> Scales at 1.0 and 1.5
prior = prior_distribution.PriorDistribution(
    beta_m=tfp.distributions.HalfNormal(scale=[1.0, 1.5])
)
model_spec = spec.ModelSpec(prior=prior, media_prior_type='coefficient')

Configurar distribuições a priori de mídia orgânica

O tipo de distribuição a priori da mídia orgânica é especificado pelos argumentos organic_media_prior_type e organic_rf_prior_type. As opções são 'contribution' e 'coefficient', sendo 'contribution' o padrão.

organic_media_prior_type/organic_rf_prior_type Parâmetro em PriorDistribution
'contribution' (padrão) contribution_om, contribution_orf
'coefficient' beta_om, beta_orf

Exemplos de configuração de mídia orgânica

Esta seção fornece exemplos de código para configurar diferentes tipos de distribuições a priori para tratamentos de mídia orgânica. Os marcadores explicam o raciocínio por trás das configurações de exemplo anteriores no bloco de código a seguir. As distribuições padrão também são fornecidas como ponto de referência para entender o processo de configuração de cada tipo de distribuição a priori.

  • Contribuição (contribution_om): defina uma distribuição beta com média de 3%.

    Como referência, a distribuição padrão é Beta(1.0, 99.0) e tem uma média de 1%.

import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution
# -----------------------------------------------------------------------------
# Option 1: Organic Media Contribution
# -----------------------------------------------------------------------------
# Contribution (Beta) -> Mean at 3%
prior = prior_distribution.PriorDistribution(
    contribution_om=tfp.distributions.Beta(
        concentration1=[3.0, 3.0], concentration0=[97.0, 97.0]
    )
)
model_spec = spec.ModelSpec(prior=prior, organic_media_prior_type='contribution')
  • Coeficiente (beta_om): usa uma distribuição HalfNormal para aplicar uma regularização estatística mais restrita (escala de 2,0).

    Como referência, a distribuição padrão é HalfNormal(5) e tem uma escala de 5.

import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution
# -----------------------------------------------------------------------------
# Option 2: Organic Media Coefficient
# -----------------------------------------------------------------------------
# Coefficient (HalfNormal) -> Scale at 2.0
prior = prior_distribution.PriorDistribution(
    beta_om=tfp.distributions.HalfNormal(scale=[2.0, 2.0])
)
model_spec = spec.ModelSpec(prior=prior, organic_media_prior_type='coefficient')

Configurar distribuições a priori de tratamento que não é de mídia

O tipo de distribuição a priori de tratamentos que não são de mídia é especificado pelo argumento non_media_treatments_prior_type. As opções são 'contribution' e 'coefficient', sendo 'contribution' o padrão.

A tabela a seguir mostra o parâmetro PriorDistribution correspondente a cada non_media_treatments_prior_type, que pode ser usado para personalizar a distribuição a priori.

non_media_treatments_prior_type Parâmetro em PriorDistribution
'contribution' (padrão) contribution_n
'coefficient' gamma_n

Exemplos de configuração de tratamentos que não são de mídia

Esta seção fornece vários exemplos de código para configurar diferentes tipos de distribuições a priori para tratamentos que não são de mídia. Os marcadores explicam o raciocínio por trás das configurações de exemplo anteriores no bloco de código a seguir. As distribuições padrão também são fornecidas como ponto de referência para entender o processo de configuração de cada tipo de distribuição a priori.

  • Contribuição (contribution_n): defina uma distribuição normal truncada que concentra massa em -5% para o primeiro tratamento e (5%) para o segundo. Ambos têm uma incerteza relativamente grande (10%).

    A distribuição a priori do primeiro tratamento permite apenas contribuição negativa, já que é truncada para ficar dentro do intervalo (-100%, 0%). Isso pode ser razoável se o tratamento que não é de mídia for o preço e o KPI for o número de unidades vendidas.

    A distribuição a priori do segundo tratamento permite apenas contribuição positiva, já que é truncada para ficar dentro do intervalo (0%, 100%). Isso pode ser razoável se o tratamento que não é de mídia representar uma promoção e o KPI for o número de unidades vendidas.

    Como referência, a distribuição padrão é TruncatedNormal(0.0, 0.1, -1.0, 1.0) e é considerada uma distribuição a priori pouco informativa.

import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution
# -----------------------------------------------------------------------------
# Option 1: Non-Media Treatment Contribution
# -----------------------------------------------------------------------------
# Contribution (TruncatedNormal) -> Loc at -5% and 5%, Scale at 10%
prior = prior_distribution.PriorDistribution(
    contribution_n=tfp.distributions.TruncatedNormal(
        loc=[-0.05, 0.05],
        scale=[0.1, 0.1],
        low=[-1.0, 0.0],
        high=[0.0, 1.0]
    )
)
model_spec = spec.ModelSpec(
    prior=prior,
    non_media_treatments_prior_type='contribution'
)
  • Coeficiente (gamma_n): usa Normal(0, 1), que tem um desvio padrão menor do que a distribuição padrão. Às vezes, uma regularização mais forte ajuda a reduzir a variância a posteriori.

    Como referência, a distribuição padrão é Normal(0, 5) e considerada uma distribuição a priori pouco informativa.

import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution
# -----------------------------------------------------------------------------
# Option 2: Non-Media Treatment Coefficient
# -----------------------------------------------------------------------------
# Coefficient (Normal) -> Loc at 0.0, Scale at 1.0
prior = prior_distribution.PriorDistribution(
    gamma_n=tfp.distributions.Normal(
        loc=[0.0, 0.0], scale=[1.0, 1.0]
    )
)
model_spec = spec.ModelSpec(
    prior=prior,
    non_media_treatments_prior_type='coefficient'
)

Especificar os argumentos de distribuição a priori adequados

O objeto PriorDistribution tem um argumento para cada combinação de tipo de tratamento e tipo de distribuição a priori. Para cada tipo de tratamento, somente o argumento correspondente ao tipo de distribuição a priori selecionado é usado. Os outros são ignorados.

Por exemplo, os argumentos correspondentes às mídias pagas que não são de alcance e frequência são

  • roi_m

  • mroi_m

  • contribution_m

  • beta_m

Se media_prior_type for 'roi', roi_m será usado, e os outros serão ignorados.

Por exemplo, um usuário especifica distribuições a priori para vários tipos. No entanto, neste exemplo, apenas distribuições a priori de contribuição são usadas, já que media_prior_type='contribution'.

No snippet a seguir, roi_m e mroi_m são definidos, mas serão ignorados porque media_prior_type está definido como contribution.

import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution

# Set custom prior for all paid media treatment parameters.
prior_dist = prior_distribution.PriorDistribution(
    roi_m=tfp.distributions.LogNormal(0.2, 0.9), # NOT used
    mroi_m=tfp.distributions.LogNormal(0.0, 0.5), # NOT used
    contribution_m=tfp.distributions.Beta(1.0, 99.0), # Used
    beta_m=tfp.distributions.HalfNormal(5.0), # NOT used
)

# Setting the treatment type to 'contribution' means that only the `contribution_m`
# prior will be used. The priors specified on `roi_m`, `mroi_m`, and `beta_m` will be ignored.
spec = spec.ModelSpec(prior=prior_dist, media_prior_type='contribution')

O comportamento relacionado à especificação da distribuição a priori correta também é detalhado no fluxograma a seguir.

Fluxograma detalhando o uso adequado de parâmetros para especificação do modelo

Outras considerações

Esta seção contém outras considerações avançadas que podem ser feitas ao escolher entre diferentes tipos de distribuições a priori de tratamento no Meridian.

Personalizar as distribuições a priori de contribuição para tratamentos que não são de mídia

A distribuição a priori de contribuição padrão é uma distribuição normal truncada, que permite valores positivos e negativos. É possível definir parâmetros específicos de tratamento na distribuição normal truncada para mudar a massa de probabilidade para valores positivos ou negativos. Por exemplo, o snippet de código a seguir atribui uma distribuição Normal(0, 0,1) truncada simetricamente no primeiro tratamento, uma distribuição HalfNormal(0, 0,2) truncada positiva no segundo tratamento e uma distribuição HalfNormal(0, 0,1) truncada negativa no terceiro tratamento.

PriorDistribution(
    contribution_n=tfp.distributions.TruncatedNormal(
        loc=[0, 0, 0],
        scale=[0.1, 0.2, 0.1],
        high=[1, 1, 0],
    )
)

Você também pode usar uma distribuição Beta escalonada para especificar uma distribuição positiva para alguns tratamentos e uma distribuição negativa para outros. Por exemplo, o snippet de código a seguir atribui uma distribuição a priori Beta(1, 49) no primeiro tratamento e uma distribuição a priori Beta(1, 99) negativa no segundo tratamento.

PriorDistribution(
    contribution_n=tfp.distributions.TransformedDistribution(
        tfp.distributions.Beta([1, 1], [49, 99]),
        tfp.bijectors.Scale([1, -1]),
    )
)

Entenda as distribuições a priori induzidas e de canal

Quando você especifica uma distribuição a priori em uma métrica (por exemplo, ROI), o Meridian induz uma distribuição a priori na outra (mROI). Essa distribuição induzida não pertence a uma família paramétrica padrão e depende de outros parâmetros do modelo, incluindo a execução de mídia do canal em regiões geográficas e períodos.

Isso tem uma implicação importante para a paridade de canais. Por exemplo, mesmo que você defina uma distribuição a priori de ROI comum para todos os canais, as distribuições a priori de mROI induzidas serão diferentes para cada canal e vice-versa. Portanto, se sua meta for assumir a paridade entre os canais para uma métrica específica, defina a distribuição a priori diretamente nessa métrica usando a parametrização correspondente.

Se você quiser analisar as distribuições a priori de ROI e mROI induzidas de um modelo, chame sample_prior e use o método roi ou marginal_roi da classe Analyzer com o argumento use_posterior=False.

from meridian.analysis import analyzer
from meridian.model import model
import numpy as np

mmm = model.Meridian(...)
mmm.sample_posterior(...)
analyzer_instance = analyzer.Analyzer(mmm)

# Get the prior distributions using `use_posterior=False`.
roi_prior = analyzer_instance.roi(use_posterior=False)

# This is the induced prior on mROI.
mroi_induced_prior = analyzer_instance.marginal_roi(use_posterior=False)

# The shape of the prior samples is (chains, draws, channels).
# We calculate the mean across the 'chains' and 'draws' axes.
print("Mean of ROI prior per channel:", np.mean(roi_prior, axis=(0, 1)))
print("Mean of induced mROI prior per channel:", np.mean(mroi_induced_prior, axis=(0, 1)))

Avançado: relação de indução entre mROI e ROI

Embora a distribuição a priori induzida não pertença a uma família paramétrica padrão, podemos dizer algo sobre as distribuições a priori induzidas. O mROI é o retorno do investimento para uma unidade monetária adicional (por exemplo, um real) de gasto em um determinado canal.

Para canais baseados em impressões (sem dados de alcance e frequência), uma unidade monetária adicional de gasto é alocada ao aumentar a execução de mídia (por exemplo, impressões).

Quando a função de Hill de um canal é côncava (o padrão), o ROI geral do canal sempre será maior do que o mROI. Isso leva a uma relação previsível entre as distribuições a priori especificadas e induzidas:

  • Uma distribuição a priori de ROI induz uma de mROI que é estritamente menor.
  • Uma distribuição a priori de mROI induz uma de ROI que é estritamente maior.

Para canais de alcance e frequência, a unidade monetária adicional de gasto é alocada aumentando o alcance e mantendo a frequência média fixa.

Para canais de alcance e frequência, o mROI (por alcance) é igual ao ROI porque os efeitos da mídia são lineares no alcance de acordo com o modelo do Meridian. A distribuição a priori de mROI do Meridian é aplicada ao mROI por alcance. Portanto, a escolha entre uma distribuição a priori de ROI e mROI não tem impacto na distribuição a priori desses canais. No entanto, a escolha será importante se você estiver usando distribuições padrão, porque elas são diferentes para distribuições a priori de ROI e mROI.

Usar distribuições a priori de mROI para regularização de orçamento

É possível usar distribuições a priori de mROI para regularizar as recomendações de otimização de orçamento, reduzindo-as de acordo com a alocação de orçamento histórica. Isso é útil quando você acha que os orçamentos históricos já estão próximos do ideal.

Para isso, defina uma média de distribuição a priori de mROI comum em todos os canais e use um desvio padrão pequeno. Uma distribuição a priori mais forte (desvio padrão menor) aproxima a alocação ideal da alocação histórica, resultando em mudanças de orçamento recomendadas menores. Por exemplo, definir a média de mROI como 1,0 sugere que, nos níveis de gasto históricos, um real a mais de gasto geraria um real de retorno, o que implica que o canal está próximo do orçamento ideal.

import tensorflow_probability as tfp
from meridian.model import spec, prior_distribution

# Assume 2 paid media channels.
# Set a common mROI prior mean of 1.0, suggesting budgets are near optimal.
# Use a very small standard deviation to create a strong prior.
mean_mroi = [1.0, 1.0]
std_mroi = [0.1, 0.1]  # A small std dev creates a strong prior.

lognormal_mroi_regularizing = prior_distribution.PriorDistribution.lognormal_dist_from_mean_std(
    mean_mroi, std_mroi
)

prior_mroi_regularizing = prior_distribution.PriorDistribution(
    mroi_m=lognormal_mroi_regularizing
)

# This ModelSpec will produce more conservative budget recommendations.
model_spec_regularized = spec.ModelSpec(
    prior=prior_mroi_regularizing,
    media_prior_type='mroi'
)

A quantidade de execuções de mídia e a saturação de um canal podem mudar em diferentes períodos. Assim, os valores de mROI podem mudar. Se a meta for usar distribuições a priori de mROI para regularizar a otimização do orçamento, verifique se o período da distribuição a priori está alinhado ao período de otimização. Caso contrário, a regularização talvez não funcione como esperado.