Saltar a contenido

Metodología — Estadística Ambiental

Describe el ciclo estadístico implementado, las decisiones de diseño y la relación con el repositorio origen boa-sarima-forecaster.


1. Ciclo estadístico completo

El repositorio implementa cuatro etapas encadenables e independientes:

Datos crudos
   ↓ io/loaders.py + io/validators.py
EDA → catálogo de variables + calidad + reporte HTML
   ↓ eda/variables.py + eda/quality.py + eda/profiling.py + eda/viz.py
Estadística descriptiva → resúmenes, correlaciones, STL, ACF
   ↓ descriptive/univariate.py + bivariate.py + temporal.py
Estadística inferencial → distribuciones, hipótesis, estacionariedad, tendencia
   ↓ inference/distributions.py + hypothesis.py + stationarity.py + trend.py + intervals.py
[Análisis espacial] → Kriging, Moran, GWR
   ↓ spatial/
Feature engineering → lags, calendario, exógenas, ENSO
   ↓ features/
Preprocesamiento → imputación, outliers, remuestreo
   ↓ preprocessing/
Modelos predictivos → ARIMA, SARIMA, SARIMAX, Prophet, XGBoost, RF, LSTM
   ↓ predictive/ + optimization/
Backtesting + comparación multi-criterio
   ↓ evaluation/
Reporte final HTML
   ↓ reporting/

2. Módulos y responsabilidades

2.1 Ingesta (io/)

Módulo Responsabilidad
loaders.py Lectura multiformato: CSV, Excel, Parquet, NetCDF, SHP/GPKG
validators.py Rangos de plausibilidad física para 30+ variables colombianas

2.2 EDA (eda/)

Módulo Responsabilidad
variables.py Tipificador automático: 7 tipos (continua, discreta, nominal, ordinal, temporal, espacial, texto)
quality.py MCAR/MAR/MNAR, gaps temporales, congelamiento de sensor, cross-checks
profiling.py Reporte HTML autocontenido + integración opcional ydata-profiling/sweetviz
viz.py 8 funciones estándar (series, faltantes, histograma, boxplot, correlación, estacional, multi-series, scatter)

2.3 Preprocesamiento (preprocessing/)

Módulo Responsabilidad
imputation.py 8 métodos: ffill, bfill, linear, mean, median, rolling_mean, Kalman, MICE
outliers.py IQR, z-score, modified z-score — solo flags por default (ADR-002)
resampling.py Remuestreo, alineación de frecuencias, timestamps faltantes

2.4 Descriptiva (descriptive/)

Módulo Responsabilidad
univariate.py Resumen completo con agrupación; tabla de frecuencias
bivariate.py Correlación (Pearson/Spearman/Kendall), contingencia, chi-cuadrado
temporal.py STL, ACF, PACF, rolling stats, resumen estacional

2.5 Inferencial (inference/)

Módulo Responsabilidad
distributions.py Normalidad (Shapiro-Wilk, KS, Anderson-Darling), ajuste a 6 distribuciones
hypothesis.py t-test Welch, Mann-Whitney, ANOVA, Kruskal-Wallis
stationarity.py ADF + KPSS con diagnóstico conjunto (ADR-004)
trend.py Mann-Kendall, Sen's slope, Pettitt
intervals.py IC paramétrico (media), bootstrap (mediana, cuantiles), excedencia de norma

2.6 Espacial (spatial/)

Módulo Responsabilidad
io.py Lectura de vectores (SHP/GPKG/GeoJSON), raster (GeoTIFF), NetCDF
projections.py MAGNA-SIRGAS, CTM12, WGS84; clip a Colombia
interpolation.py IDW (puro numpy), Kriging ordinario (pykrige)
autocorrelation.py Índice de Moran global y local LISA (pysal/esda)
viz.py Mapas folium de estaciones, coropletas, resultado de Kriging

2.7 Features (features/)

Módulo Responsabilidad
lags.py Lags, rolling stats, diferencias
calendar.py Variables de calendario con codificación cíclica seno/coseno
exogenous.py Alineación de exógenas, heat index, features meteorológicos
climate.py ONI (ENSO) desde NOAA, clasificación niño/niña/neutro, dummies

2.8 Predictiva (predictive/)

Módulo Responsabilidad
base.py BaseModel ABC con interfaz fit/predict/fit_predict
classical.py ARIMA, SARIMA, SARIMAX, ETS (statsmodels)
prophet_model.py Prophet con exógenas opcionales
ml.py XGBoost, RandomForest, LightGBM con lag features automáticos
registry.py get_model(), list_models(), register()

2.9 Evaluación (evaluation/)

Módulo Responsabilidad
metrics.py MAE, RMSE, R², sMAPE, MASE + NSE, KGE, PBIAS (hidrología)
backtesting.py Walk-forward expanding/sliding; compare_backtests()
comparison.py Ranking multi-criterio por dominio; select_best()

2.10 Reportes (reporting/)

Módulo Responsabilidad
forecast_report.py HTML con métricas, gráfico Chart.js real vs. pronósticos
eda_report.py (ver eda/profiling.py)

3. Herencia de boa-sarima-forecaster

Ver docs/decisiones.md ADR-001 y tabla de equivalencias en README.md.

Los módulos con mayor herencia son optimization/bayes_opt.py, evaluation/metrics.py y predictive/classical.py.


4. Decisiones de diseño clave

Ver docs/decisiones.md para el registro completo (ADRs).

ADR Decisión
ADR-001 Fork y herencia de boa-sarima-forecaster con atribución explícita
ADR-002 Outliers NO se eliminan automáticamente — picos ambientales son señal real
ADR-003 Métricas por dominio: NSE+KGE para hidrología, sMAPE solo cuando y≥0
ADR-004 ADF+KPSS obligatorios antes de ARIMA; advertencia explícita si no estacionaria