7ac69ab4fb
Bloque del grupo eda (sesion ausente EDA-benchmark): - 8 funciones nuevas: adf_kpss_stationarity, acf_pacf, stl_decompose, to_returns, fdr_correction, suggest_reexpression, exploratory_caveats, render_eda_pdf - integracion: profile_table (run_series, emit_pdf), association_matrix (FDR Benjamini-Hochberg), render_eda_markdown (secciones series/reexpresion/caveats) - slash commands /eda y /capitulos - issues 0173-0177: mejoras del /eda derivadas del benchmark sobre 12 datasets reales (outlier_pct x100, periodo estacional, FK inference, render models, tipos id-like) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3.8 KiB
3.8 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | params | output | tested | tests | test_file_path | file_path | |||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| adf_kpss_stationarity | function | py | datascience | 1.0.0 | pure | def adf_kpss_stationarity(values: list, alpha: float = 0.05) -> dict | Test de estacionariedad de una serie temporal combinando ADF (H0=raiz unitaria/no estacionaria) y KPSS (H0=estacionaria) de statsmodels. Devuelve por test estadistico, p_value, lags y conclusion, mas un veredicto de consenso ('stationary'|'non_stationary'|'inconclusive'). Avisa de correlacion espuria (Granger-Newbold) cuando la serie no es estacionaria. Descarta None/NaN/infinitos; <8 puntos validos -> nota 'datos insuficientes'. |
|
false |
|
|
dict con 'adf' y 'kpss' (cada uno: stat, p_value, lags, stationary bool, conclusion), un 'verdict' de consenso ('stationary'|'non_stationary'|'inconclusive'), y 'warning' (texto sobre correlacion espuria si el veredicto no es stationary, si no None). Con <8 puntos validos: {'n', 'note': 'datos insuficientes', 'verdict': None}. Nunca lanza excepcion. | true |
|
python/functions/datascience/adf_kpss_stationarity_test.py | python/functions/datascience/adf_kpss_stationarity.py |
Ejemplo
from datascience import adf_kpss_stationarity
# Ruido blanco: estacionario (ADF rechaza raiz unitaria, KPSS no rechaza estacionariedad)
import numpy as np
rng = np.random.default_rng(0)
ruido = rng.normal(0, 1, 300).tolist()
adf_kpss_stationarity(ruido)["verdict"] # -> "stationary"
# Random walk (suma acumulada): NO estacionario
paseo = np.cumsum(rng.normal(0, 1, 300)).tolist()
res = adf_kpss_stationarity(paseo)
res["verdict"] # -> "non_stationary"
res["warning"] # -> aviso de correlacion espuria
Cuando usarla
Antes de correlacionar, regresionar o modelar (ARIMA, VAR) una serie temporal,
para saber si es estacionaria. Es el primer paso obligatorio del analisis de
series: una serie no estacionaria (con tendencia o raiz unitaria) rompe los
supuestos de la regresion OLS clasica y, si la correlacionas con otra serie no
estacionaria, obtienes una correlacion alta pero espuria (Granger-Newbold).
Si el veredicto no es "stationary", diferencia la serie o pasala a retornos
(to_returns) y vuelve a testear.
Gotchas
- Es pura pero importa
statsmodels.tsa.stattools(instalado enpython/.venv). - ADF y KPSS tienen hipotesis nulas OPUESTAS: en ADF
p<alphasignifica estacionaria; en KPSSp<alphasignifica NO estacionaria. La funcion ya normaliza ambos a un campostationarycoherente — no inviertas tu la logica. - KPSS interpola el p-valor sobre una tabla acotada
[0.01, 0.10]: si el estadistico cae fuera, statsmodels recorta el p-valor al extremo y lo marca enkpss.p_value_clipped = True. Un p recortado a 0.01 o 0.10 es un limite, no un valor exacto. - El veredicto
"inconclusive"suele indicar serie estacionaria-en-tendencia o que necesita diferenciacion; no es un fallo, es informacion. - Necesita al menos 8 puntos validos tras limpiar; con menos devuelve una nota.