Methodology / Assumptions
Assumptions register
Every scalar constant and interpretive choice in the scoring pipeline, in one place. Each row states the value, what it governs, the direction of its bias, and where it lives in code. This register is auto-generated from src/config/scoring-constants.ts— the single source of truth shared by the Rust processor, Node build scripts, and browser scoring code.
How to read this table
Bias vocabulary
Every assumption is tagged with its direction of bias, following the Australian Zoning Atlas convention:
Candour
Assumptions that cut the other way
The master principle says every ambiguous call resolves in the network's favour. Two assumptions run the other way and are written up explicitly so they are not hidden:
G-NAF occupancy lead
G-NAF addresses register around property titling, typically a few months before residents move in. This means growth-corridor population registers slightly early, which slightly favours our argument (unserved areas show as populated sooner), not the network. This is the smaller error versus the 5-year Census lag it replaced and is quantified in the population refresh spec. The magnitude is small and stated.
League-table eligibility gates
Requiring 3 stops, 5,000 catchment population, and 6 weekday trips before a suburb or route can appear in a league table favours the network by excluding the very worst-served phantom cases from rankings. Excluded localities are the opposite of well-served — a 2-stop suburb with a flag stop is not "almost on the list", it is barely scored at all. The eligibility gates are stated alongside every ranking.
| Constant | Value | Governs | Bias | Source |
|---|---|---|---|---|
HEADWAY_HALF_SATURATION | 28 | Half-saturation wait in minutes: wait at which headway_score = 50. | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts |
HEADWAY_EXPONENT | 2.2 | Headway curve exponent (power-law steepness). | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts |
FREQ_HEADWAY_WEIGHT | 0.6 | Headway / span / reliability split within the frequency key. | one-sided toward the network | scoring-constants.ts |
FREQ_SPAN_WEIGHT | 0.3 | one-sided toward the network | scoring-constants.ts | |
FREQ_RELIABILITY_WEIGHT | 0.1 | one-sided toward the network | scoring-constants.ts | |
HEADWAY_PEAK_WEIGHT | 0.6 | Peak / off-peak / weekend split within the headway score. | one-sided toward the network | scoring-constants.ts |
HEADWAY_OFFPEAK_WEIGHT | 0.25 | one-sided toward the network | scoring-constants.ts | |
HEADWAY_WEEKEND_WEIGHT | 0.15 | one-sided toward the network | scoring-constants.ts | |
SPAN_MIDPOINT | 12 | Midpoint of the service-span logistic curve (span_hours at which hours_score = 50). | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts |
SPAN_SCALE | 4.329 | Scale parameter of the service-span logistic curve. | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts |
RELIABILITY_EXPONENT | 0.663 | Exponent for the days-of-week reliability curve: reliability = 100 * (active_days/7)^exponent. | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts |
COV_NETWORK_WEIGHT | 0.7 | Network / local split within the coverage key (before intermodal bonus). | one-sided toward the network | scoring-constants.ts |
COV_LOCAL_WEIGHT | 0.3 | one-sided toward the network | scoring-constants.ts | |
COV_HUB_WEIGHT | 0.5 | Network sub-weights: hub reachability / orbital directness / CBD access. | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts |
COV_ORBITAL_WEIGHT | 0.3 | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts | |
COV_CBD_WEIGHT | 0.2 | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts | |
COV_WALK_WEIGHT | 0.5 | Local sub-weights: walk catchment / feeder / active transport. | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts |
COV_FEEDER_WEIGHT | 0.3 | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts | |
COV_ACTIVE_WEIGHT | 0.2 | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts | |
INTERMODAL_BONUS_CAP | 20 | Maximum intermodal bonus points. | one-sided toward the network | scoring-constants.ts |
HUB_SCORE_SUPER | 100 | Hub score ladder: super hub, city loop / major hub, route into city, other. | one-sided toward the network | scoring-constants.ts |
HUB_SCORE_MAJOR_MIN | 85 | one-sided toward the network | scoring-constants.ts | |
HUB_SCORE_MAJOR_MAX | 95 | one-sided toward the network | scoring-constants.ts | |
HUB_SCORE_CITY_ROUTE | 65 | one-sided toward the network | scoring-constants.ts | |
HUB_SCORE_OTHER | 40 | one-sided toward the network | scoring-constants.ts | |
PENALTY_FLOOR | 0.5 | Floor of the penalty multiplier (never goes below this). | one-sided toward the network | scoring-constants.ts |
PENALTY_MIDPOINT | 35 | Midpoint of the penalty logistic curve (trigger_score at which multiplier = 0.75). | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts |
PENALTY_SLOPE | 12 | Slope (steepness) of the penalty logistic curve. | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts |
VIABILITY_THRESHOLD | 50 | A route is "viable" if its best stop scores above this. | one-sided toward the network | scoring-constants.ts |
BEST_VIABLE_WEIGHT | 0.7 | Weight of the best viable route in the address score. | one-sided toward the network | scoring-constants.ts |
DIVERSITY_WEIGHT | 0.3 | Weight of the diversity bonus in the address score. | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts |
DIVERSITY_BREAKPOINTS | [0, 1, 2, 3, 4, 5] | Diversity bonus breakpoints: quality-weighted route count → bonus. | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts |
DIVERSITY_BONUS_VALUES | [0, 20, 50, 70, 85, 100] | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts | |
NO_VIABLE_CAP | 49 | Cap for address score when no viable route exists. | one-sided toward the network | scoring-constants.ts |
GRID_CELL_SIZE_M | 250 | Grid cell size in metres. | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts |
CATCHMENT_RADIUS_M | 800 | Walking catchment radius in metres. | one-sided toward the network | scoring-constants.ts |
REACH_THRESHOLD | 0.4 | Minimum share of dwellings that must reach a viable route for verdict purposes. | diagnostic | scoring-constants.ts |
MIN_GRID_CELLS | 3 | Minimum number of populated grid cells to use grid scoring. | diagnostic | scoring-constants.ts |
RADIUS_400_M | 400 | Walk radii in metres. | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts |
RADIUS_800_M | 800 | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts | |
RADIUS_1500_M | 1500 | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts | |
INTERCHANGE_RADIUS_M | 150 | Interchange radius in metres. | one-sided toward the network | scoring-constants.ts |
ROUTE_WEIGHT_FREQUENCY | 0.45 | one-sided toward the network | scoring-constants.ts | |
ROUTE_WEIGHT_CATCHMENT | 0.25 | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts | |
ROUTE_WEIGHT_CONNECTIVITY | 0.2 | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts | |
ROUTE_WEIGHT_DIRECTNESS | 0.1 | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts | |
SCHOOL_SPECIAL_MIN_TRIPS | 6 | School-special detection gates. | one-sided toward the network | scoring-constants.ts |
SCHOOL_SPECIAL_MIN_DAYS | 4 | one-sided toward the network | scoring-constants.ts | |
DIRECTNESS_GOOD_RATIO | 1.2 | Directness score breakpoints: circuity ratio. | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts |
DIRECTNESS_POOR_RATIO | 2.5 | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts | |
CONNECTIVITY_HEADWAY_GATE | 60 | Connectivity: minimum headway score to count as a quality interchange. | one-sided toward the network | scoring-constants.ts |
LEAGUE_TABLE_MIN_STOPS | 3 | Minimum stops for a suburb to appear in the league table. | one-sided toward the network | scoring-constants.ts |
LEAGUE_TABLE_MIN_CATCHMENT_POPULATION | 5000 | Minimum catchment population for a route to appear in a league table. | one-sided toward the network | scoring-constants.ts |
LEAGUE_TABLE_MIN_WEEKDAY_TRIPS | 6 | Minimum weekday trips for a route to appear in a league table. | one-sided toward the network | scoring-constants.ts |
PLAN_PEAK_HEADWAY_MIN | 10 | one-sided toward the network | scoring-constants.ts | |
PLAN_OFFPEAK_HEADWAY_MIN | 15 | one-sided toward the network | scoring-constants.ts | |
PLAN_SPAN_START_HOUR | 4 | Declared policy: start of service span. | one-sided toward the network | scoring-constants.ts |
PLAN_SPAN_END_HOUR | 24 | Declared policy: end of service span. | one-sided toward the network | scoring-constants.ts |
PLAN_COST_PER_KM | 6.5 | Assumed bus operating cost per service km. | one-sided toward the argument | scoring-constants.ts |
PLAN_COV_400_WEIGHT | 1 | Coverage-value weights: 400m/800m/POI. | one-sided toward the network | scoring-constants.ts |
PLAN_COV_800_WEIGHT | 0.4 | one-sided toward the network | scoring-constants.ts | |
PLAN_POI_WEIGHT | 400 | one-sided toward the network | scoring-constants.ts | |
PLAN_STOP_SPACING_M | 400 | Stop spacing for proposed routes. | one-sided toward the network | scoring-constants.ts |
CAR_BETA | 0.05 | Gravity-decay constant (BETA) — placeholder, not yet calibrated. | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts |
CAR_CUMULATIVE_WINDOW_MIN | 45 | Cumulative accessibility time window in minutes. | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts |
CAR_BAND_COMPETITIVE | 1.5 | Car-competitiveness ratio band edges. | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts |
CAR_BAND_TOLERABLE | 2 | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts | |
CAR_BAND_POOR | 3 | neutral / midpoint convention, swept bidirectionally | scoring-constants.ts | |
BAND_GOOD_MIN | 85 | diagnostic | scoring-constants.ts | |
BAND_DECENT_MIN | 70 | diagnostic | scoring-constants.ts | |
BAND_PATCHY_MIN | 50 | diagnostic | scoring-constants.ts | |
BAND_POOR_MIN | 30 | diagnostic | scoring-constants.ts | |
BAND_STRANDED_MIN | 0 | diagnostic | scoring-constants.ts | |
ROUTE_CATCHMENT_RADIUS_M | 400 | one-sided toward the network | scoring-constants.ts | |
ROUTE_CONNECTIVITY_RADIUS_M | 150 | one-sided toward the network | scoring-constants.ts |
Total: 75 constants. Every constant in scoring-constants.ts is represented above; the CI build will fail if any are missing. The Code & mechanics page shows how each constant feeds into the scoring formulas.
Keep reading