← Voltar aos artigos
July 29, 2025
5 min read

Modelos de Difusão vs Anarquia das Criptomoedas: Por Que o DDPM Consegue Prever Quedas do Bitcoin Melhor Que Seu Astrólogo

Modelos de Difusão vs Anarquia das Criptomoedas: Por Que o DDPM Consegue Prever Quedas do Bitcoin Melhor Que Seu Astrólogo
#diffusion models
#cryptocurrency
#forecasting
#machine learning
#Bitcoin
#DDPM
#time series
🧠
Part 2 of 4 · Collection
Deep Learning for Markets

Em Vez de um Prefácio: Quando o Machine Learning Clássico Desiste

Os mercados de criptomoedas são o lugar onde os métodos tradicionais de previsão vão morrer. Os modelos LSTM começam a ficar nervosos com a volatilidade do Bitcoin, os modelos ARIMA têm crises histéricas com os saltos bruscos do Ethereum, e as redes neurais clássicas simplesmente desistem quando veem o gráfico do Dogecoin. E é então que entram em cena os modelos de difusão — tecnologia que originalmente ensinou computadores a desenhar gatos e que agora tenta prever quando o Bitcoin vai decidir ter mais uma "Black Monday".

Curiosamente, a arquitetura que deu origem ao Stable Diffusion e ao DALL-E agora é aplicada ativamente à análise de séries temporais financeiras. E sabe de uma coisa? Funciona muito bem. Especialmente quando as abordagens clássicas começam a alucinar diante da volatilidade extrema das criptomoedas.

Market Chaos vs Diffusion Signal Do Caos à Clareza: Como os modelos de difusão extraem sinais estruturados do ambiente de alto ruído dos mercados de criptomoedas

Por Que os Modelos de Difusão Funcionam com Séries Temporais?

Modelos de difusão são uma classe de modelos generativos que aprendem a restaurar os dados originais a partir de ruído por meio de um processo sequencial de "remoção de ruído". A ideia básica é simples: pegamos dados reais, adicionamos gradualmente ruído gaussiano até obter ruído puro e, em seguida, ensinamos uma rede neural a reverter esse processo.

No contexto de séries temporais financeiras, isso significa que o modelo aprende a separar sinal de ruído no sentido literal. Os mercados de criptomoedas são conhecidos por seu ruído extremo — tweets aleatórios de Elon Musk, vendas em pânico, compras por FOMO. Um modelo de difusão pode aprender a "enxergar" padrões estruturais através de todo esse caos.

Matematicamente, o processo se parece com isto:

  • Processo direto: q(xtxt1)=N(xt;1βtxt1,βtI)q(x_t | x_{t-1}) = \mathcal{N}(x_t; \sqrt{1-\beta_t}x_{t-1}, \beta_t I)
  • Processo reverso: pθ(xt1xt)=N(xt1;μθ(xt,t),Σθ(xt,t))p_\theta(x_{t-1} | x_t) = \mathcal{N}(x_{t-1}; \mu_\theta(x_t, t), \Sigma_\theta(x_t, t))

onde βt\beta_t é o cronograma de ruído, e θ\theta são os parâmetros da rede neural.

Diffusion Process for Time Series Remoção Sequencial de Ruído: O processo direto (adição de ruído) e o processo reverso (remoção de ruído) para reconstruir séries temporais financeiras

Bibliotecas Específicas e Soluções Prontas

1. Diffusion-TS: Soldado Universal para Séries Temporais

GitHub: Y-debug-sys/Diffusion-TS

Esta é a biblioteca principal para trabalhar com modelos de difusão em séries temporais, publicada na ICLR 2024. A principal vantagem é que ela funciona tanto de forma condicional (previsão) quanto incondicional (geração).

import torch
from diffusion_ts import DiffusionTS
import pandas as pd

btc_data = pd.read_csv('btc_prices.csv')
prices = torch.tensor(btc_data['close'].values).float()

model = DiffusionTS(
    input_dim=1,
    hidden_dim=64,
    num_layers=4,
    max_sequence_length=100,
    num_diffusion_steps=1000
)

model.fit(prices, epochs=100)

forecast = model.predict(prices[-100:], forecast_horizon=24)

O modelo usa um transformer encoder-decoder com representações temporais separadas, em que a decomposição ajuda a capturar o significado semântico da série temporal.

2. TSDiff: A Abordagem da Amazon para o Caos das Criptomoedas

GitHub: amazon-science/unconditional-time-series-diffusion

A Amazon Research propôs o TSDiff — um modelo de difusão incondicional capaz de realizar previsões por meio de um mecanismo de autoguiamento. A particularidade é que o modelo não requer redes adicionais para condicionamento.

from tsdiff import TSDiff
import numpy as np

crypto_data = load_cryptocurrency_data(['BTC', 'ETH', 'LTC'])

tsdiff = TSDiff(
    input_size=crypto_data.shape[-1],
    hidden_size=128,
    num_layers=6,
    diffusion_steps=1000,
    beta_schedule='cosine'
)

