Vivaan Jain

Quantitative Researcher  ·  Systematic Equity  ·  Mumbai, India

Open to quant research internships

Abstract. I build and operate systematic equity strategies on Indian markets: point in time data, cross sectional signals, portfolio construction under the full cost stack, and the validation that separates skill from luck. One book trades itself nightly against real closes. The most useful thing I have produced is a documented list of what does not work.

Mathematics first, markets second  ·  Computer Engineering, DJSCE Mumbai  ·  Class of 2028  ·  CGPA 9.25/10

Net Sharpe
1.02
Net CAGR
13.7%
Max drawdown
−28%
PBO, ML study
0.86
Documented nulls
7
Tests in CI
243

Live book, 2012 to 2026, net of the complete Indian cost stack.

§1

Quantitative Research

Point in time data, cross sectional signals, portfolio construction under real costs, and the validation that decides whether any of it is skill. Each entry expands into the protocol, the numbers, and the results that did not work.

Notation used below
IC
Spearman rank correlation between a signal and the forward return it is meant to predict.
Sharpe
Annualised mean excess return divided by its standard deviation, always quoted net of costs here.
DSR
Deflated Sharpe. The Sharpe discounted for how many configurations were tried before this one. Below 0.95 is not an edge.
PBO
Probability of backtest overfitting. The share of splits where the in sample winner loses out of sample. 0.5 is a coin flip.
CPCV
Combinatorially purged cross validation. Train and test blocks separated by a purge and an embargo so overlapping labels cannot leak.
SPA
Hansen's Superior Predictive Ability test, for whether the best strategy in a family beats the benchmark once the whole family is counted.
1.1
Artha · Systematic Equity Trading System ● Live · Operated

A weekly cross sectional momentum book on Indian equities: researched, validated, and actually operated, on zero paid data. Net Sharpe 1.02 and 13.7% CAGR across 2012 to 2026 after the complete Indian cost stack. It runs itself at 19:00 every evening, it knows when it has been fooled, and its most valuable output is a documented list of things that do not work.

Net Sharpe1.02Net CAGR13.7%Max drawdown−28%
Point in Time NSE PanelLedoit-Wolf Min-Var Purged CV · CPCVDeflated Sharpe · SPA Live Execution
View details ↓ Close ↑
What it does

Artha builds a point in time NSE panel from primary bhavcopy and declared corporate actions, delistings included, ranks the cross section on weekly momentum, constructs a 25 name book with Ledoit-Wolf minimum variance weights and Gârleanu-Pedersen partial adjustment, targets volatility, caps participation against ADV, and executes at the T+1 close. The full Indian cost stack is charged: STT, stamp duty, exchange and SEBI fees, GST, flat DP charges, and square root market impact.

The larger half of the project is proving the result is not luck. Validation is purged walk forward plus combinatorially purged cross validation, deflated Sharpe measured against an append only trial ledger, White's Reality Check and Hansen's SPA. The live layer holds backtest and engine parity as a CI gate, uses deterministic idempotent order ids, enforces drawdown rails, and runs a heartbeat that alarms on silence rather than only on failure. One line: a research lab that happens to trade, built so its own results cannot lie to it.

Results, net of the complete Indian cost stack, 2012 to 2026
Performance by portfolio construction
ConfigurationCAGRSharpeMax DDTurnover
LW min-var + GP τ0.5 · live config13.7%1.02−28%4.2×
Equal weight + no-trade bands12.8%0.96−27%5.2×
Naive momentum 12-123.6%0.96−49%·
NIFTY 500 synthetic TRI14.97%0.94−38%·
Naive momentum earns a far higher CAGR at a −49% drawdown; the shipped configuration trades return for a drawdown a real book can survive. The point of the table is its last row: after costs, most of what looks like alpha is the index. The number that matters is the one that survives being counted, which is why the deflated Sharpe is computed against every configuration ever tried, not just the shipped one.
Architecture
NSE Bhavcopy
corporate actions · F&O · news
Point in Time Panel
sha256 manifest · CA sanity gate
Validation
purged CV · CPCV · PBO · DSR · SPA
Construction
LW min-var · GP τ · vol target
Live Engine
parity gate in CI · OMS
Monitoring
IC decay · PSI drift · heartbeat
Five scheduled jobs: trade at 19:00, a 21:00 heartbeat that asks whether any of that actually happened, a weekly live versus research divergence check, monthly research screens, and quarterly re-validation. A shipped configuration must re-earn its seat. Every alarm is written durably to disk before any push channel is attempted, because the loudest failure mode is silence, and silence has its own dedicated watchdog. Nothing auto remediates: alarms inform, humans decide. A research agent proposes features through an AST sandboxed DSL, screens them under the standard protocol, and keeps a Thompson sampling posterior over which families of idea have historically paid off. It has demonstrably changed its mind, reordering what it tries next after two negative liquidity screens, and it never touches the live book.
The nulls are the contribution
Seven results that did not work, published rather than buried
  • Machine learning does not beat momentum. Ridge, LightGBM, MLP and a Transformer under one purged protocol: PBO 0.86, meaning the in sample winner is overfit in 24 of 28 splits
  • Post earnings drift runs backwards in India. Across 1.48M timestamped exchange announcements the biggest positive surprises reverse, t = −6.9, and event features add no weekly alpha
  • The single name model zoo loses to buy and hold. GRU, LSTM, Transformer and ensemble all land under half the always long floor after costs, under both retraining schemes. Retraining cadence turned out irrelevant: the problem is absence of signal, not staleness
  • News sentiment gating subtracts value, 0.06 against 0.58 Sharpe, consistent with the inverted drift above
  • A learned trading speed policy ties the fixed constant. LinUCB over 728 weekly decisions returns PBO 0.93 and near uniform action counts: the agent itself reporting that the objective surface is flat and the Gârleanu-Pedersen constant is already near optimal
  • Momentum crash regime gates add nothing beyond the volatility targeting already shipped, and EWMA covariance does not beat Ledoit-Wolf, paying for faster adaptation in churn

