Files
NexQuant/models/README.md
T

240 lines
5.6 KiB
Markdown
Raw Normal View History

# Predix Models
This directory contains all ML model definitions for Predix trading factors.
---
## 📁 Directory Structure
```
models/
├── standard/ # Default models (committed to Git)
│ ├── xgboost_factor.py # XGBoost for tabular data
│ ├── lightgbm_factor.py # LightGBM (faster than XGBoost)
│ └── randomforest_factor.py # Baseline model
├── local/ # YOUR IMPROVED MODELS (not in Git!)
│ ├── transformer_factor.py # Your Transformer
│ ├── tcn_factor.py # Your TCN
│ ├── patchtst_factor.py # Your PatchTST
│ ├── cnn_lstm_hybrid.py # Your Hybrid model
│ └── optimized_xgboost.py # Your optimized XGBoost
└── README.md # This file
```
---
## 🎯 How It Works
**Model Loading Priority:**
1. **`models/local/*.py`** ← Your improved models (loaded first!)
2. **`models/standard/*.py`** ← Default models (fallback)
**Example:**
```python
from rdagent.components.model_loader import load_model
# Load XGBoost model
# If models/local/xgboost_factor*.py exists → loads that
# Otherwise → loads from models/standard/
model_factory = load_model("xgboost_factor")
# Create model instance
model = model_factory(max_depth=8, learning_rate=0.1)
# Train
model.fit(X_train, y_train)
# Predict
predictions = model.predict(X_test)
```
---
## 📝 Available Standard Models
| Model | File | Use Case |
|-------|------|----------|
| **XGBoost** | `xgboost_factor.py` | Tabular factors, fast training |
| **LightGBM** | `lightgbm_factor.py` | Large datasets, faster than XGBoost |
| **RandomForest** | `randomforest_factor.py` | Baseline, robust |
---
## 🚀 Creating Your Improved Models
### Step 1: Create Local Model File
```bash
# Create local directory (if not exists)
mkdir -p models/local
# Copy standard model as template
cp models/standard/xgboost_factor.py models/local/optimized_xgboost.py
```
### Step 2: Improve Your Model
```python
# models/local/optimized_xgboost.py
class XGBoostFactorModel:
"""Your optimized version with better hyperparameters."""
def __init__(self, **params):
self.params = {
'objective': 'reg:squarederror',
'max_depth': 8, # Deeper trees
'learning_rate': 0.03, # Slower learning
'n_estimators': 1000, # More estimators
'subsample': 0.9, # Less dropout
'colsample_bytree': 0.9,
'random_state': 42,
# Your custom params
'gamma': 0.1, # Regularization
'min_child_weight': 3,
**params
}
# ... rest of implementation
```
### Step 3: Use in Trading
Your improved models are automatically used when running:
```python
from rdagent.components.model_loader import load_model
# Auto-loads your optimized version!
model_factory = load_model("xgboost_factor")
```
---
## 🔐 Security
**What to keep in `models/local/`:**
✅ Your proprietary model architectures
✅ Optimized hyperparameters
✅ Custom feature engineering
✅ Ensemble methods
✅ Trade secrets & alpha-generating logic
**What NOT to commit to Git:**
❌ Anything in `models/local/` (already in .gitignore)
❌ Files with `.local.py` suffix
❌ Files with `_private.py` suffix
---
## 📊 Best Practices
### 1. Version Your Models
```python
# Good naming:
models/local/
├── xgboost_v2.py # Version 2
├── xgboost_v3_optimized.py # Version 3 optimized
└── lightgbm_lstm_hybrid_v1.py # Hybrid v1
```
### 2. Document Changes
```python
# models/local/optimized_xgboost_v2.py
"""
XGBoost Factor Model v2.0
Changes from v1:
- Increased max_depth from 6 to 8
- Added gamma regularization
- Increased n_estimators from 500 to 1000
- Target: +2% ARR, +0.2 Sharpe
Author: Your Name
Date: 2026-04-02
"""
```
### 3. Test Performance
```python
# Compare model versions
from rdagent.components.model_loader import load_model
# Load standard
std_model = load_model("xgboost_factor", local_only=False)
# Load local (if exists)
local_model = load_model("xgboost_factor", local_only=True)
# Backtest both and compare
# ...
```
---
## 🔧 Advanced Usage
### Load All Models
```python
from rdagent.components.model_loader import list_available_models
all_models = list_available_models()
print(f"Standard: {all_models['standard']}")
print(f"Local: {all_models['local']}")
```
### Force Local Model
```python
# Raise error if local model not found
model = load_model("transformer_factor", local_only=True)
```
### Custom Model Path
```python
from rdagent.components.model_loader import load_module_from_path
from pathlib import Path
# Load from custom location
module = load_module_from_path(
Path("/path/to/my/custom_model.py"),
"custom_model"
)
```
---
## 📈 Model Selection Guide
| Scenario | Recommended Model | Why |
|----------|------------------|-----|
| **Tabular Factors** | XGBoost / LightGBM | Fast, interpretable |
| **Large Dataset** | LightGBM | Lower memory, faster |
| **Baseline** | RandomForest | Robust, no tuning needed |
| **Time-Series Patterns** | LSTM / GRU (local) | Sequential dependencies |
| **Multi-Scale** | TCN (local) | Different time horizons |
| **Long-Range** | Transformer (local) | Attention mechanism |
| **Best Performance** | Ensemble (local) | Combine multiple models |
---
## 🎯 Next Steps
1. **Review standard models:** `cat models/standard/*.py`
2. **Create your improved version:** `mkdir -p models/local`
3. **Test:** `python rdagent/components/model_loader.py`
4. **Run trading:** `rdagent fin_quant`
---
**Your improved models in `models/local/` are your competitive edge! 🚀**