Skip to content

ginoitaliano/TabNet_Pred_Financial

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 

Repository files navigation

TabNet Financial Predictive Models

A comprehensive project using TabNet for financial prediction tasks including stock price forecasting, credit risk assessment, and portfolio optimization.

🎯 Project Overview

This project demonstrates the application of TabNet (Tabular Neural Networks) to various financial prediction tasks. TabNet is specifically designed for tabular data and provides excellent performance while maintaining interpretability through attention mechanisms.

🚀 Features

  • Stock Price Prediction: Predict future stock prices using historical data and technical indicators
  • Credit Risk Assessment: Evaluate loan default probability based on borrower characteristics
  • Portfolio Risk Analysis: Assess portfolio volatility and expected returns
  • Model Interpretability: Leverage TabNet's attention mechanism for feature importance analysis
  • Comprehensive Evaluation: Multiple metrics and visualization tools

📁 Project Structure

tabnet-financial-models/
├── README.md
├── requirements.txt
├── config/
│   ├── model_config.yaml
│   └── data_config.yaml
├── data/
│   ├── raw/
│   ├── processed/
│   └── external/
├── notebooks/
│   ├── 01_data_exploration.ipynb
│   ├── 02_feature_engineering.ipynb
│   ├── 03_stock_prediction.ipynb
│   ├── 04_credit_risk_modeling.ipynb
│   └── 05_portfolio_analysis.ipynb
├── src/
│   ├── __init__.py
│   ├── data/
│   │   ├── __init__.py
│   │   ├── data_loader.py
│   │   ├── preprocessor.py
│   │   └── feature_engineer.py
│   ├── models/
│   │   ├── __init__.py
│   │   ├── tabnet_model.py
│   │   ├── ensemble.py
│   │   └── interpretability.py
│   ├── evaluation/
│   │   ├── __init__.py
│   │   ├── metrics.py
│   │   └── visualization.py
│   └── utils/
│       ├── __init__.py
│       └── helpers.py
├── tests/
│   ├── __init__.py
│   ├── test_data.py
│   └── test_models.py
├── models/
│   └── saved_models/
├── results/
│   ├── figures/
│   └── reports/
└── scripts/
    ├── train_model.py
    ├── evaluate_model.py
    └── predict.py

🛠️ Installation

  1. Clone the repository:
git clone https://github.com/yourusername/tabnet-financial-models.git
cd tabnet-financial-models
  1. Create virtual environment:
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
  1. Install dependencies:
pip install -r requirements.txt

📦 Dependencies

Core Libraries

  • pytorch-tabnet>=4.0.0 - TabNet implementation
  • torch>=1.12.0 - PyTorch framework
  • pandas>=1.5.0 - Data manipulation
  • numpy>=1.21.0 - Numerical computing
  • scikit-learn>=1.1.0 - ML utilities

Financial Data

  • yfinance>=0.2.0 - Yahoo Finance data
  • pandas-datareader>=0.10.0 - Financial data sources
  • ta>=0.10.0 - Technical analysis indicators

Visualization & Analysis

  • matplotlib>=3.5.0 - Plotting
  • seaborn>=0.11.0 - Statistical visualization
  • plotly>=5.10.0 - Interactive charts
  • shap>=0.41.0 - Model interpretability

Development & Testing

  • jupyter>=1.0.0 - Notebooks
  • pytest>=7.0.0 - Testing
  • black>=22.0.0 - Code formatting
  • flake8>=5.0.0 - Linting

🏁 Quick Start

  1. Stock Price Prediction
from src.data.data_loader import StockDataLoader
from src.models.tabnet_model import TabNetPredictor

# Load and prepare data
loader = StockDataLoader()
X_train, X_test, y_train, y_test = loader.load_stock_data(['AAPL', 'GOOGL', 'MSFT'])

# Train TabNet model
model = TabNetPredictor(task='regression')
model.fit(X_train, y_train, X_test, y_test)

# Make predictions
predictions = model.predict(X_test)
  1. Credit Risk Assessment
from src.data.data_loader import CreditDataLoader
from src.models.tabnet_model import TabNetClassifier

