Skip to content
View sidharthjatt's full-sized avatar
♾️
♾️

Block or report sidharthjatt

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
sidharthjatt/README.md

Sidharth Choudhary

AI Builder · MSc–MTech, Data & Computational Science · IIT Jodhpur
I build AI systems, then I try to break them.


I'm in the final year of a dual degree at IIT Jodhpur, in the Mathematics specialisation. I build agentic systems and quantitative research tooling, and I spend about as long trying to break them as building them.

All four projects below are public, and each one says where it fails: a quantised model that returned chance-level answers without raising an error, a leak detector that only proves a floor, a trading edge that didn't survive its own re-runs. I'd rather show that than quote a number I can't defend.

JAM 2023: AIR 162 - top 1.2% of 13,333 candidates · Department rank 4 IIT Jodhpur

At a glance

Project The question What came out Try it
Reasonable Doubt Can a small model sort contract clauses as well as a frontier LLM, for far less? 0.8091 macro-F1 at $0.00088 per 1,000 clauses. Claude Sonnet 5 zero-shot got 0.6148 at 496× the cost live demo
Honest Mistake What does a credit model score with the leakage removed, and can an agent find leaks without being told where to look? Honest 0.7296 ROC-AUC. The agent caught a planted leak in every canary configuration run the audit
Predictive Engine Can a stock-ranking model survive real Indian market costs, and how would I know if it's luck? Drawdown a little over half of buy & hold's. The return edge is not established, and the repo shows why experiment record
RegretZero Why judge an inventory forecast on RMSE when running short and overstocking cost different amounts? £54,631 (12.0%) less lost over 12 held-out weeks live demo

The projects

Reasonable Doubt: a contract-clause classifier that says when it isn't sure

LEDGAR has about 80,000 contract provisions from SEC filings, labelled into 100 types. I planned a three-tier cascade and measured each tier before trusting it. Two of the three didn't earn their place, so what ships is one fine-tuned DeBERTa-v3 in ONNX, on a CPU, with a flag on answers it isn't sure about.

  • A QLoRA-tuned Qwen2.5-1.5B lost to the encoder. Sending the doubtful rows to Sonnet 5 moved macro-F1 by +0.0008, with a confidence interval across zero. Both tiers were dropped.
  • The INT8 build of the same weights scored 0.000166 on CPUs without AVX-512 VNNI. That's chance, and nothing raised an error. The service now classifies 200 fixed rows at startup and won't answer until they pass.
  • It still fails on text that isn't a contract: 10 of 20 unrelated paragraphs came back confident. That's in the report.

DeBERTa-v3 · QLoRA · ONNX Runtime · FastAPI · Docker · Cloud Run · model on Hugging Face · the demo scales to zero, so the first request can take about 2 minutes

Honest Mistake: a credit model built without leakage, and an agent that tries to catch it cheating

Public models on the Lending Club data report AUCs above 0.90, mostly by reading columns written after the loan closed. I found and removed 41 of them in three passes (name patterns, the data dictionary, and asking why one column was almost always empty), then tested once on a year the model never saw.

  • Layer 1, the model: XGBoost on 1,061,042 loans. ROC-AUC 0.7296, PR-AUC 0.4404, and a validation-to-test gap of −0.0023.
  • Layer 2, the agent: a plain ReAct loop on the Anthropic API, no framework, with eight read-only tools and pgvector search over the data dictionary. The prompt never mentions leakage. Of twelve live runs, eight were usable, and in every run where a leaking column had been planted, the agent caught it. The planted column's description gives it away, though, so this proves a floor, not a ceiling.
  • Layer 3, generated tools: prompt caching cut input cost 71.1% on one measured run. One generated tool passed a sandbox and was admitted to a registry. Four planned parts were cut because nothing real was there to test them against. The report says what that does and doesn't show.

XGBoost · SHAP · Optuna · Anthropic API · pgvector · Postgres · benchmark site · the live audit runs on your own API key, which is never stored

Predictive Engine: a stock-ranking strategy for Indian markets (M.Tech thesis, ongoing)

