A biosimilar is available, approved, and clinically meaningful. Spending still does not fall. The reason may not be that biosimilars failed. The path from availability to savings runs through substitution rules, state law, formulary placement, rebates, inventory, prescriber confidence, patient concern, and out-of-pocket design.
Share: Biosimilars do not automatically lower costs. Availability, substitution rules, formulary placement, rebates, inventory, communication, and patient trust all matter. #Causality #Healthcare #Biosimilars
Synthetic teaching model
This article uses a synthetic teaching model. It is not clinical, operational, actuarial, legal, compliance, or policy advice. The sources below justify why some variables belong in the model. The probabilities are invented so the reasoning path is easy to inspect.
The Problem Is Not Always One Thing
It is tempting to treat biosimilar approval as the cost-saving event. Approval creates an option. Adoption is a separate process. If prescribers are uncomfortable, patients are worried about switching, pharmacy inventory is inconsistent, or rebate pressure keeps the reference product favored, savings can be missed even when the biosimilar exists.
Why The Obvious Explanation Can Mislead
The obvious answer is that a biosimilar should lower costs when it enters the market. That may happen, but savings are not automatic. The available product must become the used product, and the used product must change net spending after rebates, benefit design, and patient cost share.
Plain-language modeling note
A Bayesian belief network, or BBN, is a graph for asking conditional questions. Each node is a condition, each arrow says one condition informs another, and each probability is explicit. You do not need to know the SDK to read the graph: the SDK code is only there when we need a repeatable action query.
The Question For This Example
This example asks how missed-savings risk changes after observing a low-adoption pattern, and what changes if communication, formulary placement, and patient cost share are set to more favorable states.
The target outcome is BiosimilarSavingsMissed, which means missed biosimilar savings in this teaching model.
A Small Model Of The Situation
The model is a synthetic adoption-and-savings graph. It does not evaluate a specific product, state law, formulary contract, clinical interchangeability decision, or actual net price.
The graph has 17 nodes:
BiosimilarAvailability: Biosimilar availability (available / low)InterchangeabilityStatus: Interchangeability status (yes / no)StateSubstitutionFriction: State substitution friction (low / high)PrescriberComfort: Prescriber comfort (adequate / low)PatientSwitchConcern: Patient switch concern (low / high)FormularyPlacement: Formulary placement (good / poor)RebatePressure: Rebate pressure (low / high)NetPriceTransparency: Net price transparency (transparent / low)PriorAuthPolicy: Prior authorization policy (clear / unclear)StepTherapyDesign: Step therapy design (good / poor)PharmacyInventory: Pharmacy inventory (stocked / low)AdministrationChannel: Administration channel (coordinated / fragmented)PatientCostShare: Patient cost share (low / high)ClinicalMonitoringNeed: Clinical monitoring need (low / high)PayerCommunication: Payer communication (strong / weak)AdoptionRateLow: Adoption rate low (no / yes)BiosimilarSavingsMissed: Biosimilar savings missed (no / yes)

What Is Sourced And What Is Synthetic
FDA biosimilar materials support including biosimilarity, interchangeability, substitution, and patient/provider communication. KFF drug-spending material supports the spending concentration motivation. The probabilities are synthetic.
Biosimilar and interchangeable status- FDA materials support including biosimilar approval, interchangeability, and state-law-dependent substitution.
Patient and prescriber confidence- FDA patient and professional materials support including communication and confidence as adoption mechanisms.
Spending concentration- KFF material supports the broader spending motivation for focusing on high-cost drug categories and competition.
Boundary of the evidence
The sources support the general mechanisms in the graph. They do not estimate this article’s node states, thresholds, or conditional probability values. Those are synthetic teaching values.
The Query The Graph Cannot Show By Itself
The visual graph is the best way to inspect the structure. The code-backed query is there for a narrower reason: we want to separate what is learned by observing a messy case from what changes if one condition is set differently.
Using the Darkstar Python SDK, a subscribed SDK user can load the same BBN JSON, ask for the target probability after evidence is entered, then run the action query by setting a node before querying again. The download includes this as illustrative SDK code, while the standalone query_example.py reproduces the article numbers without shipping the SDK.
import json
from darkstar import DiscreteModel
TARGET = "BiosimilarSavingsMissed"
OBSERVED_EVIDENCE = {
"FormularyPlacement": "poor",
"RebatePressure": "high",
"PrescriberComfort": "low",
"PatientSwitchConcern": "high"
}
INTERVENTION_CONTEXT = {
"RebatePressure": "high",
"PrescriberComfort": "low",
"PatientSwitchConcern": "high"
}
INTERVENTION = {
"PayerCommunication": "strong",
"FormularyPlacement": "good",
"PatientCostShare": "low"
}
def probability_after_observing(model, evidence):
query = {"nodes": [TARGET], "evidence": evidence}
result = json.loads(model.pquery(json.dumps(query)))
return result[TARGET]["yes"]
def probability_after_setting(model, setting, evidence):
changed_model = model.intervene(json.dumps(setting))
return probability_after_observing(changed_model, evidence)
with DiscreteModel(model_json) as model:
observed = probability_after_observing(model, OBSERVED_EVIDENCE)
acted = probability_after_setting(model, INTERVENTION, INTERVENTION_CONTEXT)
That is the article’s main modeling distinction. Observing a pattern is not the same as setting one part of the system differently.
The standalone query code gives this synthetic result:
Baseline missed biosimilar savings: 28.2%
Observed scenario (poor formulary placement and low trust): 44.8%
Action scenario (strong communication, better placement, and lower cost share): 36.2%
Same context with the action left unfavorable: 55.4%
Synthetic reduction versus the observed scenario: 8.6 percentage points
What We Learn By Observing The Situation
The observed scenario sets:
- Formulary placement = poor
- Rebate pressure = high
- Prescriber comfort = low
- Patient switch concern = high
The observed scenario sets poor formulary placement, high rebate pressure, low prescriber comfort, and high patient switch concern. In the synthetic model, that pattern raises missed-savings risk because adoption stays low even though availability may exist.

What Changes If We Set One Condition Differently
The action scenario sets:
- Payer communication = strong
- Formulary placement = good
- Patient cost share = low
The action query strengthens payer communication, improves formulary placement, and lowers patient cost share. It does not assume interchangeability or state substitution friction disappear. The result is a more realistic adoption story than availability alone.
What This Example Cannot Prove
This example cannot rank products, recommend substitution, estimate net prices, or decide coverage. It is a teaching model for why biosimilar savings depend on adoption pathways.
Try this in the shared model
Open the companion model, change one upstream condition at a time, and watch the target probability move. Start with the observed scenario above, then reset one condition that looks actionable. The point is to compare stories, not to treat the toy probabilities as a forecast.
Try The Model
Open the companion Darkstar model: Open Biosimilar Adoption And Savings BBN
Set BiosimilarAvailability to available and leave FormularyPlacement poor. Then improve placement but keep RebatePressure high. The model should make the savings path feel less automatic.
Download the teaching package: Biosimilar Adoption And Savings BBN ZIP
The ZIP contains the synthetic graph, model JSON, reader query code, illustrative SDK code, tests, and figures. It excludes proprietary SDK files, contracts, price data, claims, and chart-generation code.


Leave a Reply