# Pre-registro Entrega 1: predecir desiertas y baja de adjudicación

> **Documento SELLADO el 15-07-2026** con las cuatro decisiones resueltas por
> Alfonso ese mismo día. En el momento del sellado NO se ha corrido ningún
> modelo y NO se ha mirado el periodo de evaluación (2024) más allá de lo ya
> publicado en `pipeline-v0-informe.md`. Los umbrales fijados aquí se calcularon
> SOLO con el periodo de entrenamiento (desenlaces hasta 2023-12-31), para poder
> afirmar honestamente que se fijaron sin mirar el examen. El sello es el hash
> del commit de este fichero más su sello OTS (ver punto 8).
>
> Regla de oro del pre-registro: lo que aquí se fija NO se recalcula ni se ajusta
> después de ver resultados. Si una elección sale mal, se publica igual con su
> pero. Complementa `pipeline-v0-informe.md` (los números del dato), `bd-diseno.md`
> (el esquema) y `sondeo-datos.md` (origen, prior art y trampas).

## 1. La pregunta, en una frase

Antes de que se resuelva una licitación pública, y viendo solo lo que se sabe el
día que se publica, ¿podemos anticipar dos cosas: si va a quedar desierta, y
cuánto se va a rebajar el precio de adjudicación respecto al presupuesto? Y lo
más importante: ¿lo anticipamos mejor que una regla simple, y sabemos cuándo NO
lo sabemos?

## 2. El universo: qué expedientes entran y cuáles no

**Entran:** expedientes de los perfiles del contratante (sindicación 643 de
PLACSP), a grano de lote, tal y como los deja la base operativa descrita en
`bd-diseno.md` (474.092 expedientes, 631.715 lotes, 580.947 adjudicaciones).
La unidad de predicción es el **lote**, no el expediente: un tercio del volumen
son expedientes multi-lote y tratar cada expediente como una sola adjudicación
agregaría mal (informe v0, sección 4).

**No entran (exclusiones declaradas):**

- **Contratos menores.** Son otro dataset (sindicación 1143), sin baja
  competitiva real. No se mezclan (trampa 4 del sondeo).
- **Plataformas autonómicas agregadas.** Otro dataset, completitud desigual.
- **Modificaciones y prórrogas.** Alteran el importe ejecutado, no el adjudicado.
  Para la baja se usa el importe de **adjudicación**, no el ejecutado (trampa 7).
- **Expedientes anulados (tombstones `at:deleted-entry`).** Ya descartados en el
  pipeline (45.017 en total).
- **Lotes sin desenlace conocido** en el momento del corte (publicados pero sin
  resolver): no tienen etiqueta, no pueden puntuarse.

**Tratamiento de lotes:** cada lote es una fila con su propio presupuesto, CPV y
desenlace. Un expediente multi-lote genera varias predicciones independientes.

**Alcance declarado (se dice en la demo, sin letra pequeña):** esto NO es el 100%
del gasto público. Son los perfiles del contratante sin menores. Es una porción
grande y representativa, pero es una porción. Decirlo es política de la casa.

## 3. El corte temporal y la regla anti-fuga

Este es el corazón de la credibilidad. El feed de PLACSP es acumulativo: un mismo
expediente reaparece cada vez que cambia de estado, y cae en el fichero del año
de su último snapshot, que puede ser posterior a su adjudicación real (limitación
2 del informe). Por eso **el corte NUNCA se hace por año de fichero.**

**Fecha de desenlace (la que define entrenamiento vs evaluación):**

- Para las **adjudicadas**: `fecha_adjudicacion`.
- Para las **desiertas**: `fecha_aviso` (la fecha del snapshot en que el
  expediente aparece ya resuelto como desierto). Las desiertas no tienen
  `fecha_adjudicacion` (se ha verificado: 0% la tienen, 100% tienen
  `fecha_aviso`), así que un corte ingenuo por fecha de adjudicación las
  excluiría por completo del entrenamiento. Este es un punto fino y se declara.

**Saneamiento de fechas antes de cortar:** hay fechas de adjudicación imposibles
en el dato crudo (se han visto valores en 2042). Toda fila con fecha de desenlace
fuera del rango plausible se descarta del cómputo de la etiqueta, nunca se
imputa (misma política que la baja: NULL, no cero falso).

**Entrenamiento:** todo lote cuyo desenlace ocurrió **el 31-12-2023 o antes.**
Con el criterio de arriba son unas 305.000 adjudicaciones más las desiertas
resueltas hasta esa fecha. Los umbrales de este documento se han calculado solo
con este conjunto.

**Evaluación (el examen):** lotes **publicados en 2024** cuyo desenlace también
se conoce en 2024: `fecha_publicacion` entre 2024-01-01 y 2024-12-31 con
desenlace conocido dentro de 2024. Decidido por Alfonso el 15-07-2026. La
alternativa (usar el feed 2024 completo, ~233.000 filas con resultado del
informe v0) se descartó porque mezcla expedientes publicados en años anteriores;
se acota por fecha de publicación real, por limpieza.