Every 20 trading days a 10-seed LightGBM ensemble ranks the universe. The top eight names are held, sized inverse to volatility, and the book is scaled by market breadth. Orders fill at the next open, with Zerodha's real charges and 15 bps of slippage. Twenty-five ideas have been tested against it and one was accepted. Every rejection is kept, with the accept rule written before the run.

  • What holds: max drawdown of −21.87% against −38.65% for equal-weight buy & hold on Nifty 100, and −20.01% against −37.73% on MidCap150 (Jan 2019 to Jun 2026).
  • What doesn't: the strategy loses to its own basket on Nifty 100 and beats it on MidCap150, and re-runs on slightly perturbed prices flip that sign in both. So I don't quote the return edge as real.
  • Verified port: the execution path is ported to NautilusTrader and matches the research engine on 93 of 93 rebalances at zero tolerance. That proves bookkeeping and timing, not execution, because there's no order book.
  • Still open: survivorship bias. Index membership is today's list taken back to 2019, and point-in-time data only exists from March 2024.

LightGBM · NautilusTrader · pandas · pre-registration

RegretZero: inventory ordering scored on money lost, not on forecast error

Two years of transactions from a UK online giftware retailer. LightGBM predicts five demand quantiles directly, with a strict date split and rolling features shifted so no week sees itself. Each product then orders the quantile where the cost of running short balances the cost of a leftover unit.

  • Over 12 held-out weeks it lost £54,631 less than ordering the median forecast, a 12.0% saving, and all three price tiers came out ahead.
  • The P90 forecast covers 91.7% of actual demand against a 90% target.
  • The costs are assumptions, so they're sliders in the app. The saving holds until holding cost reaches about 26% of unit price per week, against a default of 10%.

LightGBM · quantile regression · newsvendor optimisation · Streamlit


How I work

  • Rules before results. An experiment's accept rule is written down before it runs. When a rule turns out wrong, the fix goes in as a dated amendment, not an edit.
  • Failures stay in the record. Dropped tiers, cut layers and rejected ideas are kept next to the ones that passed, with the numbers.
  • Other people can check it. Each project is public. Three are live, and the fourth publishes its code, experiment record and results, though a rerun needs 396 MB of vendor price data that isn't in the repo.

Tools I use most: Python, SQL/PostgreSQL · PyTorch, Hugging Face, ONNX Runtime, XGBoost, LightGBM, SHAP · Anthropic API, pgvector · NautilusTrader, pandas · Docker, FastAPI, Cloud Run, GitHub Actions, Streamlit


Recent work

Repo What it is Commits, last 30 days Last commit
reasonable-doubt contract-clause classifier on a CPU 141 5 days ago
honest-mistake multi-layer ML audit agent 93 2 days ago
predictive-engine stock-ranking thesis, NSE 248 5 hours ago
regret-zero decision-regret inventory optimizer 14 6 days ago

Auto-refreshed by a GitHub Action · last run 25 Sep 2026, 11:17 UTC

Every project number on this page is copied from that project's repository, where the caveats sit right next to it.

Pinned Loading

  1. reasonable-doubt reasonable-doubt Public

    A frontier LLM is the expensive way to classify contract clauses and not the accurate one. Sonnet 5: $0.44 per 1,000, 0.61 macro-F1. Fine-tuned DeBERTa on CPU: $0.00088, 0.81.

    Python 4

  2. honest-mistake honest-mistake Public

    Public credit-risk models report 0.90+ AUC using post-loan leakage. This one strips it and reports an honest 0.73, then runs a ReAct agent to audit the model.

    Python 5 1

  3. predictive-engine predictive-engine Public

    LightGBM cross-sectional ranking on Indian equities (Nifty 100, MidCap 150), with walk-forward retraining, purged labels and real Zerodha costs. Execution layer ported to NautilusTrader and reconci…

    Python 4 1

  4. regret-zero regret-zero Public

    Newsvendor ordering on real retail data: LightGBM quantile forecasts turned into cost-optimal orders, 12% cheaper than ordering the median forecast.

    Python 4 1