Otimizar leilões de mídia paga pelo ROAS de primeiro pedido atrai clientes de compra única e estrangula a margem de longo prazo.
Motores de lances inteligentes priorizam a conversão imediata mais barata. Essa mecânica favorece caçadores de cupom e ignora o valor acumulado no ciclo de vida do cliente.

Por que a otimização por ROAS imediato cria um teto artificial de escala?
O ROAS do primeiro pedido penaliza safras de alto valor residual que iniciam sua jornada com tickets de entrada moderados.
Quando o algoritmo busca maximizar o faturamento imediato, ele inflaciona o lance para compradores oportunistas de produtos em promoção.
Nos leilões do Google Smart Bidding e Meta Advantage+, o lance calcula a probabilidade de conversão multiplicada pelo valor declarado.
Se o anunciante envia apenas o valor da primeira compra, o leilão trata um cliente fiel e um comprador avulso com o mesmo peso.
A tabela abaixo compara o retorno aparente no dia zero contra o retorno real acumulado em 12 meses:
| Métrica de Aquisição | Safra A (Promoção Agressiva) | Safra B (Linha Recorrente Core) |
|---|---|---|
| Ticket Médio no Dia 0 | R$ 450,00 | R$ 200,00 |
| Custo de Aquisição (CAC) | R$ 90,00 | R$ 80,00 |
| ROAS Imediato (Dia 0) | 5.0x (Priorizado no leilão) | 2.5x (Despriorizado no leilão) |
| Probabilidade de Recompra (12m) | 4% | 68% |
| Transações Médias no Ano | 1,05 pedidos | 4,80 pedidos |
| LTV Realizado em 365 Dias | R$ 472,50 | R$ 960,00 |
| LTV / CAC Real em 12 Meses | 5,25x | 12,00x |
A plataforma de anúncios reduz o investimento na Safra B por causa do ROAS inicial mais baixo. Essa decisão priva o negócio de sua maior fonte de lucro líquido anual.
O que é a modelagem BTYD e como funciona o BG/NBD?
A modelagem Buy 'Til You Die estima probabilisticamente quando clientes não contratuais realizam novas compras e quando abandonam a marca.
Diferente de negócios com assinatura formal, o varejo e o e-commerce operam em regime não contratual. Nesses mercados, o cliente deixa de comprar silenciosamente.
O modelo BG/NBD (Beta-Geometric/Negative Binomial Distribution), introduzido por Fader, Hardie e Lee (2005), baseia-se em duas premissas estocásticas:
- Frequência de Transação: O número de transações segue um processo de Poisson com taxa individual
λ. Essa taxa varia entre indivíduos conforme uma distribuição Gamma. - Abandono Latente: A cada compra, o cliente decide abandonar a relação comercial com probabilidade
p. Essa propensão ao churn segue uma distribuição Beta.
O modelo exige três variáveis históricas por cliente, consolidadas na matriz RFM:
- Recência (
t_x): Tempo decorrido entre a primeira transação e a última compra observada. - Frequência (
x): Número de compras de recompra realizadas após o pedido inicial (x ≥ 0). - Tempo Total (
T): Intervalo de tempo entre a primeira compra e o final do período analisado.
A probabilidade de um cliente com histórico (x, t_x, T) continuar ativo no momento atual é expressa por:
P(Alive | x, t_x, T) = 1 ÷ [ 1 + (b ÷ (a + b + x - 1)) × ((α + T) ÷ (α + t_x))^(r + x) ]
Com a probabilidade P(Alive) calibrada, o modelo projeta o número esperado de compras futuras E[X(t)] para a janela t.

