
New York, NY, USA
Lead scientist and pipeline architect for a multi-agent LLM system that finds authorization flaws in application code, chiefly insecure direct object references (IDOR). The work began at an org hackathon, where I led a seven-person cross-functional team to a proof of concept that became an official workstream. I owned the pipeline design end to end and its evaluation: it recovered 54% of known historical vulnerabilities, and on live code reached roughly 86% precision on a sample triaged by security engineers, an estimated 3× the true-vulnerability yield of an existing agentic scanner.
Built and optimised the resource-connectivity agent, with its custom tools and cache, for a multi-agent system generating AWS architecture diagrams from infrastructure-as-code (CDK), and designed the benchmark and evaluation methodology for the whole pipeline. The agent reached about 99% mean per-package precision and an estimated 93% conditional recall on the offline benchmark. The end-to-end system drew positive survey feedback in builder pilots, and was integrated with an internal diagramming tool and available in preview.
Earlier, designed and experimentally validated the production architecture for a retrieval-augmented generation (RAG) pipeline mapping security findings to Common Weakness Enumeration (CWE) categories, through retrieval, reranking, classification and critique stages, selecting the configuration through model comparisons and ablations. It reached roughly 80% precision and 95% top-10 retrieval accuracy across about 940 categories, and was handed over to Amazon’s centralized security-finding platform team. I also used the project to build evaluation practice among engineers across the organisation building their own LLM systems.
Designed a statistical framework for application triage, combining business impact, vulnerability likelihood and prior certification in a non-linear weighted model.

Redmond, WA, USA
Windows 11 2024 shipped as a controlled feature rollout: a small group of devices receives the OS first, and the group widens over time. I ran the telemetry analysis on the treatment population to identify the device patterns behind bad upgrades, so matching devices still waiting for the update could be withheld until a fix shipped.
The main challenge was the scale of feature aggregation and candidate pruning. Rollbacks and blue screens were chosen as the failure indicators, and candidate causes spanned on-device apps and drivers as well as device characteristics. I defined a per-feature failure rate and thresholds to cut that space down, then trained LightGBM for feature importance and ran causal discovery with DECI to rank what remained.
A third-party application turned up as a rollback cause in this analysis alone, with both a high failure rate and a direct link in the causal graph; engineers reproduced the failure in house and shipped a fix. Other causes were corroborated by media reports and other teams. The analysis generated and ingested a 5.6M-device blocklist for early adopters, and projected a roughly 42M-device retail list that shrank continuously as fixes shipped.
An experiment is the right tool when you can run one: randomise who gets what, and you know what caused what. Observational causal methods are for the questions you can’t randomise, where you have to separate what is actually driving an outcome from what merely moves alongside it. They are also how you work out which hypotheses deserve an experiment. Windows teams brought those questions to me.
Before letting the organisation rely on a new method, I validated Deep End-to-End Causal Inference (DECI) on synthetic data where the true causes were already known. I kept the two halves of the work apart: first finding which factors plausibly drive an outcome, then estimating how large each effect is. My own analyses covered what causes a Windows device to be replaced by a non-Windows one, run separately for different user cohorts, and what drives click-through on a follow-up setup screen offering extra OneDrive storage. I shared both as estimates, with the follow-up experiments needed to confirm them.
Six other teams came to me for help with study design, choosing the right controls and picking a method, one of them working with an external customer.
Teams were running these studies in one-off personal scripts, which is error prone. I designed a reusable service so they could run their own analyses reliably: a team points at its data and names which columns are the treatment, the outcome and the confounders, with guidance built in for those choices. Double machine learning was the first method I built into it, as an Azure ML pipeline.
Led the experimentation platform’s DMA compliance strategy, representing it on a cross-functional Windows team. Assessed how the requirements affected experiment scorecards and cross-product measurement, authored the approved engineering specification and mitigation plan, and drove implementation across the major affected areas before the compliance deadline.
The Windows Experimentation platform (WExp) runs experiments for Windows feature teams and houses the scorecards they produce. I built a Power BI report over that Kusto dataset, so the platform can answer which kinds of experiments have moved which metrics across teams, and by how much.
Beyond identifying experiments that produced statistically significant movement in the metrics of interest, it promotes a healthy experimentation culture by surfacing which experiments clear a quality bar, such as having a defined hypothesis and success criteria. Per-metric distributions over historical experiments let teams set meaningful practical significance thresholds when defining success criteria for new ones.
Published to all WExp customers, demoed live, and shared through the Windows and Devices data newsletter.
The Windows Experimentation platform (WExp) runs experiments for Windows feature teams. Customers brought the same questions to office hours and email threads again and again, while the wiki pages that answered them grew and went unread. I led a hackathon team to build a chatbot assistant for WExp, so teams could get fast guidance instead of waiting for office hours or hunting for it in wiki pages.
The accuracy came from the index, not the model. Each chunk was a wiki subsection carrying its section and page titles, so context survived into the smallest unit. Embedding a generated summary of each chunk rather than its raw text improved retrieval further. Built on Semantic Kernel over Azure Cognitive Search, with ada-002 embeddings and GPT-3.5 Turbo.
Presented at the hackathon science fair, and the proof of concept was adopted into an official workstream. It was later deprioritised in an org change.
Settings pages are hard to find, and users were averaging 4.8 clicks to change their setting. Windows 11 was bringing back the Settings home page, and I built the recommendation model behind its personalised shortcuts.
The on-device ML platform supported only a narrow set of model types. I used a LightGBM classifier and turned ranking into a binary classification problem over 35 candidate settings pages. Recommending the three pages someone used most recently already worked well, since people go back to the same settings, but a quarter of users had no history at all.
For those users, 200 telemetry events were shortlisted from the 18,000 logged in the five minutes before a setting change. Events firing at the same rate in the five minutes after were dropped as unrelated, and feature importance narrowed the rest.
Coverage went from 65% to 75%. The model shipped to retail devices through a controlled feature rollout after my internship, and was pulled back a year later when the on-device platform was retired.

