Files
fn_registry/python/functions/datascience/run_eda_models.md
T
egutierrez 763e06c127 feat(browser): auto-commit con 178 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-20 18:22:23 +02:00

5.7 KiB

id, name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, example, tested, tests, test_file_path, file_path, params, output
id name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports example tested tests test_file_path file_path params output
run_eda_models_py_datascience run_eda_models function py datascience 1.0.0 pure def run_eda_models(columns: dict, run_pca: bool = True, run_kmeans: bool = True, run_isolation: bool = True, run_normality: bool = True) -> dict Orquesta los modelos baratos del grupo eda (PCA, KMeans, Isolation Forest, normalidad) sobre las columnas numericas de un perfil de tabla y devuelve el bloque models de un TableProfile. Composicion canonica del flag --models de profile_table. Compone funciones puras del registry, no reescribe logica.
eda
models
datascience
profiling
pca
kmeans
isolation-forest
normality
multivariate
composition
pca_explained_py_datascience
kmeans_segments_py_datascience
isolation_forest_outliers_py_datascience
normality_tests_py_datascience
false
datascience
from run_eda_models import run_eda_models cols = { "x": {"values": [1.0, 2.0, 3.0, 4.0], "type": "numeric"}, "y": {"values": [2.0, 4.0, 6.0, 8.0], "type": "numeric"}, "z": {"values": [5.0, 4.0, 6.0, 5.5], "type": "numeric"}, } block = run_eda_models(cols) # block["n_numeric_cols"] == 3; block["pca"], block["kmeans"], block["normality"] poblados true
test_three_numeric_columns_runs_all_models
test_single_numeric_column_note_and_normality_only
test_flags_disable_models
test_no_numeric_columns_returns_note_and_no_normality
python/functions/datascience/run_eda_models_test.py python/functions/datascience/run_eda_models.py
name desc
columns Mapa {nombre_columna: {values: list, type: 'numeric'|'categorical'|'datetime'|...}}. Mismo shape que recibe association_matrix; listas alineadas por fila. Solo las columnas con type=='numeric' alimentan los modelos.
name desc
run_pca Si True, ejecuta pca_explained sobre el subconjunto numerico (estructura latente / varianza explicada). Default True.
name desc
run_kmeans Si True, ejecuta kmeans_segments con seleccion automatica de k por silhouette (segmentos naturales). Default True.
name desc
run_isolation Si True, ejecuta isolation_forest_outliers (anomalias multivariante). Default True.
name desc
run_normality Si True, ejecuta normality_tests por cada columna numerica. Es univariante: basta 1 columna. Default True.
dict con {n_numeric_cols, pca, kmeans, outliers, normality, note}. pca/kmeans/outliers son la salida de su funcion del registry o None (flag desactivado o <2 columnas numericas). normality es {col: salida de normality_tests} o None (flag desactivado o sin columnas numericas). Con <2 columnas numericas los multivariantes quedan en None y note = "insuficientes columnas numericas para modelos multivariantes" (normality sigue poblandose si hay >=1 columna numerica). Con >=2 columnas y todo activado, note = "". Nunca lanza excepcion.

Ejemplo

from run_eda_models import run_eda_models
import numpy as np

rng = np.random.default_rng(0)
n = 120
x = rng.normal(0, 1, n)
y = x * 2 + rng.normal(0, 0.3, n)   # correlacionada con x
z = rng.normal(5, 1, n)             # ruido independiente

cols = {
    "x": {"values": x.tolist(), "type": "numeric"},
    "y": {"values": y.tolist(), "type": "numeric"},
    "z": {"values": z.tolist(), "type": "numeric"},
}

models = run_eda_models(cols)

models["n_numeric_cols"]                         # 3
models["pca"]["explained_variance_ratio"]        # PC1 concentra la varianza de x/y
models["kmeans"]["best_k"]                        # k elegido por silhouette
models["outliers"]["n_outliers"]                  # filas anomalas multivariante
models["normality"]["z"]["is_normal"]             # True (z es normal)
models["note"]                                    # ""

# Una sola columna numerica: solo normalidad, multivariantes en None
solo = {"v": {"values": x.tolist(), "type": "numeric"}}
run_eda_models(solo)["note"]
# "insuficientes columnas numericas para modelos multivariantes"

Cuando usarla

Es la capa --models de un EDA: cuando ya tienes el perfil de columnas de una tabla (mismo shape que alimenta association_matrix) y quieres, de un solo golpe, la estructura latente (PCA), los segmentos naturales (KMeans), las anomalias multivariante (Isolation Forest) y la normalidad de cada columna numerica. En vez de llamar a las cuatro funciones por separado y montar el bloque a mano, esta las compone y devuelve el bloque models listo para incrustar en un TableProfile. Usa los flags run_* para apagar los modelos que no necesites.

Gotchas

  • PCA, KMeans e Isolation Forest son multivariantes y necesitan >=2 columnas numericas; con menos, sus claves quedan en None y se devuelve note. La normalidad es univariante y se corre con 1 columna.
  • Cada modelo subyacente tiene su propio umbral minimo de filas validas y puede devolver {"note": "datos insuficientes"} (PCA: >=3 filas; KMeans: >=k_min*2; Isolation Forest: >=10 filas; normalidad: >=8 tras limpiar). Esta funcion los propaga tal cual dentro del bloque, sin petar.
  • Solo se usan columnas con type == "numeric". Los valores se convierten a float cuando es posible; None, booleanos y no parseables se descartan por columna, asi que la longitud efectiva puede ser menor que la lista original.
  • trend_slope NO se ejecuta aqui: requiere un orden temporal explicito y queda disponible suelto en el registry.
  • Aunque compone funciones impuras-en-apariencia (sklearn/scipy), todas son deterministas (random_state=0), por lo que el resultado es reproducible para una misma entrada.