Financial sentiment is its own dialect.
"Bank misses estimates" is negative; "regulator eases capital rules" is positive — and a general-purpose sentiment model, trained on movie reviews and tweets, has no idea. BFSI language is terse, domain-loaded, and full of words that mean the opposite of their everyday sense.
The task was to classify sector headlines into positive, negative, and neutral, and — just as importantly — to find out which family of model earns its cost here. Is a fine-tuned transformer worth the training time over a well-tuned gradient-boosted classifier?
The best model is the one whose cost you can justify.
Keeping the comparison fair.
One pipeline, many models.
Every model sees the same cleaned, split data, so accuracy differences reflect the model — not a lucky preprocessing choice.
Domain-specific text cleaning.
Custom financial stopwords and careful tokenisation, stemming, and lemmatisation, because generic stopword lists throw away signal in this domain.
Validate with stratified folds.
Stratified K-fold keeps the class balance stable across folds so the headline accuracy figure isn't an artefact of one split.
Clean, vectorise, model, ensemble.
The workflow runs in a single notebook: exploratory analysis and word clouds, then a text pipeline, then a ladder of models from logistic regression up to a fine-tuned BERT, with voting and stacking on top.
Prediction works two ways: a single headline returns a label and a confidence, and a batch returns a consensus across the top models — a small hedge against any one classifier's blind spot.
BERT wins on accuracy, ensembles win on value.
The headline result: ensemble methods reached roughly 94–96% accuracy, and a fine-tuned BERT nudged slightly higher — at the cost of by far the longest training time. XGBoost and LightGBM landed in the low-90s while training in a fraction of the time.
For most of this dataset, the gradient-boosted ensemble was the sweet spot: nearly BERT-level accuracy, a small fraction of the compute, and far easier to reason about. BERT earned its keep only on the genuinely ambiguous headlines.
Preprocessing beat model swaps.
The single biggest accuracy jump didn't come from a fancier model — it came from the domain-specific cleaning. Financial stopwords and careful n-gram features lifted every model at once, which is a cheaper and more durable win than chasing the next architecture.
Feature-importance analysis then paid that back in interpretability: you could point at the exact financial terms driving a prediction, which matters more in a regulated domain than a half-point of accuracy.
Three things, next time.
Fine-tune BERT on a larger domain corpus.
The transformer's edge would widen with more BFSI-specific training text; the current gap over ensembles is narrow partly for lack of data.
Report per-class F1, not just accuracy.
Neutral is the easy class and inflates the headline number; per-class precision and recall tell the honest story.
Ship a real prediction interface.
The consensus predictor is the useful artefact — it belongs behind a small web app, not buried in a notebook cell.