Multilabel CPV division classifier for Spanish public procurement

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.

It was trained from the hsilvosa/openplacsp.

Temporal evaluation

Training uses notices published through 2022. The year 2023 is reserved for calibration and threshold selection, while 2024 remains a held-out test set.

2024 test metric Base model Version 2
Recall@3 0.9140 0.9214
Micro-F1 0.5808 0.7276
Macro-F1 0.4803 0.6180
Brier score (lower is better) 0.0277 0.0105
Non-empty multilabel coverage 0.9933 0.8897

The model was trained on 606,309 notices with fixed seed 20260817. Per-division metrics and checksums are available in metrics.json.

Usage

from inference import CPVDivisionClassifier

model = CPVDivisionClassifier("model.joblib")
print(model.predict(["Mantenimiento y desarrollo de aplicaciones municipales"]))

The optional skops export is unavailable; see safe_export_error in metrics.json.

Limitations

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.

Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Dataset used to train hsilvosa/openplacsp-cpv-classifier