Yash Tiwari · Practicum
Mentor check-in · Wed 2:00 PM
USF MS Data Science & AI · Practicum at Lumara Health

Claim Denial Recovery

A tool that tells medical billers which denied insurance claims to fight first, so a clinic recovers the most money with the time it has.

Yash Tiwari · AI Engineer intern Oct 2026 – Jun 2027 · Tue & Wed Manager: Praneet Mhatre, CTO Check-ins: Wednesdays, 2:00 PM

Week by week

Click a week to open its report ·
Taller, deeper = more done USF check-in This week Weeks ahead
Weekly report

The week at a glance

Progress

Where the project is

Four checkpoints from the project brief, and the pipeline the tool is built from.

Checkpoints

From the project brief

1
One-page planWhat I build, the data model, what I leave out, my questions
This week
✓
Synthetic practice2,080 claims · 5,148 adjustments · 3 planted patterns. Paused 4 Nov until real clinic stats arrive
Done for now
3
Working prototypeBiller-facing worklist end to end, recommended actions, outcome tracking
Starting
4
Write-upHow good is it, how it was measured, what to build next
Later

The pipeline

How a denial becomes a ranked worklist row

SYN
Synthetic practice12 providers · 3 sites · 5 payer types · CMS-priced
Done
EDA
Denials table & analysisDefinitions, rates, reasons, deadlines; business-ready charts next
In progress
P(·)
Rank: value × odds ÷ minutesOdds v0 lookup, then a calibrated model
Phase 2
ROW
Biller worklist & outcome trackingOne row per appeal; trace each recovered dollar
Checkpoint 3
AWS
Containerize, AWS-readyOnce the flow repeats; then present to the Lumara team
Later
The synthetic practice, explored

What the data says

Everything below is computed from the dataset I generated: a fictional multi-clinic group billing Medicare, Medicare Advantage, Medicaid managed care and commercial payers. No real patients, providers or clinics.

Claim denial rate by week of service

Share of each week's claims with at least one denied line

🔎
The EDA found the planted pattern. From the week of 24 Aug, one pain-management provider moved clinics but kept billing under the old location's ID. Enrollment denials jumped from almost none to 14, 19 and 8 a week, until it was fixed. A flat line is noise; a step is a cause.

Where the money is denied

Denied value at the payer's agreed price, by reason

Time left to appeal

Open denials on the export date (), dollars by days to the deadline

Why each specialty is denied

Denied lines, specialty × reason. Darker = more.

Denial rate by specialty

Claims with any denied line

Denial rate by payer type

Claims with any denied line

Looks like a denial, isn't

What a naive count would wrongly put in the worklist

A denial is a line the clinic absorbs (group code CO) for any reason other than the contractual write-off. Getting this definition right keeps thousands of fake problems out of a biller's queue.

Domain

What I've learned so far

The healthcare-billing rules the tool has to get right before any model is useful.

The flow

Claims out, remittances back

The practice system builds an 837P claim, a clearinghouse forwards it, and the payer answers 2 to 4 weeks later with an 835 remittance listing what was paid, adjusted or denied.

The codes

Who, why, and the detail

Group code says who absorbs it (CO clinic, PR patient, OA other). CARC says why. RARC adds detail. Together they decide the action: fix and resubmit, appeal, write off, or bill someone else.

The trap

CO-45 is not a denial

It is the normal gap between list price and the contracted price, on almost every paid line. And $0 paid alone is not a denial either: it can be the patient's deductible (PR-1).

The value

Price a denial at the deal, not the list

The same visit is worth a different amount from each payer. A denial is worth the payer's agreed (allowed) price at most, never the clinic's list price.

The clock

Every payer has its own window

Appeal windows run from the remittance date: Medicare 120 days, Medicare Advantage and Medicaid about 60, commercial 90 to 180. After that the money is gone.

The ranking

Value × odds, per minute of work

priority = price × P(overturn) ÷ minutes

A 90% chance at $500 beats a 99% chance at $50. Near-deadline items move up.