Como o modelo Gamma-Gamma projeta o valor monetário futuro?
O modelo Gamma-Gamma calcula o ticket médio esperado de transações futuras assumindo independência entre frequência e valor monetário.
O modelo BG/NBD estima quantas vezes o cliente comprará. O Gamma-Gamma, documentado por Fader e Hardie (2013), estima o montante financeiro médio de cada uma dessas visitas.
A formulação assume que o gasto médio observado m_x em x compras de recompra é uma estimativa do ticket latente v.
A distribuição dos gastos individuais segue uma distribuição Gamma. Entre clientes distintos, a escala média também varia conforme uma distribuição Gamma.
O ticket médio esperado para transações futuras E[M] é calculado por média ponderada bayesiana:
E[M | x, m_x] = [ (p × x) ÷ (p × x + q - 1) ] × m_x + [ (q - 1) ÷ (p × x + q - 1) ] × (γ × p ÷ (q - 1))
Multiplicando as compras esperadas E[X(t)] pelo ticket projetado E[M], obtemos o Lifetime Value Preditivo Contínuo Descontado (DCLV):
pLTV(t) = E[X(t)] × E[M] × (1 ÷ (1 + d)^t)
O termo d representa a taxa de desconto financeiro no horizonte considerado.
Como treinar e calibrar modelos probabilísticos em Python?
O treinamento dos modelos BG/NBD e Gamma-Gamma utiliza otimização por máxima verossimilhança sobre a matriz de transações do banco de dados.
Bibliotecas abertas como a Lifetimes e pacotes compatíveis com BTYD processam os dados diretamente de data warehouses modernos.
O script abaixo executa a preparação da matriz RFM, o ajuste dos parâmetros dos modelos e a predição do pLTV para 180 dias:
import pandas as pd
import numpy as np
from lifetimes import BetaGeoFitter, GammaGammaFitter
from lifetimes.utils import summary_data_from_transaction_data
# 1. Carregamento dos dados transacionais de primeira parte
df_transactions = pd.read_parquet("transacoes_historicas.parquet")
# 2. Construção da matriz RFM com corte temporal
rfm_summary = summary_data_from_transaction_data(
df_transactions,
customer_id_col="customer_id",
datetime_col="transaction_date",
monetary_value_col="order_value",
observation_period_end="2026-08-30",
freq="D"
)
# 3. Ajuste do modelo de frequência BG/NBD com regularização L2
bgf = BetaGeoFitter(penalizer_coef=0.01)
bgf.fit(rfm_summary["frequency"], rfm_summary["recency"], rfm_summary["T"])
# 4. Ajuste do modelo de ticket médio Gamma-Gamma (apenas recompradores)
recompradores = rfm_summary[
(rfm_summary["frequency"] > 0) & (rfm_summary["monetary_value"] > 0)
]
ggf = GammaGammaFitter(penalizer_coef=0.01)
ggf.fit(recompradores["frequency"], recompradores["monetary_value"])
# 5. Predição de transações e pLTV para o horizonte de 180 dias
dias_predicao = 180
rfm_summary["prob_alive"] = bgf.conditional_probability_alive(
rfm_summary["frequency"], rfm_summary["recency"], rfm_summary["T"]
)
rfm_summary["exp_purchases_180d"] = bgf.conditional_expected_number_of_purchases_up_to_time(
dias_predicao, rfm_summary["frequency"], rfm_summary["recency"], rfm_summary["T"]
)
rfm_summary["exp_monetary_value"] = ggf.conditional_expected_average_profit(
rfm_summary["frequency"], rfm_summary["monetary_value"]
)
rfm_summary["pltv_180d"] = ggf.customer_lifetime_value(
bgf,
rfm_summary["frequency"],
rfm_summary["recency"],
rfm_summary["T"],
rfm_summary["monetary_value"],
time=6, # 6 meses (180 dias)
discount_rate=0.01,
freq="D"
)
O pipeline grava as estimativas de probabilidade de sobrevivência e valor predito na tabela de audiências para uso no ecossistema de mídia.
Como integrar o pLTV no Google Ads e na Meta Conversions API?
A ingestão de lances baseados em valor requer o envio de sinais preditivos via APIs server-side no momento da conversão ou em lotes offline.
O leilão algorítmico utiliza o valor da conversão para calibrar o lance nas estratégias de Maximize Conversion Value com Target ROAS.
Para clientes recorrentes, o valor é enriquecido na nuvem com soluções como BigQuery ML.
Para novos compradores no dia zero, o sistema injeta o pltv_180d predito a partir do SKU inicial adquirido.