The headline finding, written up as a working paper: decomposition preprocessing is look ahead. A large literature reports Sharpe 3+ on daily equity forecasting after EMD or CEEMDAN preprocessing. Artha reproduced those numbers exactly, IC 0.41 and Sharpe 3.6, then recomputed the identical transform causally so no future data could touch any training input. The entire edge vanished, IC −0.04. The leaky minus causal gap is the published result, and it is what a global transform applied before a temporal split does to you.

Things that went wrong, and were fixed in public
  • The data feed lied. The declared corporate action feed carried a 1:5 TVSMOTOR split that never happened, manufacturing a +398% phantom return. The adjuster now verifies every declared factor against the ex day price in both directions and has caught 14 phantom events across the history
  • A headline was caught being inflated by its own author. Construction v2 first measured Sharpe 1.119 at −21% drawdown; internal code review found a position cap bug silently parking gross in cash, which is accidental de-risking. Corrected to 1.018, and both numbers stay in the record
  • A significance claim was corrected downward. The claim that the family beats the index at SPA p = 0.0415 turned out to be carried by a naive fully invested baseline inside that family; across constructed configurations alone, p = 0.655
  • A promising upgrade was refused. A momentum plus low volatility blend scored Sharpe 1.30 against the live 1.02, then failed two of four pre registered gates, PBO 0.500 and SPA 0.655. It was held, not shipped, and the friendlier re-test that might have rescued it was deliberately not run
Disclosed limitations

Synthetic total return benchmark because no free NIFTY 500 TRI exists; a static current sector map; cash earns 0%; hedge margin financing unmodelled; paper slippage degenerate until live quotes arrive; an announcement taxonomy audited at 81% accuracy; GDELT news coverage reaching 72 of 115 months before the free API rate limited it; and a deflated Sharpe of 0.20 that counts every single name experiment against the cross sectional book, which is deliberately conservative. Each one is tracked with a confirmation date, because a limitation you disclose cannot ambush you later.

1.2
FullBacktester · Leakage Resistant Backtesting Framework v0.1 · Alpha

A Python backtesting library for people who have been burned by backtests. Point in time data access that makes look ahead a construction error rather than a discipline problem, an AST scanner and a perturbation tester for leakage in strategy code, two execution engines whose disagreement is itself the diagnostic, and performance statistics that account for how many strategies you tried before picking this one.

Engine agreement1e-9Test suite~80Python versions in CI3.11–3.13
Python PackagePoint in Time PanelView AST Leakage ScannerDual Engine Parity Deflated Sharpe · PBO
View details ↓ Close ↑
What it does

Most backtesting frameworks leave the hard part to the user's discipline: not reading the future, not trusting a fill that would never happen, not forgetting how many strategies were tried before this one looked good. FullBacktester moves each of those from a habit into a construction constraint. A strategy never receives a full price history, only a PanelView of bars up to and including the current one, with read only arrays and bars stamped at their close instant in UTC, so a daily bar is not knowable until the exchange has actually closed.

Every strategy in an Arena runs against the same panel, the same execution config, and the same battery of checks, and the overfitting statistics use the number of entries as the number of trials. The summary reports CAGR, Sharpe, deflated Sharpe given that trial count, max drawdown, turnover, cost drag, and the Sharpe gap between the idealized and realistic engines, with every HIGH severity validation finding printed underneath.

