Inspiration
Impiricus asked teams for a new way to engage healthcare professionals, with texting and anything Impiricus already does off the table. We kept coming back to one moment: a doctor writes a prescription, the patient walks out, and nobody finds out who never picks it up. Cost is usually the reason, and the doctor could often fix it in the room if they knew. So we built a tool that tells them who to worry about, why, and what to say.
What it does
PRIDENT takes patient and prescription data and scores each patient from 0 to 100 on how likely they are to abandon the prescription. It sorts them into high, medium and low risk tiers. Every score comes with a one-sentence reason grounded in the patient's real numbers, for example "99% risk, driven by $422.21/mo copay while uninsured and no assistance available, plus 2 prior abandonments." It also gives one concrete next step, like enrolling the patient in copay assistance before they leave.
There are two ways to use it. In the patient simulator you build a hypothetical patient in a form and watch the score move live as you drag the copay slider. In batch mode you upload a CSV of patients and get back a ranked worklist you can search, sort and download.
How we built it
We generated 2,000 synthetic patients and trained an XGBoost classifier on 21 features. We removed columns that would leak the answer, so the test numbers mean something. We achieved an accuracy of 87%.
SHAP breaks each prediction into per-feature contributions. A small rules layer turns the top contributors into a barrier type (cost, access, side effects, perceived effectiveness) and picks a fixed next step for it. Gemini can optionally rewrite the sentence and suggest talking points. It only sees the real drivers, it can't choose the intervention, and it can't give clinical advice.
A FastAPI service wraps the scoring code, and a static web page talks to it. One shared scoring function serves the form so the same patient always gets the same number.
Challenges we ran into
The hardest problem was a silent failure. When we blanked a field across the test set, XGBoost sent the blank down a default branch and returned a confident number with no error. We made copay and medication name required and check them twice, once on the raw input and once after encoding. A row that fails gets no score and a message naming the missing field. We also had to work around 4 different peoples work and focus on integrating that without breaking anything. Making the demo hard to break took work too. Every form field is a dropdown or a bounded slider, so nobody can type a drug the model has never seen.
Accomplishments that we're proud of
- A model that ranks unseen patients correctly about 87% of the time, with it leaning towards false positives.
- We implemented a safeguard that refuses to answer instead of guessing, with the reasoning and the measurements behind it.
- Managing 4 peoples code at the same time
- Successfully creating a product that is viable
- Successfully integrating gemini into our description and next steps
- Making the UI look nice ## What we learned Feature leakage is easy to miss and it flatters your metrics. A model that fails quietly is worse than one that crashes, so refusing to answer is a real feature. Explanations matter as much as accuracy, because a doctor won't act on a bare number. Constraining an LLM to real inputs and a fixed set of actions made it far more trustworthy. And relying on solely accuracy would have misled us, since a model that flags nobody already scores 79%. ## What's next for PRIDENT The first step is replacing synthetic data with real pharmacy fill data and testing on real outcomes. After that we'd calibrate the scores so they can be read as true probabilities. We'd also connect the tool to the prescribing system, so a doctor sees the risk at the moment they write the prescription. Beyond that, we'd add more barrier types and measure whether the suggested next steps actually improve fill rates. If Impiricus gets access to data protected by HIPAA laws legally through a contract, the the model can use more data like income to more accurately predict whether the patient is bound to leave the medication or not
Log in or sign up for Devpost to join the conversation.