Medicare Advantage, Part D, Medicaid
HCC risk-model coefficients (reference)
Rows
8,805
Columns
11
History
2026 to 2027
Card
yesgrain, traps, filters
Typed tools
0
Superseded by medicare_silver.dim_hcc_coefficients_v2 (every CMS-HCC / ESRD / RxHCC package of every posting 2016-2027, restated 2026-10-07, #3246), read through medicare_semantic.vw_hcc_coefficients_current_v2. This table holds payment years 2026-2027 only, keyed without the package, so the RxHCC packages (2026 T/X, 2027 T2/Y1/Y2) overwrote each other and RXHCC111/112/260/396 are missing in 2027; it dropped CMS's 0.0 cells and the ESRD graft-duration / transplant terms, and stored float32 values. Kept frozen as the rollback..
What it is
- 1CMS risk-adjustment model COEFFICIENT tables for Medicare Advantage (Part C HCC) and Part D (RxHCC).
- 2Each row is one numeric risk weight that a CMS scoring engine multiplies against a member's 0/1 flag for a demographic cell or disease/drug condition category, for a given payment year, model, and population segment.
- 3It is the lookup that turns a beneficiary's conditions into a Medicare risk score (and therefore the capitated payment a plan receives).
Grain
| Key | Grain |
|---|---|
rate_yearmodel_versionvariablesegment |
|
How to read it
- 1Score a Medicare Advantage member or look up a single weight.
- 2Example: SELECT variable, label, coefficient_value FROM medicare_silver.dim_hcc_coefficients WHERE rate_year=2027 AND model_version='V28' AND segment='COMMUNITY_NA' AND variable IN ('F70_74','HCC1') — returns the age/sex demographic weight plus the HIV/AIDS condition weight for a 70-74 community, non-dual, aged-female member under the 2027 V28 model; summing the applicable variable weights for a member yields their raw risk score (which drives the capitated payment).
- 3Always pin all of rate_year + model_version + segment.
Traps
- 1No is_current / effective-date column. The snapshot key is rate_year, which maps 1:1:1 to bronze_publication_id and source_url; each grain key appears under exactly one publication (0 keys span both years), so there is no in-table version churn to dedup — but if more years/republications land later, you must filter by rate_year (and watch that the 2026 source is the MIDYEAR-FINAL ZIP while 2027 is the INITIAL ZIP, i.e. not the same release stage).
- 2model_version is load-bearing for the VALUE, not just the grain. The same variable (e.g. HCC1='HIV/AIDS') exists in multiple models with different coefficients (V22 INSTITUTIONAL=1.747 vs V28=1.322). Never read a coefficient by variable+segment alone — always pin model_version. Also, each model has its OWN disjoint segment vocabulary (V22/V28: COMMUNITY_*/INSTITUTIONAL/NE_*; V21/V24: DIAL/GRAFT_*; RxHCC_V08: CE_*/NE_NE_*), so a segment value implies its model.
- 3NULL label is meaningful and label is not authoritative. 864 NULL labels are concentrated entirely in V22 and V28 (432 each) on the new-enrollee Medicaid-interaction demographic terms (MCAID_*/NMCAID_NE*). Separately, the same variable carries cosmetically different label TEXT across models ('Female 0-34' vs 'Female, Age 0 - 34'), so join/dedup on variable, never on label.
- 4coefficient_value zeros and negatives are real, not missing data (0 NULLs). 320 exact 0.0 values mean the condition is structurally not scored in that segment (e.g. renal HCCs in GRAFT/DIAL), and 6 negatives are legitimate Originally-ESRD adjusters in V21/V24 DIAL. The large tail up to 59.861 (RxHCC high-cost-drug categories like Cystic Fibrosis, Hemophilia) is genuine — do not clip it as outliers.
- 5Coefficients are recalibrated year over year, so this is NOT a static dimension despite the dim_ name. Of the (model_version, variable, segment) combos, 2978 appear in BOTH 2026 and 2027 (many with changed values, e.g. RXHCC16 CE_LTI 4.514 -> 5.84) and 2849 appear in only one year. Always carry rate_year through any join to a member/score table.
- 6asserted_at and parser_artifact_hash are pipeline lineage, not CMS dates. Both years were loaded on 2026-05-18 by the same parser build ('e10d366596d1c801'); asserted_at is the silver write time, so use rate_year as the effective/payment period.
Columns (11)
| Column | Type | Meaning |
|---|---|---|
rate_year | int | Medicare Advantage / Part D PAYMENT YEAR the coefficient applies to (int). Only 2 values present: 2026 and 2027. It is also the snapshot/version key: each rate_year maps 1:1:1 to exactly one bronze_publication_id and one source_url ZIP (2026 -> 2026-midyear-final; 2027 -> 2027-initial). Part of the grain. |
model_version | string | CMS risk-adjustment model that owns the coefficient (string). 5 values: V21, V22, V24, V28 (Part C / medical HCC models) and RxHCC_V08 (Part D / prescription-drug RxHCC model). Essential to the grain and to value: the SAME disease variable carries a DIFFERENT coefficient per model (e.g. HCC1 INSTITUTIONAL 2027 = 1.747 under V22 vs 1.322 under V28). Each model also has its own disjoint segment set (see segment). |
variable | string | The model term / risk factor name (string), 936 distinct. Four families by prefix: disease condition categories HCC* (184 distinct, e.g. HCC1='HIV/AIDS') and RXHCC* (82 distinct, e.g. RXHCC98='Hereditary Angioedema'); demographic age-sex cells M*/F* (e.g. F0_34='Female 0-34', D* disabled, ORIGDIS); and interaction / new-enrollee terms (MCAID_*, NMCAID_*, ESRD_*, NESRD_*, NONAGED_HCC*, etc). This is the row a CMS scoring engine multiplies by a 0/1 flag. Part of the grain but NOT unique on its own (same variable repeats across models, segments, years). |
segment | string | The model SEGMENT / risk-score component the coefficient lives in (string), 38 distinct values, partitioned by model_version (not shared across models). Encodes enrollee population + entitlement: e.g. V22/V28 use COMMUNITY_{FBA,FBD,NA,ND,PBA,PBD} (Full/Partial/Non Medicaid-dual, Aged/Disabled), INSTITUTIONAL, and NE_* new-enrollee segments; V21/V24 use DIAL (dialysis), GRAFT_* (post-transplant), NE_DIAL/NE_GRAFT (ESRD models); RxHCC_V08 uses CE_* (continuing-enrollee Low/NonLow x Aged/NonAged x LTI) and NE_NE_* new-enrollee. REQUIRED to reach the grain (ry+mv+variable alone = 2822, not unique). |
coefficient_value | float | The numeric risk weight (float, 0 nulls). Range -0.078 to 59.861, mean ~0.97. 6 negative values (all Originally_ESRD_Female/Male DIAL adjusters in V21/V24). 320 exact zeros = a disease that is structurally not scored in that segment (e.g. renal HCCs zeroed in GRAFT/DIAL segments). The huge tail (e.g. RXHCC98=59.861, RXHCC225 Cystic Fibrosis ~56, HCC111 Hemophilia ~32) are real Part D high-cost-drug weights, not errors. Coefficients are recalibrated year over year for many terms. |
label | string | Human-readable description of the variable (string), e.g. 'HIV/AIDS', 'Female 0-34'. NULLABLE and meaning-bearing: 864 NULLs, all in V22 (432) and V28 (432), specifically the new-enrollee Medicaid-interaction demographic cells (MCAID_NORIGDIS_NE*, NMCAID_*). Also NOT authoritative/joinable: the same variable carries cosmetically different label text across model versions ('Female 0-34' vs 'Female, Age 0 - 34'), so dedup on variable, not on label. |
source_url | string | Provenance: the exact CMS model-software ZIP the coefficients were parsed from (string). 2 values, 1:1 with rate_year: 2026 -> https://www.cms.gov/files/zip/2026-midyear-final-model-software-python.zip ; 2027 -> https://www.cms.gov/files/zip/2027-initial-model-software-python.zip . Note 2026 is the MIDYEAR FINAL release while 2027 is the INITIAL release. |
sha256_content_hash | string | SHA-256 content hash of the ingested source artifact (string) — provenance/dedup fingerprint of the bronze file, identical for all rows from the same publication. |
bronze_publication_id | string | Identifier of the bronze ingestion publication this row came from (string). Only 2 values: hcc_all_2026_66d75bf7, hcc_all_2027_f3b3955d. Maps 1:1 to rate_year/source_url. Serves as the de-facto snapshot key (each grain key appears under exactly ONE publication — 0 keys span both). |
asserted_at | timestamp | Pipeline load/assertion timestamp in UTC (timestamp) — when the silver row was written, NOT a CMS publication date. Both publications loaded 2026-05-18 (2026 batch ~18:54, 2027 batch ~18:58); only ~13-14 distinct micro-timestamps per publication (batched write). Use rate_year, not this, for the effective period. |
parser_artifact_hash | string | Hash identifying the parser code/artifact version that produced these rows (string). Single value 'e10d366596d1c801' across all 8805 rows — both years parsed by the same parser build. Lineage/reproducibility field. |
Query it
describe_data_source(source_fqn="medicare_silver.dim_hcc_coefficients") # the card, live query_substrate(sql="SELECT * FROM medicare_silver.dim_hcc_coefficients WHERE rate_year = '<value>' AND model_version = '<value>' AND variable = '<value>' AND segment = '<value>' LIMIT 100")
| Item | Value |
|---|---|
| Typed tools that read it | none; raw SQL |
| Identity key | rate_year |
| Join | how_to_join(source_fqn="medicare_silver.dim_hcc_coefficients") |
| Raw door | Athena (read-only via query_substrate): medicare_silver.dim_hcc_coefficients |
This page as markdown: /docs-md/data/medicare_silver_dim_hcc_coefficients.md · every page in one file: /llms-full.txt