Falsehoods programmers believe about geocoded precision and frontages
"Close enough" is a statement about your use case, not about the coordinate. A geocode that is correct for statistical aggregation may be catastrophically wrong for emergency dispatch. And the coordinate itself answers a question — "the front door" — that nobody bothered to define.
Falsehoods
"An address has one correct coordinate."
Every address has multiple correct coordinates, depending on what you mean by "the address":
| What you mean | The coordinate | PrecisionprecisionOf the spans the model labeled as a given tag, the fraction it got right. High precision means few false positives. Paired with recall to compute F1. |
|---|---|---|
| The public entrance | StreetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels.-facing door | Sub-meter |
| The delivery entrance | Rear loading dock, side door | Sub-meter, possibly different streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. |
| The package drop-off | Mailroom, front desk, lobby | Within the building, possibly different floor |
| The emergency entrance | Clearly marked, accessible, fire department key box | Sub-meter |
| The parcelparcelA property polygon or record carrying a situs (site) address and often a separate owner mailing address. County GIS parcel aggregations are a training source for address-point variety and situs-vs-owner divergence. centroid | Tax assessor's coordinate for the land parcelparcelA property polygon or record carrying a situs (site) address and often a separate owner mailing address. County GIS parcel aggregations are a training source for address-point variety and situs-vs-owner divergence. | Often the geometric center of the lot, not the building |
| The building centroid | Geometric center of the building footprint | If the building is at the back of the lot, off by 30+ meters from the streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. |
| The streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. frontage point | Where the driveway meets the road | Off by 10-100 meters from the building |
| The rooftoprooftopGeocoding precision at the building or parcel level — coordinates within a few metres — the highest tier of the geocode cascade. Sourced from address-point and situs data. | The center of the building's roof | Same as building centroid, different elevation |
| The mailbox | Where the postal carrier delivers | May be at the curb, on the house, or at a cluster box down the streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. |
None of these is "the coordinate." Each is correct for a specific purpose. A geocoder that returns one coordinate is making an implicit choice about which purpose it serves — and that choice may be wrong for the consumer's use case.
USPS delivery to a rural address: the mailbox is at the road, 200 meters from the house. The "correct" geocode for the postal carrier is the mailbox. The "correct" geocode for a ride-share driver is the house. The "correct" geocode for the tax assessor is the parcelparcelA property polygon or record carrying a situs (site) address and often a separate owner mailing address. County GIS parcel aggregations are a training source for address-point variety and situs-vs-owner divergence. centroid. Three different correct answers for the same address.
"Close enough is close enough for all use cases."
"Close enough" depends on what you're doing:
| Use case | Required precisionprecisionOf the spans the model labeled as a given tag, the fraction it got right. High precision means few false positives. Paired with recall to compute F1. | Why |
|---|---|---|
| Statistical aggregation (census, market analysis) | Block group (~250m) | You're counting people, not finding them |
| Regional routing (which warehouse?) | CitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy.-level (~5km) | The truck is going to the right metro area |
| Delivery routing (which truck?) | StreetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. segmentsegmentA punctuation-bounded chunk of the normalized input — the comma-separated parts of 'Portland, OR' — used to give downstream stages structural context. (~50m) | The driver needs the right block |
| Last-mile delivery (which door?) | Building entrance (~5m) | The driver needs the right building |
| Emergency dispatch (which entrance?) | Specific door (~1m) | Seconds matter, wrong entrance kills |
| Utility service (which meter?) | Specific wall (~0.5m) | The gas shutoff is on the north wall |
A geocode that is "close enough" for market analysis (citylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy.-level) is wrong by 5 kilometers for last-mile delivery. A geocode that is "close enough" for delivery routing (streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. segmentsegmentA punctuation-bounded chunk of the normalized input — the comma-separated parts of 'Portland, OR' — used to give downstream stages structural context.) is wrong by 50 meters for emergency dispatch. The same coordinate can be useful for one consumer and useless for another.
A geocoder returns a coordinate at "95% confidence." The consumer assumes this means "within 5 meters of the front door." The geocoder meant "within the correct ZIP code." The consumer routes an ambulance to the ZIP centroid, 8 miles from the actual address.
"The geocode is the front door."
The "front door" is ambiguous even when the building has exactly one streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels.-facing entrance:
- A corner building has two streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels.-facing entrances. Which one is "the front door"?
- A building with a front entrance on a named streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. and a delivery entrance on an alley has two entrances. The address labelcomponent tagOne of the 33 labels in Mailwoman's address schema — street, locality, region, postcode, house_number, unit, po_box, country, venue, intersection, and others. Each parsed span carries exactly one component tag. says the streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. name. The delivery driver uses the alley.
- A strip mall has a dozen storefronts along a parking lot. Each store has a different entrance. A geocode for the strip mall's address places the pin at the center of the building — 50 meters from any actual store entrance.
- A hospital has a main entrance, an emergency entrance, a loading dock, and a staff entrance. The address labelcomponent tagOne of the 33 labels in Mailwoman's address schema — street, locality, region, postcode, house_number, unit, po_box, country, venue, intersection, and others. Each parsed span carries exactly one component tag. is the same for all four. A geocode that returns "the front door" for the hospital places the pin at the main entrance. An ambulance routed to the main entrance instead of the emergency entrance loses minutes.
- A multi-building campus (university, corporate headquarters, hospital complex) has one mailing address and dozens of building entrances. "123 University Ave" geocodes to the campus entrance or the administration building. A delivery to "123 University Ave, Engineering Building" needs the engineering building's entrance, which is 500 meters from the campus entrance.
"The building entrance faces the street in the address."
A building at the corner of Main St and Elm St may have the address 123 Main St but the only public entrance is on Elm St. The address's streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. name is a labelcomponent tagOne of the 33 labels in Mailwoman's address schema — street, locality, region, postcode, house_number, unit, po_box, country, venue, intersection, and others. Each parsed span carries exactly one component tag., not a statement about entrance orientation.
A building set back from the road with a long driveway may have the address on the road but the building 100 meters from it. The geocode at the road frontage is correct for the mailbox but wrong for the building.
A rear-access building in a dense urban area may have a streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. address on the front streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. but the delivery entrance in an alley behind the building. The geocode at the streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. frontage is wrong for delivery.
"The geocode's precision is the same as its accuracy."
A geocoder can return a coordinate with 8 decimal places (sub-millimeter precisionprecisionOf the spans the model labeled as a given tag, the fraction it got right. High precision means few false positives. Paired with recall to compute F1.) that is accurate to within 5 kilometers. The precisionprecisionOf the spans the model labeled as a given tag, the fraction it got right. High precision means few false positives. Paired with recall to compute F1. is a property of the floating-point representation. The accuracy is a property of the data source and algorithm. Consumers see "37.422387, -122.084084" and assume the coordinate is precise to the digit. It isn't.
Google's Geocoding API returns a location_type with each result: ROOFTOP, RANGE_INTERPOLATED, GEOMETRIC_CENTER, or APPROXIMATE. This is the right taxonomy — it tells the consumer the accuracy rather than the precisionprecisionOf the spans the model labeled as a given tag, the fraction it got right. High precision means few false positives. Paired with recall to compute F1.. Most geocoders don't expose this. They return a coordinate and a confidence score, and the consumer assumes the confidence score maps to spatial accuracy. It doesn't.
"Two geocodes at the same coordinate are the same address."
A shopping mall at one lat/lon has 100+ addresses. An office tower has one address per floor. A post office has hundreds of PO boxPO boxA numbered mailbox at a post office used as a delivery address instead of a physical street location. Mailwoman tags it as the po_box component; structurally the same family as a subpremise. addresses at one coordinate. Reverse-geocodinggeocodingThe process of converting an address into geographic coordinates (latitude and longitude). Mailwoman geocodes in a multi-tier cascade: exact address-point match → street interpolation → locality centroid. Each tier is progressively coarser but more widely available. the coordinate returns the mall, the tower, or the post office — not the specific store, suite, or box.
The reverse geocode is answering "what place is at this coordinate?" not "what addresses resolve to this coordinate?" The latter question requires a forward geocode of every candidate address and comparison of the resulting coordinates. The former question is what most geocoders actually answer.
How traditional geocoders handled these
libpostallibpostalAn open-source C address parser used by Pelias. Mailwoman's rule-based v0 and neural classifier supersede it. does not produce coordinates — it produces labeled text spansspanA contiguous range of characters or tokens in the input string, tagged with an address component type (street, locality, postcode, etc.). Parsed addresses are represented as collections of spans, possibly nested in a tree.. The precisionprecisionOf the spans the model labeled as a given tag, the fraction it got right. High precision means few false positives. Paired with recall to compute F1. question is downstream. This is architecturally correct: the parser's confidence is about labelcomponent tagOne of the 33 labels in Mailwoman's address schema — street, locality, region, postcode, house_number, unit, po_box, country, venue, intersection, and others. Each parsed span carries exactly one component tag. correctness, not spatial accuracy. The resolverresolverThe component that converts parsed address components (locality, region, postcode) into coordinates by looking them up in the gazetteer. The resolver ranks candidates by name match, population, and proximity, and returns the best-matching place with its centroid or polygon. owns the spatial question.
PeliasPeliasAn open-source geocoder, Mailwoman's spiritual predecessor. returns coordinates from Elasticsearch queries against gazetteergazetteerA geographical index that maps place names and postcodes to real-world coordinates. Mailwoman uses a custom-built Who's On First (WOF) SQLite database as its gazetteer — the 'atlas' half of the grammar/atlas architecture. data. The coordinate is the centroid of the matched record — a locality centroidlocality centroidThe representative centre point of a city or locality, used as a coarse coordinate when no exact address point is available — the coarsest tier of the geocode cascade. for citylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy.-level matches, a building centroid for address-level matches. PeliasPeliasAn open-source geocoder, Mailwoman's spiritual predecessor. does not distinguish between "building entrance" and "parcelparcelA property polygon or record carrying a situs (site) address and often a separate owner mailing address. County GIS parcel aggregations are a training source for address-point variety and situs-vs-owner divergence. centroid" coordinates because the underlying data (WOFWOF (Who's On First). An open-source gazetteer of places maintained by Mapzen/whosonfirst. Mailwoman builds a custom SQLite database from WOF GeoJSON repos, extended with postcode data, importance scores, and coincident-role relations., OSMOpenStreetMap (OSM). A community-curated global map database (ODbL-licensed) with addr:* tagged features and place hierarchies. A secondary corpus source and a source of street names., OpenAddressesOpenAddresses (OA). A global open aggregation of address points collected from many official sources. A primary source of component-supervised training data outside proprietary registries.) doesn't consistently modelneural classifierThe machine learning model at the core of Mailwoman's parser — a transformer encoder (~30M parameters) trained from scratch to do BIO token classification over addresses. It learns the 'grammar' of address formats; the gazetteer supplies the 'atlas.' that distinction.
Google's API returns location_type as described above. Google's Places API returns multiple types for each result (street_address, premise, subpremisesubpremiseA secondary address unit inside a single street address (apartment, suite, floor), typically a designator plus an identifier such as 'Apt 4B'. The same proposer family as PO box., point_of_interest, etc.) and a viewport bounding box. This gives the consumer enough metadata to distinguish "this coordinate is the building" from "this coordinate is the streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels." — but most consumers ignore the metadata and take the coordinate.
SmartyStreets / Melissa Data (commercial address verification) return multiple coordinates per address: a delivery point (mailbox), a rooftoprooftopGeocoding precision at the building or parcel level — coordinates within a few metres — the highest tier of the geocode cascade. Sourced from address-point and situs data. (building center), and sometimes a streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. frontage point (where the driveway meets the road). This is the right modelneural classifierThe machine learning model at the core of Mailwoman's parser — a transformer encoder (~30M parameters) trained from scratch to do BIO token classification over addresses. It learns the 'grammar' of address formats; the gazetteer supplies the 'atlas.' — the API returns the available coordinates and labelscomponent tagOne of the 33 labels in Mailwoman's address schema — street, locality, region, postcode, house_number, unit, po_box, country, venue, intersection, and others. Each parsed span carries exactly one component tag. what each one means. It costs money and covers US addresses only.
What the neural approach changes
The resolverresolverThe component that converts parsed address components (locality, region, postcode) into coordinates by looking them up in the gazetteer. The resolver ranks candidates by name match, population, and proximity, and returns the best-matching place with its centroid or polygon. (StagestageOne of the dataflow stages in the runtime pipeline (normalize, locale gate, kind classify, phrase group, token classify, sequence correct, reconcile, resolve). Distinct from tier (model vocabulary) and phase (plan milestone). 6) returns candidates with placetypesplacetypeThe Who's On First hierarchical classification of places: planet → continent → country → region → county → locality → neighbourhood. The resolver uses placetype to rank candidates — an exact locality match outranks a county-level match., not a single coordinate. A WOFWOF (Who's On First). An open-source gazetteer of places maintained by Mapzen/whosonfirst. Mailwoman builds a custom SQLite database from WOF GeoJSON repos, extended with postcode data, importance scores, and coincident-role relations. record has a placetype and optionally a bounding box. The resolverresolverThe component that converts parsed address components (locality, region, postcode) into coordinates by looking them up in the gazetteer. The resolver ranks candidates by name match, population, and proximity, and returns the best-matching place with its centroid or polygon. returns the placetypeplacetypeThe Who's On First hierarchical classification of places: planet → continent → country → region → county → locality → neighbourhood. The resolver uses placetype to rank candidates — an exact locality match outranks a county-level match. alongside the coordinate, so the downstream system knows whether it received a building-level coordinate or a locality centroidlocality centroidThe representative centre point of a city or locality, used as a coarse coordinate when no exact address point is available — the coarsest tier of the geocode cascade.. But WOFWOF (Who's On First). An open-source gazetteer of places maintained by Mapzen/whosonfirst. Mailwoman builds a custom SQLite database from WOF GeoJSON repos, extended with postcode data, importance scores, and coincident-role relations. does not distinguish between "building entrance" and "building centroid" — both are the same coordinate in WOFWOF (Who's On First). An open-source gazetteer of places maintained by Mapzen/whosonfirst. Mailwoman builds a custom SQLite database from WOF GeoJSON repos, extended with postcode data, importance scores, and coincident-role relations.'s data modelneural classifierThe machine learning model at the core of Mailwoman's parser — a transformer encoder (~30M parameters) trained from scratch to do BIO token classification over addresses. It learns the 'grammar' of address formats; the gazetteer supplies the 'atlas.'.
The resolverresolverThe component that converts parsed address components (locality, region, postcode) into coordinates by looking them up in the gazetteer. The resolver ranks candidates by name match, population, and proximity, and returns the best-matching place with its centroid or polygon. can return multiple candidates per address component. locality=Springfield returns 34 candidates, each with a different coordinate. The downstream system can choose the one that matches additional context (stateregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality., postcodepostcodeThe country-specific postal code (US ZIP, French code postal, etc.). Mailwoman handles postcode parsing entirely by rule classifier — a regex problem, not an ML one.) or surface all of them. The resolverresolverThe component that converts parsed address components (locality, region, postcode) into coordinates by looking them up in the gazetteer. The resolver ranks candidates by name match, population, and proximity, and returns the best-matching place with its centroid or polygon. does not pretend to know which Springfield when it doesn't.
Confidence is per-component, not spatial. The parser's confidence score is about the labelcomponent tagOne of the 33 labels in Mailwoman's address schema — street, locality, region, postcode, house_number, unit, po_box, country, venue, intersection, and others. Each parsed span carries exactly one component tag. — "I'm 95% sure this tokentokenOne word or subword in the tokenized input. For the neural classifier, tokens come from SentencePiece (subword units); for the rule classifiers, tokens are whitespace- and punctuation-separated words. is a localitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy." — not about the coordinate — "I'm 95% sure the localitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy. is within 500 meters of this point." The resolverresolverThe component that converts parsed address components (locality, region, postcode) into coordinates by looking them up in the gazetteer. The resolver ranks candidates by name match, population, and proximity, and returns the best-matching place with its centroid or polygon.'s score is about gazetteergazetteerA geographical index that maps place names and postcodes to real-world coordinates. Mailwoman uses a custom-built Who's On First (WOF) SQLite database as its gazetteer — the 'atlas' half of the grammar/atlas architecture. match quality, not spatial accuracy. Separating these into different signals (labelcomponent tagOne of the 33 labels in Mailwoman's address schema — street, locality, region, postcode, house_number, unit, po_box, country, venue, intersection, and others. Each parsed span carries exactly one component tag. confidence, resolverresolverThe component that converts parsed address components (locality, region, postcode) into coordinates by looking them up in the gazetteer. The resolver ranks candidates by name match, population, and proximity, and returns the best-matching place with its centroid or polygon. match quality, spatial precisionprecisionOf the spans the model labeled as a given tag, the fraction it got right. High precision means few false positives. Paired with recall to compute F1. metadata) is future work.
What Mailwoman still can't do
- Frontage-level coordinates. WOFWOF (Who's On First). An open-source gazetteer of places maintained by Mapzen/whosonfirst. Mailwoman builds a custom SQLite database from WOF GeoJSON repos, extended with postcode data, importance scores, and coincident-role relations. stores one coordinate per record — typically a centroid. Mailwoman's resolverresolverThe component that converts parsed address components (locality, region, postcode) into coordinates by looking them up in the gazetteer. The resolver ranks candidates by name match, population, and proximity, and returns the best-matching place with its centroid or polygon. returns that coordinate. Multiple coordinates per address (entrance, delivery, parcelparcelA property polygon or record carrying a situs (site) address and often a separate owner mailing address. County GIS parcel aggregations are a training source for address-point variety and situs-vs-owner divergence. centroid) require a gazetteergazetteerA geographical index that maps place names and postcodes to real-world coordinates. Mailwoman uses a custom-built Who's On First (WOF) SQLite database as its gazetteer — the 'atlas' half of the grammar/atlas architecture. that stores them and a resolverresolverThe component that converts parsed address components (locality, region, postcode) into coordinates by looking them up in the gazetteer. The resolver ranks candidates by name match, population, and proximity, and returns the best-matching place with its centroid or polygon. that exposes them. No open gazetteergazetteerA geographical index that maps place names and postcodes to real-world coordinates. Mailwoman uses a custom-built Who's On First (WOF) SQLite database as its gazetteer — the 'atlas' half of the grammar/atlas architecture. does this at global scale.
- PrecisionprecisionOf the spans the model labeled as a given tag, the fraction it got right. High precision means few false positives. Paired with recall to compute F1. metadata. The resolverresolverThe component that converts parsed address components (locality, region, postcode) into coordinates by looking them up in the gazetteer. The resolver ranks candidates by name match, population, and proximity, and returns the best-matching place with its centroid or polygon. does not return a
location_typeequivalent (ROOFTOProoftopGeocoding precision at the building or parcel level — coordinates within a few metres — the highest tier of the geocode cascade. Sourced from address-point and situs data. vs GEOMETRIC_CENTER vs APPROXIMATE). WOFWOF (Who's On First). An open-source gazetteer of places maintained by Mapzen/whosonfirst. Mailwoman builds a custom SQLite database from WOF GeoJSON repos, extended with postcode data, importance scores, and coincident-role relations. records don't consistently encode how the coordinate was derived. Adding a precisionprecisionOf the spans the model labeled as a given tag, the fraction it got right. High precision means few false positives. Paired with recall to compute F1. signal to the resolverresolverThe component that converts parsed address components (locality, region, postcode) into coordinates by looking them up in the gazetteer. The resolver ranks candidates by name match, population, and proximity, and returns the best-matching place with its centroid or polygon. output is planned but not yet implemented. - Reverse geocodinggeocodingThe process of converting an address into geographic coordinates (latitude and longitude). Mailwoman geocodes in a multi-tier cascade: exact address-point match → street interpolation → locality centroid. Each tier is progressively coarser but more widely available.. The resolverresolverThe component that converts parsed address components (locality, region, postcode) into coordinates by looking them up in the gazetteer. The resolver ranks candidates by name match, population, and proximity, and returns the best-matching place with its centroid or polygon. forward-geocodes — text → coordinate. Reverse geocodinggeocodingThe process of converting an address into geographic coordinates (latitude and longitude). Mailwoman geocodes in a multi-tier cascade: exact address-point match → street interpolation → locality centroid. Each tier is progressively coarser but more widely available. (coordinate → text) is a different problem with different infrastructure (spatial indexR*TreeSQLite's spatial index of bounding boxes, enabling fast geographic range and nearest-neighbour queries in the resolver., not text index). Mailwoman does not do reverse geocodinggeocodingThe process of converting an address into geographic coordinates (latitude and longitude). Mailwoman geocodes in a multi-tier cascade: exact address-point match → street interpolation → locality centroid. Each tier is progressively coarser but more widely available..
References
- Series overview: Falsehoods about addresses
- Michael Tandy's original catalogue
- Falsehoods about address shapes and dimensions — the spatial companion piece
- How can a building have two addresses? — why a building has multiple correct coordinates
- How mail delivery actually works — the delivery chain that consumes these coordinates