An open API service indexing awesome lists of open source software.

https://github.com/victoropp/sp500-forecasting

Intelligent S&P 500 forecasting and portfolio optimization platform. Prophet time series predictions, Modern Portfolio Theory, Efficient Frontier, and Sharpe ratio maximization. Interactive Streamlit dashboard with real-time data.
https://github.com/victoropp/sp500-forecasting

data-science efficient-frontier financial-analytics forecasting modern-portfolio-theory portfolio-optimization prophet quantitative-finance sharpe-ratio streamlit time-series yfinance

Last synced: 14 days ago
JSON representation

Intelligent S&P 500 forecasting and portfolio optimization platform. Prophet time series predictions, Modern Portfolio Theory, Efficient Frontier, and Sharpe ratio maximization. Interactive Streamlit dashboard with real-time data.

Awesome Lists containing this project

README

          

# πŸ“ˆ S&P 500 Intelligent Forecasting & Portfolio Optimizer

[![Python](https://img.shields.io/badge/Python-3.8%2B-blue)](https://www.python.org/)
[![Streamlit](https://img.shields.io/badge/Streamlit-1.28%2B-FF4B4B)](https://streamlit.io/)
[![Prophet](https://img.shields.io/badge/Prophet-Time%20Series-00D9FF)](https://facebook.github.io/prophet/)
[![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)

> **Advanced Financial Analytics Platform** combining time series forecasting with Modern Portfolio Theory for S&P 500 prediction and optimal asset allocation. Interactive dashboard with Meta's Prophet and PyPortfolioOpt.

---

## 🎯 Project Overview

A state-of-the-art **quantitative finance** platform demonstrating:

- πŸ“Š **Time Series Forecasting**: Meta's Prophet model for S&P 500 predictions
- πŸ’Ό **Portfolio Optimization**: Modern Portfolio Theory (MPT) implementation
- πŸ“ˆ **Efficient Frontier**: Risk-return optimization with Sharpe ratio maximization
- 🎨 **Interactive Dashboard**: Premium financial terminal built with Streamlit
- πŸ“‰ **Risk Analytics**: Volatility analysis, confidence intervals, and backtesting

### Key Features
- βœ… **Prophet forecasting** with 90-day S&P 500 predictions
- βœ… **Efficient Frontier** visualization for optimal portfolios
- βœ… **Max Sharpe Ratio** portfolio allocation
- βœ… **Interactive dashboard** with real-time data
- βœ… **Risk metrics** (volatility, returns, Sharpe ratio)

---

## πŸš€ Features

### 1. πŸ“Š Market Forecasting
- **Prophet Model**: Facebook's robust time series forecasting
- **Confidence Intervals**: Upper and lower bounds for predictions
- **90-Day Horizon**: Future S&P 500 price predictions
- **Trend Analysis**: Seasonality and trend decomposition
- **Historical Performance**: Backtesting against actual data

### 2. πŸ’Ό Portfolio Optimization
- **Modern Portfolio Theory**: Markowitz optimization framework
- **Efficient Frontier**: Risk-return tradeoff visualization
- **Max Sharpe Ratio**: Optimal portfolio allocation
- **Multi-Asset**: S&P 500 constituent optimization
- **Risk Analysis**: Volatility, expected returns, correlation matrices

### 3. 🎨 Interactive Dashboard
- **Premium UI**: Dark theme financial terminal
- **Real-Time Data**: Live S&P 500 data integration
- **Interactive Charts**: Plotly-based visualizations
- **Multi-Tab Interface**: Forecasting, optimization, analytics
- **Downloadable Results**: Export predictions and allocations

---

## πŸ“Š Model Performance

### Prophet Forecasting
- **Model**: Meta's Prophet (Additive time series model)
- **Features**: Trend, yearly/weekly seasonality
- **Horizon**: 90 days
- **Uncertainty**: 80% confidence intervals
- **Historical Data**: ~1 year of S&P 500 daily prices

### Portfolio Optimization
- **Method**: Mean-variance optimization (Markowitz)
- **Objective**: Maximize Sharpe ratio
- **Constraints**: Weights sum to 1.0, no short selling
- **Risk-Free Rate**: Configurable (default: 2% annually)
- **Rebalancing**: Quarterly recommended

---

## πŸ—οΈ Architecture

```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Yahoo Finance API (yfinance) β”‚
β”‚ S&P 500 Index & Constituents β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ β”‚
β”Œβ”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Prophet β”‚ β”‚ PyPortfolioOpt β”‚
β”‚ Forecasting β”‚ β”‚ Optimization β”‚
β”‚ β€’ Trend β”‚ β”‚ β€’ MPT β”‚
β”‚ β€’ Seasonalityβ”‚ β”‚ β€’ Sharpe Ratio β”‚
β”‚ β€’ Confidence β”‚ β”‚ β€’ Efficient β”‚
β”‚ Intervals β”‚ β”‚ Frontier β”‚
β””β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Data Processing β”‚
β”‚ β€’ Price data β”‚
β”‚ β€’ Returns calc β”‚
β”‚ β€’ Correlation β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Streamlit UI β”‚
β”‚ β€’ Forecasting β”‚
β”‚ β€’ Optimization β”‚
β”‚ β€’ Analytics β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

---

## πŸ“¦ Installation

### Prerequisites
- Python 3.8 or higher
- pip package manager
- Internet connection (for data download)

### Setup

1. **Clone the repository**
```bash
git clone https://github.com/yourusername/sp500-forecasting.git
cd sp500_forecasting
```

2. **Install dependencies**
```bash
pip install -r requirements.txt
```

3. **Run the dashboard**
```bash
streamlit run deployment/app.py
```

The dashboard will open at `http://localhost:8501`

---

## πŸš€ Quick Start

### Option 1: Run the Dashboard (Recommended)

```bash
streamlit run deployment/app.py
```

Navigate through the tabs:
- **πŸ“ˆ Forecast**: View S&P 500 predictions
- **πŸ’Ό Portfolio**: Optimize asset allocation
- **πŸ“Š Analytics**: Explore market insights

### Option 2: Use as Python Library

```python
from src.data_loader import load_sp500_index, load_sp500_companies
from src.forecaster import train_forecast_model
from src.optimizer import optimize_portfolio

# Load data
sp500_data = load_sp500_index(period='1y')

# Forecast
forecast = train_forecast_model(sp500_data, periods=90)

# Optimize portfolio
tickers = ['AAPL', 'MSFT', 'GOOGL', 'AMZN', 'NVDA']
weights, metrics = optimize_portfolio(tickers, period='1y')

print(f"Expected Return: {metrics['expected_return']:.2%}")
print(f"Volatility: {metrics['volatility']:.2%}")
print(f"Sharpe Ratio: {metrics['sharpe_ratio']:.2f}")
```

---

## πŸ“Š Dataset

**Source**: Yahoo Finance (via yfinance API)

### S&P 500 Index Data
- **Ticker**: ^GSPC
- **Period**: 1+ years of historical data
- **Frequency**: Daily closing prices
- **Features**: Open, High, Low, Close, Volume
- **Updates**: Real-time via API

### S&P 500 Constituents
- **Total**: 503 companies (as of dataset)
- **Sectors**: Technology, Healthcare, Finance, Consumer, etc.
- **Data**: Historical prices for portfolio optimization
- **Rebalancing**: Quarterly recommended

---

## πŸ› οΈ Technology Stack

### Time Series Forecasting
- **Prophet**: Meta's additive time series model
- **Pandas**: Data manipulation and analysis
- **NumPy**: Numerical computing

### Portfolio Optimization
- **PyPortfolioOpt**: Modern Portfolio Theory implementation
- **CVXPY**: Convex optimization
- **Scikit-learn**: Risk metrics and preprocessing

### Visualization & Deployment
- **Streamlit**: Interactive web application
- **Plotly**: Dynamic financial charts
- **Matplotlib/Seaborn**: Static visualizations

### Data Acquisition
- **yfinance**: Yahoo Finance API wrapper
- **Real-time data**: Live market data integration

---

## πŸ“ Project Structure

```
sp500_forecasting/
β”œβ”€β”€ src/
β”‚ β”œβ”€β”€ data_loader.py # Yahoo Finance data retrieval
β”‚ β”œβ”€β”€ forecaster.py # Prophet model training
β”‚ β”œβ”€β”€ optimizer.py # MPT portfolio optimization
β”‚ └── eda.py # Exploratory data analysis
β”œβ”€β”€ deployment/
β”‚ └── app.py # Streamlit dashboard
β”œβ”€β”€ data/
β”‚ β”œβ”€β”€ sp500_index.csv # Historical S&P 500 data
β”‚ └── sp500_companies.csv # Constituent company data
β”œβ”€β”€ notebooks/ # Jupyter notebooks (optional)
β”œβ”€β”€ social_media/ # Graphics for sharing
β”œβ”€β”€ requirements.txt # Python dependencies
β”œβ”€β”€ LICENSE # MIT License
└── README.md # This file
```

---

## πŸŽ“ Key Learnings & Skills Demonstrated

### Quantitative Finance
- βœ… Modern Portfolio Theory (Markowitz optimization)
- βœ… Efficient Frontier construction
- βœ… Sharpe ratio maximization
- βœ… Risk-return tradeoff analysis
- βœ… Portfolio rebalancing strategies

### Time Series Analysis
- βœ… Prophet model implementation
- βœ… Trend and seasonality decomposition
- βœ… Forecasting with confidence intervals
- βœ… Model validation and backtesting

### Software Engineering
- βœ… Modular code architecture
- βœ… Interactive dashboard development
- βœ… Real-time data integration
- βœ… Production-ready deployment

### Financial Analytics
- βœ… Market data acquisition (Yahoo Finance)
- βœ… Returns and volatility calculation
- βœ… Correlation matrix analysis
- βœ… Risk metrics computation

---

## πŸš€ Usage Examples

### Forecast S&P 500

```python
from src.data_loader import load_sp500_index
from src.forecaster import train_forecast_model

# Load historical data
data = load_sp500_index(period='2y')

# Train Prophet model
forecast = train_forecast_model(data, periods=90)

# View predictions
print(forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail())
```

### Optimize Portfolio

```python
from src.optimizer import optimize_portfolio

# Define portfolio
tickers = ['AAPL', 'MSFT', 'GOOGL', 'AMZN', 'NVDA', 'JPM', 'V']

# Optimize
weights, metrics = optimize_portfolio(
tickers,
period='1y',
risk_free_rate=0.02
)

# View allocation
for ticker, weight in zip(tickers, weights):
print(f"{ticker}: {weight:.2%}")

print(f"\nExpected Annual Return: {metrics['expected_return']:.2%}")
print(f"Annual Volatility: {metrics['volatility']:.2%}")
print(f"Sharpe Ratio: {metrics['sharpe_ratio']:.2f}")
```

### Generate Efficient Frontier

```python
from src.optimizer import generate_efficient_frontier

# Generate frontier
frontier_returns, frontier_volatilities = generate_efficient_frontier(
tickers=['AAPL', 'MSFT', 'GOOGL', 'AMZN'],
period='1y'
)

# Plot
import matplotlib.pyplot as plt
plt.plot(frontier_volatilities, frontier_returns)
plt.xlabel('Volatility (Risk)')
plt.ylabel('Expected Return')
plt.title('Efficient Frontier')
plt.show()
```

---

## πŸ’‘ Business Applications

### 1. πŸ“Š Wealth Management
- **Portfolio Construction**: Build optimal portfolios for clients
- **Risk Management**: Quantify and manage portfolio risk
- **Rebalancing**: Maintain optimal allocation over time
- **Performance Reporting**: Track portfolio performance vs benchmark

### 2. 🏦 Institutional Investing
- **Asset Allocation**: Optimize across asset classes
- **Risk Budgeting**: Allocate risk efficiently
- **Benchmarking**: Compare against S&P 500 index
- **Scenario Analysis**: Stress testing and what-if scenarios

### 3. 🎯 Algorithmic Trading
- **Signal Generation**: Forecasts as trading signals
- **Portfolio Optimization**: Dynamic rebalancing
- **Risk Controls**: Volatility targeting
- **Backtesting**: Historical performance validation

### 4. πŸ“ˆ Market Research
- **Trend Analysis**: Identify market trends
- **Seasonality**: Detect seasonal patterns
- **Volatility Forecasting**: Predict market turbulence
- **Correlation Analysis**: Understand asset relationships

---

## πŸ“ˆ Future Enhancements

- [ ] Add more forecasting models (LSTM, ARIMA, XGBoost)
- [ ] Implement backtesting framework
- [ ] Add sector rotation strategies
- [ ] Include alternative assets (crypto, commodities)
- [ ] Real-time portfolio tracking
- [ ] Risk parity optimization
- [ ] Factor-based models (Fama-French)
- [ ] Monte Carlo simulations
- [ ] Machine learning for alpha generation
- [ ] RESTful API with FastAPI

---

## πŸ“ License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

---

## πŸ‘€ Author

**Victor Collins Oppon**
*Data Scientist | Quantitative Finance Specialist*

**Skills Showcased:**
- Time Series Forecasting (Prophet)
- Modern Portfolio Theory (MPT)
- Financial Analytics
- Interactive Dashboard Development
- Quantitative Research
- Risk Management

---

## πŸ™ Acknowledgments

- Meta (Facebook) for Prophet
- Markowitz for Modern Portfolio Theory
- Yahoo Finance for market data
- Streamlit and Plotly teams

---

## ⚠️ Disclaimer

This project is for **educational and research purposes only**. It is **NOT financial advice**. The forecasts and portfolio recommendations are based on historical data and models that may not accurately predict future performance. Always consult with a qualified financial advisor before making investment decisions.

**Past performance does not guarantee future results.**

---

**⭐ If you find this project useful, please consider giving it a star!**

---

*Built with ❀️ by Victor Collins Oppon - Transforming data into intelligent investment insights*