**La regla anti-fuga, en una frase que un no técnico entiende:** en el momento en
que el sistema predice sobre una licitación, solo puede usar lo que un observador
habría sabido ese día. En concreto:

- Del propio expediente: presupuesto, CPV, órgano, tipo de procedimiento, número
  de lotes, fechas de publicación. Nada del resultado.
- Del historial: solo estadísticas construidas con licitaciones **resueltas antes
  de la fecha de publicación** del expediente que se predice (la baja típica de
  ese CPV hasta la fecha, la tasa de desiertas de ese órgano hasta la fecha, etc.).
  Ningún agregado puede incluir el futuro ni el presente del propio caso.

## 4. Las dos predicciones, con su definición exacta de acierto

### 4a. ¿Desierta? (sí/no, con probabilidad calibrada)

**Qué se predice:** para cada lote, una probabilidad calibrada de quedar desierta
(`ResultCode` en {3, 6, 7}, ya normalizado en la bandera `desierta` de la base).
Tasa base de referencia: en 2024 fue **8,78%** (informe v0); decreciente desde
11,10% en 2022.

**Definición de acierto/fallo (fijada de antemano):** el sistema **señala** un
lote como "riesgo de desierta" cuando su probabilidad supera un umbral τ. τ se
fija en entrenamiento para alcanzar un objetivo de precisión declarado, y se
congela. Sobre el conjunto de 2024:

- **Cobertura (recall):** de todas las que quedaron desiertas, qué fracción
  señalamos.
- **Falsas alarmas:** de todas las que señalamos, qué fracción NO quedó desierta.
- **Precisión legible:** "de cada 10 licitaciones que el sistema marca como
  riesgo, cuántas quedaron realmente desiertas." Esta es la métrica que se enseña.
- **Calidad de la probabilidad, no solo del sí/no:** Brier score y una curva de
  calibración (si el sistema dice 30%, ¿de verdad un 30% quedan desiertas?), más
  el AUC como resumen de ordenación. La calibración es parte de lo que se publica,
  porque una probabilidad honesta vale más que un sí/no.

### 4b. La baja de adjudicación (en puntos porcentuales)

**Qué se predice:** para cada lote adjudicado, la baja esperada en puntos
porcentuales (`baja_pct` = cuánto baja el importe adjudicado respecto al
presupuesto). Saneada al rango plausible 0-100% (la cola cruda tiene outliers por
presupuestos ínfimos, limitación 1 del informe). No se imputa: si no es
computable, se abstiene.

**Los dos regímenes se declaran de antemano.** El ~30% de adjudicaciones cierran
con baja exactamente 0% (importe = presupuesto), típico de un solo licitador o
adjudicación a precio de licitación. El resto es competencia real con baja > 0. El
sistema predice la baja en puntos; se reportará el error por separado en los dos
regímenes para no esconder que "acertar el 0" es más fácil.

**Definición de acierto/fallo (fijada de antemano):** una predicción **acierta**
si cae dentro de una banda de `±B` puntos porcentuales de la baja real.

**B = 10 puntos porcentuales.** Decidido por Alfonso el 15-07-2026, con esta
justificación medida solo en entrenamiento: si uno predice la baja mediana
del sector (CPV a 2 dígitos) de cada lote, un baseline tonto, acierta dentro de
±10 pp el **64,8%** de las veces y el error absoluto mediano es **7,0 pp**. Con
±8 pp el baseline llega al 56,6%, con ±15 pp al 74,6%. Una banda de 10 pp es
exigente pero no imposible, y deja sitio claro para batir al baseline.

**Métricas de la baja:**

- **Error absoluto mediano** en puntos porcentuales (robusto a la cola larga;
  la media engañaría por el sesgo a la derecha).
- **% de aciertos dentro de la banda `±B`** (la métrica legible).
- Ambas, **por separado** en régimen baja-cero y régimen competencia-real.

### 4c. Abstención (cuándo el sistema dice "no lo sé")

Un sistema que sabe cuándo no sabe transmite más confianza (estrategia,
"casos de error visibles"). El sistema se **abstiene** cuando:

- El lote es de un sector (CPV) u órgano con muy poca o ninguna historia previa
  al corte (por debajo de un mínimo de casos que se fija en entrenamiento).
- El presupuesto es un outlier extremo (la zona donde la baja cruda se vuelve
  absurda, limitación 1).
- En la baja, cuando el modelo estima una incertidumbre por encima de un tope
  fijado.

