Selected results
- 1st placeAKBC Shared Task @ EMNLP 2026 featured paper
- 1st placeTrustworthy Agentic AI @ UbiComp/ISWC 2026
- 1st placeRecSys-HR WorkRB Challenge @ ACM RecSys 2026
- 1st placeBAREC Shared Task @ ArabicNLP 2026 2 tracks
- 1st placeALTA 2026 Shared Task
- 1st placeLatent Probe Challenge: toxicity, mental health
- 1st placeGoogle Cloud Rapid Agent Hackathon 15,000 teams
- GrantBlueDot Impact (CoT faithfulness research)
- 2nd placeCAR-Bench Challenge @ IJCAI-ECAI 2026
- Top 7ARC White-Box Estimation Challenge
- 9th placeAlphaNova Quant Competition 5 873 teams
- WinnerRussian National Mathematics Olympiad top 0.015%
9 more: puzzles, sprints, hackathons
- 1st place final competition
- SolvedJane Street puzzles Feb, Jun, Jul 2026
- FinalistWincent DragonByte 2026 (qualifiers: , )
- SolvedBlueDot Impact Technical AI Puzzle #1
- SolvedIBM Research Ponder This
- Top 25%Apart x CeSIA AI Incident Response Sprint 230+ teams
- SubmittedApart Digital Minds Sprint: Masked Distress
- SubmittedBenchFlow Agent Skill Lift
- SubmittedAmerican Express AI Hackathon: One Loop
Papers, 2026
- Coverage Is Not Knowledge: Why Closed-Book Knowledge Base Construction Looks Selection BoundAKBC @ EMNLP 2026 · 1st place, featured paper · PDF
- QEbreak at WMT26: A Pre-Registered Audit of Omission and Addition Asymmetry in Machine Translation Quality MetricsWMT26 @ EMNLP 2026 · PDF
- thylinao at BAREC Shared Task 2026: Ensembling at the Noise FloorArabicNLP @ EMNLP 2026 · 1st place · PDF
- thylinao at ChildSafeAds 2026: A Six-Member Ensemble and What Each Level of Data Access ProvidedNLLP @ EMNLP 2026 · PDF
- Ranking 13,891 Skills: A Cross-Encoder Cascade and a Pre-Registered Measurement Protocol for Graded Skill ExtractionRecSys-HR @ ACM RecSys 2026 · 1st place · PDF
- A Tool-Grounded Verification Agent for Auditable Trust Assessment Over Longitudinal Electronic Health RecordsTCSAUC @ UbiComp/ISWC 2026 · , 1st place · PDF
- thylinao at the ALTA 2026 Shared Task: A Blend of Encoders, Decoders with Adapters and Frozen Language Model Readouts for Sentiment and Sarcasm Classification in Two Varieties of EnglishALTA 2026 · 1st place, tied · PDF
Education
- NUS · MSc, School of Computing
- City, University of London · BSc, First-Class Honours
Exchanges, scholarships and programmes
- Top of cohort at City in Quantitative Methods & Analytics, AI & Big Data and the Capstone Project
- Exchanges at NUS (2025) and ESADE (2024) on full scholarships, and UT Austin (2023)
- TARA and BlueDot Technical AI Safety programmes (2026); ML4Good bootcamp, Hong Kong (Oct 2026)
- BUPT Agentic AI Bootcamp, full scholarship (2026); Oxford ML Representation Learning & Generative AI Bootcamp (2026)
- UCL Economics & Mathematics Foundation, A* (2022)
Experience
- SPAR · Research Fellow, Agent Attribution Black-box behavioral profiling for the intent inference, prompt extraction and model attribution of an autonomous agent. Prof. Yiming Li.
Black-box behavioral profiling for the intent inference, prompt extraction and model attribution of an autonomous agent · Mentor: Dr Yiming Li, Nanyang Technological University (NTU) · Singapore
- Recasting agent attribution as Bayesian inverse planning: posterior inference over candidate configurations (model, scaffold, prompt, memory), scored by the likelihood each assigns to the observed actions, with open-set rejection.
- Building a unified testbed (open-set, EER/DET, cross-environment) against published behavioural-fingerprinting classifiers (>95% closed-set), then intervention studies and activation probes to isolate which component carries the signal, toward a paper.
- HONOR · ML Research Intern Researching alternatives to attention in ranking models and how prediction heads should share the layers.
Recommendation systems and mitigation of information bubbles · Advisor: Prof. James Pang, NUS Business Analytics Centre · Singapore
- Research with HONOR on its millions-user phone feed: generative ranking over long user histories (HSTU, MTGR, HPGR) and multi-task ranking that fixes rare conversion targets (PLE vs ESMM, AITM), with UniMixer for GPU optimisation and parameter scaling.
- Designing the filter-bubble study: whether a less repetitive lock-screen feed raises retention and user satisfaction, and ultimately keeps readers out of an information bubble.
- Orbuc Research · Quantitative Research Intern Quantitative research and ML engineering for crypto statistical-arbitrage trading strategies.
Quantitative research and ML engineering for crypto statistical-arbitrage trading strategies · London, UK
- Developed a time-series anomaly-detection model that classifies latent states with Hidden Markov Models to flag unstable, low-predictability conditions, validated across 5 out-of-sample windows where it held up in 4 of 5.
- Built an LLM agent that automatically classifies events from live news streams, grounding each call with retrieval-augmented generation (RAG) over an embedded knowledge base, enforcing schema-constrained output, and aggregating results into a single risk score with a probabilistic layer.
- Hardened the surrounding Python pipeline for reliability with SQL (SQLite) persistence of every event and classification, batched API calls, rate-limit handling, and an automated test suite.
- Engineered the statistical analysis behind the firm's March 2026 research report, characterising 9 historical anomaly periods and identifying 4 statistically significant shifts in correlation structure.
- The TCM Group · Evaluation & Causal Inference Intern Led the evaluation and measurement workstreams (RCTs, LLM evals) for conflict resolution.
Led the evaluation and measurement workstreams (RCTs, LLM evals) for conflict resolution · Bayes Business School Capstone, highest grade in cohort · London, UK
- Designed a causal-inference framework (RCT-style wait-list control, paired hypothesis tests) to measure leadership-training outcomes, presented it to TCM's senior leadership, and saw it adopted as the standard for ongoing programme evaluation.
- Replaced multiple-choice surveys that correlated poorly with on-the-job behaviour by engineering a serverless LLM scoring engine (TypeScript, Vercel, OpenAI) that grades open-ended scenario responses 0 to 10 against rubrics, deployed with Zod schema validation and automatic retry so malformed model output is never returned.
- Built the hypothesis-testing methodology for evaluation: a decision rule that picks the correct paired test by sample size and distribution (Wilcoxon signed-rank, paired t-test etc.), reports effect sizes with CIs, and tests against a meaningful-change threshold rather than zero.
- Built an automated evaluation harness that benchmarks the scorer against a hand-labelled gold dataset (0.90 Spearman correlation with human raters), then halved its scoring error with a cross-validated calibration that corrects the model's systematic bias.
Blogs
- When the Judge Is a Language Model State-of-the-art LLM-as-a-judge applications for screening and the problems with them.
- What the Leaderboards Are Actually Measuring A critique of the public evaluation metrics for frontier AI models, using the launch week of Claude Fable 5.1 and GPT-6 Astra as the case.
- One in Twenty Why the 0.05 significance threshold misleads.
- Lamps in the Dark A geometric interpretation of hidden Markov models and the EM algorithm (incl. forward-backward & Viterbi).
Projects
- Olist Hierarchical Bayesian A/B Testing
Brazilian e-commerce panel · 97k orders · hierarchical Bayesian causal inference in PyMC 5
- Reframed a flat marketplace A/B test as a causal-identification problem on a 97k-order panel, using a hierarchical Bayesian difference-in-differences in PyMC that corrected the policy effect from a naive −2pp to a DiD-identified +1.5pp.
- Built the full analytics pipeline behind it (DuckDB medallion SQL, a NetworkX causal DAG, three Bayesian models, falsification tests) and translated the posterior into a costed −R$452K net envelope, turning an apparent per-customer win into a no-launch call.
- Architected the analysis as a clean, importable Python package (ETL, feature builders, causal DAG, separate model factories per likelihood) with a DuckDB feature stack that rebuilds end-to-end in roughly five seconds.
- Validated the models with held-out cross-validation (PSIS-LOO), posterior-predictive checks, and prior-sensitivity sweeps. The headline result shifted just 0.0004 logit across three hyperprior families.
- A/B-Test Experimentation Guardrail
Experiment-safety auditing tool · SRM detection & causal inference · optional Claude tool-use agent
- Built a command-line A/B-test guardrail that checks whether an experiment is safe to interpret, using a chi-square Sample Ratio Mismatch test that flagged a compromised 61/39 allocation a standard metric t-test runs straight past.
- Separated genuine treatment effects from confounding with propensity score matching and Rosenbaum sensitivity bounds to return a clear launch verdict; validated on a 300k-row stratified sample of Criteo's real 13.98M-row Uplift experiment.
- Built an optional Anthropic Claude tool-use agent mode: a bounded multi-turn loop that chooses which of 3 schema-defined tools to call next, with the LLM held off the numerical path so every figure comes from scipy and scikit-learn.
- Designed the default pipeline to route deterministically and call the LLM once, at the end, narrating a code-decided verdict as a plain-English summary; one model call per audit, the statistical core covered by a 36-case pytest suite in CI (Python 3.10 to 3.12).
- Engineered the tool as a production-shaped Python package (typed dataclasses, a custom exception hierarchy, an installable CLI, ruff-linted CI) with a data loader hardened against messy real-world exports; validating against the 14M-row Criteo dataset surfaced three production bugs, each fixed and locked down with a regression test.
- Cost-Sensitive Churn Pipeline
Energy-utility SME churn · 14,606 customers · cost-sensitive, decision-aware modelling
- Built a SMOTE-balanced Random Forest on 14,606 SME utility customers, tuning the decision threshold against a GBP cost matrix to cut expected misclassification cost by ~£15.9M on a sealed test fold.
- Pressure-tested the headline savings by sweeping the three cost assumptions behind it (customer lifetime value, campaign cost, retention rate), reporting the £15.9M with the conditions it depends on instead of as a standalone claim.
- Stress-tested the model for time decay by splitting customers on contract activation date and re-scoring the newest cohort, exposing a discrimination drop (test AUC ~0.67 to ~0.62) that established periodic retraining as a deployment precondition rather than an afterthought.
- Turned the churn score into a retention action list by running permutation feature importance on the frozen test pipeline, isolating profit-margin variables as the dominant drivers so the business knew which accounts to prioritise and why.
- Added a Random Survival Forest for time-to-churn (held-out concordance 0.71, vs 0.56 for the Cox model it replaced), validated it on a temporal holdout, and shipped the pipeline as a typed Python library with a 48-test CI suite.
- Rare-Event Prediction & RL for Sequential Allocation
Sovereign-default prediction · 34-year cross-country macro panel · 5-model benchmark + PPO from scratch
- Implemented PPO with Generalised Advantage Estimation from scratch in TensorFlow/Keras over a 117-dimensional continuous action space; the learned policy beat a uniform-allocation baseline by ~13% in the deterministic setting and 5-9% under stochastic and contagion variants.
- Built a rare-event classification pipeline on a 34-year cross-country macro panel: 117 entities, 21 features, a ~2.4% positive rate, with 88 hand-curated default events labelled against multiple authoritative sources.
- Benchmarked five models on a temporal 1990-2014 / 2015-2023 split: logistic regression, random forest, gradient boosting, XGBoost, and a Two-Tower neural network (a dual-embedding architecture from large-scale recommender systems). Random forest gave the best discrimination (AUC 0.83); the Two-Tower underperformed (AUC 0.68), which I report and diagnose rather than hide.
- Built a perturbation-based sensitivity harness that exposed a policy under-responsiveness in the trained agent, then implemented Welford running z-score normalisation over the 1,878-dimensional continuous state as the candidate fix.
- Packaged the work to production engineering standards: a typed src/ package, a 47-test pytest suite, and a GitHub Actions CI pipeline running a Python 3.10/3.11 test matrix and notebook validation.
- Credit Risk Classifier & MLOps Pipeline
Retail credit-risk modelling · probability-of-default under an asymmetric cost matrix · Q-learning
- Built a probability-of-default model under an asymmetric cost matrix, lifting held-out profit by $363K over the default 0.5 threshold.
- Architected the analytics codebase as an importable Python package with single-responsibility modules (data loading, threshold evaluation, calibration, RL environment), backed by an 82-test suite and a multi-version CI matrix.
- Implemented tabular Q-learning for a finite-horizon inventory-optimisation MDP (deterministic seed, linear epsilon decay, illegal-action handling), and built the chronological 24/24-month evaluation that caught its in-sample edge as an overfit.
- Implemented covariate-shift mitigations (importance weighting, cohort-adaptive thresholding) and a diagnostic that identified the cohort failure as a base-rate problem rather than covariate shift, recommending a 45% break-even repricing instead of a model retune.