How to choose a confidence threshold for geocoding results

Every geocoder returns a score, and many teams simply accept anything above a number they saw in a tutorial. That number only means something if you know what the score measures and what a wrong answer costs you. This guide shows how to read Addrova's confidence fields and how to set a cut-off from your own data.

The base URL https://api.addrova.eu is not live yet. Fields follow the API specification. [À VÉRIFIER : service ouvert, URL de base définitive.]

Three fields, three jobs

  • confidence (0 to 1) is the estimated probability that the result is correct at the stated precision.
  • confidence_calibrated tells you whether that number is a measured probability for this country and precision (true) or an uncalibrated heuristic (false). When it is false, do not show the number as a percentage.
  • confidence_level is high, medium or low. high exists only when the confidence is calibrated and at or above the country threshold (0.985 for France by default). Where nothing is calibrated, the best level you will see is medium.

So high is a statement Addrova stands behind; a raw number from an uncalibrated country is a ranking signal, not a probability.

What a threshold trades

Raising the threshold removes wrong answers and also removes right ones. Two numbers matter:

  • the share of addresses you accept (coverage);
  • among accepted addresses, the share that are wrong with high certainty (a confident false positive).

There is no free setting. The right cut-off depends on the cost of a wrong point against the cost of a manual review.

An honest example from our own tests

On the benchmark page, the same raw threshold of 0.76 gave two different results on two different French test sets. On the first, measured on 2026-10-19, it produced 13 confident false positives out of 871 accepted answers, 1.49 %, above the 1 % target we had set, and the verdict was PIVOT. On a second, fresh test set measured on 2026-10-20 it produced 2 out of 905, 0.22 %. Both numbers are published with their dates and limits, because a threshold is a property of the data it is tested on. Your data is not our test set: measure your own.

Set the threshold from a sample

  1. Take 200 to 500 addresses from your real data, not clean examples.
  2. Geocode them and check the accepted ones against a source you trust (a visit, a delivery scan, a reviewed subset).
  3. For each candidate threshold, count how many accepted answers are wrong.
  4. Pick the lowest threshold whose wrong-answer rate you can live with, and send everything below it to review.

Route results in code

import os
import requests

resp = requests.post(
    "https://api.addrova.eu/v1/geocode",
    headers={"X-API-Key": os.environ["ADDROVA_API_KEY"]},
    json={"q": "4 place d'Armes, Belfort", "country": "FR", "limit": 1},
    timeout=10,
)
resp.raise_for_status()
best = resp.json()["results"][0]

if best["confidence_level"] == "high":
    action = "accept"
elif best["confidence_level"] == "medium":
    action = "review"
else:
    action = "reject"

shown = f"{best['confidence']:.0%}" if best.get("confidence_calibrated") else "n/a"
print(action, best["precision"], shown, best["label"])

The last line shows the percentage only when the confidence is calibrated, as the specification asks.

  • Precision levels: what kind of point you received.
  • Repair: for typos, the repair endpoint returns a corrected address and its own confidence.