What it defends against
Pitfall and defence
PitfallDefence
Look ahead through the dataPanelView ends at the current bar; UTC close stamping
Look ahead in strategy codeStaticScanner AST patterns + FutureLeakTester perturbation
Look ahead in ML trainingEmbargoed WalkForwardMLStrategy + PurgedKFold
Unrealistic executionEvent driven engine, cash ledger, next open fills, participation caps
Vectorized wishful thinkingSame cost model, checked against the event driven engine
Trying many strategiesDeflated Sharpe and CSCV probability of backtest overfitting
StaticScanner flags negative shifts, centred rolling windows, backward fills, and fitting before the split. FutureLeakTester reruns the strategy twice, once with bars after t replaced by noise and once with the history truncated at t: a decision at t that changes was reading the future. Under idealized settings the two engines agree to 1e-9; under realistic settings the gap between them is reported as implementation risk rather than hidden.
Architecture
DataSource
yfinance · NSE bhavcopy · local
Panel · PanelView
read only, ends at bar t
Strategy
weights or on_bar
Two Engines
event driven · vectorized
Validation
AST · perturbation · parity · data QA
Arena Report
DSR · PBO · cost drag
A signal computed from bar t's close executes at bar t+1's open. SAME_CLOSE fill timing exists for market on close strategies and is flagged as optimistic in every report that sees it. Limit and stop orders are evaluated against the next bar's range with conservative fill prices. Annualization comes from the panel's market and bar frequency: 252 US sessions, 250 Indian sessions, 365 crypto days, and intraday multiples of each. Undefined statistics are NaN, never zero. The NSE bhavcopy source is unadjusted and survivorship free, so it is the right source for universe membership and volume checks, and the wrong one for returns. The framework declares that per source rather than letting the user guess.
Technical depth
  • Point in time by construction: PanelView exposes bars [0, t] as read only arrays, so look ahead is a type of code that cannot be written rather than a mistake to be caught in review
  • Two independent leakage detectors: a static AST scanner over strategy source, and a dynamic perturbation tester that corrupts the future and checks whether the present decision moves
  • Dual engine design where agreement is the test: the vectorized engine exists for speed and shares the cost model exactly, and any divergence from the event driven ledger is surfaced as implementation risk
  • Multiple testing taken seriously: probabilistic_sharpe_ratio, deflated_sharpe_ratio, minimum_backtest_length, and CSCV probability_of_backtest_overfitting are first class metrics, not an appendix
  • Packaging verified the way users experience it: a clean room script builds the wheel, installs it into a fresh virtualenv with the source tree off the path, and exercises the installed copy, which catches a module missing from the wheel, a lost py.typed marker, or an extra that is not really optional
  • Limitations stated in the README rather than discovered later: corporate actions are not modelled point in time, intraday fills assume the bar's open is attainable, the leakage tests cannot see a strategy that reads the future from a global, and no options, futures margining, borrow costs or FX in v0.1
1.3
ML Research: Equity Forecasting + Sentiment Alpha Research

Two related quantitative finance ML projects: a custom Transformer for multi horizon Nifty 50 direction forecasting (0.62 AUC, 0.6+ Sharpe), and a controlled experiment testing whether news sentiment provides incremental alpha beyond price.

AUC (Transformer)0.62L/S Sharpe0.6+Training days4,900+
TensorFlowFinBERT XGBoostyfinance Pandas
View details ↓ Close ↑
Project 1: Multi Horizon Transformer for Nifty 50

A Transformer encoder built from scratch in TensorFlow that outputs directional forecasts for 4 horizons simultaneously: 1, 5, 10, and 20 trading days: from one forward pass. Trained on 4,900+ trading days (Jan 2006–Feb 2026). FinBERT news sentiment fused as a parallel signal. Achieved 0.62 AUC and 0.6+ non overlapping long short Sharpe on the held out test set.

Architecture: Transformer
18yr OHLCV
Jan 2006 to Feb 2026
16 Features
OHLCV + technicals
+
FinBERT
sentiment score
Transformer Encoder
60-day self attention · TensorFlow
4 Outputs
1/5/10/20d · 0.62 AUC
Fully vectorized long short backtesting engine validates economic performance beyond drift. Walk forward validation and decile based strategy evaluation ensure no temporal leakage. Leakage free scaling applied to all features. 16 quantitative technical factors engineered. Compared against XGBoost baseline on same features. 0.6+ non overlapping long short Sharpe.
Project 2: Sentiment Driven Quantitative Alpha Modeling

A rigorous controlled experiment testing a specific hypothesis: does news sentiment provide incremental predictive signal beyond pure price based models in financial markets? Pipeline fuses historical price, volume, and API sourced news sentiment. Found a 5-day return correlation improvement from 0.43 to 0.46 using sentiment features, supported by MAE and RMSE diagnostics and shuffle testing. Conclusion: gains were modest, unstable, and highly sensitive to validation design: which is itself a meaningful finding about the fragile nature of financial signals.

Technical depth across both projects
  • TensorFlow throughout: Transformer encoder built from scratch, custom multi head attention, positional encoding, 60-day temporal context window
  • Fully vectorized backtesting engine: long short strategy evaluated at decile level without any lookahead: the backtester was built from scratch, not a library
  • Walk forward validation: multiple expanding train windows evaluated in sequence, not a single temporal split, providing more robust out of sample estimates
  • Leakage free scaling: mean and std computed only on training windows, applied to val/test: prevents a common source of overly optimistic results in finance ML
  • Sentiment alpha experiment designed to falsify, not confirm: MAE/RMSE diagnostics and shuffle testing specifically to distinguish genuine signal from validation artefacts
1.4
Overnight Return Prediction · Quant Research Submission Research

Predicting the overnight gap into the next open across 208 NSE symbols: move size, direction, and calibrated confidence as four independently fitted models rather than one model wearing four hats. Pooled rank IC 0.178 at t = 24.5, and a residual direction score of 0.0001 that the write up leads with instead of burying.

rank_ic (t = 24.5)0.1782magnitude_score0.2401conf_magnitude residual0.2696
LightGBMIsotonic Calibration Walk Forward SplitsCross Sectional Features 208 NSE Symbols
View details ↓ Close ↑
What it does

