MAM 2.0: a nova versão da biblioteca open source de atribuição da DP6

Jaime Silva
Publicado em
27/8/2026

Mais performance e uma nova experiência para explorar modelos de atribuição de marketing. 

A MAM é a biblioteca open source em Python desenvolvida pela DP6 para facilitar a aplicação de modelos de atribuição multitouch. 

Como surgiu a MAM 2.0?

Sair do Last Click, ou da atribuição isolada de cada plataforma de mídia, é um objetivo cada vez mais frequente (e necessário!) nos times de marketing. Porém, a implementação técnica de um modelo realmente agnóstico e preciso de Multi Touch Attribution ainda é um desafio considerável. O que muitas vezes começa como uma intenção estratégica acaba esbarrando na complexidade dos dados, na dificuldade de unificar as interações do usuário e na própria aplicação de modelos avançados em si.  

Para desvendar esse quebra-cabeça, a DP6 lançou em 2019 a primeira versão da MAM (Marketing Attribution Models), nossa biblioteca open source em Python para atribuição multitouch (MTA). 

Ela nasceu para resolver uma dor interna dos nossos cientistas de dados: evitar que cada novo projeto demandasse a criação de notebooks redundantes com lógicas isoladas ou o uso de soluções de terceiros em R para modelos algorítmicos complexos, como cadeias de Markov.

O caos estava batendo na porta, e a MAM foi a nossa salvação, permitindo mudar o foco da implementação manual das lógicas para o que realmente importa: garantir a qualidade dos dados e obter insights para tomada de decisão.

De lá pra cá ela já teve quase 2 Milhoes de downloads. Mesmo sem receber uma nova linha de código nos últimos anos, se olharmos o volume de downloads como um proxy de interesse pelo tema, conseguimos dizer que o volume só cresceu de lá pra cá, mesmo com o crescente interesse por MMM recente e com perdas de sinais de rastreamento a nível de usuário

Pouco tempo depois, em 2022, criamos a JAToolbox (Journey Analysis Toolbox), uma biblioteca irmã focada em análise exploratória de jornadas (EDA), permitindo analisar aspectos como tamanho médio das jornadas, transições de canais e tempo de conversão.

Agora, temos o orgulho de apresentar o próximo grande passo dessa  jornada: a MAM 2.0! Uma evolução com foco em performance, organização e facilidade de uso.

O que muda na MAM 2.0? 

Em resumo, a nova versão traz mais performance, unifica MAM e JAToolbox, padroniza a experiência de uso e adiciona a geração automatizada de relatórios. 

Com o uso constante da MAM em nossos projetos e pela comunidade, percebemos  algumas limitações e oportunidades de evolução:

  • Gargalos de Performance: Ao lidar com volumes de dados massivos, operações baseadas em strings sobre dataframes Pandas travavam e esgotavam facilmente a memória RAM em ambientes compartilhados, como o Google Colab.
  • Ecossistema Fragmentado: Ter que lidar com duas bibliotecas separadas,MAM e JAToolbox, gerava atritos no fluxo de trabalho e na experiência do desenvolvedor (DX).
  • Código Monolítico: A falta de modularização dificultava a manutenção, a legibilidade e a expansão da biblioteca.
  • Inconsistência nas Saídas: Os resultados de alguns modelos não seguiam um formato de saída previsível e unificado, o que quebrava pipelines integrados.
  • Ausência de Relatórios Executivos: Não havia uma forma simples de gerar relatórios consolidados e prontos para apresentação.

Para resolver esses pontos, a MAM 2.0 foi totalmente redesenhada a partir de  quatro pilares de engenharia:

  • Migração do motor de dados para Polars: Substituímos o Pandas pelo Polars. Através de processamento vetorizado ultraeficiente e do uso de dados categóricos nativos para os canais, eliminamos gargalos de memória e permitimos o processamento altamente escalável de bases extensas.
  • Sintaxe unificada e padronizada: Padronizamos todas as chamadas de modelos e  os resultados passam a ser retornados em um objeto de saída comum (AttributionResult), facilitando o uso por desenvolvedores e assistentes de código baseados em IA.
  • Integração com a JAToolbox: Unificamos as duas soluções em um único pacote! As ferramentas de análise exploratória de jornadas agora estão disponíveis nativamente dentro da própria MAM, eliminando a necessidade de imports separados.
  • Geração automatizada de relatórios (One Page Report): Com apenas algumas linhas de código, é possível gerar e exportar um dashboard executivo interativo em HTML que consolida resultados de atribuição, distribuição de touchpoints, caminhos de conversão e tempo médio de jornada. Os dados do relatório também ficam disponíveis em JSON.

