Skip to main content
Version: 2.2

Scores

SchemaMethodology

Medical Accuracy Scores​

Each rate is assigned a validation score in the pipeline, which are mapped to a 1-5 canonical_rate_score at the end of the pipeline.

Canonical Rate ScoreInterpretationValidation Scores (Raw/Transform)Validation Scores (Imputed)
5Validated7N/A
4Raw - Payer/Hospital Posted Dollar; Not Outlier6.XX3.XX
3Transform/Impute - Medicare Benchmark Validated5.XX2.XX
2Transform/Impute - Not Medicare Validated but not an outlier4.XX1.XX
1Outlier00
0Rate Does Not Exist-1-1

Validated: Within ±20% of counterparty rates (±10% if rate ≥ $15k) AND meets Medicare bounds.

Medicare Bounds:

  • IP: between .9x and 10x
  • OP/Pro: between log-IQR based lower bound and 30x

Flow Chart​

accuracy_score_flow

Code
from graphviz import Digraph

# Initialize directed graph
dot = Digraph(comment="Accuracy Score Flow (Gross Charge 0.9x–100x Medicare)", format="png")
dot.attr(rankdir="TB", size="10")

# Start
dot.node("A", "Start", shape="circle")

# ±20% check first
dot.node("D", "Within ±20% of\ncounterparty rates?", shape="diamond")
dot.edge("A", "D")

# Global Medicare bound <100x
dot.node("D2", "Rate < 100× Medicare?", shape="diamond")
dot.edge("D", "D2", label="Yes")

# Medicare bound checks after ±20%
dot.node("D3", "If Inpatient:\nRate between 0.9× and 100× Medicare", shape="diamond")
dot.edge("D2", "D3", label="Yes")

# Score 5 validated if holds
dot.node("S5v", "Score = 5 (Validated)", shape="box")
dot.edge("D3", "S5v", label="Yes")

# Fallthroughs if checks fail
dot.edge("D", "F", label="No")
dot.edge("D2", "F", label="No", style="dashed")
dot.edge("D3", "F", label="No", style="dashed")

# Raw/post imputation
dot.node("F", "Raw or Posted Imputation Rate?\n(And not an outlier)", shape="diamond")
dot.node("S4r", "Score = 4", shape="box")
dot.edge("F", "S4r", label="Yes")

# Gross charge transform (edited to 0.9x–100x Medicare)
dot.node("G", "Hospital Gross Charge Transform?\n(Between 0.9× and 100× Medicare,\nnot drug code)", shape="diamond")
dot.edge("F", "G", label="No")

dot.node("S3t", "Score = 3", shape="box")
dot.edge("G", "S3t", label="Yes")

# Medicare benchmark
dot.node("H", "Non-outlier AND\nwithin 0.95×–10× Medicare?", shape="diamond")
dot.edge("G", "H", label="No")

dot.node("S3b", "Score = 3", shape="box")
dot.edge("H", "S3b", label="Yes")

# Non-outlier generic
dot.node("I", "Non-outlier?", shape="diamond")
dot.edge("H", "I", label="No")

dot.node("S2n", "Score = 2", shape="box")
dot.edge("I", "S2n", label="Yes")

# Outlier case
dot.node("J", "Rate exists?", shape="diamond")
dot.edge("I", "J", label="No")

dot.node("S1o", "Score = 1 (Outlier)", shape="box")
dot.edge("J", "S1o", label="Yes")

# Score 0 (null)
dot.node("S0", "Score = 0 (Null)", shape="box")
dot.edge("J", "S0", label="No")

# Render PNG
output_path = "/mnt/data/accuracy_score_flow_grosscharge_0.9x_100x"
dot.render(output_path, format="png", cleanup=False)

output_path + ".png"

Drug Accuracy Scores​

Drug rates use a specialized scoring methodology that differs from medical codes. Each rate is assigned a validation score which maps to a 1-5 canonical_rate_score.

Canonical Rate ScoreInterpretationValidation Scores
5Validated - Payer/Hospital Agreement within ASP bounds7
4Raw or Transformed - Within ASP bounds6.2-6.9
3N/A (not used for drugs)N/A
2Not validated but within bounds4.XX
1Outlier1
0Rate Does Not Exist0

Drug Validation Criteria​

MethodCriteria
ASP ValidatedWithin ±20% of counterparty rates (±10% if rate ≥ $15k) AND between 1.2x-4x Medicare/ASP
ASP Bounds - HospitalBetween 0.8x and 4x Medicare ASP rate
ASP Bounds - PayerBetween 0.8x and 10x Medicare ASP rate

