DrugDashboards
← Home

Price forecast: which generics get expensive next

Every generic drug market in the country, ranked by the modeled chance that its pharmacy price — NADAC, the national average of what pharmacies actually pay — rises sharply soon. Two targets, one toggle: +50% within 6 months or +25% within 3 months. Each row shows the probability, the exact inputs it was computed from, and the Medicaid dollars at stake, because a prediction you can't audit isn't worth publishing.

Freshness: scored 2026-09-03 from the latest NADAC file; models trained 2026-09-02 and backtested on data they never saw. Scores refresh daily; the models are refit deliberately, and every fit is kept so a published number can always be traced to its coefficients.

ⓘ How this was built
Data sources
  • CMS NADAC — weekly feed plus yearly archives, 2013–present (data.medicaid.gov)
  • ACA FUL weighted-average AMP series (manufacturer prices)
  • FDA NDC Directory marketing dates (who is actively selling)
  • FDA drug shortages, recalls, and inspection classifications; DECRS/SPL facility links
  • CMS State Drug Utilization Data 2025 (Medicaid dollars at stake)
Method

Logistic regression per target over a monthly grid of historical dates since 2018: features built only from data knowable at each date, labels from what actually happened next, a temporal train/test split with the 2024 NADAC methodology change inside the holdout, then a refit on everything and an isotonic calibration so a displayed 12% means roughly one such market in eight actually rose. Full methodology, coefficients, backtest, and signal lifts are below the table.

Pipeline and calculations built by Claude (Fable 5) from the public datasets above. Educational only — verify against primary sources before acting.

+50% within 6 months
AUC 0.73
held-out 2024–present: 215 rises in 48,552 market-months (0.4%base rate) · the model's top 100 picks contained 6 of them
+25% within 3 months
AUC 0.72
held-out 2024–present: 463 rises in 52,294 market-months (0.9%base rate) · the model's top 100 picks contained 5 of them

The forecast

