P2P Bolivia ML
Predicción de precios P2P de criptomonedas en Bolivia usando Stacked Bi-LSTM, Pre-LN Transformer y Transfer Learning
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
Arquitectura del Pipeline
389,249 parámetros
2,421,505 parámetros
Discriminative LR por capa
Modelos Implementados
Stacked Bi-LSTM + Temporal Attention
Recurrent Neural Network bidireccional con mecanismo de atención
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.
Formulación Matemática
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.
Formulación Matemática
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.
Resultados
| 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% |
| R² | 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étrica | LSTM | Transformer | Transfer Learning |
|---|---|---|---|
| Return % | 86,406,017.9% | 10,158,272.4% | 1,399.1% |
| Sharpe Ratio | 12.89 | 9.14 | 3.42 |
| Max Drawdown | 13.74% | 22.17% | 17.97% |
| N° Trades | 1,674 | 1,412 | 332 |
Walk-Forward Validation
5 splits con expanding window para validación temporal realista.
| Métrica | LSTM | Transformer | Transfer Learning |
|---|---|---|---|
| WF RMSE Mean | 39,818.72 | 46,017.92 | 48,145.56 |
| WF RMSE Std | 66,750.91 | 53,688.13 | 55,099.77 |
| WF DA Mean | 48.75% | 48.88% | 50.97% |
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
API REST
API construida con FastAPI para predicción en tiempo real. Documentación interactiva disponible en /api/docs.
Response
{
"status": "healthy",
"timestamp": "2024-12-15T10:30:00Z",
"models_loaded": ["lstm_final", "transformer_best", "lstm_tl_final"],
"version": "1.0.0",
"device": "cpu"
}
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
}
Instalación y Uso
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 .
Configurar variables de entorno
cp .env.example .env
# Editar .env con tus API keys de Binance y CoinGecko
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
Evaluar y generar dashboard
python evaluate_models.py
python generate_dashboard_data.py
python -m pytest tests/ -v
Levantar la API
uvicorn src.api.main:app --host 0.0.0.0 --port 8000
# O con Docker
cd docker
docker-compose up --build
📊 Ver Dashboard Interactivo
Visualiza predicciones en tiempo real, comparación de modelos, trading simulator y más.
Abrir Dashboard →