A arquitetura de ingestão opera em três frentes principais:
1. Ingestão em tempo real via Meta Conversions API (CAPI)
O evento de compra dispara do servidor com o valor predito no campo custom_data.value. Isso permite que o recurso de Value Optimization da Meta priorize perfis de alto retorno:
{
"data": [
{
"event_name": "Purchase",
"event_time": 1788105600,
"event_id": "order_ord_998124_pltv",
"action_source": "system_generated",
"user_data": {
"em": ["f660ab912ec121d1b1e928a0bb4bc61b15f5ad44d5efdc4e1c92a25e99b8e44a"],
"client_ip_address": "177.18.210.45",
"client_user_agent": "Mozilla/5.0..."
},
"custom_data": {
"currency": "BRL",
"value": 1150.00,
"predicted_ltv_horizon": "180d",
"original_transaction_value": 280.00,
"model_version": "btyd_gamma_gamma_v2.4"
}
}
]
}
2. Ajustes de conversão no Google Ads via Conversion Adjustments
O Google Ads permite atualizar conversões em até 55 dias através de Conversion Adjustments na Google Ads API.
Quando uma safra atinge novos marcos, o job envia eventos RESTATE com o valor predito revisado:
from google.ads.googleads.client import GoogleAdsClient
from datetime import datetime
def upload_pltv_adjustment(
client: GoogleAdsClient,
customer_id: str,
conversion_action_id: str,
order_id: str,
predicted_ltv_value: float,
adjustment_time: datetime
):
adjustment_service = client.get_service("ConversionAdjustmentUploadService")
adjustment = client.get_type("ConversionAdjustment")
adjustment.conversion_action = f"customers/{customer_id}/conversionActions/{conversion_action_id}"
adjustment.adjustment_type = client.enums.ConversionAdjustmentTypeEnum.RESTATE
adjustment.order_id = order_id
adjustment.adjustment_date_time = adjustment_time.strftime("%Y-%m-%d %H:%M:%S+00:00")
adjustment.restatement_value.adjusted_value = predicted_ltv_value
adjustment.restatement_value.currency_code = "BRL"
request = client.get_type("UploadConversionAdjustmentsRequest")
request.customer_id = customer_id
request.conversion_adjustments.append(adjustment)
request.partial_failure = True
return adjustment_service.upload_conversion_adjustments(request=request)
Adicionalmente, anunciantes podem configurar Regras de Valor de Conversão do Google Ads para aplicar multiplicadores sobre públicos de alto valor.
3. Audiências preditivas e Lookalikes de alto LTV
A base de clientes é segmentada em decis de valor futuro. O decil superior (Top 10% pLTV) sincroniza diariamente com o Customer Match e serve de semente para públicos semelhantes (Lookalike 1%).
Essa segmentação impede a dispersão de verba em perfis com baixo potencial de retenção.
Quais resultados reais a migração para lances por pLTV entrega?
Empresas que migram de lances por ROAS estático para lances por pLTV registram aumentos de 20% a 38% no lucro líquido acumulado por safra.
O ROAS aparente de dia zero pode sofrer uma leve redução de 10% a 15%. Em contrapartida, a densidade de recompradores na safra cresce expressivamente.
Os dados consolidados de implementação em diferentes verticais demonstram a eficiência do modelo:
| Setor de Atuação | Estratégia Inicial | Estratégia pLTV-VBB (180d) | Impacto Mensurado |
|---|---|---|---|
| E-commerce de Moda & Vestuário | ROAS D0 = 4,2x (35% recompra em 12m) | ROAS D0 = 3,4x (54% recompra em 12m) | +28,4% no LTV Líquido Anual |
| D2C de Cosméticos & Skincare | CAC = R$ 65,00 (Ticket = R$ 110,00) | CAC = R$ 78,00 (Ticket = R$ 145,00) | +38,5% no Lucro Bruto por Cliente |
| Nutrição Esportiva & Suplementos | Churn em 90 dias = 62% | Churn em 90 dias = 41% | +31,2% na Frequência de Recompra |
| Clubes de Assinatura & Consumo | Payback do CAC = 5,2 meses | Payback do CAC = 3,6 meses | -30,7% no Tempo de Payback |
A engenharia de tráfego deixa de ser uma compra de cliques avulsos e passa a operar como alocação de capital financeiro.
Perguntas frequentes sobre pLTV e modelos BTYD em mídia paga
Qual é o volume mínimo de dados para treinar modelos BG/NBD e Gamma-Gamma com segurança?
Recomenda-se uma base de 12 meses de transações e ao menos 2.000 clientes com duas ou mais compras. Em bases menores, utilize penalização L2 mais rigorosa para evitar sobreajuste estatístico.
O envio de valores preditivos não distorce os relatórios contábeis do painel de anúncios?
Crie ações de conversão secundárias dedicadas à otimização algorítmica ou utilize parâmetros customizados no payload. O relatório contábil consome o faturamento real, enquanto a estratégia de lances consome o valor predito.
Como estimar o pLTV para clientes que realizam apenas uma compra no primeiro dia?
Para novos clientes sem histórico prévio, o modelo estima o pLTV com base na média observada da safra de entrada daquele SKU inicial.
Qual horizonte de tempo é ideal para calibrar o pLTV em campanhas de tráfego pago?
Para e-commerces de recompra frequente, o horizonte de 180 dias oferece equilíbrio ideal entre previsibilidade e liquidez. Para produtos duráveis, estenda para 365 dias.