Autor: Fabio Souza

No Nubank, estamos constantemente ampliando os limites de como a Inteligência Artificial pode nos ajudar a compreender melhor as jornadas financeiras de nossos clientes. Nossos posts anteriores detalharam como utilizamos modelos de base baseados em transformadores para converter sequências de dados de transação em embeddings poderosos, permitindo-nos atender melhor às necessidades financeiras de nossos clientes no momento certo [1, 4]. Exploramos a interface que traduz dados brutos de transações em embeddings que nossos modelos podem entender [2], discutimos as nuances de ajustar esses modelos para tarefas específicas [3], e demonstramos como otimizamos narrativas de usuários selecionando e representando cuidadosamente características e fontes de transação [5].

No entanto, a jornada mencionada de otimizar narrativas de usuários é contínua. Como destacamos em nossos posts anteriores, a escolha de qual informação de uma transação incluir e como representá-la é importante, especialmente dado o contexto limitado das nossas arquiteturas de transformadores. Hoje, nos aprofundamos em um aspecto crucial dos dados de transação: o timestamp de quando a transação ocorreu. A forma como codificamos o “quando” de uma transação pode impactar significativamente a capacidade de um modelo de base em entender o estado financeiro de um cliente e prever comportamentos futuros.

No restante deste post do blog, primeiro discutimos os desafios de usar timestamps absolutos. Em seguida, propomos uma abordagem diferente que utiliza deltas de tempo para representar a informação temporal, detalhando o processo de design e decisões-chave. Por fim, apresentamos o desenho experimental e os resultados que validam essa nova abordagem em um problema real de negócios.

O Desafio com Carimbos de Data/Hora Absolutos

Inicialmente, para representar transações, nossos modelos de nível de token usavam carimbos de data/hora absolutos, codificados por tokens especiais como <MÊS>, <DIA> e <DIA DA SEMANA> para cada operação. Apesar de ser um método simples, essa abordagem criava vários desafios para um modelo fundacional, que é feito para criar representações de usuários ao longo de períodos extensos. A figura a seguir mostra o procedimento de tokenização de transações que nossos modelos [2,4] já usavam.

Imagine que um cliente fica inativo por um longo período, como um ano, e depois volta a fazer transações. Se o modelo depender apenas de carimbos de data/hora absolutos, as representações (embeddings) geradas durante o período de inatividade seriam sempre as mesmas. Ou seja, o modelo não tem uma “noção do agora”. Essa falta de sensibilidade aos períodos de inatividade faz com que as representações possam não refletir com precisão o comportamento atual do cliente. Essa capacidade é, na verdade, algo inerente a recursos de aprendizado de máquina tradicionais, que são calculados ao longo do tempo em relação a uma “data de pontuação” (por exemplo, 1 mês, 3 meses, 6 meses).

Além disso, a codificação com carimbos de data/hora absolutos pode fazer com que os modelos se ajustem excessivamente a períodos de datas específicas ou a combinações de <MÊS><DIA><DIA DA SEMANA> e outros atributos de transação. Isso acontece principalmente se os dados de treinamento cobrirem menos de um ano inteiro ou se o objetivo tiver uma forte sazonalidade. Isso limita a capacidade do modelo de generalizar de forma eficaz durante a inferência, especialmente para dados que estão fora do período de treinamento (out-of-time – OOT).

Conheça nossas oportunidades

Introdução às Diferenças de Tempo: Uma Abordagem Relativa

Para solucionar as limitações das codificações de tempo absoluto, levantamos a hipótese de que seria mais eficaz representar a informação de tempo como um “delta de tempo”, ou a “idade” da transação em relação à data de pontuação (o “agora”). Essa abordagem permite que as representações (embeddings) reflitam os períodos de inatividade e captem melhor a relevância e a recência de transações passadas.

Assim como fizemos com outros atributos de transação, implementamos essa abordagem ao criar um token especial. Mais especificamente, quantizamos os deltas de tempo em “baldes” distintos, de forma semelhante a como lidamos com os valores das transações. Esses baldes são então representados por seus próprios tokens especiais, como:

  • <TIMEDELTA:1-DAY-OR-LESS>
  • <TIMEDELTA:BETWEEN-1-AND-2-DAYS>
  • <TIMEDELTA:BETWEEN-2-AND-3-DAYS>
  • <TIMEDELTA:BETWEEN-1-AND-2-MONTHS>
  • <TIMEDELTA:BETWEEN-2-AND-3-MONTHS>
  • <TIMEDELTA:ABOVE-2-YEARS> (with a chosen truncation cap)

É importante notar que há dois hiperparâmetros que precisamos escolher. Primeiro, a granularidade/escala dos deltas de tempo deve ser selecionada. Em segundo lugar, precisamos definir um limite a partir do qual os deltas de tempo são truncados. No exemplo acima, o limite de truncamento do delta de tempo foi definido como dois anos. Assim, nesse caso, qualquer transação que esteja a mais de dois anos da data de pontuação é truncada para o token: <DELTA DE TEMPO: ACIMA-DE-2-ANOS>. Na seção a seguir, exploramos a definição desses parâmetros ao analisar a distribuição dos deltas de tempo em nossos dados.