Como usar a MAM 2.0?

A utilização da nova versão é ainda mais  amigável e direta que antes. A seguir, mostramos um exemplo simples do fluxo completo.

Instale a biblioteca:

# A instalação pode ser feita com:
# !pip install git+https://github.com/DP6/nova_mam.git

Para exemplificar, vamos gerar algumas jornadas sintéticas de marketing, com caminhos fictícios e diferentes tempos até a conversão:

import pandas as pd
import polars as pl

# Criando uma base de teste simplificada com 10 jornadas fictícias de marketing
df_teste = pd.DataFrame({
    "journey_id": [f"user_{i}" for i in range(10)],
    "journey_path": [
        "Google_Search > Meta_Ads > Direct", "Direct", "Meta_Ads > Email > Direct",
        "Google_Search > Organic_Search", "Organic_Search", "Email > Meta_Ads",
        "Direct > Google_Search > Meta_Ads", "Email > Direct", "Google_Search > Meta_Ads",
        "Organic_Search > Direct"
    ],
    "conversion_flag": [True, False, True, False, True, False, True, False, True, False],
    "time_till_end": [
        "48 > 24 > 0", "0","72 > 48 > 0",
        "12 > 0","0","24 > 0","36 > 12 > 0",
        "10 > 0","15 > 0","5 > 0"
    ]
})

print("Dataset de teste simplificado gerado com sucesso!")
print(df_teste)

Com a base criada, basta instanciar o objeto orquestrador da MAM 2.0 e definir o formato de entrada desejado. Neste exemplo, utilizaremos "journey", já que cada linha representa uma jornada completa:

from mam.core import MAM

# Instanciando o orquestrador da Nova MAM
# Definimos format_type="journey", pois cada linha representa uma jornada completa
mam = MAM(
    df=df_teste,
    format_type="journey",
    channels_colname="journey_path",
    journey_with_conv_colname="conversion_flag",
    user_id_colname="journey_id",
    time_till_conv_colname="time_till_end"
)

Em seguida, basta executar o modelo de atribuição desejado. Neste exemplo, vamos utilizar o modelo Linear:

resultado_linear = mam.run_linear()
print(resultado_linear.to_pandas())

E o resultado será:

Se além dos modelos de atribuição você quiser explorar as características das jornadas, é possível acessar os métodos da JAToolbox integrada diretamente através do objeto orquestrador:

# Acessando a propriedade JAToolbox diretamente do orquestrador
ja = mam.jatoolbox

# 1. Tamanho das jornadas (número de touchpoints)
tamanhos_jornada = ja.get_size()
print(f"Comprimento médio da jornada: {tamanhos_jornada.mean():.2f} touchpoints")
print(f"Comprimento máximo da jornada: {tamanhos_jornada.max()} touchpoints\n")

# 2. Contagem de canais ao longo de todas as interações
print("Contagem geral de aparições de canais:")
contagem_canais = ja.get_tps_counts(norm=False)
print(contagem_canais.to_pandas())

E o resultado será:

Gere um relatório executivo automaticamente 

Por fim, se você quiser apresentar os resultados em formato de dashboard executivo sem precisar programar gráficos manualmente, basta chamar o método .generate_report() especificando os caminhos de exportação dos arquivos HTML e JSON:

import os

# Definindo caminhos de saída dos arquivos de relatório
html_path = "relatorio_atribuicao.html"
json_path = "exportacao_dados_bi.json"

