Things I've built
X-Ray
Financial-health engine that scores 1,286 companies from their bank trail. HackSpain 2026, Embat track.
- Year
- 2026
- Role
- ML lead in a hackathon team
- Status
- Live demo
Watch the demo
The problem
Embat's challenge asked whether money alone can tell you how a company is doing. Companies don't fail on the balance sheet, they fail on cash: annual ratios arrive late, while the daily trail of receipts, payments, and debt arrives on time. The catch was that the data had no default label to learn from.
My part
I led the machine learning side: the forecasting lab (Huber and Ridge regressions validated with GroupKFold, MAE at 1, 3, and 6 months) and the structural forecast that projects each account forward and re-scores it with the same function. I also worked on the score itself and took part in the product and UI decisions.
What I built
A deterministic, point-in-time score over 24 months of banking data for 1,286 companies in 250 corporate groups. On top of it: a six-state trajectory machine, an additive waterfall that explains every point of change, a what-if simulator, group consolidation, and an alert monitor, all driven by the same scoring function.
How it's built
- No default label, so no GBDT at the core: a rule-based, causal scoring function, with tests proving that future data never changes past scores.
- One function powers the score, the simulator, the outlook, and the structural forecast, so a simulation can never disagree with the score. ML lives next to it, not instead of it.
- Python and DuckDB engine behind a FastAPI backend, and a Next.js front end with a portfolio view for Embat and a 360° view for each company.
- Validated on synthetic banks with controlled regimes: 95.5% of deteriorations detected within six months, with zero structural false alarms on stable companies.
Outcomes
- Answers the six questions of the challenge: who's healthy, who's improving, who's slipping, dip or decline, why it changed, and how early it was visible.
- Deployed demo and a presentation video, with the limits of the model stated openly instead of hidden.
Stack
- Python
- FastAPI
- DuckDB
- scikit-learn
- Next.js
- TypeScript
Next project
Wealth Tracker