Proyecto de Maestría · Deep Learning · 2024

P2P Bolivia ML

Predicción de precios P2P de criptomonedas en Bolivia usando Stacked Bi-LSTM, Pre-LN Transformer y Transfer Learning

3
Modelos
70
Features
R² 0.80
Mejor Score
389K
Parámetros
01

Problema y Contexto

🇧🇴

Mercado P2P en Bolivia

En Bolivia, el acceso a criptomonedas se realiza principalmente a través de mercados Peer-to-Peer (P2P) debido a restricciones bancarias y regulatorias. Los precios presentan una prima significativa sobre el mercado global, con spreads que varían según liquidez, demanda local y tipo de cambio paralelo.

💱

La Prima P2P

El tipo de cambio oficial es 6.96 BOB/USD, pero el precio P2P de USDT fluctúa significativamente por encima de este valor. Esta prima refleja la escasez de dólares, restricciones cambiarias y la demanda creciente de criptomonedas como refugio de valor y herramienta de remesas.

🎯

Objetivo del Proyecto

Desarrollar un sistema de predicción basado en Deep Learning que:

  • Prediga el precio P2P USDT/BOB con alta precisión
  • Identifique patrones temporales y oportunidades
  • Cuantifique la prima P2P vs tipo de cambio oficial
  • Provea una API REST para consumo en tiempo real
📊

Fuentes de Datos

Binance Spot API — BTC/USDT, ETH/USDT
Binance P2P API — Precios P2P Bolivia
CoinGecko Market data global
Técnicos 15+ indicadores calculados
02

Arquitectura del Pipeline

Data Layer
📡
Ingesta de Datos CoinGecko · Binance Spot · Binance P2P
⚙️
Preprocessing Outlier removal · StandardScaler · Feature Engineering
📊
70 Features OHLCV · Técnicos · P2P · Temporales
Model Layer
🧠
Stacked Bi-LSTM 2 capas · [128, 64] · Temporal Attention
389,249 parámetros
Pre-LN Transformer d=256 · 8 heads · 3 encoder layers
2,421,505 parámetros
🔄
Transfer Learning Fase 1: Frozen (BTC) → Fase 2: Fine-tune (P2P)
Discriminative LR por capa
Evaluation Layer
📋
MétricasRMSE · MAE · MAPE · R² · DA
📉
Walk-Forward5 splits · Expanding window
💰
Trading SimSharpe · Drawdown · P&L
📊
Diebold-MarianoTest estadístico de comparación
03

Modelos Implementados

🧠

Stacked Bi-LSTM + Temporal Attention

Recurrent Neural Network bidireccional con mecanismo de atención

🏆 Ganador

Arquitectura LSTM apilada de 2 capas con procesamiento bidireccional, lo que permite al modelo capturar dependencias tanto pasadas como futuras en la secuencia temporal. El mecanismo de atención temporal pondera dinámicamente la importancia de cada timestep.

Capas LSTM2 (bidireccional)
Unidades[128, 64]
Dropout0.2
RegularizaciónL2 (1e-4)
Gradient Clippingnorm=1.0
OptimizerAdam (lr=1e-3)
Early Stoppingpatience=15
Parámetros389,249

Formulación Matemática

h_t = LSTM(x_t, h_{t-1}, c_{t-1})
Forward pass de cada capa LSTM
α_t = softmax(W_a · tanh(V_a · h_t))
Pesos de atención temporal
context = Σ(α_t · h_t)
Vector de contexto ponderado

Pre-LN Transformer

Transformer con Pre-Layer Normalization para entrenamiento estable

Variante del Transformer con Pre-LayerNorm que estabiliza el entrenamiento. Utiliza Positional Encoding sinusoidal y Multi-Head Self-Attention para capturar relaciones de largo alcance en series temporales sin las limitaciones de las RNNs.

d_model256
Heads8
Encoder Layers3
FFN Multiplier4x (1024)
ActivationGELU
OptimizerAdamW (lr=5e-4)
SchedulerCosine Annealing + Warmup
Parámetros2,421,505

Formulación Matemática

PE(pos, 2i) = sin(pos / 10000^{2i/d})
Positional Encoding sinusoidal
Attn(Q,K,V) = softmax(QK^T / √d_k) · V
Scaled Dot-Product Attention
x' = x + MHA(LayerNorm(x))
Pre-LN Residual Connection
🔄

Transfer Learning (BTC → P2P Bolivia)

Pipeline de 2 fases: pre-entrenamiento en mercado global + fine-tuning local

Aprovecha el conocimiento aprendido de mercados globales (BTC/ETH) de alta liquidez para mejorar la predicción en el mercado P2P boliviano de menor liquidez. Utiliza discriminative learning rates por capa funcional.