base rate 0.4% of markets per month (held-out period)
ChanceDrug marketPrice now3 mo12 moMedicaid $ at stake
4%
9.4× base
sodium chloride, sodium lactate, potassium chloride, calcium chloride
injectable · 7 labelers
unit price only $0.0038 · sterile injectable · only 7 active labeler(s)
$0.004
per unit
−1%+31%$6.6M
on $13.3M (2025)
4%
9.4× base
polyethylene glycol-3350 and electrolytes
other · 2 labelers
unit price only $0.0046 · only 2 active labeler(s) · pharmacy margin already compressed
$0.005
per unit
−0%+3%$3.2M
on $6.3M (2025)
4%
9.4× base
polyethylene glycol 3350, sodium chloride, sodium bicarbonate, potassium chloride
other · 3 labelers
unit price only $0.0050 · only 3 active labeler(s) · down 41% over two years — prices this far below trend usually rebound
$0.005
per unit
−11%−4%$563K
on $1.1M (2025)
4%
9.4× base
sodium phosphate, dibasic and sodium phosphate, monobasic
other · 2 labelers
unit price only $0.0095 · only 2 active labeler(s) · price up 15% over 6 months
$0.009
per unit
+15%+16%$264K
on $529K (2025)
3%
6.7× base
polyethylene glycol 3350, sodium sulfate anhydrous, sodium bicarbonate, sodium chloride, potassium chloride
other · 5 labelers
unit price only $0.0053 · only 5 active labeler(s) · pharmacy margin already compressed
$0.005
per unit
−0%+2%$1.3M
on $2.5M (2025)
3%
6.7× base
lidocaine hydrochloride and epinephrine
injectable · 6 labelers
sterile injectable · unit price already $0.14 · only 6 active labeler(s)
$0.139
per unit
+0%+0%$128K
on $256K (2025)
3%
6.7× base
ondansetron hydrochloride
injectable · 4 labelers
sterile injectable · unit price already $0.18 · only 4 active labeler(s)
$0.177
per unit
−2%−16%$114K
on $229K (2025)
3%
6.7× base
calcium carbonate 10gr (648 mg)
oral solid · 3 labelers
unit price only $0.0081 · only 3 active labeler(s) · pharmacy margin already compressed
$0.008
per unit
+0%+3%$61K
on $122K (2025)
3%
6.4× base
famotidine
injectable · 7 labelers
sterile injectable · unit price already $0.33 · only 7 active labeler(s)
$0.327
per unit
+0%+0%$880K
on $1.8M (2025)
3%
6.4× base
lactulose solution usp, 10 g/15 ml
other · 3 labelers
unit price already $0.01 · only 3 active labeler(s) · pharmacy margin already compressed
$0.013
per unit
−3%−1%$587K
on $1.2M (2025)
2%
4.7× base
sodium chloride
injectable · 26 labelers
13 Class I/II recall(s) in 12 months · sterile injectable · unit price already $0.09
$0.088
per unit
+1%+6%$48.1M
on $96.1M (2025)
2%
4.7× base
propofol
injectable · 13 labelers
sterile injectable · unit price already $0.17 · pharmacy margin already compressed
$0.171
per unit
−2%+0%$2.6M
on $5.2M (2025)
2%
4.7× base
cyclobenzaprine
oral solid · 9 labelers
unit price already $0.02 · only 9 active labeler(s) · pharmacy margin already compressed
$0.017
per unit
−4%−11%$1.9M
on $3.9M (2025)
2%
4.7× base
lidocaine hydrochloride
injectable · 25 labelers
sterile injectable · unit price already $0.08 · 4 Class I/II recall(s) in 12 months
$0.080
per unit
−2%−8%$1.8M
on $3.6M (2025)
2%
4.7× base
chlorhexidine gluconate 0.12% oral rinse
other · 14 labelers
unit price only $0.0072 · pharmacy margin already compressed · sole-source market
$0.007
per unit
−0%−5%$1.4M
on $2.9M (2025)
2%
4.7× base
polyethylene glycol-3350 and electrolytes with flavor pack
other · 1 labeler
unit price only $0.0039 · only 1 active labeler(s) · pharmacy margin already compressed
$0.004
per unit
+3%+6%$925K
on $1.9M (2025)
2%
4.7× base
brompheniramine maleate and pseudoephedrine hydrochloride
other · 2 labelers
unit price already $0.07 · only 2 active labeler(s) · pharmacy margin already compressed
$0.071
per unit
−1%−17%$905K
on $1.8M (2025)
2%
4.7× base
polyethylene glycol 3350, sodium chloride, sodium bicarbonate and potassium chloride with lemon flavor
other · 1 labeler
unit price only $0.0050 · only 1 active labeler(s) · down 41% over two years — prices this far below trend usually rebound
$0.005
per unit
−11%−4%$601K
on $1.2M (2025)
2%
4.7× base
bupivacaine hydrochloride
injectable · 24 labelers
sterile injectable · unit price already $0.07 · pharmacy margin already compressed
$0.067
per unit
+0%+4%$472K
on $944K (2025)
2%
4.7× base
tobramycin
injectable · 10 labelers
sterile injectable · price up 23% over 6 months · only 10 active labeler(s)
$0.740
per unit
+13%−9%$454K
on $909K (2025)
2%
4.7× base
cholestyramine light
other · 2 labelers
unit price already $0.11 · only 2 active labeler(s) · price up 11% over 6 months
$0.114
per unit
+4%−13%$314K
on $629K (2025)
2%
4.7× base
sodium citrate and citric acid monohydrate
other · 6 labelers
unit price already $0.02 · only 6 active labeler(s) · pharmacy margin already compressed
$0.024
per unit
−0%+0%$245K
on $491K (2025)
2%
4.7× base
midazolam
injectable · 5 labelers
sterile injectable · unit price already $0.23 · only 5 active labeler(s)
$0.234
per unit
+2%+3%$240K
on $480K (2025)
2%
4.7× base
haloperidol lactate
injectable · 6 labelers
sterile injectable · only 6 active labeler(s) · pharmacy margin already compressed
$0.789
per unit
+1%+2%$162K
on $325K (2025)
2%
4.7× base
polyethylene glycol 3350 and electrolytes with lemon flavor
other · 1 labeler
unit price only $0.0046 · only 1 active labeler(s) · pharmacy margin already compressed
$0.005
per unit
−0%+3%$145K
on $289K (2025)

