<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Sneh’s Substack: Experience]]></title><description><![CDATA[This section outlines my professional and academic experiences, including roles, projects, and responsibilities where I applied machine learning, data engineering, and software development skills.]]></description><link>https://www.snehvora.me/s/experience</link><image><url>https://substackcdn.com/image/fetch/$s_!9m8J!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9157932e-985e-4b66-8b94-e3258376ea5c_1280x1280.png</url><title>Sneh’s Substack: Experience</title><link>https://www.snehvora.me/s/experience</link></image><generator>Substack</generator><lastBuildDate>Thu, 18 Jun 2026 07:55:23 GMT</lastBuildDate><atom:link href="https://www.snehvora.me/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Sneh Vora]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[snehvora@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[snehvora@substack.com]]></itunes:email><itunes:name><![CDATA[Sneh Vora]]></itunes:name></itunes:owner><itunes:author><![CDATA[Sneh Vora]]></itunes:author><googleplay:owner><![CDATA[snehvora@substack.com]]></googleplay:owner><googleplay:email><![CDATA[snehvora@substack.com]]></googleplay:email><googleplay:author><![CDATA[Sneh Vora]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Molina Healthcare]]></title><description><![CDATA[AI/ML Engineer &#8211; Gen AI]]></description><link>https://www.snehvora.me/p/molina-healthcare</link><guid isPermaLink="false">https://www.snehvora.me/p/molina-healthcare</guid><dc:creator><![CDATA[Sneh Vora]]></dc:creator><pubDate>Wed, 17 Jun 2026 15:34:54 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/f55a80af-57eb-4021-a7ae-a184f98a1688_400x400.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I didn&#8217;t expect my first real GenAI project to scare me.</p><p>Not the technical parts &#8212; those were hard, but manageable. What scared me was the realization, about two months in, that a wrong answer from our system could delay a patient&#8217;s authorization. That a hallucinated policy reference could mean someone waiting longer than they should for care.</p><p>That changed everything about how I built.</p><div><hr></div><h2>The Problem We Were Actually Solving</h2><p>When I joined Molina Healthcare as an AI/ML Engineer in early 2025, the ask sounded clean: build a GenAI assistant to help staff search through healthcare policy documents.</p><p>But when I sat down with the people actually doing this work, the picture got sharper and messier.</p><p>A prior authorization specialist might need to cross-reference three different policy documents &#8212; coverage guidelines, authorization criteria, and clinical SOPs &#8212; just to answer one question. These weren&#8217;t short documents. We&#8217;re talking 8,000+ pages across hundreds of files, updated regularly, full of domain-specific language that doesn&#8217;t map cleanly to how anyone naturally asks a question.</p><p>They weren&#8217;t looking for a chatbot. They were looking for a trusted colleague who had read every policy ever written and could give them the right paragraph, right now.</p><p>That&#8217;s a very different thing to build.</p><div><hr></div><h2>What I Thought RAG Was vs. What It Actually Is</h2><p>I&#8217;d worked with RAG before. The concept is straightforward: retrieve relevant chunks from a document store, feed them to an LLM, get a grounded answer. Simple enough on paper.</p><p>What I hadn&#8217;t fully reckoned with was how much the quality of your retrieval determines the quality of everything downstream.</p><p>We ingested all 8,000+ pages using PyMuPDF &#8212; extracting text, cleaning formatting artifacts, splitting documents into chunks that were small enough to be precise but large enough to hold context. That chunking strategy alone took two weeks of iteration. Too small and you lose the surrounding context that makes a clause meaningful. Too large and you&#8217;re feeding the model noise.</p><p>Then we indexed everything into Azure AI Search and layered FAISS on top for embedding-based similarity scoring. We added metadata filters &#8212; document type, policy category, effective date &#8212; so retrieval wasn&#8217;t just semantic, it was structured.</p><p>That combination moved our retrieval accuracy by 22% in internal testing. But what the number doesn&#8217;t capture is why: it&#8217;s because we stopped treating retrieval as a search problem and started treating it as a comprehension problem. The system needed to understand what the staff member was really asking, not just match keywords.</p><div><hr></div><h2>The Lesson I Didn&#8217;t Expect: Guardrails Are the Product</h2><p>Early on, I thought of PHI masking and RBAC controls as compliance checkboxes. Things you add at the end so legal signs off.</p><p>I was wrong.</p><p>In a healthcare context, the guardrails are what make the product usable. A system that gives a fast, accurate answer but leaks protected health information in the process isn&#8217;t a product &#8212; it&#8217;s a liability. A system that can be queried by anyone regardless of role isn&#8217;t a tool &#8212; it&#8217;s a risk.</p><p>When we implemented PHI masking, few-shot prompting for consistency, and role-based access controls, we weren&#8217;t adding friction. We were building the foundation of trust that makes anyone willing to rely on the system in the first place.</p><p>The 30% reduction in manual lookup time is the metric I put on my resume. But what I&#8217;m actually proud of is that the team started using it without being told to &#8212; because they trusted it.</p><div><hr></div><h2>What I&#8217;d Tell Anyone Building AI in a Regulated Industry</h2><p><strong>Accuracy is the table stakes, not the goal.</strong> Every RAG system can surface relevant text. The question is whether it surfaces the <em>right</em> text with enough context for a human to act on it responsibly.</p><p><strong>Build with the person doing the job, not just for them.</strong> The specialists who used our system daily spotted retrieval failures I never would have caught in testing. Their feedback shaped the metadata filters, the prompt structure, and the confidence thresholds we used.</p><p><strong>A wrong answer at speed is worse than a slow right one.</strong> We added latency to certain query paths on purpose &#8212; to trigger human review for high-stakes authorization decisions. That was the right call.</p><div><hr></div><h2>Where This Is Going</h2><p>Healthcare AI is at an interesting inflection point. The technology is good enough to be genuinely useful. The harder problem is institutional trust &#8212; getting clinicians, administrators, and compliance teams to believe that an AI-assisted workflow is safer and more consistent than a manual one.</p><p>That trust isn&#8217;t built through demos. It&#8217;s built through guardrails, evaluation, transparency about what the system doesn&#8217;t know, and a long track record of getting it right.</p><p>I&#8217;m still building that track record. But I&#8217;m more convinced than ever that the engineers who will matter most in this space aren&#8217;t the ones who can build the fastest model &#8212; they&#8217;re the ones who understand what it means when that model is wrong.</p>]]></content:encoded></item><item><title><![CDATA[Accenture]]></title><description><![CDATA[Machine Learning Engineer]]></description><link>https://www.snehvora.me/p/accenture</link><guid isPermaLink="false">https://www.snehvora.me/p/accenture</guid><dc:creator><![CDATA[Sneh Vora]]></dc:creator><pubDate>Wed, 17 Jun 2026 15:31:21 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b82eb617-e636-4da3-8139-835caa03292d_800x457.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The first time I looked at our confusion matrix, I thought we had a great model.</p><p>96% accuracy. Clean numbers. My manager nodded. I felt good.</p><p>Then a senior data scientist on the team asked me one question: <em>&#8220;What&#8217;s the base rate of fraud in the dataset?&#8221;</em></p><p>About 0.4%.</p><p>She didn&#8217;t say anything else. She didn&#8217;t need to. A model that predicted &#8220;not fraud&#8221; for every single transaction would have been 99.6% accurate &#8212; and completely useless.</p><p>That was week three at Accenture. I had a lot more to learn.</p><div><hr></div><h2>What the Project Actually Was</h2><p>I joined Accenture as a Machine Learning Engineer in mid-2021, working on a fraud detection and risk scoring platform for a large BFSI client. Banking, financial services, insurance &#8212; an industry where the cost of getting something wrong isn&#8217;t abstract. It&#8217;s real money, real customers, real consequences.</p><p>Our task: analyze over a million transaction records and build a system that could identify fraudulent activity, flag anomalies, and generate risk scores for review.</p><p>On paper, it sounded like a classic ML project. Train a classifier, evaluate on a test set, deploy.</p><p>In reality, it was one of the most humbling experiences of my career.</p><div><hr></div><h2>The Data Was the Actual Job</h2><p>Before I wrote a single line of model code, I spent weeks just understanding the data.</p><p>Fraud data has a problem that most textbook ML datasets don&#8217;t: it&#8217;s almost entirely negative. Fraud is rare by design &#8212; bad actors try hard not to look like bad actors. In our dataset, fraudulent transactions were a tiny fraction of the total. If your model learns to just say &#8220;not fraud&#8221; every time, it will score well on accuracy and fail completely at the one thing it&#8217;s supposed to do.</p><p>So we got to work on the feature engineering side &#8212; and this is where most of the real value was created.</p><p>We built over 40 features: transaction frequency patterns, amount deviation from a customer&#8217;s historical baseline, merchant category mismatches, device fingerprints, geographic anomalies, account age, payment channel behavior, and historical fraud indicators. Each of these was a hypothesis about what a fraudulent transaction looks like, encoded into something a model could learn from.</p><p>Then came the imbalance problem. We used SMOTE to generate synthetic minority-class samples, combined with undersampling and class-weight tuning. That combination improved our fraud recall by nearly 20% &#8212; meaning we caught significantly more actual fraud &#8212; while keeping false positives at a level the client&#8217;s review team could actually handle.</p><p>That balance matters more than people realize. Flag too much and your human reviewers drown. Flag too little and the fraud slips through. The model isn&#8217;t making that decision alone &#8212; it&#8217;s making it in partnership with the people downstream.</p><div><hr></div><h2>The Model Wasn&#8217;t the Hard Part</h2><p>We landed on XGBoost for the core classifier. It handled the tabular data well, gave us interpretable feature importances, and responded well to hyperparameter tuning. After cross-validation and threshold optimization, we were sitting at roughly 0.86 ROC-AUC &#8212; an 18&#8211;22% improvement over the baseline the client had been using.</p><p>We also layered in Isolation Forest for anomaly detection. The XGBoost model was trained on historical fraud patterns &#8212; it was good at catching things that looked like fraud it had seen before. Isolation Forest was good at catching things that just looked <em>weird</em>, regardless of whether they matched a known pattern. Together they covered more surface area.</p><p>But here&#8217;s what I actually learned from all of this: the model performance metrics were almost never the most important conversation.</p><p>The most important conversations were about thresholds.</p><p>At what score do you flag a transaction for human review? At what score do you block it automatically? What&#8217;s the cost of a false positive to a legitimate customer who gets their card declined? What&#8217;s the cost of a false negative to the client when a fraudulent transaction goes through?</p><p>These aren&#8217;t ML questions. They&#8217;re business questions. And the answers changed depending on who you asked &#8212; the risk team, the product team, the compliance team, the executive sponsor. Part of my job was translating between what the model could do and what those conversations actually required.</p><div><hr></div><h2>The Lesson That Has Stayed With Me</h2><p>I came into Accenture thinking the job was to build a good model.</p><p>I left understanding that the job was to build a good decision system &#8212; one where the model was one component, the features were another, the threshold logic was another, the human review process was another, and the monitoring pipeline that caught when the distribution shifted was another.</p><p>A model that performs well in evaluation and degrades quietly in production without anyone noticing isn&#8217;t a success. It&#8217;s a slow failure.</p><p>We implemented monitoring and batch scoring automation partly to speed up the review workflow, but also to give the team a way to see when something was changing &#8212; when fraud patterns were evolving, when a new attack vector was emerging, when the model&#8217;s assumptions were starting to drift from reality.</p><p>That&#8217;s the part of ML that doesn&#8217;t make it into blog posts about model architectures. It&#8217;s less exciting than a good ROC curve. But it&#8217;s the difference between a project and a product.</p><div><hr></div><h2>What I&#8217;d Tell a Junior ML Engineer Starting Out</h2><p><strong>Fall in love with the features, not the model.</strong> Anyone can throw XGBoost at a dataset. The people who create real value understand the domain well enough to know which signals matter and why.</p><p><strong>Learn to think in thresholds, not accuracy.</strong> Almost every real ML decision involves a tradeoff between precision and recall, between false positives and false negatives. Understand the asymmetric costs in your domain before you touch a single hyperparameter.</p><p><strong>The model is not the system.</strong> Data pipelines, feature stores, monitoring, human-in-the-loop workflows &#8212; these are not afterthoughts. They are the product.</p><p><strong>Ask the dumb question.</strong> The confusion matrix lesson in week three came because someone asked a question I should have asked myself. In every project since, I&#8217;ve tried to be the person who asks it first.</p><div><hr></div><p>Fraud detection taught me that machine learning in the real world is less about elegance and more about understanding what happens when you&#8217;re wrong &#8212; and building something resilient enough to handle it.</p><p>I&#8217;m still building on that foundation.</p>]]></content:encoded></item></channel></rss>