Tanush Pradhan · 2026
Project 02 · Shipped

Money
BRAIN

An LSTM-based stock market prediction model with a real-time dashboard. A learning project that turned into a working forecasting tool — and taught me more about model interpretability than any course did.

Role
Solo build
Status
Shipped, evolving
Started
Dec 2023
Stack
Python · TensorFlow · Streamlit
Context

I wanted to learn time-series forecasting properly — not by watching tutorials, but by shipping something. The brief I gave myself: build an LSTM stock predictor with a real-time UI that someone other than me could actually use.

The constraint of "someone else has to be able to use this" turned out to be the most useful design decision. It forced interpretability questions early, instead of leaving them to the end.

Approach

The architecture is deliberately simple:

  • Data layer: YFinance pulls historical OHLCV data on demand
  • Model: A stacked LSTM with dropout, trained on a rolling window of normalized prices
  • Forecasting: Multi-step prediction with confidence intervals derived from model variance
  • UI: Streamlit dashboard with Plotly charts for actuals vs predictions, residual analysis, and a feature importance view

I deliberately resisted the urge to add more layers, ensemble methods, or attention mechanisms. The goal was a clean baseline I actually understood, not the highest possible accuracy on a held-out test set.

Outcomes

The dashboard works. You can pick a ticker, set a forecast horizon, train the model live, and see predictions with reasonable confidence bands.

More importantly, I built a structured intuition for:

  • Why LSTMs work well on price shape but poorly on price level
  • How much performance you give up by not handling regime changes
  • Why financial forecasting accuracy benchmarks can be misleading (random walks are a stronger baseline than people admit)
What I learned

Two things stuck with me:

First, interpretability is a design choice, not a final step. If you build it in from day one, your model gets simpler and your debugging gets faster. If you bolt it on after, you're reverse-engineering your own work.

Second, shipping the UI changes everything. The dashboard forced me to think about what a non-modeler would actually want to see, which reshaped what I trained the model to predict. That feedback loop doesn't exist when you stop at a Jupyter notebook.