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

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.gitPara 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:
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!