Definindo o Horizonte e a Granularidade do Delta de Tempo

Como mencionado, uma etapa importante para usar de forma eficaz os tokens especiais de delta de tempo é definir de forma sensata o limite máximo de truncamento do delta de tempo. Por exemplo, escolher um limite muito pequeno pode levar à perda de informações valiosas. Por outro lado, um limite excessivamente grande pode introduzir um número exagerado de tokens especiais, que podem ser mal treinados se a ocorrência deles for rara durante a fase de treinamento.

Ao traçar a distribuição cumulativa dos tamanhos das janelas temporais de transação (o tempo entre a transação mais antiga e a mais recente em uma sequência) para nosso conjunto de dados de treinamento, observamos que quase 97% das sequências continham transações de até dois anos atrás. Com base nisso, decidimos começar a usar dois anos como limite para a nossa codificação de delta de tempo. Em seguida, precisamos escolher uma granularidade para os “baldes” de delta de tempo. Experimentamos duas estratégias de baldes diferentes:

  • Estratégia Padrão: Baldes mais granulares para dados recentes (até 3 meses), seguidos por baldes mensais. Isso incluía limites como [0, 1, 2, …, 13, 14, 21, 30, 45, 60, 90, 120, …, 330, 365, …, idade_máxima] dias.
  • Baldes menos granulares: Unificamos alguns baldes para transações com idades entre 1-2 semanas para avaliar se poderíamos descartar a granularidade para transações um pouco mais antigas. Seus limites eram [0, 1, 2, …, 6, 7, 14, 21, 30, 45, 60, 90, 120, …, 330, 365, …, idade_máxima] dias.

Usando a estratégia padrão, plotamos o histograma dos baldes de delta de tempo, comparando as distribuições nos conjuntos de dados de treino, validação e teste. Podemos ver que as distribuições são consistentes nas três divisões do conjunto de dados, o que é um sinal positivo para a generalização no período fora do tempo (out-of-time). A estratégia menos granular tem uma distribuição semelhante.

Desenho Experimental e Resultados

Para testar de forma rigorosa nossa hipótese de que uma representação de tempo relativa é melhor que uma absoluta, pré-treinamos quatro variantes de modelos fundacionais no mesmo conjunto de dados, usando a tarefa de previsão do próximo token. Em seguida, ajustamos cada variante do modelo para uma tarefa específica, utilizando um conjunto de dados rotulados para um problema de negócios. As variantes foram:

  1. Linha de base (Baseline): Usa tokens especiais de <DIA>, <MÊS> e <DIA DA SEMANA> para a codificação de carimbo de data/hora absoluto.
  2. Delta de Tempo Relativo (REL): Usa apenas a codificação de delta de tempo relativo com a estratégia de baldes padrão.
  3. Delta de Tempo Relativo, Menos Granular (REL-LOW): Usa apenas a codificação relativa com a estratégia de baldes menos granular.
  4. Delta de Tempo Relativo + Codificação Absoluta (REL+ABS): Combina o delta de tempo relativo com a codificação absoluta da linha de base.

Para deixar clara a distinção entre essas variantes, vamos analisar um exemplo de como cada uma codifica um conjunto de transações. Vamos considerar um usuário que tem as seguintes 4 transações (com data, descrição e valor):

  1. 30/08/2025: Supermercado, R$300,00
  2. 22/08/2025: Assinatura de streaming, R$30,00
  3. 22/07/2025: Assinatura de streaming, R$30,00
  4. 10/02/2023: Posto de gasolina, R$200,00

Então, usando a data de pontuação de 31/08/2025, 00:00:00 AM, obteríamos os seguintes tokens para as representações de tempo:

  1. Baseline:
    1. <DAY:30><MONTH:AUGUST><WEEKDAY:SUNDAY>
    2. <DAY:22><MONTH:AUGUST><WEEKDAY:FRIDAY>
    3. <DAY:22><MONTH:JULY><WEEKDAY:TUESDAY>
    4. <DAY:10><MONTH:FEBRUARY><WEEKDAY:FRIDAY>
  2. Relative Time-delta (REL):
    1. <TIMEDELTA:1-DAY-OR-LESS>
    2. <TIMEDELTA:BETWEEN-10-AND-11-DAYS>
    3. <TIMEDELTA:BETWEEN-30-AND-45-DAYS>
    4. <TIMEDELTA:ABOVE-2-YEARS>
  3. Relative Time-delta, Less Granular (REL-LOW):
    1. <TIMEDELTA:1-DAY-OR-LESS>
    2. <TIMEDELTA:BETWEEN-7-AND-14-DAYS>
    3. <TIMEDELTA:BETWEEN-30-AND-45-DAYS>
    4. <TIMEDELTA:ABOVE-2-YEARS>
  4. Relative Time-Delta + Absolute Encoding (REL+ABS)
    1. <TIMEDELTA:1-DAY-OR-LESS><DAY:30><MONTH:AUGUST><WEEKDAY:SUNDAY>
    2. <TIMEDELTA:BETWEEN-10-AND-11-DAYS><DAY:22><MONTH:AUGUST><WEEKDAY:FRIDAY>
    3. <TIMEDELTA:BETWEEN-30-AND-45-DAYS><DAY:22><MONTH:JULY><WEEKDAY:TUESDAY>
    4. <TIMEDELTA:ABOVE-2-YEARS><DAY:10><MONTH:FEBRUARY><WEEKDAY:FRIDAY>