Given the close on day T for roughly 208 NSE stocks, the pipeline predicts the overnight gap into the open on day T+1: how large the move will be, which direction it goes, and how confident the model is about each. These are four separate, independently fitted models. Magnitude is a LightGBM regressor on log1p(|return|), log space because the target is right skewed and a handful of genuinely extreme moves sit far out in the tail. Direction is a separate LightGBM classifier with its own features and its own hyperparameters, trained independently rather than derived from magnitude.

Direction confidence is deliberately not the classifier's raw probability, because tree ensemble probabilities are typically miscalibrated. Magnitude confidence is fitted on genuinely out of fold errors via a walk forward split on train, never on in sample residuals, because in sample residuals answer an easier question than the one that matters at prediction time.

Results on the held out test split
Pooled versus residual, after subtracting the common market move
MetricPooledResidual
rank_ic (t = 24.5)0.1782·
magnitude_score0.24010.2245
conf_magnitude_score0.23400.2696
direction_score0.24140.0001
ece_10 · calibration error0.0211·
The magnitude numbers are close to each other pooled and residual, which means the model differentiates between stocks rather than only reading the volatility regime. Confidence about magnitude is more informative residually than pooled, the opposite of the direction story, and worth stating for exactly that contrast.
The result the submission leads with
Residual direction skill is indistinguishable from zero

Pooled direction looks strong. After subtracting the common market wide move, it is 0.0001. Rather than average that away, three explanations were checked with the actual numbers printed at each step. Is the classifier degenerate? No, raw probabilities have genuine two sided spread and hundreds of rows score below 0.5 before calibration. Is the calibrator broken? No, bucketing the validation split into deciles and checking the realized up rate in each shows even the lowest decile is well above 50% on held out data, so the calibrated output is reflecting reality rather than fighting it. Is the confidence flip rule over triggering? No, the calibrated probability never dropped below 0.5 on test before that rule ran.

Overnight returns in this dataset are up 67 to 73% of the time across all three chronological splits. A correctly calibrated model has limited honest basis to call down. Forcing more down calls would have produced better looking recall and a less truthful model.

Diagnosing it rather than accepting it
  • Feature importance showed breadth_pos_frac and xs_dispersion, pure market regime indicators identical across all 208 stocks on a given day, dominating the direction model, while the one feature capturing a stock's standing against its peers ranked 15th and was barely used
  • Rank and z score versions of two absolute features tied to the overnight persistence mechanism were added and the model retrained. Down calls on test went from zero to 103 genuine ones, and the fraction of stocks beating their own naive always up rate moved off zero for the first time, to 0.029
  • Breadth reported with the same honesty: 204 of 208 stocks clear a 50% hit rate, but since the direction model calls up on nearly every row, a stock's hit rate is mechanically close to its own historical up rate, and the correlation between the two is effectively 1.0. The meaningful breadth result is the magnitude side, where all 208 beat the naive baseline and that does not reduce to the always up mechanism
  • A separate model trained directly on the residual target, the sign of a stock's return minus the universe mean, showed real skill on its own terms: 56.6% hit rate on a genuinely near even target, and a 0.183 mean daily cross sectional rank correlation between its confidence and which stocks actually beat the market across 282 test days
  • That model was tested for inclusion and then left out. On the 60% of test rows where the two models disagree, the primary model is right 64% of the time. The combination was measured rather than assumed, found not to help, and not shipped
  • Reproducibility as a checked property, not a claim: a single seed threaded through every model's random_state and the walk forward splitter, verified by two independent fresh runs producing byte identical predictions.csv and statistics.csv

§2

Research

Independent research under the ACM Research Core programme, and the conventional baseline it is defined against. The second card is on the page precisely because the first one exists to break it.

2.1
Cost Sensitive Deep Learning for Credit Scoring ACM Research · 2025

A novel deep learning architecture that learns non linear latent borrower risk embeddings, models temporal debt acceleration, optimises for economic loss (not AUC), and produces regulator grade explanations, built in, not post hoc.

DatasetConfirmedBase paperFoundArchitectureDesigned
Deep LearningCredit Risk Cost Sensitive LearningXAI Latent EmbeddingsFinTech
View details ↓ Close ↑
The problem

Credit scoring sits at an intersection of three unsolved problems. First, high performing deep models learn complex non linear borrower representations that are impossible to explain to risk teams or satisfy regulators, explainability is now a legal requirement under frameworks like Basel and GDPR, and post hoc methods like SHAP produce approximations, not faithful explanations. Second, misclassification costs in lending are fundamentally asymmetric and instance dependent: rejecting a creditworthy borrower costs differently to approving a defaulter, and that ratio varies per loan. Optimising for AUC ignores this entirely. Third, existing models treat borrower risk as stationary, they miss that financial distress typically accelerates non linearly before a default event.

This research addresses all three with one unified architecture: learn latent risk embeddings, explicitly model debt acceleration dynamics, optimise directly on economic loss with an instance dependent cost function, and keep the decision process inherently interpretable.