West Lafayette, IN, USA
The motor cortex is the part of the brain that plans and drives movement, and it holds tens of millions of neurons. An implanted electrode array reaches a few hundred of them, and those few hundred do not fire independently of each other. The population as a whole follows a pattern far simpler than its neuron count suggests, and population dynamics is the description of that pattern.
The Neural Latents Benchmark set this up as a shared challenge with public datasets of recorded neural activity. Given a recording, a model has to predict how the recorded neurons go on firing further forward in time, and how the neurons the electrodes never reached fire, also forward in time.
I built and compared three kinds of model: recurrent networks, Transformers, and TERN, a hybrid that puts a Transformer encoder on top of a recurrent network. Plain recurrent networks did better than Transformers and better than the models built specifically for neuroscience, and attention helped only when it was added after the recurrent layers rather than used in place of them. The models ranked first on 2 of 4 benchmark datasets, and the work was published in the Journal of Neural Engineering.
Electrodes resting on the surface of the brain record activity while someone reads a sentence aloud, and the decoding question is whether that activity can be turned back into the words. My advisor’s earlier work had brought word error rate on this data down to about 3% for the best participant, using an encoder-decoder network. I looked at whether a different architecture could do better.
The dataset is four participants reading between about 450 and 800 short sentences each, collected and processed years before the project began. That makes it a small-data problem, where what matters is the structure built into a model rather than its size.
I worked through the space of alternatives: sequence-to-sequence GRUs and LSTMs with cross-attention in place of a single encoder summary, decoders pretrained on machine translation, BERT embeddings for the output words, phoneme-level rather than word-level targets, word-level segmentation of the signal, and transfer across participants. The best configuration reached about 3% word error rate for one participant on word-level-segmented data, matching the earlier result by a different route. The variants did not separate from each other by a statistically significant margin, which points at the quantity of recorded data rather than the choice of model as the limit on this problem.
Ran the weekly Python programming lab for 44 students in the Department of Computer and Information Technology, on Prof. Salem Tawfiq’s course. The lectures were his; the lab was mine, including the lab assignments, homework and quizzes, office hours and weekly grading.

Bengaluru, India
Ads that violate adult, racy or weapon policies are rare enough that finding examples to label is most of the problem. I built sampling pipelines over term matching, classifier scores and BM25 to surface candidates, and roughly 119,000 adult and 168,000 weapon samples went out for labelling in one effort. The models were gradient-boosted trees over pretrained ResNet embeddings, alongside MobileNet, EfficientNet and BERT systems. One production classifier went from 5% to about 40% precision and from about 30% to 80% recall. I also built the Python and C# ONNX Runtime inference components, image preprocessing and parity test sets these models needed in production.
Fraud classifiers across the platform were each recomputing the same features from account, campaign, order and ad data. I built a shared store of 367 features, refreshed every 15 minutes on a 10 to 15 minute SLA, so downstream models could read fresh features rather than derive their own.
Fraud algorithms flagged long-standing, well-behaved advertisers often enough that the notifications lost their value. I built confidence scores over account history and trusted-account signals to suppress those cases. In offline analysis the signals cut notifications by about 13% across 28 algorithms, with roughly 300 more a month from subsegment filtering. The production piece was a generalised 64-bit mask output, so other algorithms could consume the same signals.
A compromised advertiser account usually starts pointing ads at a domain it has never used before. I modelled that signal from domain embeddings, cosine similarity between the new domain and the account’s history, domain reputation and Bing index scores, fitted with logistic regression and split by whether the top-level domain had changed. Offline precision was modest and the approach needed at least five historical domains, so it was not a detector on its own. The feature lookup store behind it was deployed.

West Lafayette, IN, USA
Machine learning intern with Prof. Saurabh Bagchi in the School of Electrical and Computer Engineering, on ApproxNet, an architecture for runtime approximation during video analytics on edge devices. Trained its local executor offline on AWS EC2 and evaluated the model on an NVIDIA Jetson TX2 embedded board.

Kochi, Kerala, India
Integrated AWS Rekognition into the company’s REST framework using Boto3 and Python. Processed over 300,000 images through Rekognition and the EyeEm vision API, analysed the stored results in MongoDB, and built montage visualisations of faces extracted from the categorised images.