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>
4.6 KiB
4.6 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 | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| suggest_reexpression | function | py | datascience | 1.0.0 | pure | def suggest_reexpression(stats: dict) -> dict | Sugiere la re-expresion de la escalera de potencias de Tukey (none/log/log1p/sqrt/square/cube/box-cox/yeo-johnson) que mas simetriza una columna numerica, a partir de su skew y su dominio (ceros/negativos). Pura: razona por reglas, NO ejecuta la transformacion. Devuelve recomendacion + razon legible + alternativas ordenadas. |
|
false |
|
dict con `recommended` (nombre de la transformacion o None si falta skew), `ladder_power` (exponente conceptual de la escalera de Tukey: 1.0 raw, 0.5 sqrt, 0.0 log, None para data-driven), `reason` (explicacion legible), `alternatives` (lista ordenada de {transform, ladder_power, reason}), `skew` (el usado) y `note` (vacio en caso normal; mensaje si la entrada es incompleta o el dominio es desconocido). Nunca lanza excepcion. | true |
|
python/functions/datascience/suggest_reexpression_test.py | python/functions/datascience/suggest_reexpression.py |
Ejemplo
from datascience import suggest_reexpression
# Columna estrictamente positiva con cola derecha larga -> log.
stats = {"skew": 2.3, "min": 1.0, "zero_pct": 0.0, "negative_pct": 0.0}
out = suggest_reexpression(stats)
out["recommended"] # -> "log"
out["ladder_power"] # -> 0.0 (escalon p=0 de la escalera de Tukey)
out["reason"] # -> "skew = 2.3 (cola derecha..., fuerte) y todos los valores > 0: log comprime..."
[a["transform"] for a in out["alternatives"]] # -> ["box-cox", "sqrt"]
# Con valores negativos, log/Box-Cox no valen -> Yeo-Johnson.
suggest_reexpression({"skew": 1.8, "min": -4.0, "negative_pct": 20.0})["recommended"] # -> "yeo-johnson"
# Funciona directo sobre el sub-bloque `numeric` de describe_numeric:
# col["numeric"] = {"skew": ..., "min": ..., "zero_pct": ..., "negative_pct": ...}
suggest_reexpression(col["numeric"])
Cuando usarla
Cuando un EDA ya detecto que una columna numerica esta sesgada (|skew| alto en el
bloque numeric de describe_numeric / detect_distribution_type) y quieres el
siguiente paso de Tukey: que transformacion la simetriza. Cierra el gap entre
"detecto skew" y "sugiere la re-expresion". Util antes de modelar (muchos modelos
asumen ~normalidad o varianza estable) y para enriquecer un reporte EDA con una
recomendacion accionable por columna. NO la uses si solo quieres el valor del skew
(eso ya lo da describe_numeric).
Gotchas
- Es pura: NO ejecuta la transformacion, solo decide cual sugerir. Aplicarla es trabajo del caller (numpy/scipy/sklearn) si decide seguir la recomendacion.
- Necesita
skew. Sin el devuelverecommended=None+note(no lanza). - El dominio (ceros/negativos) se infiere de
min,zero_pctynegative_pct. Si ninguno esta presente, el dominio es desconocido y sugiereyeo-johnson(opcion segura para cualquier rango) con una nota; pasale al menosminpara una decision mas fina (log vs sqrt vs Box-Cox). zero_pct/negative_pctse interpretan como ">0 = hay ceros/negativos"; la escala (fraccion 0-1 o porcentaje 0-100) es indiferente para la decision.- Umbrales: |skew|<0.5 ->
none; 0.5-1.0 -> moderada; >=1.0 -> fuerte. Son la convencion habitual, no una verdad absoluta — un caller puede recomputar con elskewque se devuelve. log/Box-Coxexigen datos estrictamente positivos; con ceros usalog1p; con negativos o ceros,Yeo-Johnson. La funcion ya aplica estas reglas por ti.