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:

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!