Hearing Index

Methodology

Frozen build 2026-09-07. Formulas, versions, null rules, and limitations below come directly from the build artifact.

Methods

M1_dominance/v1

Canonical SoundScore is parsed from the product-card headline with (\d\.\d)HearAdvisor SoundScore. Eligible rows have a canonical SoundScore, a non-null brand-pair price, and verified=true. B dominates A when price(B)<=price(A), canonical SoundScore(B)>=canonical SoundScore(A), and at least one inequality is strict. Pick the cheapest dominator; ties use higher canonical SoundScore then lexical id. gap_usd=price(A)-price(B). The top-10 leaderboard, Initial/Tuned sub-metrics, and soundscore_consistent are informational cross-checks only.

M2_evidence_tier/v1

T1=De Novo plus own clinical; T2=510(k) plus own clinical; T3=510(k) relying on predicate; T4=no premarket submission required under the row's regulatory_path and no public clinical data found; T5=unresolved mapping, missing joined submission, or missing trace/none confidence without an explicit joined submission where the code implies premarket review. Jabra rows rely on predicate clinical evidence and report own bench/usability testing.

M3_risk_flags/v1

Continuity RED for wind-down/dead/ABC/administration or discontinued, GREEN when known otherwise, GRAY when unknown. Model-level software data are joined by app_store_id. Software RED for >730 update days or >365 with rating<3.0; AMBER for 180<days<=365 or rating<2.5 with >=30 ratings; GREEN otherwise; GRAY only when an app is not applicable. Missing applicable app data are unknown with risk_confidence=partial. Rating rules require >=30 ratings. Safety is a MAUDE brand-query count, never a rate.

M4_tco/v1

low=brand pair price + 36*required monthly subscription + charger when excluded and priced. high=low+3*(domes+wax guards+batteries)+3*optional care plan. Unknown batteries for non-rechargeable models use 36.4 USD/year. A=all nine ownership disclosures present; B=at least one cost disclosure beyond price; C=price-only and high=price*1.21 with imputed_median_uplift. Unknown optional components are not silently added for B. tco_per_point=low/SoundScore.

M5_price_history/v1

Count non-null current and Wayback observations; min/max span retained observations and current is the chronologically latest retained observation. Archive observations are noisy inputs and do not create editorial claims. All Jabra extracted values below 200 USD are excluded as parser noise.

M7_disclosure_completeness/v1

non-null count across the nine ownership fields divided by 9; no semantic zero-fill is used.

Fields: return_window_days, warranty_months, optional_care_plan_usd, domes_usd_year, wax_guards_usd_year, batteries_usd_year, charger_usd, subscription_usd_month, professional_fitting_usd

M8_orphan_risk/v1

true when app_required_for_daily_use is true and continuity or software is RED. app_required_for_daily_use=true for non-Apple self-fitting rows with app=true; Apple HAF is not applicable; all other rows remain unknown.

M9_return_vs_support/v1

warranty_intake_end - (build_date + return_window_days), in calendar days. LXE dates and local-functionality wording are read directly from the frozen row fields.

Null rules

model_level_unavailable_brand_proxy_used
Only a brand-level proxy was available; no model-level value is asserted.
no_premarket_submission_required
The published regulatory path requires no premarket submission; no model-linked submission is inferred.
not_applicable
The field or calculation does not apply to this model.
not_found_after_search
The frozen research pass did not find the value or mapping.
not_published_by_brand
The frozen brand material does not publish the value.
not_scored_by_lab
No cited laboratory score exists for the model in the frozen input.
parser_failed
A frozen parser observation exists but did not yield a reliable value.
pending_snapshot
A channel or price snapshot is not present in the frozen inputs.

Known limitations

Assumptions

Download methodology JSON · Data dictionary