Files
fn_registry/dev/issues/0176-eda-render-models-series-caveats-pdf.md
T
Egutierrez 7ac69ab4fb feat(eda): series temporales + rigor anti-data-mining + PDF movil + /eda + benchmark issues
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>
2026-06-29 03:34:01 +02:00

4.8 KiB

id, title, status, type, domain, scope, priority, depends, blocks, related, created, updated, tags
id title status type domain scope priority depends blocks related created updated tags
0176 EDA render: models/series/caveats en markdown+PDF + PDF para profile_database pendiente feature
registry-quality
registry-only media
0173
0174
0175
0177
2026-06-29 2026-06-29
eda
datascience
render_eda_markdown
render_eda_pdf
profile_database
pdf
benchmark

0176 — EDA render: models/series/caveats en markdown+PDF + PDF para profile_database

Contexto

El benchmark /eda (29/06/2026, temp/eda_benchmark/EVALUATION.md) confirmó que la información de modelos (PCA/KMeans) está completa en el JSON pero no llega legible a ningún formato, y que el análisis relacional no tiene salida móvil (PDF). El tercio final del PDF queda ilegible.

Hallazgos cubiertos:

Hallazgo Severidad Evidencia del benchmark
H4 — models omitido en Markdown; models/series/caveats como dict crudo truncado en PDF alto wine-red .md (12 numéricas, PCA valioso) → cero menciones de models. PDF aapl: - pca: {'n_components': 2, … cortado a media línea
H9 — profile_database no genera PDF medio chinook y sakila con pdf=null; análisis relacional solo en Markdown

Causa raíz (verificada en código, READ-ONLY)

  • python/functions/datascience/render_eda_markdown.py: tiene formatters para series (:337) y caveats (:407), pero no para models → el bloque PCA/KMeans nunca se renderiza en MD.
  • python/functions/datascience/render_eda_pdf.py:50-55: _KNOWN_TOP_KEYS no incluye models, series ni caveats, así que caen en _generic_pages (:479-495) → _wrap_valuestr(dict) truncado a 60-64 chars. Por eso esas tres secciones salen como dict crudo en el PDF.
  • python/functions/pipelines/profile_database.py:205-218: solo escribe MD+JSON, nunca invoca render_eda_pdf; no tiene param emit_pdf.

Tareas

  1. H4 — markdown: añadir una sección ## Modelos (PCA/KMeans/outliers/normalidad) a render_eda_markdown.py, formateando models.pca (varianza explicada, top loadings, acumulada), models.kmeans (best_k, silhouette, tamaños de cluster) y models.outliers como tablas legibles.
  2. H4 — PDF: en render_eda_pdf.py, añadir builders dedicados para models, series y caveats (tablas/listas, no str(dict)) y registrarlos en _KNOWN_TOP_KEYS + en la lista builders (:595-604) para sacarlos del volcado genérico. Mantener el contrato dict-no-throw (una sección que falle no aborta el PDF).
  3. Unificar renderers: asegurar que MD y PDF cubren el mismo conjunto de secciones (models, series, caveats) para que no diverjan otra vez.
  4. H9 — PDF relational: añadir un renderer PDF DB-level (puede ser una variante en render_eda_pdf.py o una función nueva) con: portada de la base, resumen de tablas, join graph filtrado (tras 0175), y FK candidatas. Añadir param emit_pdf a profile_database.py que lo invoque y devuelva pdf_path.
  5. Tests: render_eda_markdown_test.py (perfil con models → aparece sección Modelos); render_eda_pdf_test.py (perfil con models/series/caveats → NO aparecen como str(dict); n_pages incrementa); test de profile_database(emit_pdf=True)pdf_path no nulo, PDF válido.

Definition of Done

Escenario Tipo Comando / evidencia Resultado esperado
Golden: models en MD e2e re-correr profile_table(run_models=True) sobre wine-red y leer el .md sección ## Modelos con PCA (varianza explicada) y KMeans (silhouette) legibles
Golden: PDF legible e2e re-correr sobre aapl y pdftotext del PDF models/series/caveats como tablas, sin {'n_components': 2, … truncado
Edge: perfil sin models unit render_eda_markdown_test.py/render_eda_pdf_test.py con models=None sección omitida limpiamente, sin crash
Edge: PDF relational e2e profile_database(emit_pdf=True) sobre chinook pdf_path no nulo; PDF con resumen de tablas + join graph
Error: sección corrupta unit render_eda_pdf con una sección con tipo inesperado esa sección se omite con nota; PDF sigue válido (≥1 página)
Mecánica ./fn run render_eda_markdown_py_datascience, ./fn run render_eda_pdf_py_datascience; fn index tests verdes; índice limpio

Re-correr el benchmark sobre un single-table con modelos (wine-red) y sobre un relational (chinook) y confirmar que models llega al MD y al PDF, y que profile_database emite PDF.

Notas

Issue derivado de temp/eda_benchmark/EDA_ISSUES.md. Tipo feature porque, además de arreglar el volcado crudo (H4, fix), añade un renderer PDF relational nuevo (H9). La información ya existe en el JSON; este issue solo la hace legible en las dos salidas pensadas para humanos. Hermanos: 0173, 0174, 0175, 0177.