Modular Time Series Forecasting Library
Project description
ForeBlocks: Modular Time Series Forecasting Library
ForeBlocks is a flexible, modular deep learning framework for time series forecasting built on PyTorch. It provides various neural network architectures and forecasting strategies to tackle complex time series prediction problems with an intuitive, research-friendly API.
๐ GitHub Repository
๐ Quick Start
# Installation
git clone https://github.com/lseman/foreblocks
cd foreblocks
pip install -e .
from foreblocks import TimeSeriesSeq2Seq, ModelConfig, TrainingConfig
import torch
import pandas as pd
# Load and prepare data
data = pd.read_csv('your_data.csv')
X = data.values
# Configure model
model_config = ModelConfig(
model_type="lstm",
input_size=X.shape[1],
output_size=1,
hidden_size=64,
target_len=24, # Forecast 24 steps ahead
teacher_forcing_ratio=0.5
)
# Initialize and train
model = TimeSeriesSeq2Seq(model_config=model_config)
X_train, y_train, _ = model.preprocess(X, self_tune=True)
# Create DataLoader and train
from torch.utils.data import TensorDataset, DataLoader
train_dataset = TensorDataset(
torch.tensor(X_train, dtype=torch.float32),
torch.tensor(y_train, dtype=torch.float32)
)
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
history = model.train_model(train_loader)
predictions = model.predict(X_test)
โจ Key Features
| Feature | Description |
|---|---|
| ๐ง Multiple Strategies | Seq2Seq, Autoregressive, and Direct forecasting approaches |
| ๐งฉ Modular Design | Easily customize and extend components |
| ๐ค Advanced Models | LSTM, GRU, Transformer, and VAE-based architectures |
| โก Smart Preprocessing | Adaptive data preprocessing with automatic configuration |
| ๐ฏ Attention Mechanisms | Various attention modules for improved performance |
| ๐ Multi-Feature Support | Specialized architectures for multivariate time series |
| ๐ Training Utilities | Built-in trainer with callbacks, metrics, and visualizations |
| ๐ Transparent API | Intuitive interface with extensive documentation |
๐ Documentation
- ๐ Preprocessing Guide
- ๐ ๏ธ Custom Blocks Guide
- Transformer Blocks
- Fourier Blocks
- Wavelet Blocks
- DARTS Module
๐๏ธ Architecture Overview
ForeBlocks follows a clean, modular design:
โโโโโโโโโโโโโโโโโโโโโโโ
โ TimeSeriesSeq2Seq โ โ High-level Interface
โโโโโโโโโโโโโโโโโโโโโโโค
โ ForecastingModel โ โ Core Model Class
โโโโโโโโโโโโโโโโโโโโโโโค
โ Encoders & Decoders โ โ Neural Network Modules
โโโโโโโโโโโโโโโโโโโโโโโค
โ Preprocessing โ โ Data Pipeline
โโโโโโโโโโโโโโโโโโโโโโโค
โ Training Utils โ โ Trainer & Metrics
โโโโโโโโโโโโโโโโโโโโโโโ
Core Components
TimeSeriesSeq2Seq: High-level interface for building and training modelsForecastingModel: Main model class integrating encoders, decoders, and strategiesTimeSeriesPreprocessor: Advanced data preparation with automatic feature detectionTrainer: Manages training, evaluation, and visualization
๐ฏ Forecasting Models
1. Sequence-to-Sequence (Default)
Best for: Most time series problems
model_config = ModelConfig(
model_type="lstm",
strategy="seq2seq",
input_size=3,
output_size=1,
hidden_size=64,
num_encoder_layers=2,
num_decoder_layers=2,
target_len=24
)
2. Autoregressive
Best for: When each prediction depends on previous predictions
model_config = ModelConfig(
model_type="lstm",
strategy="autoregressive",
input_size=1,
output_size=1,
hidden_size=64,
target_len=12
)
3. Direct Multi-Step
Best for: Independent multi-step predictions
model_config = ModelConfig(
model_type="lstm",
strategy="direct",
input_size=5,
output_size=1,
hidden_size=128,
target_len=48
)
4. Transformer-based
Best for: Long sequences with complex dependencies
model_config = ModelConfig(
model_type="transformer",
strategy="transformer_seq2seq",
input_size=4,
output_size=4,
hidden_size=128,
dim_feedforward=512,
nheads=8,
num_encoder_layers=3,
num_decoder_layers=3,
target_len=96
)
๐ง Advanced Features
Multi-Encoder-Decoder Architecture
Process different features with separate encoders:
model_config = ModelConfig(
multi_encoder_decoder=True,
input_size=5, # 5 different features
output_size=1,
hidden_size=64,
model_type="lstm",
target_len=24
)
Attention Mechanisms
Improve performance with attention:
from foreblocks.attention import AttentionLayer
attention_module = AttentionLayer(
method="dot",
attention_backend="self",
encoder_hidden_size=64,
decoder_hidden_size=64
)
model = TimeSeriesSeq2Seq(
model_config=model_config,
attention_module=attention_module
)
Custom Preprocessing Pipeline
Fine-tune data preparation:
X_train, y_train, processed_data = model.preprocess(
X,
normalize=True,
differencing=True,
detrend=True,
apply_ewt=True,
window_size=48,
horizon=24,
remove_outliers=True,
outlier_method="iqr",
self_tune=True
)
Scheduled Sampling
Control teacher forcing dynamically:
def scheduled_sampling_fn(epoch):
return max(0.0, 1.0 - 0.1 * epoch) # Linear decay
model = TimeSeriesSeq2Seq(
model_config=model_config,
scheduled_sampling_fn=scheduled_sampling_fn
)
๐ Examples
LSTM with Attention
from foreblocks import TimeSeriesSeq2Seq, ModelConfig, AttentionLayer
import torch.nn as nn
# Configure model with attention
model_config = ModelConfig(
model_type="lstm",
input_size=3,
output_size=1,
hidden_size=64,
num_encoder_layers=2,
num_decoder_layers=2,
target_len=24
)
attention = AttentionLayer(
method="dot",
encoder_hidden_size=64,
decoder_hidden_size=64
)
model = TimeSeriesSeq2Seq(
model_config=model_config,
attention_module=attention,
output_block=nn.Sequential(nn.Dropout(0.1), nn.ReLU())
)
Transformer Model
from foreblocks import TimeSeriesSeq2Seq, ModelConfig, TrainingConfig
model_config = ModelConfig(
model_type="transformer",
input_size=4,
output_size=4,
hidden_size=128,
dim_feedforward=512,
nheads=8,
num_encoder_layers=3,
num_decoder_layers=3,
target_len=96
)
training_config = TrainingConfig(
num_epochs=100,
learning_rate=0.0001,
weight_decay=1e-5,
patience=15
)
model = TimeSeriesSeq2Seq(
model_config=model_config,
training_config=training_config
)
๐ง Configuration Reference
ModelConfig Parameters
| Parameter | Type | Description | Default |
|---|---|---|---|
model_type |
str | Model architecture ("lstm", "gru", "transformer") | "lstm" |
input_size |
int | Number of input features | Required |
output_size |
int | Number of output features | Required |
hidden_size |
int | Hidden layer dimensions | 64 |
target_len |
int | Forecast horizon length | Required |
num_encoder_layers |
int | Number of encoder layers | 1 |
num_decoder_layers |
int | Number of decoder layers | 1 |
teacher_forcing_ratio |
float | Teacher forcing probability | 0.5 |
TrainingConfig Parameters
| Parameter | Type | Description | Default |
|---|---|---|---|
num_epochs |
int | Training epochs | 100 |
learning_rate |
float | Learning rate | 0.001 |
batch_size |
int | Batch size | 32 |
patience |
int | Early stopping patience | 10 |
weight_decay |
float | L2 regularization | 0.0 |
๐จ Troubleshooting
Common Issues & Solutions
๐ด Dimensionality Mismatch
Problem: Tensor dimension errors during training/inference
Solution:
- Check encoder/decoder
hidden_sizecompatibility - Verify
output_sizematches target dimensions - Ensure input data shape matches
input_size
# Debug dimensions
print(f"Input shape: {X.shape}")
print(f"Model expects: {model_config.input_size} features")
๐ก Memory Issues
Problem: CUDA out of memory or system RAM exhaustion
Solutions:
- Reduce
batch_sizeor sequence length - Use gradient accumulation
- Consider model size reduction
# Gradient accumulation example
accumulation_steps = 4
for i, batch in enumerate(train_loader):
loss = model(batch) / accumulation_steps
loss.backward()
if (i + 1) % accumulation_steps == 0:
optimizer.step()
optimizer.zero_grad()
๐ Poor Performance
Problem: Model not learning or poor predictions
Solutions:
- Try different forecasting strategies
- Adjust
teacher_forcing_ratio - Add attention mechanisms
- Experiment with architectures (LSTM vs Transformer)
- Tune hyperparameters
# Performance tuning checklist
model_config = ModelConfig(
hidden_size=128, # Try larger hidden size
num_encoder_layers=3, # Add more layers
teacher_forcing_ratio=0.3, # Reduce teacher forcing
# Add dropout, attention, etc.
)
๐ต Training Issues
Problem: Slow convergence or gradient problems
Solutions:
- Use gradient clipping
- Learning rate scheduling
- Proper weight initialization
# Gradient clipping
import torch.nn.utils as utils
utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
# Learning rate scheduling
scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(
optimizer, patience=5, factor=0.5
)
๐ก Best Practices
๐ฏ Performance Tips
- Always normalize input data for better convergence
- Use appropriate metrics (MAE, RMSE, MAPE) for time series
- Validate on multi-step predictions, not just one-step
- Consider model ensembling for critical applications
๐ Data Preparation
- Handle missing values before feeding to model
- Consider seasonal decomposition for seasonal data
- Use the built-in preprocessing with
self_tune=True
๐ Training Strategy
- Start with simple models (LSTM) before trying complex ones (Transformer)
- Use validation sets for hyperparameter tuning
- Monitor both training and validation metrics
๐ค Contributing
We welcome contributions! Please see our GitHub repository for:
- ๐ Bug reports
- ๐ก Feature requests
- ๐ Documentation improvements
- ๐ง Code contributions
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file foreblocks-0.1.1.tar.gz.
File metadata
- Download URL: foreblocks-0.1.1.tar.gz
- Upload date:
- Size: 819.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3e2f395aea96c2d2cc02424294b5038fcad897e36594ff0bcdd1501619829990
|
|
| MD5 |
70356880cc094aa28b076b52129e735a
|
|
| BLAKE2b-256 |
5c3f4c381045de7fa53b406fb7fea4efd9808e94a4f418c4a01b82226402e874
|
File details
Details for the file foreblocks-0.1.1-py3-none-any.whl.
File metadata
- Download URL: foreblocks-0.1.1-py3-none-any.whl
- Upload date:
- Size: 1.1 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bbfbe48407c8aa83be3d444aa5edc95bdea25c10b50699b0cfff98bac3e60b6e
|
|
| MD5 |
80f48114b484a72629c4ae84aeac3153
|
|
| BLAKE2b-256 |
10fbde612c478b5f2d40ce1038ec3e1bbda6642961343e6ca96065268f8fcf54
|