Senior AI/ML Engineer · Nequi (Grupo Bancolombia) · Colombia
Pre-training foundation models on customer transaction sequences.
8+ years shipping production ML. ES / EN / PT.
I work on the distance between what a system appears to do and what it actually does:
evaluation that survives scrutiny, agent tool-use that has to earn its place,
and failure modes written down before somebody else finds them.
Indexed by what I found, not by what I built. Every number below links to the file that would falsify it.
kaggle-solutions — a short paper for each of
the 20 competitions I have finished, and an attribution ledger that grades them. Every final
submission was diffed against the public notebook it came from with difflib.SequenceMatcher.
The measured record, published before anyone asked for it: 6 verbatim copies at similarity 1.000, 5 derived, 5 substantially original, 3 teammate-authored, and 1 derived solution carrying original analysis. All three medals — one silver, two bronze — came from the copied or derived half, and the ledger names every upstream author. The five originals are the number I actually care about, and the most transferable work sits in entries that finished lower: hysteresis mask fusion on Vesuvius (private 0.56159 against public 0.55264), Gene Ontology DAG propagation on CAFA 6, 400 per-task ONNX networks on NeuroGolf.
How the ledger was built — four steps and a stated threshold
- Identify the submission that actually counted — pulled from Kaggle's internal API
(
team.privateLeaderboardSubmissionId), the one scored on the private leaderboard, not the best-ever and not the most recent. - Retrieve its source notebook with
kaggle kernels pull. - Search for a public original by title, distinctive constants, and in-notebook credits.
- Reduce both notebooks to non-empty stripped code lines and diff them with
difflib.SequenceMatcher, reporting a similarity ratio plus added and removed line counts.
Similarity ≥ 0.99 is classified as a verbatim copy. The ledger reports measurements, not impressions, and the method is written out so the numbers can be reproduced against my public Kaggle account.
EML-Mathematical-Translator-for-AI — translates expressions to and from Exp-Minus-Log trees, the single binary operator Odrzywołek, arXiv:2603.21852 showed is sufficient to express every elementary function. The 116-test suite runs on Python 3.9 through 3.13 on every push, with macOS and Windows spot-checks. Install from source — it is not on PyPI.
Then I wired the operations into Claude as tool-use tools and measured whether the agent got better
at mathematics. It mostly did
not:
on calculus and algebra the agent routes around EML into sympy, for a reason that is mechanical
rather than mysterious — multiplication's EML tree is K=41, sine and cosine exceed K=100, π is
K=193, so past the paper's short identities a pure-EML route is not worth taking. That result sits
in the README above the install instructions. The library is an exact translator and a complexity
metric, not a reasoning substrate, and saying so is more useful than shipping the hypothesis
unlabelled.
realh — proof of personhood and content provenance,
built for the deepfake-CEO call. A verified user mints a single-use code that expires in 120 seconds
and passes it over any channel; anyone can check it on a public page with no account. Codes are
stored hash-only and consumed atomically, so a replay raises a loud already used. Underneath:
W3C Verifiable Credentials signed with Ed25519, a did:web document and a public JWKS, so a relying
party can verify offline, without trusting the issuer at runtime. TypeScript, thirteen months of
commits, with CodeQL and secret scanning on every push.
The README opens with four specific reasons not to run it in production — a mock identity
provider, signing keys on disk instead of a KMS, JSON.stringify where RFC 8785 canonical JSON
belongs, and no revocation path — because a reference implementation that hides its threat model is
worse than none. The third has its own decision
record:
trade-offs argued in writing rather than left in a commit message.
barrio-mapper — pulls the small, independently
owned businesses of a neighbourhood out of OpenStreetMap — tiendas, droguerías, ferreterías,
talleres — and removes the chains with three independent signals: brand tags, a name blacklist, and
a frequency heuristic. "Chain" is a judgement call, so every rejected POI is written to
rejected_chains.csv with the reason it was rejected. You can audit what the filter threw away
rather than only what it kept, and whitelist the local mini-chain it got wrong. Tested end to end on
Medellín; a Python CLI plus a version that runs entirely in your
browser.
Seven claims made on this page, and the artefact where a stranger can falsify each one.
| # | Claim | Where it is checked |
|---|---|---|
| 1 | 6 verbatim · 5 derived · 5 substantially original · 3 teammate-authored · 1 mixed, across 20 finished competitions — measured with difflib, not asserted |
PROVENANCE.md |
| 2 | My own Vesuvius method generalised: private 0.56159 beat public 0.55264 | Vesuvius write-up |
| 3 | corr(public, private) = −0.037 across 35 scored draws of one solution — public-leaderboard tuning measured as noise | ROGII write-up · published on Kaggle |
| 4 | A design decision written down with its trade-offs instead of buried in a commit message | ADR 001, JCS canonicalisation |
| 5 | 116 tests, green across Python 3.9–3.13 and on Linux, macOS and Windows | EML CI runs |
| 6 | A negative result published in the project's own README, above the install instructions | What happened when I actually tested it |
| 7 | Kaggle Competitions Expert, ranked 1,095 of 210,960 | kaggle.com/sebastianmateus |
| Area | In practice |
|---|---|
| Foundation models | Pre-training on customer transaction sequences at Nequi — sequence modelling of financial behaviour, and what the learned representations actually encode |
| Credit risk | PD and LGD · loss-rate forecasting · IV/WoE · Platt calibration · SHAP-driven adverse-action reasons |
| Agent security | Multi-step tool-use attacks and defences · tool designs measured rather than assumed |
| LLM evaluation | Leaderboard variance and selection error — one controlled measurement puts corr(public, private) at −0.037 across 35 draws of a single solution |
| Program induction | ARC — ARC Prize 2025 write-up |
| 3D segmentation | Vesuvius Challenge — own method, hysteresis mask fusion |
| Stack | Python · SQL · PyTorch · scikit-learn · XGBoost · LightGBM · Hugging Face · BigQuery · dbt · Airflow · FastAPI · MLflow · AWS · Docker · Terraform · GitHub Actions |
| Where | What |
|---|---|
| Portfolio | elmatiofficial.github.io — hand-built, trilingual |
| Kaggle | sebastianmateus — Competitions Expert, ranked 1,095 of 210,960 · every finished competition written up and attributed |
| sebastianmateusperdomo | |
| TEDx | Talk on YouTube |
Trilingual ES / EN / PT · based in Colombia · every claim on this page links to the thing that checks it.