Fase 1 Frozen — Pre-entrenamiento
Épocas30 (patience=10)
LR1e-4
Congelados26% params (101,376)
Mejor Loss0.003652 (época 19)
Fase 2 Fine-tune — Discriminativo
Épocas50 (patience=15)
LR Range5e-6 → 5e-5
Layer Groups31 grupos
Mejor Loss0.003615 (época 3)
04

Resultados

Todas las métricas están en escala real (BOB/USDT) — datos desnormalizados del test set.
Métrica LSTM 🏆 Transformer Transfer Learning
RMSE 65,395.61 77,980.36 69,372.80
MAE 28,884.61 32,467.81 37,802.89
MAPE 5.23% 5.68% 7.35%
0.7977 0.7124 0.7724
Directional Accuracy 48.43% 48.55% 51.14%
Parámetros 389,249 2,421,505 389,249

Test Estadístico — Diebold-Mariano

El test Diebold-Mariano confirma que el LSTM es estadísticamente significativamente mejor que el Transformer (p = 0.0000). Esto valida que la diferencia en RMSE no es producto del azar.

Trading Simulator

Simulación con capital inicial de $10,000 USD y threshold de 0.3%.

MétricaLSTMTransformerTransfer Learning
Return %86,406,017.9%10,158,272.4%1,399.1%
Sharpe Ratio12.899.143.42
Max Drawdown13.74%22.17%17.97%
N° Trades1,6741,412332

Walk-Forward Validation

5 splits con expanding window para validación temporal realista.

MétricaLSTMTransformerTransfer Learning
WF RMSE Mean39,818.7246,017.9248,145.56
WF RMSE Std66,750.9153,688.1355,099.77
WF DA Mean48.75%48.88%50.97%
05

Metodología

🧹 Preprocesamiento

  • Outlier removal con IQR + Z-score
  • StandardScaler ajustado solo sobre datos de entrenamiento (sin data leakage)
  • Imputación de valores faltantes con forward-fill
  • Validación de integridad temporal

⚙️ Feature Engineering

  • OHLCV raw (Open, High, Low, Close, Volume)
  • Indicadores técnicos: RSI, MACD, Bollinger Bands, ATR, OBV
  • Spreads y ratios entre exchanges
  • Features temporales: hora, día semana, mes (ciclical encoding)
  • Prima P2P: (precio_p2p / precio_spot × TC_oficial) - 1

📐 Split Temporal

  • Train: 2020-01-01 → 2022-12-31
  • Validation: 2023-01-01 → 2023-06-30
  • Test: 2023-07-01 → 2024-12-31
  • Ventana de contexto: 72 horas (3 días)
  • Horizonte de predicción: 1 hora

📊 Evaluación

  • Métricas: RMSE, MAE, MAPE, R², Directional Accuracy
  • Test estadístico: Diebold-Mariano para comparación
  • Bootstrap CI: Intervalos de confianza (1000 muestras)
  • Walk-Forward: 5 splits con expanding window
  • Trading Simulator: Backtesting con capital ficticio
06

API REST

API construida con FastAPI para predicción en tiempo real. Documentación interactiva disponible en /api/docs.

GET
/health
Health check del servicio

Response

{
  "status": "healthy",
  "timestamp": "2024-12-15T10:30:00Z",
  "models_loaded": ["lstm_final", "transformer_best", "lstm_tl_final"],
  "version": "1.0.0",
  "device": "cpu"
}
POST
/predict
Genera predicción con el modelo especificado

Request

curl -X POST http://localhost:8000/predict \
  -H "Content-Type: application/json" \
  -d '{
    "features": [[...72 timesteps x 70 features...]],
    "model_name": "lstm",
    "horizon": 1
  }'

Response

{
  "predictions": [0.4523],
  "model_used": "lstm_final",
  "horizon": 1,
  "timestamp": "2024-12-15T10:30:00Z",
  "n_features": 70,
  "lookback": 72
}
GET
/models
Lista todos los modelos disponibles
GET
/config
Configuración activa del proyecto
GET
/metrics/summary
Resumen de métricas de evaluación
07

Instalación y Uso

1

Clonar e instalar

git clone https://github.com/your-username/p2p-bolivia-ml.git
cd p2p-bolivia-ml
python -m venv .venv
source .venv/bin/activate   # Linux/Mac
pip install -r requirements.txt
pip install -e .
2

Configurar variables de entorno

cp .env.example .env
# Editar .env con tus API keys de Binance y CoinGecko
3

Ejecutar pipeline completo

# Pipeline completo
python run_pipeline.py --all

# O fases individuales
python run_pipeline.py --ingest
python run_pipeline.py --preprocess
python run_pipeline.py --train lstm
python run_pipeline.py --train transformer
python run_pipeline.py --transfer
4

Evaluar y generar dashboard

python evaluate_models.py
python generate_dashboard_data.py
python -m pytest tests/ -v
5

Levantar la API

uvicorn src.api.main:app --host 0.0.0.0 --port 8000

# O con Docker
cd docker
docker-compose up --build