Architecture
Borrower Features
financial + behavioural
Deep Feature Extractor
non linear representations
Latent Risk Embeddings
borrower risk manifold
Debt History
temporal sequence
Debt Acceleration Module
rate of change dynamics
Cost Sensitive Layer
instance dependent asymmetric loss
Credit Decision
+ inherent XAI
The cost sensitive decision layer uses an instance dependent asymmetric loss, the false negative penalty (approving a defaulter) vs. false positive penalty (rejecting a good borrower) is not a global constant but varies per borrower based on loan amount and risk profile. The explainability layer is inherently interpretable by design: predictions decompose into feature level contributions directly from the architecture's forward pass, not SHAP approximations.
Three original contributions
  • Non linear latent risk embeddings, the model learns a borrower risk manifold from raw financial and behavioural inputs rather than relying on hand crafted credit features, capturing interaction effects that linear scorecards cannot represent
  • Temporal debt acceleration modelling, explicitly models the rate of change of debt accumulation over time; financial distress rarely appears suddenly, it accelerates, and this module learns those pre default dynamics from borrower history
  • Instance dependent cost sensitive optimisation, trained directly on economic loss where the asymmetric cost ratio is per borrower, not a fixed global hyperparameter; makes the learning objective match what a lender actually cares about
  • Inherently interpretable architecture, explainability is built into the model's forward computation, not added as a post hoc approximation; explanations are faithful to what the model actually computed, satisfying regulatory interpretability requirements
Why AUC is the wrong metric here

A model that correctly identifies 90% of defaults but misclassifies every large loan defaulter as creditworthy scores well on AUC and is catastrophic in practice. This research trains directly on business loss: the asymmetric financial cost of each misclassification type, weighted by the specific borrower's loan profile. The evaluation metric is expected economic loss on the held out set, not AUC.

2.2
Automated Credit Risk Evaluation for Loan Approval Foundation work

Binary classification on historical loan applications: income, loan amount, credit history, education, employment and property area in, an approve or reject decision out. A full supervised pipeline from EDA through feature engineering to a Flask app that serves the trained model. This is the standard formulation of credit scoring, and it is here because the research above exists to attack what it gets wrong.

TaskBinaryObjectiveSymmetricTemporal modellingNone
Binary ClassificationFeature Engineering Flaskscikit-learn
View details ↓ Close ↑
What it does

An end to end supervised learning pipeline over historical loan application data: exploratory analysis, preprocessing, feature engineering, and a binary classifier that predicts whether an application should be approved. A Flask interface wraps the trained model so applicant details can be entered and scored directly, which is the part that turns a notebook into something a person can actually use.

Pipeline
Loan Applications
applicant + loan features
EDA · Preprocessing
missing values · encoding
Classifier
approve / reject
Flask App
form in, prediction out
Deliberately the textbook formulation: one dataset, a symmetric objective, and accuracy style classification metrics. Stated plainly rather than dressed up, because the interesting question is what that formulation cannot do.
Why it sits next to the research
Three assumptions this model makes that lending does not support
  • It optimises a symmetric objective. Approving a defaulter and rejecting a creditworthy borrower cost different amounts, and the ratio moves with the size of the loan. R1 replaces this with an instance dependent asymmetric loss trained directly on economic loss
  • It treats borrower risk as stationary. A single snapshot of features carries no notion of debt accumulating faster over time, which is how distress actually shows up before a default. R1 adds an explicit debt acceleration module
  • Whatever explanation it offers is post hoc. A classifier plus SHAP produces an approximation of a decision, not the decision itself, which is the wrong side of the line for a regulated credit decision. R1 makes interpretability part of the forward pass

Kept on the page for that contrast. The honest description is a competent, conventional credit scoring pipeline with a working demo, and the value of having built it is knowing precisely which of its assumptions to go after.

§3

Engineering

Production systems built alongside the research: agentic finance tooling, retrieval infrastructure, and multilingual speech pipelines. These are shipped applications rather than research, and they are here because the research above needs someone who can also build the thing.

3.1
FinIntel — Agentic Equity Desk ● Live

An agentic AI equity research desk for Indian markets (NSE): six specialised LLM agents grounded in live market data, LangGraph human in the loop approval gates, a mandatory compliance pipeline, and deterministic Python maths so the model interprets numbers rather than inventing them.

Interactive agents6ReAct tools31Human in the loop agents4
LangGraphFastAPI GroqReact · Vite yfinance · NSESupabase
View details ↓ Close ↑
What it does

FinIntel is a multi agent system for equity research on India's National Stock Exchange. A fleet of specialised LLM agents, each grounded in live market data, lets a user analyse a single stock, screen the market by custom criteria, audit portfolio risk, or request a full research report. A five question suitability profile gates every recommendation against the user's stated risk tolerance, and human in the loop approval gates keep a person in control of consequential steps.

Every output passes a mandatory compliance pipeline: input validation, semantic screening, grounded rewrites that avoid fabrication, PII scrubbing, and SEBI style disclaimers. Deterministic mathematics (volatility, Sharpe, beta, drawdown, CAGR, XIRR, stress tests) is computed in Python; the LLM interprets the results rather than performing the arithmetic, which removes a whole class of hallucination.