Drug Rate Hierarchy​

For drug codes, ties are broken using a fixed hierarchy rather than likelihood scores. All rates in this hierarchy must be within ASP bounds to receive a score of 4.

1. Hospital Raw (6.8 + 0.1 × cdf)​

Direct hospital-reported dollar and allowed amount rates with no transformations:

  • Dollar rates: hospital_case_rate_dollar, hospital_fee_schedule_dollar, hospital_percent_of_total_billed_charges_dollar, hospital_other_dollar, hospital_null_methodology_dollar
  • Allowed amounts: hospital_case_rate_allowed_amount, hospital_fee_schedule_allowed_amount, hospital_percent_of_total_billed_charges_allowed_amount, hospital_other_allowed_amount, hospital_null_methodology_allowed_amount, hospital_per_diem_allowed_amount
  • Untransformed variants: Rates ending in _untransformed_dollar or _untransformed_allowed_amount

2. Hospital Transformation (6.6 + 0.1 × cdf)​

Hospital rates that have undergone transformations:

  • Percentage to dollar conversions: Rates with _gc_hosp_perc_to_dol, _gc_hosp_cbsa_perc_to_dol, _gc_hosp_state_perc_to_dol, _gc_komodo_perc_to_dol patterns
  • Drug dosage standardization:
    • drug_dosage_std_*_dollar - Standardized to ASP billing units
    • drug_dosage_std_*_perc_to_dol - Percentage rates converted to dollar using gross charges
    • drug_dosage_std_ndc_* - NDC-based standardization
    • drug_dosage_std_unit_* - Unit-based standardization

3. Payer Transformation (6.4 + 0.1 × cdf)​

Payer rates that have undergone transformations:

  • Percentage to dollar conversions: payer_gc_hosp_perc_to_dol, payer_gc_hosp_cbsa_perc_to_dol, payer_gc_hosp_state_perc_to_dol, payer_gc_komodo_perc_to_dol, etc.

4. Payer Raw (6.2 + 0.1 × cdf)​

Direct payer-reported rates with no transformations:

  • Negotiated rates: payer_negotiated_rate, payer_negotiated_untransformed_rate
  • Derived rates: payer_derived_rate, payer_derived_untransformed_rate
  • Fee schedule rates: payer_fee_schedule_rate, payer_fee_schedule_untransformed_rate

Lab Accuracy Scores​

Lab rates use a consistency-based scoring methodology. "Consistent" is defined at the lab/payer-network level and indicates that the lab reports rates at a consistent percentage of Medicare rates. Specifically, we define consistency as having at least 30 reported rates AND having the difference between the 5th and 95th percentiles of % of Medicare rates be less than 0.25.

Each rate is assigned a validation score which maps to a 1-5 canonical_rate_score.

Canonical Rate ScoreInterpretationValidation Scores
5Validated - Consistent rate within 0.4x-1.3x Medicare7
4Consistent rate within 0.3x-3x Medicare6
3Within 0.4x-1.3x Medicare (not marked as consistent)5
2Not validated but within bounds (0.2x-4.5x Medicare)4.XX
1Outlier1
0Rate Does Not Exist0

Lab Consistency​

The has_consistent_pct_of_medicare_rate flag indicates that the provider has reported lab rates at a consistent percentage of Medicare rates. This flag is used to distinguish high-confidence validated rates from rates that happen to fall within Medicare bounds.


How Ties are Broken​

warning

This does not apply to Drugs or Lab Codes. Hospital/Payer ties are broken by taking the hospital rate.

Sometimes we have both payer and hospital rates and they both have a canonical rate score of 4. Which one do we pick? Ties are broken by selecting the higher-likelihood rate. The "likelihood" is a statistic computed using our expectations for that code based on validated rates (payer/hospital reported similar rates).

Likelihood

Where can I see this likelihood score? It's in the validation score's decimals.

As an example, if the validation score is 6.85, the likelihood of randomly drawing the rate from the expected distribution is 85%.

Math

We estimate the likelihood as the integral of the probability distribution function of a Normal(μ,σ)Normal(\mu, \sigma) between [r−ϵ,r+ϵ][r - \epsilon, r + \epsilon]. (i.e. difference of CDF at these two points)

μ\mu and σ\sigma come from the observed distribution of validated rates for that billing code and provider type. We log transform the validated rates to reduce skew. In general this observed distribution is normal-ish enough. But we do exclude distributions that are too skewed even after a log transform. We also exclude distributions that are clearly multi-modal.

For more details, see accuracy scores v2