**Banda objetivo de abstención: 10-20%** de los lotes. Decidido por Alfonso el
15-07-2026 (referencia interna: el piloto de tickets abstiene 16,7%). Sobre lo que NO
se abstiene, las métricas deben ser claramente mejores; sobre lo que se abstiene,
se publica cuántos son y por qué. Abstenerse del 90% para lucir métricas sería
trampa, y se declara ese límite.

## 5. Baselines honestos (la vara de medir)

Ganar aquí es la condición de éxito. No basta con un número bonito; hay que
batir a una regla simple que cualquiera podría aplicar sin modelo.

- **Desiertas:** tasa base de desiertas por división CPV cruzada con tipo de
  procedimiento (y/o por órgano), calculada solo con lo resuelto antes del corte.
  El modelo tiene que mejorar cobertura y precisión sobre esa tasa base.
- **Baja:** baja **mediana del CPV** (2 dígitos) del lote, calculada solo con lo
  resuelto antes del corte. Referencia medida en entrenamiento: error absoluto
  mediano 7,0 pp, 64,8% dentro de ±10 pp. Batir esto es la vara. (Bajas medianas
  por sector muy dispares ya en entrenamiento: construcción 8,8%, ingeniería
  20,6%, sanidad ~1%, ocio/cultura 0%: el baseline por sector ya captura mucho,
  y por eso es una vara honesta y no un hombre de paja.)

## 6. Qué se publica pase lo que pase

- **Todas** las métricas definidas arriba, salgan como salgan, incluidas las que
  queden por debajo del baseline.
- Los **fallos más gordos con su historia**: las 3-5 licitaciones donde más nos
  equivocamos (falsa alarma clamorosa, desierta que no vimos venir, baja muy
  mal estimada), con su ficha y una lectura honesta de por qué falló.
- Los **peros** (ver punto 9) y el alcance exacto del universo.
- La comparación explícita contra los baselines, gane o pierda el modelo.

## 7. Prior art citado y qué añadimos

Esto no es terreno virgen y decirlo es parte de la credibilidad (sondeo, f):

- **Manuel J. García Rodríguez et al., Universidad de Oviedo**: estimador de
  precio de adjudicación por ML sobre licitaciones españolas (= nuestra baja) y
  recomendador de licitadores. Hallazgo que citamos: más licitadores, más baja.
- **OIReScon**: Informe Anual de Supervisión, que analiza causas de las
  licitaciones desiertas. Referencia oficial para la parte de desiertas.

**Qué añadimos nosotros (el ángulo diferencial):** no el ML en sí, que ya está
publicado, sino el **protocolo de taparle el futuro**: corte temporal estricto
con regla anti-fuga explícita, la **desierta como predicción probabilística
calibrada** (no solo estimar el importe), y la **abstención** como parte del
sistema. Enseñamos la predicción sellada contra lo que de verdad pasó después.

## 8. Cómo se sella

- Este documento se congela con las decisiones resueltas, se hace **commit** y el
  **hash del commit** es el sello (mismo mecanismo que el pre-registro de los 9
  casos de la DD tecnológica).
- **Con OTS (OpenTimestamps).** Decidido por Alfonso el 15-07-2026: además del
  hash, sello OTS (prueba criptográfica anclada en Bitcoin de que el documento
  existía en esta fecha, sin depender de que nos crean), como en los sobres del
  piloto de coches.
- El orden es sagrado: **primero se sella, después se corre el modelo sobre 2024.**
  Ni una métrica del examen antes del sello.

## 9. Los peros, declarados de antemano

- **Cobertura:** perfiles del contratante sin menores. No es el 100% del gasto
  público.
- **Fecha de las desiertas:** se usa `fecha_aviso` como proxy del desenlace
  porque no hay fecha de adjudicación en las desiertas. Es lo mejor disponible y
  se declara.
- **Número de licitadores** solo consta en ~87% de las filas con resultado; el
  historial de competencia se construye con NULLs reales, sin imputar.
- **DIR3 del órgano ausente en ~25%:** la identidad del órgano cae a nombre
  normalizado en esos casos (robusto, no perfecto).
- **No prometemos causalidad.** Riesgo estimado y antecedentes, no certeza.
- El prior art de Oviedo ya demostró viabilidad del ML; lo nuestro es el
  protocolo verificable, no reivindicar un predictor nuevo.

---

### Decisiones resueltas (Alfonso, 15-07-2026)

1. **Banda de la baja B: ±10 pp** (el baseline acierta el 64,8% ahí; hay margen
   para batirlo sin ser blanda).
2. **Rango de evaluación: publicados en 2024 con desenlace en 2024**, por fecha
   de publicación real (no por feed).
3. **Banda objetivo de abstención: 10-20%.**
4. **Sellado con OTS además del hash del commit.**

Estas cuatro decisiones quedan congeladas para la Entrega 1. Lo aprendido servirá
para ajustar los parámetros de las entregas siguientes, nunca los de esta.