Agentic architecture
Query
React · SSE
Rate limit + Auth
PBKDF2 · Supabase
6 Agents
ReAct · 31 tools
LangGraph
interrupt() human gate
Compliance
PII scrub · SEBI
Response
streamed · sourced
LangGraph StateGraph checkpoints state and calls interrupt() to pause for human approval; the user approves, redirects, or stops via Command(resume=...) on four agents (desk, war room, portfolio auditor, task). Deterministic maths runs in Python behind a TTL cache; the LLM only interprets the numbers, never computes them. Groq multi key failover pool for resilience; data from yfinance, Screener.in, and NSE with labelled sample fallback when live feeds are unreachable.
Technical depth
  • Six interactive agents (Analyst, Brief, Discover, Portfolio, War Room, Report) across a seven tab desk; the ReAct chat agent exposes 31 grounded tools
  • LangGraph StateGraph with interrupt() / Command(resume=...) human in the loop on four agents: the graph checkpoints, pauses for approval, and resumes without losing state
  • Mandatory compliance pipeline on every output: input validation, semantic screening, grounded rewrite of unsourced claims, PII scrubbing, and SEBI style disclaimers
  • Deterministic quant maths in Python (volatility, Sharpe, beta, RSI, drawdown, CAGR, XIRR, stress test factors); the LLM interprets results rather than doing arithmetic, cutting hallucination risk
  • Five question suitability questionnaire builds a per user risk profile that gates recommendations; a Groq multi key failover pool and a TTL cache for deterministic calls keep it resilient and cheap
3.2
MindVault ● Live

Production grade multi tenant RAG system with hybrid retrieval (semantic + BM25 + FlashRank reranking via Reciprocal Rank Fusion), real time streaming, multimodal ingestion, and RAGAS validated quality across 25+ test cases.

Query latency40% fasterRAGAS test cases25+Prod incidents fixed6+
LangChain LCELFAISS RAGASFastAPI Next.jsSupabase/pgvector
View details ↓ Close ↑
What it does

A multi tenant RAG system where users upload documents and query them with natural language. Under the hood it uses three retrieval methods fused together: semantic vector search, BM25 keyword matching, and FlashRank cross encoder reranking combined via Reciprocal Rank Fusion. This eliminates the blind spots that any single retrieval method has. Real time streaming responses, multimodal document and image ingestion, shareable conversation links.

Built to run reliably on constrained 512MB infrastructure. Diagnosed and resolved 6+ critical production incidents including memory leaks, race conditions, and rate limit cascades. RAGAS evaluation suite covers faithfulness, context precision, and context recall across 25+ test cases.

Architecture
Document
PDF · image · text
Chunker
500 chars
3 Retrievers
FAISS · BM25 · FlashRank
RRF Fusion
Reciprocal Rank Fusion
LLM
streaming
Parallel async retrieval across all three methods, selective LLM call pruning on low confidence chunks: 40% reduction in query latency. Intent classification and context aware query rewriting before retrieval. Cross session conversational memory with rolling summarisation. Knowledge graph layer (NetworkX) extracts typed entity relationships across 50+ concept nodes per document, rendered as interactive graph UI. Multi tenant: Supabase/pgvector with row level security, every query scoped to authenticated user at database level.
Technical depth
  • Hybrid retrieval via Reciprocal Rank Fusion: FAISS semantic search, BM25 keyword matching, and FlashRank cross encoder reranking each run in parallel, results fused to eliminate single method blind spots
  • 40% query latency reduction through parallel async retrieval and selective LLM call pruning on chunks below a confidence threshold
  • RAGAS evaluation suite: automated faithfulness, context precision, and context recall scoring across 25+ curated test cases, run on every significant change
  • 6+ critical production incidents resolved: memory leaks from embedding model loading, race conditions in concurrent session writes, rate limit cascades under burst load: zero downtime reliability on 512MB infrastructure
  • Knowledge graph construction from LLM extracted typed entity relationships across 50+ concept nodes, stored in NetworkX, rendered as interactive node graph in Next.js frontend
  • Intent classification chain rewrites ambiguous or context dependent queries before retrieval, improving relevance without the user needing to rephrase
3.3
ApplyPilot AI ● Live

A full stack AI application copilot: upload a resume, paste a job post, and get a tailored cover letter, application email, fit score, and reworded resume bullets in 10 to 20 seconds. Three tier app on Groq Llama 3.3 70B, no paid API.

Time per application10–20sGroq calls / application3Free tier throughput14,400 req/min
FastAPINext.js 14 PostgreSQLGroq · Llama 3.3 70B Docker
View details ↓ Close ↑
What it does

Upload a resume, paste a job posting, and in 10 to 20 seconds ApplyPilot returns a cover letter, an application email, a fit score, adapted resume bullets, and grounded answers to custom application questions. Resume and job parsing extract structured profiles; the fit score is computed in plain Python before any model call; generation runs through Groq's free Llama 3.3 70B. A real status pipeline (ready → approved → submitted → interviewing → offered/rejected) tracks every application.

The AI never invents experience. Resume adaptation carries explicit prompt level constraints: reword existing bullets to hit JD keywords, never add a skill or change a date. It was tested specifically by feeding a resume missing an obvious JD keyword to confirm it reframes rather than fabricates.