tsdiff.train(crypto_data, num_epochs=200)

synthetic_crypto = tsdiff.sample(num_samples=1000, length=365)

forecast = tsdiff.forecast_with_guidance(
    context=crypto_data[-30:],  # last 30 days
    forecast_length=7,          # week forecast
    guidance_scale=2.0
)

3. FinDiff: Dados Financeiros Tabulares Encontram a Difusão

Paper: O FinDiff foi projetado especificamente para gerar dados financeiros tabulares sintéticos. Adequado para criar cenários de mercado diversos.

import torch
from findiff import FinancialDiffusion

market_data = pd.read_csv('crypto_market_features.csv')

financial_features = [
    'price', 'volume', 'market_cap', 'volatility',
    'rsi', 'macd', 'bollinger_bands'
]

findiff = FinancialDiffusion(
    categorical_columns=['exchange', 'crypto_type'],
    numerical_columns=financial_features,
    embedding_dim=32,
    hidden_dim=256
)

findiff.fit(market_data[financial_features])

synthetic_scenarios = findiff.generate(n_samples=10000)

stress_test_data = findiff.generate_conditional(
    conditions={'volatility': '>0.8'}  # high volatility
)

4. Implementação Rápida com pytorch-forecasting

Para quem quer experimentar rapidamente modelos de difusão combinados com arquiteturas comprovadas:

import lightning.pytorch as pl
from pytorch_forecasting import TimeSeriesDataSet, TemporalFusionTransformer
from diffusion_wrapper import DiffusionTFT  # hypothetical wrapper

crypto_df = pd.read_csv('hourly_crypto_data.csv')

training = TimeSeriesDataSet(
    crypto_df,
    time_idx="hour",
    target="btc_price",
    group_ids=["crypto_pair"],
    max_encoder_length=168,  # week back
    max_prediction_length=24,  # day forward
    time_varying_unknown_reals=["price", "volume", "volatility"],
    time_varying_known_reals=["hour_of_day", "day_of_week"],
)

diffusion_tft = DiffusionTFT.from_dataset(
    training,
    hidden_size=64,
    attention_head_size=4,
    diffusion_steps=100,
    noise_schedule='linear'
)

trainer = pl.Trainer(max_epochs=50, accelerator="gpu")
trainer.fit(diffusion_tft, train_dataloaders=training.to_dataloader(train=True))

Resultados Práticos: Difusão vs Clássicos

As pesquisas mostram resultados curiosos. No artigo "Prediction of Cryptocurrency Prices through a Path Dependent Monte Carlo Simulation", os autores usam o modelo de difusão com saltos de Merton — um híbrido de processos estocásticos e machine learning. O resultado? O modelo conseguiu capturar tanto as mudanças graduais de preço quanto os saltos bruscos característicos dos mercados de criptomoedas.

Outro estudo mostrou que o ADE-TFT (Advanced Deep Learning-Enhanced Temporal Fusion Transformer) com componentes de difusão supera significativamente as abordagens clássicas nas métricas MAPE, MSE e RMSE. Os resultados na configuração de 8 camadas ocultas são especialmente impressionantes.

Forecasting with Confidence Intervals Previsão Probabilística: Usando modelos de difusão para gerar trajetórias futuras de preço com intervalos de confiança associados

O Lado Sombrio dos Modelos de Difusão nas Finanças

Mas sejamos honestos. Modelos de difusão não são uma bala de prata. Eles têm problemas sérios:

1. Ganância Computacional

Treinar um modelo de difusão com dados de criptomoedas exige recursos computacionais sérios. Se o seu modelo faz 1000 passos de difusão, então, para obter uma única previsão, você precisa de 1000 passagens pela rede neural. Isso não é muito adequado para trading de alta frequência.

2. O Problema do Cisne Negro

Os mercados de criptomoedas são conhecidos por eventos extremos — queda de 50% em um dia, proibição de criptomoedas na China, hack de uma grande corretora. Modelos de difusão treinados com dados históricos preveem mal esses eventos.

3. Dependência de Regime

Os mercados de criptomoedas têm vários regimes comportamentais — mercado em alta, mercado em baixa, movimento lateral. Um modelo de difusão pode funcionar excelentemente em um regime e falhar completamente em outro.

Otimização e Aceleração: Como Não Ir à Falência com a GPU

Token Merging para Difusão

GitHub: dbolya/tomesd

A biblioteca Token Merging permite acelerar os modelos de difusão em 1,24x sem perda de qualidade, mesclando tokens redundantes:

import tomesd
from diffusion_model import CryptoDiffusion

model = CryptoDiffusion(...)

tomesd.apply_patch(model, ratio=0.7)  # remove 30% of tokens

forecast = model.predict(btc_data)

Cached Adaptive Token Merging

GitHub: omidiu/ca_tome

O CA-ToMe combina otimização espacial e temporal, o que é especialmente importante para séries temporais:

from ca_tome import apply_ca_tome

apply_ca_tome(
    model, 
    threshold=0.7,
    caching_steps=[0, 10, 20, 30, 40]  # cache every 10 steps
)