Após pré-treinar e ajustar cada uma das variantes, avaliamos os quatro modelos em um conjunto de dados de teste que continha informações de um período posterior, o que reflete de forma mais precisa o desempenho em um ambiente de produção real. A principal métrica de avaliação foi a AUC. A figura abaixo mostra o delta da AUC em comparação com a variante de linha de base.

Principais Conclusões:

  • Aumento Significativo na AUC com Codificação Relativa: O modelo com codificação de delta de tempo relativo alcançou um aumento de 0,1 ponto percentual na AUC em comparação com a linha de base de codificação absoluta. Embora possa não parecer muito, em um modelo já altamente otimizado, esse aumento se traduz diretamente em impacto de negócios em larga escala. É importante ressaltar que não estamos adicionando nenhuma informação nova ao modelo; o ganho é obtido simplesmente por meio de uma melhor representação das informações temporais.
  • Não é Devido ao Tamanho do Contexto: Curiosamente, a variante do modelo com codificação relativa+absoluta (REL+ABS) demonstrou um aumento de AUC semelhante ao do modelo puramente relativo. Esta é uma descoberta crucial, pois a codificação relativa usa dois tokens a menos por transação, o que a torna 15% mais eficiente em cenários onde o tamanho do contexto é limitado. O fato de o REL+ABS (que tem um tamanho de contexto efetivo menor que o REL devido a mais tokens por transação) ainda apresentar um desempenho similar sugere que o aumento da AUC é genuinamente devido à representação do tempo e não apenas a uma janela de contexto estendida.
  • A Granularidade Importa: A codificação relativa com menor resolução teve um desempenho pior que as outras variantes. Isso indica que informações de delta de tempo mais granulares para transações com idade entre uma e duas semanas são, de fato, valiosas. Essa granularidade é especialmente importante para capturar o tempo decorrido entre duas transações, o que perde precisão se as transações caem em baldes mais amplos.
  • Melhor Generalização ao Longo do Tempo: Impulsionados pelos resultados positivos no conjunto de teste padrão, realizamos uma avaliação estendida em um conjunto de testes que cobria um período mais longo no futuro (fora do período de treinamento). Nesse caso, o modelo de delta de tempo relativo mostrou um aumento de AUC ainda maior, de 0,2 pp, em comparação com a linha de base. Além disso, como mostrado na figura abaixo, as métricas exibem uma tendência positiva no delta da AUC (ou seja, melhora relativa em relação à linha de base) conforme o tempo passa, o que apoia fortemente a hipótese de que a codificação relativa generaliza melhor em períodos de tempo futuros.

Neste trabalho, descobrimos que a forma como representamos a informação temporal pode impactar significativamente a capacidade do modelo de base em entender o comportamento financeiro do cliente. Codificar o tempo como deltas de tempo em vez de datas absolutas aumentou o ROC-AUC em 0,2 pontos percentuais (pp), ao mesmo tempo que reduziu o número de tokens por transação em cerca de 15%, permitindo histórias de transação mais longas dentro do mesmo orçamento de tokens. Esses achados ressaltam um princípio fundamental: a forma como projetamos nossa representação de dados pode ter um impacto substancial no desempenho do modelo. Os resultados mais fracos do ajuste de delta de tempo menos granular destacam ainda mais a importância da experimentação e avaliação sistemáticas para alcançar resultados ótimos.

Referências

[1] Braithwaite, D., & Udagawa, H. (2025, 24 de Março). Entendendo as finanças dos nossos clientes por meio de modelos fundacionais. Building Nubank. https://building.nubank.com/pt-br/entendendo-as-financas-dos-nossos-clientes-por-meio-de-modelos-fundacionais/ 

[2] Braithwaite, D., & Udagawa, H. (2025, 22 de Abril). Definindo uma interface entre dados de transações e modelos fundacionais. Building Nubank. https://building.nubank.com/pt-br/definindo-uma-interface-entre-dados-de-transacoes-e-modelos-fundacionais/  

[3] Braithwaite, D., Cavalcanti, M., & Udagawa, H. (2025, 14 de Maio). Ajuste Fino de Modelos de Usuários de Transações. Building Nubank. https://building.nubank.com/pt-br/ajuste-fino-de-modelos-de-usuarios-de-transacoes/ 

[4] Braithwaite, D. T., Cavalcanti, M., McEver, R. A., et al (2025). Your Spending Needs Attention: Modeling Financial Habits with Transformers. arXiv preprint arXiv:2507.23267.
[5] Foust, T. (2025, 29 de julho). Otimização de Narrativas de Usuários para Modelos Fundacionais. Building Nubank.https://building.nubank.com/pt-br/otimizacao-narrativas-usuarios-modelos-fundacionais/

Conheça nossas oportunidades