Keyword taxonomy with QA gates
The output: one reportable intent per keyword, parallel facets and a review queue, with publication of the full corpus held until the leakage and name gates are at zero.
- Skill areas
- Updated
- ·
Inputs
-
A keyword corpus from a research tool's export for one market, here the Finnish housing market.
-
A versioned rule set: term lists for the intents and the facets, and a written priority order.
-
Public reference data: place names from the national survey's data, and first names and surnames from the population register's public name lists.
-
A sample schedule for the gates: controlled samples of growing size before the full corpus.
Procedure
Model as a hybrid, not a tree
Every keyword gets one primary intent for reporting and facets alongside: brand, location, property type, content need and market role. Classification status and the review queue are fields of their own.
Extract signals before intent
A signal is an observation of what was found in the keyword; an intent is a conclusion about what it means. The split makes an error locatable: a missing signal, a signal too broad, a wrong interpretation, a wrong priority or a wrong status.
Apply the rules in a written order
Brands first as facets, then the strong functional intents, price before property type, broker, guides, and location and property type as facets. What remains gets a status: ambiguous, brand only or no match.
Enrich location as a facet only
A location match never promotes a row or changes intent, action bucket or confidence until the guards are accepted. A location alone does not make a keyword an opportunity.
Audit person names as diagnosis only
A person-name-shaped keyword that the location matcher accepted is flagged as a risk and sent to manual review. The name reference is never used to identify a person, to profile, to score, to remove automatically or to contact anyone.
Gate the corpus with growing samples
Every sample runs under the same constraints, and the single-row and batch classifiers must agree. Acceptance requires zero core leakage, zero person-name risk in the core, zero location-only core rows and an explainable review queue.
Hold the conclusions until the gates pass
No opportunity list is published before a full-corpus dry run passes the same gates. A decision is recorded at every gate.
Outputs and how to read them
-
One row per keyword: intent and confidence, all matched intents, facets, status, flags, rule version and a readable note.
-
A QA bundle: distributions, leakage counts and the name-risk rows in the review queue.
-
A decision record for every gate and for the hold that remains.
Failure modes
-
One rigid tree that multi-intent keywords do not fit.
-
Enrichment starts to score, and a location match promotes rows into the core.
-
A Finnish surname is read as a town, because many names are both.
-
The rules are tuned on the QA sample, and the sample stops measuring.
-
The batch classifier and the single-row classifier drift apart unnoticed.
Where it is used
In a taxonomy engine for Finnish housing-market keywords with a Rust location matcher and a batch classifier: the gates hold publication of conclusions until the full-corpus dry run passes them.