Exemplo Prático: Pipeline Completo para o Bitcoin

Aqui está um exemplo realista de como usar modelos de difusão para prever o Bitcoin:

import torch
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from diffusion_ts import DiffusionTS

class CryptoDiffusionPipeline:
    def __init__(self, sequence_length=100, forecast_horizon=24):
        self.sequence_length = sequence_length
        self.forecast_horizon = forecast_horizon
        self.scaler = MinMaxScaler()
        self.model = None
        
    def prepare_data(self, crypto_data):
        """Data preparation considering cryptocurrency features"""
        crypto_data['returns'] = crypto_data['close'].pct_change()
        crypto_data['volatility'] = crypto_data['returns'].rolling(24).std()
        crypto_data['rsi'] = self.compute_rsi(crypto_data['close'])
        
        features = ['close', 'volume', 'volatility', 'rsi']
        scaled_data = self.scaler.fit_transform(crypto_data[features])
        
        return scaled_data
    
    def train_model(self, data):
        """Training diffusion model"""
        self.model = DiffusionTS(
            input_dim=data.shape[1],
            hidden_dim=128,
            num_layers=6,
            diffusion_steps=1000,
            noise_schedule='cosine',
            loss_type='l2'
        )
        
        X, y = self.create_sequences(data)
        
        self.model.fit(
            X, y,
            epochs=200,
            batch_size=32,
            learning_rate=1e-4,
            validation_split=0.2
        )
    
    def forecast(self, recent_data):
        """Forecasting with confidence intervals"""
        predictions = []
        
        for _ in range(100):  # Monte Carlo sampling
            pred = self.model.sample_forecast(
                context=recent_data[-self.sequence_length:],
                horizon=self.forecast_horizon
            )
            predictions.append(pred)
        
        predictions = np.array(predictions)
        
        mean_pred = np.mean(predictions, axis=0)
        std_pred = np.std(predictions, axis=0)
        
        return {
            'forecast': mean_pred,
            'confidence_95': mean_pred + 1.96 * std_pred,
            'confidence_5': mean_pred - 1.96 * std_pred
        }

pipeline = CryptoDiffusionPipeline()
btc_data = pd.read_csv('btc_hourly.csv')

prepared_data = pipeline.prepare_data(btc_data)
pipeline.train_model(prepared_data)

forecast_result = pipeline.forecast(prepared_data)
print(f"Bitcoin forecast for next 24h: {forecast_result['forecast'][-1]:.2f}")

Quando Você Deve Usar Modelos de Difusão?

Vale a pena usar se:

  • Você tem muitos dados históricos (no mínimo um ano de dados horários)
  • Você pode se dar ao luxo de um treinamento longo (dias-semanas em GPU)
  • Precisa de geração de cenários sintéticos para backtesting
  • Está trabalhando com séries temporais multivariadas
  • A estimativa de incerteza das previsões é importante

Não vale a pena usar se:

  • Precisa de previsões rápidas em tempo real
  • Está trabalhando com séries temporais curtas
  • Tem recursos computacionais limitados
  • A interpretabilidade do modelo é crítica

O Futuro dos Modelos de Difusão na Análise de Cripto

Os modelos de difusão nas finanças são como as criptomoedas em 2010. A tecnologia é bruta, consome muitos recursos, mas o potencial é enorme. Já vemos abordagens híbridas: DDPM + Transformer, difusão + aprendizado por reforço, difusão condicional para regimes de mercado.

O próximo grande avanço é esperado na difusão multimodal — modelos que considerarão não apenas os preços, mas também notícias, sinais sociais, métricas on-chain. Imagine um modelo de difusão que "enxerga" a correlação entre um tweet de Elon Musk e o movimento do Dogecoin.

Conclusão: Difusão como Evolução, Não Revolução

Os modelos de difusão não substituirão as abordagens clássicas de previsão de criptomoedas. Eles as complementarão. O LSTM continuará existindo para previsões rápidas, o ARIMA — para trechos estacionários, e a difusão assumirá a geração de cenários e o trabalho com volatilidade extrema.

A lição principal: no mundo das criptomoedas não existem balas de prata. Existe apenas a combinação inteligente de ferramentas, um entendimento profundo do mercado e um ceticismo saudável em relação a qualquer solução "revolucionária". Os modelos de difusão são uma ferramenta poderosa, mas lembre-se: eles apenas tentam encontrar padrões no caos. E o caos, como sabemos, não gosta muito de ser previsto.

P.S.: Se o seu modelo de difusão mostrar 95% de precisão na previsão do Bitcoin — verifique o código duas vezes. Muito provavelmente há vazamento de dados em algum lugar 😉

blog.disclaimer

Authors

Eugen Soloviov
Eugen Soloviov

Trading-systems engineer

Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.

Newsletter

Fique à frente do mercado

Assine nossa newsletter para insights exclusivos sobre trading com IA, análises de mercado e atualizações da plataforma.

Respeitamos sua privacidade. Cancele a inscrição a qualquer momento.