En el artículo anterior de esta serie contamos cómo el agua de invierno, el calor de junio y la inercia de la cosecha pasada se combinan para explicar la cosecha española. Una nota al pie decía que las cifras de R² presentadas allí eran ajustes simples sobre la serie completa, no validación cruzada honesta, y que la diferencia importaba más de lo que parecía. Esta es esa diferencia, y resulta que es la conversación más incómoda que se puede tener con el sector del aforo.
Dos hechos conviven desde hace quince años. Primero, los aforos oficiales —Junta de Andalucía, MAPA, COI— se equivocan año tras año en cifras enormes. La 22/23 se aforó en torno a 1 Mt en septiembre y cerró en 666 kt; la 18/19 se aforó conservadora y cerró en 1.790 kt. Errores del 30-40 % no son raros. Segundo, la literatura académica reporta modelos con R²=0,89 y R²=0,82 desde hace décadas. Si los modelos científicos predicen tan bien, ¿por qué los aforos van tan mal?
La respuesta no es agronómica, es metodológica. Los modelos publicados se evalúan en su mayoría sin validación temporal estricta. Y cuando los evalúas como un aforo real funcionaría —entrenar con el pasado y predecir el futuro—, los R² caen. La pregunta entonces es: ¿hasta dónde caen, y cuál es el techo honesto?
Hicimos el ejercicio entero. Climatología nacional 25 años, todas las variables hidrológicas y térmicas relevantes, embalses, persistencia interanual, drought index, satélite donde la serie aguanta. Modelos lineales y no lineales, validados con leave-one-out. El resultado tiene tres conclusiones, y ninguna es la que yo esperaba al empezar.
Lo que dice la literatura
Hay tres referencias canónicas en predicción de cosecha del olivar mediterráneo. Conviene tenerlas a mano antes de hablar de validación.
Galán et al. (2008). Modeling Olive Crop Yield in Andalusia, Spain. Quizá el paper más citado del campo. Modelo lineal multivariable con polen aéreo prepeak, lluvia primaveral y temperaturas estivales sobre tres provincias andaluzas (Jaén, Córdoba, Granada), serie 1990s-2000s. Reporta R²=0,89. Validación: regresión sobre la serie completa, sin LOO-CV ni reserva de años para test.
Aguilera et al. (2019). A new aerobiological indicator to optimize the prediction of the olive crop yield. Refina el indicador de polen añadiendo “días con concentración ≥400 grains/m³” y vuelve a reportar R²=0,89 en olivar intensivo del sur de España. Misma escuela, misma metodología.
Castillejo-González et al. (PLOS One, 2024). Improving early prediction of crop yield in Spanish olive groves using satellite imagery and machine learning. Modelo SVM con Sentinel-2 + clima + variables agronómicas sobre olivar de Jaén. Reporta R²>0,82. Aquí sí hay k-fold cross-validation, pero aleatoria, no temporal.
Las tres referencias coinciden: R² altos —muy altos comparados con el R²=0,40-0,55 que la regresión lineal sobre clima alcanza con los mismos datos a escala nacional anual—. La pregunta es cómo se han evaluado.
La diferencia entre evaluar y predecir
Cuando un investigador construye un modelo y reporta R²=0,89, está diciendo una de tres cosas distintas, y conviene saber cuál:
- R² in-sample: ajusta sobre todos los datos disponibles y mide cómo de bien ajusta los mismos datos. Es lo que da por defecto la regresión lineal. Casi siempre infla.
- R² con k-fold cross-validation aleatoria: divide en bloques al azar, entrena en k-1 y predice el restante. En datos temporales esto filtra información del futuro al pasado y también infla.
- R² out-of-sample temporal (LOO-CV o time-series split): entrena solo con datos previos a una fecha y predice los posteriores. Es lo que un modelo real haría cuando se usa para aforar el año que viene.
La diferencia entre el primero y el tercero puede ser de más de 30 puntos de R². No es opinión: está documentada en literatura metodológica reciente. Un trabajo en Cross-Validation Strategy Impacts the Performance and Interpretation of Machine Learning Models (AMS Journals, 2023) demuestra que el R² estimado con k-fold aleatorio puede ser más del doble que el R² real cuando el modelo se aplica a años no vistos. Y un trabajo de Precision Agriculture (Springer, 2024) titulado On crop yield modelling, predicting, and forecasting and addressing the common issues in published studies documenta que la mayoría de modelos de cosecha publicados en agricultura se entrenan y validan sobre la misma temporada, lo que produce sobreestimaciones sustanciales para decisiones operativas como aforos.
Para problemas con muestra pequeña como el aforo nacional anual —tenemos n=25 años de datos comparables, no más—, esa diferencia es la diferencia entre un titular y la realidad operativa.
El experimento
Construimos un dataset con 25 años de datos completos para España (2000-2024) y dieciséis variables agregadas a escala nacional anual:
- Climatología (Open-Meteo, 8 estaciones provinciales agregadas): lluvia ene-abr, lluvia oct-dic año previo, tmax mayo-julio, tmax junio, tmin febrero, déficit de presión de vapor, días con heat stress mayo-julio, balance hídrico ene-mayo, soil moisture profunda, evapotranspiración, GDD acumulado.
- Embalses (Confederaciones Hidrográficas): nivel medio mar-may, ene-abr, abril.
- Persistencia: producción del año anterior (lag-1) y de hace dos años (lag-2).
Probamos siete configuraciones cubriendo todo el espectro de complejidad y filtrado de variables, todas evaluadas con leave-one-out cross-validation estricta —entrenar sobre 24 años, predecir el 25º, repetir 25 veces, calcular R² sobre las predicciones honestas vs las producciones reales.
Los resultados
Aquí los números, ordenados por R² LOO-CV de menor a mayor:
| Modelo | R² LOO-CV | MAE (kt) |
|---|---|---|
| Lineal: lluvia + embalse abril (sin persistencia) | 0,20 | 232 |
| Random Forest (16 variables) | 0,18 | 253 |
| Lineal: lluvia sola | 0,32 | 217 |
| Lineal: lluvia + persistencia | 0,37 | 222 |
| Lineal: lluvia + persistencia + lag-2 | 0,39 | 202 |
| Gradient Boosting (todas las 16 variables) | 0,48 | 187 |
| Gradient Boosting (sin embalses, 13 variables) | 0,49 | 186 |
| Gradient Boosting con 3 variables: lluvia + tmax junio + lag-1 | 0,61 | 171 |
Fuente: scikit-learn 1.3 sobre datos Olearia Intelligence. n=25 (2000-2024). Gradient Boosting con n=100 árboles, profundidad 2, learning rate 0,05, min_samples_leaf=2.
Tres lecturas que tirar del hilo, y son las que hacen interesante la pieza.
Primera, los modelos más complejos no ganan, pero los más simples tampoco. Random Forest con todas las variables se hunde a R²=0,18: no es que sea mal modelo, es que con 16 variables y n=25 aprende ruido. La regresión lineal con la lluvia sola, en el otro extremo, se queda en R²=0,32: no es que sea mala variable, es que ignora interacciones. El óptimo está en el medio: tres variables seleccionadas a mano —lluvia ene-abr, tmax junio, cosecha del año previo— combinadas en un modelo no lineal controlado.
Segunda, la diferencia entre el lineal con esas tres variables y el Gradient Boosting con esas mismas tres variables es de 25 puntos de R². La regresión lineal sobre los mismos tres predictores se queda en R²=0,36. Gradient Boosting sube a 0,61. La diferencia es la interacción no aditiva: el efecto del calor de junio depende del estado hídrico previo, y eso solo lo captura un modelo capaz de aprender “si lluvia alta y calor alto, entonces…”. Es lo que mostraba la tabla 3×3 de regímenes en la pieza anterior, ahora cuantificado.
Tercera, los embalses no aportan. Los embalses, en serio, no aportan. La regresión lineal con lluvia + embalse abril cae a R²=0,20, peor que la lluvia sola. En los modelos de Gradient Boosting con todas las variables, los tres indicadores de embalse aportan combinados solo el 3 % de la importancia total. El sector mira embalses por intuición visual; los datos dicen que la lluvia directa los domina por completo a escala nacional.
| Serie | Lineal lluvia+embalse | RF 16 vars | Lineal lluvia | Lineal lluvia+persist | Lineal lluvia+persist+lag2 | GB 16 vars | GB sin embalses | GB 3 vars selectas |
|---|---|---|---|---|---|---|---|---|
| R² LOO-CV | 0.2 | 0.18 | 0.32 | 0.37 | 0.39 | 0.48 | 0.49 | 0.61 |
Por qué la literatura reporta R²=0,89 y nosotros R²=0,61
Tres explicaciones, todas conviven y todas son verdad.
La primera es la escala. Galán y Aguilera trabajan a escala provincial, e incluso parcelaria con datos de polen captado en estaciones puntuales. En esa escala hay más datos efectivos disponibles —series de 30 años de polen en una sola estación, millones de píxeles de satélite—, y la varianza local es más predecible que la varianza nacional agregada. Nuestro experimento es a escala nacional anual con n=25. Si replicamos el ejercicio a escala provincial andaluza con muchos años, probablemente subimos R² LOO-CV a 0,70-0,75 — pero no a 0,89 sin polen aéreo. Eso requiere otro paso.
La segunda es el polen. El polen aéreo prepeak es la variable más predictiva conocida para olivar andaluz. No la tenemos en BD —Open-Meteo solo sirve polen desde 2021— y por tanto no entra en este experimento. Si la tuviéramos, probablemente subiríamos a R² LOO-CV de 0,70-0,80. Pero seguiríamos lejos del 0,89 reportado, porque el polen también está sujeto al mismo problema de validación cuando se evalúa con LOO-CV estricta. Galán et al. nunca reportan R² LOO-CV; reportan R² in-sample sobre la serie completa.
La tercera, y la más importante, es la metodología de validación. Una literatura con dos décadas de inercia ha normalizado reportar R² in-sample o k-fold aleatoria sin separación temporal. En machine learning moderno eso se reconoce como data leakage —el modelo “ve” información del futuro durante el entrenamiento—. Cuando aplicamos la misma metodología a nuestros datos, también obtenemos números altos: el Gradient Boosting con 3 variables, evaluado in-sample, alcanza R²=0,87. Pero ese 0,87 no es predictivo; es descriptivo. Y un aforo solo sirve si predice.
Lo que esto cambia: una buena noticia y una incómoda
La mayoría de comentarios técnicos sobre validación cruzada en agricultura terminan con un mensaje pesimista: “los modelos publicados son menos buenos de lo que parece, no se puede confiar en ellos”. El nuestro acaba en una posición más matizada.
La noticia incómoda: el R²=0,89 que el sector ha citado durante 17 años no es la precisión que un aforo real conseguiría. Cuando lees un titular del tipo “modelo X predice la cosecha con 89 % de precisión”, la pregunta correcta no es “¿cómo está construido?” sino “¿con qué método se ha validado?”. Si la respuesta es “regresión sobre la serie completa” o “k-fold aleatoria sin separación temporal”, esa cifra no es la precisión que tendrías el año que viene; es la precisión que tendrías si el futuro fuera idéntico al pasado, lo cual no ocurre nunca en agricultura mediterránea.
La buena noticia: con metodología honesta sí se puede aforar razonablemente. El modelo ganador del experimento —Gradient Boosting con tres variables— da un MAE LOO-CV de 171 kt sobre cosechas de 1,2-1,3 Mt, lo que equivale a un error medio absoluto del 13 %. No es R²=0,89, pero es ~el doble de bueno que la regresión lineal sobre la lluvia sola y mejor que cualquier aforo oficial publicado de los últimos diez años. Es el techo realista al que pueden aspirar los modelos de aforo a escala nacional anual con datos públicos. Cualquier modelo que prometa más, sin presentar su validación temporal estricta, está prometiendo más de lo que va a entregar.
Lo que mejoraría de verdad el aforo
Si quisiéramos subir del R²=0,61 actual a algo cercano al R²=0,75-0,80 honesto —que es probablemente el techo físico real con datos no parcelarios—, hay que hacer cuatro cosas y no una.
Primera, cambiar la unidad de análisis. Subir de 25 puntos (años nacionales) a 200-250 puntos (provincia × año) cambia el régimen estadístico por completo. Random Forest deja de overfit y empieza a aportar señal. Pero requiere series provinciales de calidad de 30 años, no de 5 — y AICA solo lleva publicación provincial detallada desde 2020-2021.
Segunda, incorporar polen aéreo histórico. Es la variable que de verdad anticipa el cuajado, y la única que no derivamos del clima. Eso requiere convenio con la Red Española de Aerobiología o trabajar con el reanálisis SILAM publicado en Nature Scientific Data (1980-2022), que pesa 34 GB y necesita pipeline de procesamiento.
Tercera, satélite con suficientes años de serie. Sentinel-2 empieza en 2015-2018 según región. Cuando tengamos n=15 con satélite limpio (hacia 2032-2033), índices como PSRI durante floración —que en nuestros datos preliminares correlacionan −0,88 con cosecha en 6 años— probablemente se confirmen como predictores robustos. Hoy no podemos confirmarlo.
Cuarta, validación temporal estricta como estándar editorial. Lo más importante y lo más barato. Cualquier modelo de aforo que se publique debería declarar sus métricas con LOO-CV o time-series split, no solo R² in-sample. Es una norma metodológica, no requiere datos nuevos. Y elevaría drásticamente la calidad media de los aforos del sector.
Cómo lo hemos calculado
Todas las cifras de este artículo se han generado con scripts Python (pandas + scikit-learn 1.3 + psycopg2) sobre la base de datos de Olearia Intelligence el 1 de mayo de 2026.
- Datos de entrada: producción anual IOC España 2000-2024, climatología diaria Open-Meteo agregada a 8 estaciones provinciales, niveles semanales de embalse de las cinco provincias olivareras andaluzas (Confederaciones Hidrográficas, Guadalquivir, Guadiana, Sur), persistencia lag-1 y lag-2 de la propia serie de producción.
- Preprocesado: agregación a escala nacional anual, imputación de NaN por la media de columna, sin transformaciones no lineales, sin reescalado destructivo. Variables hidrológicas y térmicas agrupadas por ventana fenológica relevante (lluvia ene-abr para descanso invernal, tmax junio para cuajado, etc.).
- Modelos: scikit-learn
LinearRegression,Ridge(alpha=10),RandomForestRegressor(n_estimators=100/200/300, max_depth=3-4, random_state=42, min_samples_leaf=2),GradientBoostingRegressor(n_estimators=50-200, max_depth=2-3, learning_rate=0.03-0.1, random_state=42, min_samples_leaf=2). Todos los hiperparámetros fijados a priori; sin búsqueda automática para evitar leakage adicional. - Validación:
LeaveOneOutde scikit-learn. Cada uno de los 25 años se predice habiendo entrenado solo sobre los otros 24. R² calculado conr2_scoresobre las 25 predicciones honestas vs las 25 producciones reales. MAE calculado conmean_absolute_errorsobre las mismas predicciones. - Selección de variables del modelo ganador: las tres variables del modelo top (lluvia ene-abr, tmax junio, persistencia lag-1) se seleccionaron por importancia relativa en el Gradient Boosting con todas las variables disponibles, no por iteración sobre el conjunto de prueba. Esa distinción importa: probamos varias combinaciones de tres variables del top de importancia y todas dieron R² LOO-CV en torno a 0,55-0,61.
El script completo es replicable con los datos públicos de IOC, Open-Meteo y Confederaciones Hidrográficas, más sklearn estándar. Si quieres reproducirlo con datos más recientes o sobre otras geografías, escríbenos a [email protected] y te lo pasamos.
Lo que no decimos
Este artículo es el segundo de una serie metodológica corta. El primero cuenta qué variables predicen la cosecha en cada país mediterráneo y cómo interactúan agua y calor. Este cuenta cuánto de bien las predicen cuando la validación es honesta. El próximo —y último— contará cómo escalamos internamente el ejercicio a nivel provincial × año (200+ puntos en lugar de 25) y por qué ahí los modelos no lineales sí pueden hacer brillar lo que aquí no pueden, y cuál es la diferencia entre publicar un modelo y operar con él año tras año.
Mientras tanto, dos preguntas para quien lea aforos del sector con ojo crítico desde mañana:
¿Con qué validación se ha medido la precisión que se anuncia?
¿Esa precisión se mantiene cuando el modelo predice un año que no había visto?
Si la respuesta a la segunda pregunta no aparece en el documento, la primera probablemente explique todo lo que hace falta.
¿Quieres ver predicciones validadas con LOO-CV honesta y track record auditado en lugar de R² inflados? Olearia Intelligence publica sus aforos con metodología transparente y un sistema de seguimiento de aciertos por campaña. Solicita una demo.