A screening list for pharmacists, buyers, and payers — not a forecast for any single product and not purchasing advice. Every row's “inputs” button shows the data behind its number.

How to read a row

  • Chanceis a calibrated probability: the model's raw score mapped onto how often markets with that score actually hit the target in history. “3× base” compares it to the average market-month in the held-out period.
  • Price now / 3 mo / 12 mo are the market's median NADAC unit price and its matched change — the same NDCs at both dates, so a change in which package sizes are sold cannot fake a move.
  • Medicaid $ at stake is last complete year's Medicaid spend on the market's NDCs times the target rise (50% or 25%): what the rise would add per year if it happened and volume held. Sizing, not prediction.
  • Whylists the factors contributing most to this row's score; the “inputs” button lists every factor, with values.

How it was built — in full

1. What is being predicted

A market is one ingredient in one form bucket (oral solid, injectable, other) — every NDC of every labeler selling it. Its price each month is the median across those NDCs of the NADAC unit price. A rise is measured on matched NDCs: for each NDC priced at both dates we take the ratio, then the median of those ratios. The target is that matched median reaching +50% at any month within the next six (or +25% within three). Between 2014 and 2026 we found 949 such six-month rises across 550 markets; 63% were still +50% or more six months later, 42% a full year later — these are not blips.

2. The NADAC methodology change, and what we did about it

Beginning with its December 2024 monthly file, CMS computes generic NADAC rates as a three-month moving average of monthly acquisition costs (a volatility measure adopted after the 2024 methodology dispute; brands are not averaged). A one-month jump now appears spread over three months, and the change is visible in the data: before it, 0.2–0.9% of NDC-months jumped 50% or more within a single month; after it, 0.006%. Left alone, that would make history and present incomparable and quietly break any model trained across the seam. Rather than try to undo CMS's average (an unstable inversion), we harmonized: every generic NDC's monthly price before December 2024 is replaced by the trailing three-month mean of its observed prices — history smoothed the way the present now is. All features and labels are computed on that one series, and the train/test split puts the methodology change inside the held-out period, so the reported test AUC is measured across it.

3. The inputs (features)

Fourteen features per market-month, each computed only from data available on that date. Price dynamics at four horizons, the manufacturer-side price series, and the supply-side factors the site's fragility model uses. Coefficients are on a z-scale (one standard deviation of each feature), so they are comparable to each other:

+50% within 6 months — coefficients (z-scale, refit on all data)
  • price_level current median NADAC unit price (log)-0.72
  • nadac_3m price change vs 3 months ago (matched NDCs, log ratio)+0.05
  • nadac_6m price change vs 6 months ago+0.13
  • nadac_yoy price change vs 12 months ago-0.04
  • nadac_2y price change vs 24 months ago-0.11
  • wamp_yoy manufacturer price (weighted AMP, from the FUL file) change vs 12 months ago+0.13
  • ful_gap how far the pharmacy price sits from the manufacturer benchmark (log NADAC/AMP)-0.24
  • n_labelers companies with an NDC actively marketed today-0.87
  • sole_source exactly one labeler-0.18
  • injectable sterile-injectable form+0.20
  • active_episodes FDA shortage episodes already open in the market+0.06
  • tbd_active a to-be-discontinued filing currently active+0.05
  • recalls_12mo Class I/II recalls touching the market in the last year+0.06
  • oai_24mo an NDC made at a facility with an OAI inspection in the last two years+0.03
+25% within 3 months — coefficients (z-scale, refit on all data)
  • price_level current median NADAC unit price (log)-0.55
  • nadac_3m price change vs 3 months ago (matched NDCs, log ratio)-0.04
  • nadac_6m price change vs 6 months ago+0.02
  • nadac_yoy price change vs 12 months ago-0.15
  • nadac_2y price change vs 24 months ago-0.17
  • wamp_yoy manufacturer price (weighted AMP, from the FUL file) change vs 12 months ago+0.15
  • ful_gap how far the pharmacy price sits from the manufacturer benchmark (log NADAC/AMP)-0.14
  • n_labelers companies with an NDC actively marketed today-1.02
  • sole_source exactly one labeler-0.16
  • injectable sterile-injectable form+0.08
  • active_episodes FDA shortage episodes already open in the market+0.05
  • tbd_active a to-be-discontinued filing currently active+0.07
  • recalls_12mo Class I/II recalls touching the market in the last year+0.04
  • oai_24mo an NDC made at a facility with an OAI inspection in the last two years+0.04