Architecture
Next.js 14
upload · paste JD
FastAPI
JWT REST · BackgroundTasks
Groq · Llama 3.3 70B
3 sequential calls
PostgreSQL
profiles · application state
Fit scoring is pure Python skill set intersection before any LLM call: transparent and fast, and it tells the user exactly why the score is what it is. Three Groq calls per application (cover letter, email, resume adaptation) run sequentially inside one FastAPI BackgroundTask: no queue, no broker. The whole stack runs in three Docker containers via Docker Compose; PostgreSQL persists profiles, documents, and lifecycle across five tables. Groq free tier (Llama 3.3 70B) for every generation: no OpenAI key, no per call cost.
Technical depth
  • Three tier app: Next.js 14 frontend with polling based state, JWT secured REST to a FastAPI backend, PostgreSQL for persistence: no unnecessary moving parts
  • Fit score is deterministic Python (skill set intersection) computed before any LLM call: transparent and explainable rather than an opaque embedding similarity
  • Three Groq calls per application run sequentially inside one FastAPI BackgroundTask: no Celery, no Redis, no broker: genuinely sufficient at this scale
  • Original design used Celery + Redis + LangGraph + Ollama: scrapped after testing because five extra containers and a message broker added complexity with no benefit, cut to BackgroundTasks + Groq
  • Resume adaptation is constrained at the prompt level to reword existing bullets only, never fabricate skills or dates: verified by adversarial testing with a missing keyword
3.4
AuditMind AI In Development

End to end multilingual audio intelligence pipeline for 13 Indian languages. Processes noisy field interview audio through ASR (Whisper large-v3), speaker diarization (SpeechBrain ECAPA-TDNN), and semantic question mapping: speaker labelled transcripts, zero paid API dependency.

PyTorchWhisper large-v3 SpeechBrain ECAPA-TDNN13 Indian languages
View details ↓ Close ↑
What it does

Processes noisy field interview recordings in 13 Indian languages into clean, speaker labelled transcripts with zero paid API dependency. Raw audio goes through signal preprocessing, ASR via Whisper large-v3, speaker diarization via SpeechBrain ECAPA-TDNN, and semantic question mapping to produce structured outputs from unstructured conversational audio at scale.

Architecture
Raw Audio
noisy field recordings
Signal Preprocessing
bandpass · noise reduction · RMS norm
Whisper large-v3
ASR · 13 Indian languages
SpeechBrain ECAPA-TDNN
speaker diarization
Structured Transcript
speaker labelled output
Preprocessing evaluator tests 16 signal processing configurations (bandpass, noise reduction, RMS normalisation) scored via Whisper confidence metrics to identify the optimal variant per audio condition automatically. No paid API at any stage: Whisper and SpeechBrain run fully on PyTorch locally.
Technical depth
  • Whisper large-v3 for multilingual ASR across 13 Indian languages including dialects where cloud APIs degrade on noisy field recordings; runs entirely locally with no per call cost
  • SpeechBrain ECAPA-TDNN separates overlapping speech and assigns speaker identities so transcripts are labelled by who said what, not just a flat stream of text
  • 16-configuration preprocessing evaluator: systematic search over combinations of bandpass filters, noise reduction, and RMS normalisation; selects the best scoring variant per input using Whisper confidence as the objective metric
  • Semantic question mapping layer maps transcript segments to structured question slots, enabling downstream analysis without manual review of raw transcripts

§4

Skills

Aggregated from research and shipped work, grouped by domain. Quantitative methods first, because that is what the rest of this page is in service of.

Quantitative Research & Validation
Purged Walk ForwardCPCV Probability of Backtest OverfittingDeflated Sharpe Probabilistic SharpeWhite Reality Check Hansen SPABonferroni · Benjamini-Hochberg Bootstrap Confidence IntervalsSpearman IC Look Ahead DetectionPoint in Time Data Survivorship Bias Control
Portfolio Construction & Execution
Ledoit-Wolf ShrinkageMinimum Variance Gârleanu-Pedersen Partial AdjustmentVolatility Targeting Cross Sectional MomentumTransaction Cost Modelling Square Root Market ImpactADV Participation Caps Event Driven BacktestingDrawdown Rails Idempotent Order ManagementZerodha Kite
Data Science & Market Data
NumPyPandas MatplotlibNSE Bhavcopy Corporate Action Adjustmentyfinance quantstatsTA-Lib ParquetJupyter
ML & Deep Learning
TensorFlowKeras PyTorchWhisper large-v3 SpeechBrainscikit-learn XGBoostNLTK SpaCyMLflow FinBERT
Generative AI & LLMs
LangChainLangGraph LangChain LCELRAG Pipelines FAISSRAGAS BM25FlashRank OllamaGroq NetworkXPydantic Prompt Engineering
Backend & APIs
FastAPIFlask async SQLAlchemyPostgreSQL SupabaseMySQL REST APIsStreamlit
Frontend
Next.js 14React 18 TypeScriptTailwind CSS ViteReact Query Zustand
Languages, Tools & Infrastructure
PythonC/C++ JavaMySQL TypeScriptDocker KubernetesAWS GitGitHub VercelLinux VS Code

§5

Education

Undergraduate
2024 to 2028
Mumbai, India
9.25 / 10 CGPA
B.Tech. Computer Engineering · Honours in Data Science
Honours in Data Science
Dwarkadas J. Sanghvi College of Engineering (DJSCE), Mumbai

