Contractor AI · modelos para analizar contratos públicos
Dos piezas para revisar contratos públicos de América Latina fuera de la plataforma:
| Carpeta | Qué es | ¿Analiza un contrato nuevo por sí sola? |
|---|---|---|
analyzer.py + reference.json |
Modelo de referencia estadístico de 10 países (mediana + MAD sobre el logaritmo del monto). El mismo cálculo que usa la página «Analizar contratos» de Contractor AI. | Sí. Solo Python estándar, sin internet. |
bert-xgboost/ |
El modelo base original de Daniel Duque Lozano: un XGBoost que predice el valor de un contrato a partir de la descripción (vía BERT) y de campos OCDS. Entrenado con contratos de servicios de Paraguay. | No, falta la red BERT ajustada (ver abajo). |
Países: Paraguay, Colombia, Costa Rica, República Dominicana, Perú, El Salvador, Brasil, Uruguay, Chile y Guatemala.
Pruébalo sin instalar nada en el analizador en línea: ElDoctor/contractor-ai-analizador.
Uso rápido
pip install huggingface_hub
python -c "from huggingface_hub import snapshot_download; print(snapshot_download('ElDoctor/contractor-ai-latam'))"
cd <carpeta que imprimió>
python analyzer.py --country GT --amount 89500
python analyzer.py --country PY --amount 950000000 --buyer "municipalidad de asuncion"
python analyzer.py --list CL # categorías y compradores disponibles
from analyzer import Analyzer
r = Analyzer().compare("DO", 265000) # moneda principal del país por defecto
print(r.verdict, r.reference_group, round(r.deviation_pct))
Cómo decide
- Elige el grupo de referencia más específico con al menos 8 contratos: mismo comprador, si no misma categoría, si no el país completo (siempre en la misma moneda).
- Calcula el z-score modificado de Iglewicz y Hoaglin sobre
log(monto):0.6745 · (x − mediana) / MAD. - Revisa también las cercas de Tukey:
[Q1 − 1,5·IQR, Q3 + 1,5·IQR]. - Veredicto: alta si |z| > 5, revisar si |z| > 3,5 o el monto queda fuera de las cercas, normal en otro caso.
reference.json contiene solo agregados (mediana, MAD, cuartiles y tamaño de cada grupo) y el nombre público del comprador. No contiene ningún contrato individual. Se regenera con backend/scripts/export_reference_model.py del repositorio.
El modelo base de Daniel Duque (bert-xgboost/)
- Arquitectura:
bert-base-multilingual-casedlee la descripción presupuestaria, y una cabeza densa (768 → 15000 → 15000 → 1500) produce 1500 rasgos. A esos rasgos se suman 54 columnas one-hot de campos OCDS (criterio de adjudicación, estado, número de oferentes, método de envío, categoría detallada, moneda…). XGBoost (reg:pseudohubererror, 1351 árboles) predice el valor en millones de USD constantes. - Datos: licitaciones de servicios de Paraguay (DNCP, API OCDS v3), montos llevados a USD y ajustados por CPI.
- Archivos:
model.ubj(formato nativo de XGBoost, sin pickle) yfeature_names.jsoncon las 1554 columnas en orden. - Limitación importante: los pesos de la cabeza BERT ajustada (
primero.pt) no forman parte de esta publicación. Sin ellos no se pueden calcular los 1500 rasgos de texto, así que este XGBoost sirve para reproducir y auditar el trabajo original, no para puntuar contratos nuevos. Para analizar un contrato hoy, usaanalyzer.py. - Basado en ofiscal/contract-transparency.
Limitaciones y uso responsable
- Un veredicto «revisar» o «alta» es una señal para mirar más de cerca, nunca una acusación de corrupción. Hay compras legítimamente atípicas (urgencias, obras únicas, errores de carga en el portal).
- Cada país publica distinto: muestras de distinto tamaño y período (ver la sección «Datos de los datos» de la plataforma). Perú tiene muy pocos contratos.
- Los montos están en moneda local y no se comparan entre países.
Cita
Equipo Contractor AI (2026). Contractor AI: detección de anomalías de precio en contratación pública de 10 países de América Latina. Modelo base: Daniel Duque Lozano.
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support