Skip to content

llucian-iws/ML-final-2025

Repository files navigation

Cryptocurrency Price Prediction Using Deep Learning and Gradient Boosting Methods

A Comparative Analysis of CNN-xLSTM and XGBoost for Bitcoin and Algorand Forecasting

Academic-grade comparison of CNN-xLSTM and XGBoost models for cryptocurrency price forecasting on Bitcoin (BTC-USD) and Algorand (ALGO-USD).

Authors: Jelena Simić, Elena Drpa, Andreja Čobeljić, Aleksandar Protić, Lucian Lungu
Course: Machine Learning - RAF MCF
Term: Fall 2025

Features

  • Novel xLSTM Architecture: First application of Extended LSTM with exponential gating to cryptocurrency prediction
  • Configurable Causal/Bidirectional Processing: Production-ready causal mode vs research bidirectional mode
  • GARCH Volatility Normalization: Handles volatility clustering for regime-robust predictions
  • Purged Cross-Validation: Prevents data leakage in time series splits
  • Statistical Validation: Diebold-Mariano tests, bootstrap confidence intervals
  • Financial Loss Functions: Directional, Sharpe, and Sortino loss functions
  • Stationarity Testing: Automatic ADF tests and fractional differentiation
  • Modular, reproducible, type-hinted codebase
  • All hyperparameters externalized in config.yaml
  • Automatic data caching (parquet format)
  • Time-aware train/validation/test splits
  • Comprehensive evaluation metrics (MSE, MAE, R², Directional Accuracy)
  • Publication-quality forecast visualizations

Project Structure

├── config.yaml          # All hyperparameters (Hydra)
├── main.py              # Entry point (train/train_daily/predict modes)
├── requirements.txt     # Dependencies
├── scripts/             # Utility scripts
│   ├── forecast_tomorrow.py     # Quick 1-day forecast
│   ├── analyze_stationarity.py  # Stationarity analysis
│   ├── analyze_cv.py            # Cross-validation demo
│   └── compare_models.py        # Model comparison
├── src/                 # Core library
│   ├── data.py          # Data download, caching, features
│   ├── models.py        # XLSTMModel, XGBoostModel
│   ├── xlstm_cells.py   # sLSTM, mLSTM implementations
│   ├── evaluate.py      # Metrics, Diebold-Mariano, plots
│   ├── losses.py        # Financial loss functions
│   ├── stationarity.py  # ADF tests, fractional diff
│   ├── validation.py    # Purged CV, walk-forward
│   └── volatility.py    # GARCH normalization
├── tests/               # Unit tests
├── models/              # Saved model artifacts
├── data/                # Cached data (auto-created)
└── results/             # Output plots and metrics

Installation

pip install -r requirements.txt

Usage

Training

python main.py                    # Train both models
python main.py mode=train_daily   # Train daily models for forecasting

Prediction

python main.py mode=predict                    # Multi-day forecast
python scripts/forecast_tomorrow.py            # Quick 1-day forecast
python scripts/forecast_tomorrow.py --asset BTC-USD

With Custom Parameters (Hydra overrides)

python main.py xlstm.epochs=100 xlstm.patience=20
python main.py asset.names=[BTC-USD]
python main.py xgboost.n_estimators=500 xgboost.max_depth=8

Analysis Scripts

python scripts/analyze_stationarity.py   # Stationarity analysis
python scripts/analyze_cv.py             # Cross-validation demo
python scripts/compare_models.py         # Model comparison

Run Tests

pytest tests/ -v

Configuration

Edit config.yaml to modify:

  • asset: Ticker symbols, data interval, history length
  • split: Train/validation/test ratios with purging
  • xlstm: CNN-xLSTM architecture and training params (causal/bidirectional modes)
  • xgboost: XGBoost hyperparameters
  • features: Feature engineering settings, GARCH normalization
  • forecast: Prediction horizon, confidence intervals, clipping
  • paths: Data cache and output directories

Output

Results are saved to ./results/:

  • summary_metrics.csv: Model comparison metrics
  • {ASSET}_forecast.png: Forecast visualization per asset
  • {ASSET}_stationarity_report.csv: Stationarity analysis
  • Statistical test results and bootstrap confidence intervals

Key Results

Our comprehensive study reveals asset-dependent model performance:

Bitcoin (BTC-USD) - 30-Day Horizon

  • XGBoost Winner: 43.98% directional accuracy vs 31.41% (xLSTM)
  • Better performance on efficient, liquid markets

Algorand (ALGO-USD) - 30-Day Horizon

  • xLSTM Winner: 72.77% directional accuracy vs 32.46% (XGBoost)
  • Positive Sharpe ratio (4.64) - exceptional for crypto prediction
  • Deep learning captures temporal patterns in volatile altcoins

Key Insight: No single model dominates - optimal choice depends on asset characteristics.

Metrics

Metric Description
MSE Mean Squared Error
MAE Mean Absolute Error
Coefficient of Determination
DirAcc Directional Accuracy (trend prediction)

License

Creative Commons Attribution-NonCommercial 4.0 International License (CC BY-NC 4.0)

Copyright (c) 2026 Jelena Simić, Elena Drpa, Andreja Čobeljić, Aleksandar Protić, Lucian Lungu

This work is licensed under the Creative Commons Attribution-NonCommercial 4.0 International License. For commercial licensing inquiries, please contact: contact@interworksystems.com

If you use this work in academic research, please cite:

Simić, J., Drpa, E., Čobeljić, A., Protić, A., & Lungu, L. (2026). Cryptocurrency Price Prediction Using Deep Learning and Gradient Boosting Methods: A Comparative Analysis of CNN-xLSTM and XGBoost for Bitcoin and Algorand Forecasting. Machine Learning Course Project, RAF MCF.

About

ML Final Assessment Group 7

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages