Диффузионные модели против криптовалютной анархии: почему DDPM может предсказать падение Bitcoin лучше вашего астролога
Вместо предисловия: когда классический машинный лёрнинг сдаётся
Криптовалютные рынки — это место, где традиционные методы прогнозирования приходят умирать. LSTM модели начинают нервничать от волатильности Bitcoin, ARIMA модели впадают в истерику от резких скачков Ethereum, а классические нейронные сети просто сдаются, когда видят график Dogecoin. И тут на сцену выходят диффузионные модели — технология, которая изначально учила компьютеры рисовать котиков, а теперь пытается предсказать, когда Bitcoin решит устроить очередной "чёрный понедельник".
Забавно, но архитектура, которая породила Stable Diffusion и DALL-E, сейчас активно применяется для анализа финансовых временных рядов. И знаете что? Работает неплохо. Особенно когда классические подходы начинают галлюцинировать от экстремальной волатильности криптомонет.
Почему диффузионные модели вообще работают с временными рядами?
Диффузионные модели — это класс генеративных моделей, которые учатся восстанавливать исходные данные из шума через процесс последовательного "шумоподавления". Основная идея проста: мы берём реальные данные, постепенно добавляем к ним гауссов шум до тех пор, пока не получится чистый шум, а затем учим нейросеть обращать этот процесс.
В контексте финансовых временных рядов это означает, что модель учится отделять сигнал от шума в буквальном смысле. Криптовалютные рынки известны своей экстремальной зашумленностью — случайные твиты Илона Маска, панические продажи, FOMO-покупки. Диффузионная модель может научиться "видеть" структурные паттерны сквозь весь этот хаос.
Математически процесс выглядит так:
- Прямой процесс:
- Обратный процесс:
где — расписание шума, а — параметры нейросети.
Конкретные библиотеки и готовые решения
1. Diffusion-TS: универсальный солдат для временных рядов
GitHub: Y-debug-sys/Diffusion-TS
Это флагманская библиотека для работы с диффузионными моделями временных рядов, опубликованная на ICLR 2024. Основное преимущество — она работает как условно (forecasting), так и безусловно (generation).
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)
Модель использует encoder-decoder transformer с разделёнными временными представлениями, где декомпозиция помогает захватывать семантический смысл временных рядов.
2. TSDiff: Amazon-овский подход к криптовалютному хаосу
GitHub: amazon-science/unconditional-time-series-diffusion
Amazon Research предложила TSDiff — безусловную диффузионную модель, которая может работать с прогнозированием через self-guidance механизм. Особенность в том, что модель не требует дополнительных сетей для conditioning.
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:], # последние 30 дней
forecast_length=7, # прогноз на неделю
guidance_scale=2.0
)
3. FinDiff: табличные финансовые данные встречают диффузию
Paper: FinDiff специально разработан для генерации синтетических финансовых табличных данных. Подходит для создания разнообразных сценариев рынка.
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'} # высокая волатильность
)
4. Быстрая реализация с pytorch-forecasting
Для тех, кто хочет быстро попробовать диффузионные модели в связке с проверенными архитектурами:
import lightning.pytorch as pl
from pytorch_forecasting import TimeSeriesDataSet, TemporalFusionTransformer
from diffusion_wrapper import DiffusionTFT # гипотетическая обёртка
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, # неделя назад
max_prediction_length=24, # сутки вперёд
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))
Практические результаты: диффузия vs классика
Исследования показывают любопытные результаты. В работе "Prediction of Cryptocurrency Prices through a Path Dependent Monte Carlo Simulation" авторы используют Merton's jump diffusion model — гибрид стохастических процессов и машинного обучения. Результат? Модель смогла захватить как постепенные изменения цен, так и резкие скачки, характерные для крипторынков.
Другое исследование показало, что ADE-TFT (Advanced Deep Learning-Enhanced Temporal Fusion Transformer) с диффузионными компонентами значительно превосходит классические подходы по метрикам MAPE, MSE и RMSE. Особенно впечатляют результаты на конфигурации с 8 скрытыми слоями.
Тёмная сторона диффузионных моделей в финансах
Но давайте будем честными. Диффузионные модели — это не серебряная пуля. У них есть серьёзные проблемы:
1. Вычислительная прожорливость
Обучение диффузионной модели на криптовалютных данных требует серьёзных вычислительных ресурсов. Если ваша модель делает 1000 шагов диффузии, то для получения одного прогноза нужно 1000 проходов через нейросеть. Это не очень подходит для высокочастотного трейдинга.
2. Проблема чёрных лебедей
Криптовалютные рынки известны экстремальными событиями — обвал на 50% за день, запрет криптовалют в Китае, хак крупной биржи. Диффузионные модели, обученные на исторических данных, плохо предсказывают такие события.
3. Режимная зависимость
Рынки криптовалют имеют различные режимы поведения — bull market, bear market, sideways движение. Диффузионная модель может отлично работать в одном режиме и полностью провалиться в другом.
Оптимизация и ускорение: как не разориться на GPU
Token Merging для диффузии
GitHub: dbolya/tomesd
Библиотека Token Merging позволяет ускорить диффузионные модели в 1.24 раза без потери качества за счёт объединения избыточных токенов:
import tomesd
from diffusion_model import CryptoDiffusion
model = CryptoDiffusion(...)
tomesd.apply_patch(model, ratio=0.7) # убираем 30% токенов
forecast = model.predict(btc_data)
Cached Adaptive Token Merging
GitHub: omidiu/ca_tome
CA-ToMe комбинирует пространственную и временную оптимизацию, что особенно важно для временных рядов:
from ca_tome import apply_ca_tome
apply_ca_tome(
model,
threshold=0.7,
caching_steps=[0, 10, 20, 30, 40] # кэшируем каждые 10 шагов
)
Практический пример: полный pipeline для Bitcoin
Вот реалистичный пример того, как можно использовать диффузионные модели для прогнозирования 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):
"""Подготовка данных с учётом особенностей криптовалют"""
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):
"""Обучение диффузионной модели"""
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):
"""Прогнозирование с 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}")
Когда диффузионные модели стоит использовать?
Стоит использовать, если:
- У вас есть много исторических данных (минимум год hourly data)
- Вы можете позволить себе длительное обучение (дни-недели на GPU)
- Нужна генерация синтетических сценариев для бэктестинга
- Работаете с мультивариатными временными рядами
- Важна оценка неопределённости прогнозов
Не стоит использовать, если:
- Нужны быстрые прогнозы в реальном времени
- Работаете с короткими временными рядами
- Ограниченные вычислительные ресурсы
- Критична интерпретируемость модели
Будущее диффузионных моделей в криптоаналитике
Диффузионные модели в финансах — это как криптовалюты в 2010 году. Технология сырая, ресурсоёмкая, но потенциал огромен. Уже сейчас мы видим гибридные подходы: DDPM + Transformer, диффузия + reinforcement learning, conditional diffusion для market regimes.
Следующий прорыв ожидается в области multimodal диффузии — модели, которые будут учитывать не только цены, но и новости, социальные сигналы, on-chain метрики. Представьте диффузионную модель, которая "видит" корреляцию между твитом Илона Маска и движением Dogecoin.
Заключение: диффузия как эволюция, а не революция
Диффузионные модели не заменят классические подходы к прогнозированию криптовалют. Они их дополнят. LSTM останется для быстрых прогнозов, ARIMA — для стационарных участков, а диффузия возьмёт на себя генерацию сценариев и работу с экстремальной волатильностью.
Главный урок: в мире криптовалют нет серебряных пуль. Есть только грамотная комбинация инструментов, глубокое понимание рынка и здоровый скептицизм к любым "революционным" решениям. Диффузионные модели — мощный инструмент, но помните: они всего лишь пытаются найти паттерны в хаосе. А хаос, как известно, не очень любит, когда его предсказывают.
P.S.: Если ваша диффузионная модель показывает 95% accuracy на прогнозировании Bitcoin — проверьте код дважды. Скорее всего, где-то затесался data leakage 😉
MarketMaker.cc Team
Количественные исследования и стратегии