# Gerando o One Page Report com Last Click, Linear e Markov
print("Gerando relatórios executivos...")
mam.generate_report(
    models=["last_click", "linear", "markov"],
    output_html_path=html_path,
    output_json_path=json_path
)

O resultado é um dashboard interativo completo:

Nova MAM - One Page Executive Report

Nova MAM Fase 5

Marketing Attribution & Customer Journey Analytics

Relatório Executivo de Jornadas e Atribuição

Este relatório compila os principais indicadores de desempenho de marketing e os resultados dos modelos de atribuição configurados. Projetado para visualização em telas de computadores e notebooks, ele adota princípios de design minimalistas, mantendo alto contraste visual e legibilidade.

01

Análise de Jornadas do Consumidor

Total de Jornadas 22968
Total de Conversões 2431
Jornadas Conversoras (%) 2431 (10.58%)
Jornadas Não Conversoras (%) 20537 (89.42%)

Análise de Pontos de Contato (Touchpoints)

Distribuição e estatísticas da quantidade de canais que compõem as jornadas.

Todas as Jornadas Touchpoints
Mínimo 1
Médio 2.18
Máximo 11
Jornadas Conversoras Touchpoints
Mínimo 1
Médio 1.92
Máximo 7
Jornadas Não Conversoras Touchpoints
Mínimo 1
Médio 2.21
Máximo 11

Análise de Tempo de Jornada (Duração)

Distribuição estatística e histograma do tempo total (em horas) até o desfecho da jornada.

Todas as Jornadas Duração
Mínimo 0.0h
Médio 202.1h
Máximo 717.75h
Jornadas Conversoras Duração
Mínimo 0.0h
Médio 142.35h
Máximo 702.76h
Jornadas Não Conversoras Duração
Mínimo 0.0h
Médio 209.17h
Máximo 717.75h

Top 10 Caminhos Mais Frequentes de Conversão

Lista ordenada com os caminhos que mais geraram conversões na base.

Rank Caminho do Consumidor (Path) Conversões (Qtd) Representação (%)
#1 organic_search 244 10.04%
#2 direct 233 9.58%
#3 meta_ads 229 9.42%
#4 email 212 8.72%
#5 google_search 197 8.1%
#6 google_search > google_search 37 1.52%
#7 direct > meta_ads 35 1.44%
#8 email > google_search 35 1.44%
#9 meta_ads > google_search 34 1.4%
#10 meta_ads > meta_ads 34 1.4%
02

Resultados dos Modelos de Atribuição

Comparativo Visual de Atribuição por Canal

Créditos de conversão atribuídos para cada canal de acordo com os modelos executados.

03

Insights Detalhados do Modelo de Markov

Engajamento vs. Conversão Direta

Mapeamento de posicionamento estratégico de cada canal.

Guia de Interpretação:
  • Acima/Direita (Líderes): Alto impacto direto e alto engajamento ao longo da jornada.
  • Direita (Fechadores): Excelente para fechar conversões diretas, porém geram menos engajamento intermediário.
  • Acima (Auxiliares): Altamente eficazes em nutrir e conduzir leads para outros canais.
  • Abaixo/Esquerda: Canais com menor probabilidade de engajar ou fechar diretamente.

Nova MAM package © 2026 • Gerado de forma automatizada

E o que vem por aí?

A consolidação da MAM 2.0 representa uma evolução importante em desempenho e usabilidade, mas o trabalho contínuo de inovação da DP6 não para por aqui. No nosso roadmap técnico, já temos alguns próximos passos mapeados:

  • Aprimoramento e Correções: evolução contínua a partir dos feedbacks da comunidade open source.
  • Documentação Completa: Publicação de guias dinâmicos detalhando cada método de forma prática e didática.
  • Tutoriais Avançados: novos conteúdos no Blog da DP6 sobre modelos algorítmicos complexos, comoMarkov, Shapley, além de integrações avançadas de pipelines.

Experimente a MAM 2.0 

A MAM é open source e continua evoluindo a partir do uso nos projetos da DP6 e das contribuições da comunidade. 

Acesse a nova versão, teste os modelos e compartilhe seus feedbacks com a gente. 

Bons insights e ótimas análises!