One of Mumbai's top engineering colleges, affiliated with the University of Mumbai. The degree supplies the fundamentals, data structures, algorithms, operating systems, computer networks, and database systems, and it is not where the work on this page came from. Every project here was scoped, built, validated, and shipped alongside it, under nobody's syllabus. Current CGPA 9.25/10. Coursework is the floor.

Mathematics and quantitative coursework
Grade points, out of 10
CourseGrade
Mathematics I10
Mathematics II10
Statistical Modelling10
Operational Research9
Advanced Operational Research9

The five courses closest to what this work actually runs on. Statistical modelling and operational research are where the portfolio construction and the validation protocol come from, rather than from anything a framework hands you.

§6

Experience

Internship
Apr 2026 to Present
Full Stack AI Intern
Full Stack AI Intern
Zeex AI  ·  AI startup, incubated at IIT Madras  ·  Mumbai

Architected and built a production grade, end to end audio intelligence pipeline on AWS that transforms unstructured conversational audio into structured outputs at scale. Pipeline covers audio preprocessing, Automatic Speech Recognition, speaker diarization, and semantic question mapping across 13+ Indian languages.

  • Built the full pipeline end to end: audio preprocessing, ASR, speaker diarization, semantic question mapping: all integrated and deployed to production on AWS
  • Improved question mapping accuracy by 20% and transcription quality by 15% through preprocessing optimisation, architecture level experimentation, and speaker segmentation refinement
  • Reduced overall pipeline latency by 30% through integration of speech processing frameworks and targeted bottleneck analysis
  • Extended question mapping to 13+ Indian languages: built and tested the multilingual pipeline from preprocessing through to structured output
Freelance
2025
Sole Developer
Full Stack Developer
Shakti Alloys Pvt Ltd  ·  shaktialloys.in ↗

Took a real manufacturing business from zero web presence to a fully operational production site: sole developer across design, build, and deployment. The brief was a professional catalogue site that the client could own permanently without needing a developer on retainer.

  • Chose React 18 with TypeScript and Vite for a maintainable, type safe codebase that any developer could pick up later without context; Tailwind for rapid iteration without fighting a CSS framework
  • Designed a product catalogue system for 18 alloy grades (ADC12, A380, A413, 6061, 6063 and more) with individual spec pages, built so adding a new grade requires editing one data file
  • Wired EmailJS for the contact form so enquiries go directly to the client without any backend to maintain or server costs to worry about
  • Built scroll reveal animations and animated counters with IntersectionObserver, no libraries, keeping bundle size minimal and load time fast
  • Deployed on Vercel with a custom domain, configured DNS, and handed over with documentation so the client can manage content changes without developer involvement

§7

Writing

Technical articles published on Medium.

Medium  ·  January 18, 2026  ·  7 min read ▲ 110+ impressions

NLP: From Fundamentals to Modern Applications

A deep technical series for engineers who want to understand NLP from first principles, not just use the APIs. Covers the full pipeline: how raw text is collected and preprocessed, how tokenisation works mechanically, what word embeddings represent mathematically, how self attention (Q·K·V) is computed step by step, and how modern architectures like BERT and GPT are structured. Written so that every design decision in the pipeline is visible and reasoned about, not abstracted away.

TokenisationWord Embeddings Self Attention Q·K·VTransformers BERTGPT
Read on Medium →
Medium  ·  October 2025 ▲ 150+ impressions

From Motion to Prompts: AI Powered Video Creation

How AI generates, edits, and transforms video from a single text prompt, covering the computer vision pipeline underneath: pixel grids and RGB representations, CNN based feature extraction, compression to latent vectors, and how modern generative models produce temporally consistent frames. Also covers the commercial implications, AI generated ads, lip sync video, and where the line between generated and real content currently sits.

Generative AIComputer Vision CNNsLatent Vectors Video Generation
Read on Medium →

§8

Achievements

Mathematics came first and everything on this page is downstream of it. The results below are the record of that, in the order it happened.

  1. School Olympiad
    Second prize, SOF International Mathematical Olympiad
    School level, Science Olympiad Foundation

    A placed result in the olympiad round, sat over several years. Not the IMO proper, and worth naming precisely: this is the SOF school olympiad, which is where the habit of treating a problem as something to be proved rather than guessed started.

  2. 2024 Entrance
    MHT-CET  ·  99 overall, 98.6 in mathematics
    Maharashtra Common Entrance Test, percentile
    ExaminationMathematicsOverall
    MHT-CET98.699
    JEE Main95.4·

    Percentile in both cases. The mathematics section is the one that mattered to me and it is the one I optimised for.

  3. 2025 Competition
    First prize, Urban Empire
    Data driven strategy competition

    Built a winning data driven city budget allocation strategy: a constrained allocation problem under a fixed budget, which is the same shape as sizing a book.

  4. Ongoing Coursework
    10/10 in Mathematics I, Mathematics II and Statistical Modelling
    Full grade points, with 9/10 in both Operational Research courses

    Listed in full under §5 Education. The five courses that the research on this page actually runs on, rather than the five that were easiest.

§9

Contact

Open to quantitative research internships, research collaborations, and problems where nobody already knows the answer. Email is fastest, and I read all of it. If you're hiring, tell me what the desk actually trades and what the first six months look like, and skip the pitch. It saves time for both of us.

Live from GitHub 39 public repos · auto-synced daily