4. The backtest

Each model is fit on market-months before 2024and scored on everything after — a period it never saw. AUC is the chance the model ranks a market that rose above one that did not (0.5 is a coin flip). “Hits in top 100” is the plainest test: of the 100 market-months the model was most confident about, how many actually rose.

TargetPeriodmarket-monthsrises observedbase rateAUChits in top 100hits in top 500
+50% within 6 monthstraining (2018–2023)93,6056040.7%0.723532
held-out (2024–2026)48,5522150.4%0.732616
+25% within 3 monthstraining (2018–2023)93,0139741.1%0.686528
held-out (2024–2026)52,2944630.9%0.72058

5. What actually precedes a rise

The honest finding, and the reason this page is titled the way it is: the strongest precursor of a sharp rise is a sharp fall. Markets whose price has collapsed tend to snap back — a race to the bottom that reverses when labelers exit or stop selling at a loss. Supply-side warning signs (sole source, open shortages, inspections, recalls) barely move the odds of a large rise, and sole-source markets rise less often, because their prices are already high. The table shows, for every signal, how often it was present when a market went on to hit the target versus when it did not:

+50% within 6 months
Signal present at the timein markets that rosein markets that didn'tlift
price down >=20% in 3 months10.5%2.2%4.7×
price down >=30% in 6 months8.2%1.8%4.4×
price down >=30% over a year14.3%5.1%2.8×
price down >=50% over two years9.5%3.8%2.5×
manufacturer (AMP) price down >=30% YoY4.9%9.4%0.5×
sole-source market8.7%12.5%0.7×
two or fewer labelers21.4%23.1%0.9×
a discontinuation filing active7.8%5.9%1.3×
a shortage already open9.0%2.0%4.4×
Class I/II recall in 12 months6.7%6.1%1.1×
OAI inspection at a producing facility23.4%22.3%1.1×
sterile injectable8.2%5.8%1.4×
+25% within 3 months
Signal present at the timein markets that rosein markets that didn'tlift
price down >=20% in 3 months15.1%2.1%7.0×
price down >=30% in 6 months10.0%1.8%5.5×
price down >=30% over a year20.8%5.0%4.1×
price down >=50% over two years12.3%3.7%3.3×
manufacturer (AMP) price down >=30% YoY8.6%9.3%0.9×
sole-source market9.1%12.5%0.7×
two or fewer labelers19.6%23.0%0.8×
a discontinuation filing active7.6%5.9%1.3×
a shortage already open5.3%2.0%2.6×
Class I/II recall in 12 months5.9%6.2%1.0×
OAI inspection at a producing facility23.2%22.1%1.1×
sterile injectable5.6%5.8%1.0×

6. What this cannot predict

Supply-shock spikes. When isoniazid went 14.6× in early 2025 after a manufacturing failure, nothing in these inputs flagged it in advance — and no public dataset would have. This model finds the rises that leave tracks in prices; it does not see inside factories. Treat a low score as “no rebound pattern,” never as “safe.”

7. Known limits

  • NADAC is a national average of invoice prices; an individual pharmacy's cost differs.
  • Markets pool every NDC of an ingredient and form; a bucket can mix products of very different price (the inputs panel shows the NDCs, so you can see when it does).
  • Medicaid dollars at stake use the latest complete year of CMS State Drug Utilization Data (2025) and Medicaid only; commercial and Medicare exposure is larger.
  • Calibration is historical: if the market regime changes, probabilities drift until the next refit. Every refit is kept, so a published score is always explainable.

Reproduce it: every number on this page is produced by drugdashboards/price_rebound.py, public in our repository, from the datasets listed above.