DEV Community

CaraComp
CaraComp

Posted on • Originally published at go.caracomp.com

That "99% Face Match" Flagging You? It's Not What You Think.

Why similarity scores are not the same as probabilities

For developers building in the computer vision and biometrics space, the "confidence score" is arguably the most misunderstood metric in our stack. We often ship APIs that return a float—0.99, 0.95, 0.88—and the end-user (often an investigator or insurance adjuster) interprets that as "99% certain this is the guy."

But as anyone who has worked with Siamese networks or Triplet Loss knows, that number isn't a probability of truth. It's a measurement of distance. Specifically, it is the Euclidean distance or cosine similarity between two high-dimensional vectors in an embedding space. The news that even "99% matches" can be false positives is a wake-up call for how we design our decision logic and UI.

The Threshold as a Hyperparameter for Policy

The core technical takeaway here is that a "match" is a policy choice, not an algorithmic fact. When we define a threshold—say, a Euclidean distance of 0.6—we are effectively setting the boundary for the False Acceptance Rate (FAR) and False Rejection Rate (FRR).

For a developer, this means the "slider" mentioned in the news is actually a critical hyperparameter. If you set it too high (permissive), you're flooding the investigator's workflow with noise. If you set it too low (strict), you're missing the person of interest because the lighting was off by three lumens. At CaraComp, we address this by providing solo investigators with enterprise-grade Euclidean distance analysis that keeps the comparison localized to the case. We aren't searching a billion-face database of web-scraped noise; we are comparing YOUR case photos, which significantly lowers the risk of the "arithmetic error" that occurs in massive datasets.

Environmental Vector Distortion

The technical reality is that lighting and head angle (pose) act as vector distortions. A photo taken in harsh sunlight versus one in a dim hallway can push the face signature further away in the embedding space than a photo of a completely different person taken in identical lighting.

As developers, this means our pre-processing pipelines are just as important as our inference engines. We have to account for:

  • Pose Normalization: If a person's head is rotated past 45 degrees, the vector loses its reliability.
  • Illumination Invariance: High-contrast shadows can be interpreted by the neural network as structural facial features.
  • Batch Consistency: Comparing one-to-one or one-to-many in a controlled environment is the only way to maintain the integrity of a "match" for professional use.

From "Black Box" to Court-Ready Comparison

The industry is moving away from "surveillance-style" scanning and toward "investigative comparison." For the developer, this changes the output requirements. It’s no longer enough to return a JSON object with a score. We need to generate reports that show the math—why did the system flag this? What was the distance?

CaraComp was built on the premise that a solo private investigator shouldn't need a $2,000/year enterprise contract or a degree in data science to get these results. We use the same Euclidean distance math used by top-tier agencies but package it for the person on the ground. It’s about giving a solo PI the power to do in seconds what used to take three hours of manual side-by-side comparison.

When we bridge the gap between "high-level math" and "accessible UI," we turn a confusing percentage into a verifiable piece of evidence.

What's your preferred "sweet spot" for distance thresholds when balancing precision and recall in biometric applications, and how do you communicate that trade-off to your non-technical users?

Top comments (0)