# Load credit data
loader = CreditDataLoader()
X_train, X_test, y_train, y_test = loader.load_credit_data()

# Train classification model
model = TabNetClassifier()
model.fit(X_train, y_train, X_test, y_test)

# Assess risk
risk_scores = model.predict_proba(X_test)

🎯 Use Cases

  1. Stock Price Forecasting
  • Objective: Predict next-day stock returns
  • Features: Technical indicators, volume, volatility, market sentiment
  • Evaluation: MAE, RMSE, Directional accuracy
  1. Credit Default Prediction
  • Objective: Classify loan default probability
  • Features: Credit history, income, debt ratios, employment status
  • Evaluation: AUC-ROC, Precision-Recall, F1-Score
  1. Portfolio Risk Analysis
  • Objective: Estimate portfolio Value at Risk (VaR)
  • Features: Asset correlations, historical returns, volatility
  • Evaluation: Backtesting, Sharpe ratio

📊 Model Configuration

TabNet Hyperparameters

model:
  n_d: 64                    # Width of decision prediction layer
  n_a: 64                    # Width of attention embedding
  n_steps: 5                 # Number of steps in architecture
  gamma: 1.5                 # Coefficient for feature reusage
  n_independent: 2           # Number of independent GLU layers
  n_shared: 2                # Number of shared GLU layers
  lambda_sparse: 1e-4        # Sparsity regularization
  optimizer_fn: torch.optim.Adam
  optimizer_params: 
    lr: 0.02
  scheduler_fn: torch.optim.lr_scheduler.StepLR
  scheduler_params:
    step_size: 50
    gamma: 0.9

📈 Performance Metrics

Regression Metrics (Stock Prediction)

  • Mean Absolute Error (MAE)
  • Root Mean Square Error (RMSE)
  • Mean Absolute Percentage Error (MAPE)
  • Directional Accuracy
  • Sharpe Ratio

Classification Metrics (Credit Risk)

  • Area Under ROC Curve (AUC-ROC)
  • Precision, Recall, F1-Score
  • Log Loss
  • Brier Score
  • Kolmogorov-Smirnov Statistic

🔍 Model Interpretability

TabNet provides built-in interpretability through:

  1. Feature Importance: Global importance scores
  2. Attention Weights: Step-wise attention visualization
  3. Feature Selection: Automatic feature selection mechanism
  4. SHAP Integration: Additional explainability analysis

🧪 Running Experiments

Training Models

# Stock prediction
python scripts/train_model.py --task stock_prediction --config config/stock_config.yaml

# Credit risk
python scripts/train_model.py --task credit_risk --config config/credit_config.yaml

Evaluation

python scripts/evaluate_model.py --model_path models/stock_model.pkl --test_data data/processed/test_stock.csv

Hyperparameter Tuning

python scripts/hyperparameter_search.py --task stock_prediction --n_trials 100

📝 Notebooks

  1. 01_data_exploration.ipynb: Exploratory data analysis
  2. 02_feature_engineering.ipynb: Technical indicators and feature creation
  3. 03_stock_prediction.ipynb: Stock price forecasting workflow
  4. 04_credit_risk_modeling.ipynb: Credit default prediction
  5. 05_portfolio_analysis.ipynb: Portfolio optimization and risk assessment

🧪 Testing

Run the test suite:

pytest tests/ -v

📊 Results and Benchmarks

Stock Prediction Results

Model MAE RMSE Directional Accuracy
TabNet 0.0245 0.0412 0.634
Random Forest 0.0267 0.0445 0.612
XGBoost 0.0251 0.0423 0.628

Credit Risk Results

Model AUC-ROC Precision Recall F1-Score
TabNet 0.847 0.723 0.681 0.701
Logistic Regression 0.782 0.645 0.634 0.639
XGBoost 0.832 0.698 0.667 0.682

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit changes (git commit -m 'Add amazing feature')
  4. Push to branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

🙏 Acknowledgments

📞 Contact


⭐ Star this repository if you find it helpful!

About

This project demonstrates the application of TabNet (Tabular Neural Networks) to various financial prediction tasks. TabNet is specifically designed for tabular data and provides excellent performance while maintaining interpretability through attention mechanisms.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors