One indicator tells you almost nothing.
RSI says overbought, MACD says momentum, the news says a downgrade — and a retail dashboard usually shows you exactly one of those at a time, on its own tab, with no attempt to reconcile them. The interesting question is what happens when you place price action and headline sentiment side by side.
FinCast AI is that experiment: fold technical indicators, a learned price-direction model, and financial-news sentiment into a single view for NSE-listed stocks — and be honest about what each part can and can't claim.
This is a lens on the market, not advice about it.
The rules the project runs under.
Never present output as financial advice.
Predictions are uncertain and past performance guarantees nothing. The app is framed as educational analysis — a tool to think with, not a buy button.
Keep the three signals separable.
Indicators, the SVM, and FinBERT sentiment are computed independently, so the user can see why a view looks bullish rather than trusting a single blended score.
Auth stays out of the model service.
A separate Node/Express + MySQL server owns login and hashing, so the FastAPI analysis service never touches credentials.
Data in, three signals out.
A FastAPI backend fetches prices from Yahoo Finance, computes indicators
with the ta library, runs the ML models, and scores news
from NewsData.io through FinBERT. The React dashboard reads it all over
a small REST surface.
FinBERT (yiyanghkust/finbert-tone) is the heavyweight piece —
a ~440 MB model that classifies each headline positive, negative, or
neutral, then scales that into a sentiment score fed alongside the
indicators into the price model's feature set.
Sentiment is noisy and slow.
Two things bit early. First, FinBERT's cold start: the first request downloads hundreds of megabytes of weights, so without warming and caching the model, the initial call felt broken. Second, news-API rate limits on the free tier meant naive per-request fetching ran dry fast — headline sentiment had to be cached, not recomputed on every view.
The deeper lesson was resisting the urge to collapse everything into one confident number. Blending a fuzzy sentiment score into a price prediction and reporting a single figure would have hidden the uncertainty instead of surfacing it. Keeping the signals visible and separate was the more honest design.
Charts that explain themselves.
The dashboard leads with historical-versus-predicted price on a chart you can zoom from all-time down to a week, then layers in top movers, portfolio value, and the news-sentiment read for the selected company. A Material UI shell and Recharts keep it legible rather than cluttered.
The design brief was: show the ingredients, not just the verdict. A user should be able to disagree with the model and still find the view useful.
Three things, next time.
Cache sentiment as a first-class layer.
News scoring should be a scheduled job writing to a store, not an on-request call — cheaper, faster, and immune to rate limits mid-session.
Backtest before believing.
The SVM classifier deserves a proper walk-forward backtest so its direction accuracy is reported honestly, not assumed.
Broaden beyond SVM.
LSTM or gradient-boosted baselines would give an apples-to-apples sense of whether the SVM is actually pulling its weight.