Por que o TimesFM 2.5 importa agora?
Em agosto de 2026, fazer previsões de séries temporais com qualidade profissional está ao alcance de qualquer pessoa com um notebook e conexão à internet. O TimesFM 2.5, modelo de forecasting do Google Research, traz previsão probabilística com quantis, integração de covariáveis externas e detecção de anomalias — tudo em um pacote de ~200 milhões de parâmetros que roda no Google Colab gratuito. Há dois anos, você precisaria de um cluster Spark e um time de dados dedicado. Hoje, pip install timesfm resolve.
O que é o TimesFM 2.5
O TimesFM 2.5 (Time Series Foundation Model) é um modelo fundacional para séries temporais desenvolvido pelo Google Research. Diferente de modelos tradicionais como ARIMA ou Prophet, que precisam ser treinados do zero para cada série, o TimesFM funciona em modo zero-shot: você fornece o histórico e ele gera previsões imediatas, sem treinamento por série. A versão 2.5 adiciona cabeçalho de quantis contínuos, correção de cruzamento de quantis e suporte a covariáveis dinâmicas via XReg.
✅ O que você ganha
- Zero-shot imediato: Sem treinamento por série — alimente o histórico e receba previsões em segundos
- Previsão probabilística: 10 quantis (q10 a q90) mais a média, permitindo intervalos de confiança e análise de risco
- Covariáveis externas (XReg): Incorpore preço, temperatura, feriados, promoções e features categóricas no forecast
- Detecção de anomalias integrada: Compare valores observados contra intervalos de previsão para alertas automáticos
- Escalável: Processamento em batch de dezenas de séries simultaneamente com throughput ajustável
- Open source: Apache 2.0, roda em CPU e GPU, disponível no Hugging Face
⚠️ O que você NÃO ganha
- Não substitui modelos treinados em domínio específico: Em séries muito idiossincráticas (dados de sensores industriais com padrões atípicos), um modelo fine-tunado ainda pode superar o zero-shot
- Não lida com frequências irregulares: O TimesFM espera séries igualmente espaçadas (diárias, semanais, horárias)
- Contexto limitado a 1024 pontos: Séries com múltiplos anos de dados diários precisam de janelamento
Tabela de requisitos
| Componente | Mínimo | Recomendado | Ideal |
|---|---|---|---|
| Python | 3.9 | 3.10+ | 3.11+ |
| Hardware | CPU, 8 GB RAM | GPU T4 (Colab gratuito) | GPU A100 ou superior |
| Armazenamento | 2 GB | 5 GB | 10 GB (para datasets grandes) |
| Conhecimento prévio | Python básico + pandas | Estatística descritiva | Experiência com séries temporais |
| Tempo estimado | 15 min (FAST_MODE=True) | 45 min (modo completo) | 2h (com XReg e tuning) |
Passo a passo: pipeline completo de forecasting
1. Instalação e configuração do ambiente
O primeiro passo é instalar o pacote timesfm com suporte a PyTorch e preparar o ambiente:
# Instalação única — o pacote inclui o modelo e dependências
pip install timesfm[torch]
import timesfm
import numpy as np
import pandas as pd
import torch
import matplotlib.pyplot as plt
# Configurar seeds para reprodutibilidade
np.random.seed(7)
torch.manual_seed(7)
torch.set_float32_matmul_precision("high")
# Detectar dispositivo
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
print(f"Dispositivo: {DEVICE}")Por que isso importa: O TimesFM 2.5 usa torch.set_float32_matmul_precision("high") para ativar kernels otimizados da NVIDIA — em GPU, isso pode dobrar o throughput de inferência. Se estiver no Colab, ative o runtime GPU em “Ambiente de execução → Alterar tipo de ambiente”.
2. Gerando um dataset de varejo realista
O tutorial gera dados sintéticos de 6 lojas com 1.200 dias de vendas, incluindo tendência, sazonalidade semanal e anual, elasticidade de preço, lift de promoções e efeito de temperatura:
N_DAYS = 1200
N_STORES = 6
# Para cada loja, geramos:
# - Nível base com tendência linear
# - Sazonalidade semanal (dias da semana)
# - Sazonalidade anual (senoide)
# - Elasticidade-preço (vendas caem quando preço sobe)
# - Lift promocional (vendas sobem em promoções)
# - Efeito de feriados (+55 unidades em feriados)
# - Efeito de temperatura
# - Ruído aleatórioVerificação intermediária: Execute df.head() e confirme que as colunas são date, store, region, sales, price, promo, holiday, dow, temp. Você deve ver ~7.200 linhas (6 lojas × 1.200 dias).
3. Carregando o modelo e fazendo a primeira previsão zero-shot
model = timesfm.TimesFM_2p5_200M_torch.from_pretrained(
"google/timesfm-2.5-200m-pytorch"
)
# Configuração base: até 1024 pontos de contexto, até 256 de horizonte
model.compile(timesfm.ForecastConfig(
max_context=1024,
max_horizon=256,
normalize_inputs=True,
use_continuous_quantile_head=True,
fix_quantile_crossing=True,
))
# Previsão zero-shot para 56 dias
HORIZON = 56
point, quant = model.forecast(horizon=HORIZON, inputs=[train])
# point.shape = (1, 56) — previsão pontual (mediana)
# quant.shape = (1, 56, 10) — 10 quantis: q10, q20, ..., q90Por que fix_quantile_crossing=True: Em horizontes longos, os quantis podem se cruzar (q90 ficar menor que q50, por exemplo). Esse flag garante monotonicidade — os quantis são sempre ordenados.
4. Métricas de avaliação e comparação com baselines
O tutorial calcula MAE, RMSE, MAPE, sMAPE, MASE e cobertura de intervalo de previsão, comparando o TimesFM contra baselines simples como naive sazonal e último valor:
# MASE (Mean Absolute Scaled Error) — a métrica mais robusta
# MASE < 1: modelo melhor que naive
# MASE > 1: modelo pior que naive
# No teste com 6 lojas e 56 dias de horizonte:
# TimesFM: MASE ≈ 0.45
# SNaive: MASE = 1.0 (baseline)
# Redução de 55% no erro em relação ao naive sazonal5. Backtesting com janela deslizante (rolling-origin)
Em vez de avaliar em apenas uma janela de holdout (o que pode ser enganoso), o backtesting avalia o modelo em múltiplas origens históricas:
# 6 folds × 56 dias × 6 séries = 36 avaliações independentes
# Cada fold caminha 56 dias para trás no tempo
# Resultado: MASE consistente entre 0.35 e 0.55 em todos os foldsPor que isso importa: Um MASE estável entre folds diferentes indica que o modelo não está sobre-ajustado a um período específico. Se o MASE variasse de 0.3 a 1.5 entre folds, você saberia que o modelo só funciona bem em certas condições.
6. Integração de covariáveis com XReg
O grande diferencial do TimesFM 2.5 é a capacidade de incorporar covariáveis externas conhecidas no futuro — como preços planejados, calendário de promoções e previsão de temperatura:
# Dois modos de fusão:
# "xreg + timesfm": covariáveis processadas primeiro, depois o modelo
# "timesfm + xreg": modelo processa a série, depois covariáveis refinam
dynamic_numerical = {"price": [...], "temp": [...]}
dynamic_categorical = {"promo": [...], "holiday": [...], "dow": [...]}
static_categorical = {"region": [...], "store": [...]}
point, quant = model.forecast_with_covariates(
inputs=series,
dynamic_numerical_covariates=dynamic_numerical,
dynamic_categorical_covariates=dynamic_categorical,
static_categorical_covariates=static_categorical,
)Na prática: Se você sabe que vai fazer uma promoção daqui a 3 semanas, pode informar isso como covariável futura e o modelo ajusta a previsão de vendas para cima naquele período específico.
7. Detecção de anomalias com intervalos de previsão
Este é um dos usos mais práticos do TimesFM 2.5: comparar valores observados contra os intervalos de previsão e disparar alertas:
# Para cada ponto no horizonte de detecção:
# - Se valor real < q10 ou > q90 → "WARNING"
# - Se valor real < (q10 - 1.5×IQR) ou > (q90 + 1.5×IQR) → "CRITICAL"
# O tutorial injeta anomalias artificiais (spikes, quedas)
# e o detector captura ~100% dos eventos com severidade apropriadaCaso de uso real: Monitoramento de vendas diárias de e-commerce. Se as vendas de um produto caírem abaixo do q10 previsto por 3 dias consecutivos, dispare um alerta para a equipe de merchandising verificar ruptura de estoque.
8. Throughput e robustez
O tutorial testa o modelo em condições adversas:
- Throughput: 48 séries processadas em lote — de 1.2 a 8.5 séries/segundo dependendo do batch size
- NaN no input: O modelo lida com valores ausentes no início e no meio da série, produzindo forecasts finitos
- Contexto curto: Com apenas 32 pontos históricos (1 mês diário), o MASE ainda fica abaixo de 0.9
- Clipping de valores negativos: Com
infer_is_positive=True, forecasts nunca ficam abaixo de zero
Casos de uso reais
- Previsão de demanda no varejo: 500+ SKUs, previsão diária com horizonte de 8 semanas, incorporando calendário promocional como covariável
- Detecção de anomalias em operações: Monitoramento de 200+ métricas de infraestrutura (CPU, latência, erros) com alertas baseados em quantis
- Planejamento de capacidade: Previsão de tráfego para alocação dinâmica de recursos em nuvem com 12 semanas de antecedência
- Forecasting financeiro: Projeção de receita trimestral com intervalos de confiança para apresentação ao conselho
- Supply chain: Previsão de lead time de fornecedores integrada a dados de frete e clima como covariáveis externas
Tabela comparativa: TimesFM 2.5 vs alternativas
| Característica | TimesFM 2.5 | Prophet (Meta) | ARIMA/SARIMA | DeepAR (GluonTS) |
|---|---|---|---|---|
| Zero-shot | ✅ Sim | ❌ Treina por série | ❌ Treina por série | ❌ Treina por série |
| Quantis | ✅ 10 quantis | ✅ Intervalos paramétricos | ✅ Intervalos paramétricos | ✅ Quantis via amostragem |
| Covariáveis futuras | ✅ Nativas (XReg) | ✅ Regressores aditivos | ✅ ARIMAX | ✅ Sim |
| Detecção de anomalias | ✅ Integrada | ⚠️ Manual | ⚠️ Manual | ⚠️ Manual |
| Escala | 1000s de séries em batch | 1 série por vez | 1 série por vez | 100s de séries em batch |
| Hardware mínimo | CPU 8 GB | CPU 2 GB | CPU 1 GB | GPU recomendada |
| Licença | Apache 2.0 | MIT | Statsmodels (BSD) | Apache 2.0 |
Troubleshooting
- ❌ Sintoma:
ImportError: No module named 'timesfm'
→ Causa: Instalação não concluída ou ambiente virtual não ativado
→ Solução: Executepip install timesfm[torch] --upgradee verifique compip show timesfm - ❌ Sintoma:
CUDA out of memoryao carregar o modelo
→ Causa: GPU com menos de 4 GB de VRAM
→ Solução: Force CPU comimport os; os.environ["CUDA_VISIBLE_DEVICES"]=""ou useper_core_batch_size=1 - ❌ Sintoma: Previsões idênticas para todas as séries
→ Causa:normalize_inputsnão está funcionando — possível bug com série de comprimento diferente
→ Solução: Verifique que todos os inputs têm o mesmo comprimento ou normalize manualmente com(series - mean) / std - ❌ Sintoma: Quantis cruzados (q90 menor que q50)
→ Causa:fix_quantile_crossing=Falseou horizonte muito longo (>256)
→ Solução: Ativefix_quantile_crossing=Truee reduzamax_horizon - ❌ Sintoma:
ValueErrorao usar XReg com séries de comprimentos diferentes
→ Causa: As covariáveis precisam cobrir contexto + horizonte para cada série
→ Solução: Verifique que o comprimento das covariáveis élen(contexto) + horizontepara cada série no batch
FAQ
P: Preciso de GPU para usar o TimesFM 2.5?
Não. O modelo roda em CPU e é perfeitamente utilizável para previsões de algumas dezenas de séries. A GPU acelera o processamento em batch (48+ séries simultâneas) e reduz o tempo de 45 para ~8 segundos.
P: Posso fazer fine-tuning com meus dados?
Sim. O modelo é um checkpoint PyTorch padrão e pode ser fine-tunado com seus dados. Mas o ponto forte do TimesFM é o zero-shot — na maioria dos casos, o ganho do fine-tuning não justifica o custo computacional.
P: Qual a frequência mínima suportada?
O modelo não impõe frequência — você pode usar dados horários, diários, semanais ou mensais. O que importa é que a série seja igualmente espaçada e que a sazonalidade capturável caiba na janela de contexto (1024 pontos).
P: TimesFM substitui o Prophet?
Para forecasting em escala (múltiplas séries), sim. Para uma única série com forte componente de sazonalidade anual e feriados personalizados, o Prophet ainda pode ser mais interpretável e fácil de ajustar manualmente.
P: Como exporto as previsões para produção?
O tutorial inclui exportação para CSV e JSON. Para produção, você pode serializar o modelo com torch.save() e servir via FastAPI ou Flask com inferência em batch.
O futuro do forecasting zero-shot
O TimesFM 2.5 representa um ponto de inflexão: forecasting de qualidade profissional está se tornando uma commodity acessível. Em 2027, a tendência é que modelos fundacionais de séries temporais se tornem o padrão para 80% dos casos de uso, com modelos especializados reservados para domínios de nicho (finanças de alta frequência, sensores IoT com padrões físicos específicos). O Google já sinalizou que versões futuras trarão suporte a frequências múltiplas (horário + diário + semanal no mesmo modelo) e fine-tuning com LoRA. Para o profissional de dados brasileiro, este é o momento de migrar de ARIMA/Prophet para TimesFM — a redução de código e o ganho de acurácia são significativos demais para ignorar.
Descubra mais sobre noticiAI
Assine para receber nossas notícias mais recentes por e-mail.



