A lightweight model that suggests CPV divisions from a procurement notice title, project
name, and summary. It combines word- and character-level TF-IDF features with 45 linear
logistic classifiers. Version 2 calibrates probabilities and learns a separate decision
threshold for each division.
Training uses notices published through 2022. The year 2023 is reserved for calibration
and threshold selection, while 2024 remains a held-out test set.
The model was trained on 606,309 notices with fixed seed
20260817. Per-division metrics and checksums are available in metrics.json.
1from inference import CPVDivisionClassifier
2
3model = CPVDivisionClassifier("model.joblib")
4print(model.predict(["Mantenimiento y desarrollo de aplicaciones municipales"]))
The model learns from Spanish administrative text published on the national public
procurement platform through December 2024. It does not replace the legally assigned CPV
classification. Rare divisions carry greater uncertainty. It must not be used to infer
fraud, illegality, or responsibility.