Files
fn_registry/python/functions/datascience/association_matrix.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

4.4 KiB

name, kind, lang, domain, version, purity, signature, description, tags, params, output, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags params output uses_functions uses_types returns returns_optional error_type imports tested tests test_file_path file_path
association_matrix function py datascience 1.0.0 pure def association_matrix(columns: dict, strong_threshold: float = 0.5, top_n: int = 20) -> dict Matriz de asociacion unificada de una tabla con tipos mezclados: elige la metrica correcta por par de tipos (Pearson/Spearman num-num, Cramer's V cat-cat, correlation ratio num-cat) y calcula informacion mutua normalizada comun para todos los pares. Devuelve pares evaluados, pares fuertes y leyenda de metodos.
eda
correlation
association
statistics
mixed-types
mutual-information
name desc
columns dict {nombre_columna: {"values": list, "type": "numeric"|"categorical"|"datetime"|"boolean"|"text"}}. datetime/boolean/text se tratan como categoricas; text de cardinalidad ~ n se salta como ruido.
name desc
strong_threshold Umbral en [0, 1]. Un par es fuerte si abs(value) >= umbral o extra.mi >= umbral. Default 0.5.
name desc
top_n Maximo de pares fuertes a devolver, ordenados por relevancia (max(abs(value), mi)) desc. Default 20.
dict {pairs: lista de todos los pares {a, b, a_type, b_type, method, value, extra}; strong: subconjunto fuerte ordenado por relevancia desc truncado a top_n; methods_legend: dict metodo->descripcion}. Pura: con dict vacio o 1 columna devuelve pairs=[] y strong=[].
pearson_py_datascience
spearman_corr_py_datascience
cramers_v_py_datascience
theils_u_py_datascience
correlation_ratio_py_datascience
mutual_info_columns_py_datascience
false
true
test_two_correlated_numerics_strong_pearson
test_numeric_explained_by_category_strong_correlation_ratio
test_independent_pair_not_strong
test_empty_dict_does_not_crash
test_single_column_returns_empty
python/functions/datascience/association_matrix_test.py python/functions/datascience/association_matrix.py

Ejemplo

from datascience import association_matrix

columns = {
    # Numerica correlada linealmente con "size" (y ~ 2x + ruido pequeno).
    "size": {"values": [1, 2, 3, 4, 5, 6, 7, 8], "type": "numeric"},
    "price": {"values": [2.1, 4.0, 5.9, 8.1, 10.0, 12.2, 13.8, 16.1], "type": "numeric"},
    # Categorica que explica la varianza de "score" (cada region -> nivel distinto).
    "region": {"values": ["N", "N", "S", "S", "E", "E", "W", "W"], "type": "categorical"},
    "score": {"values": [10.0, 11.0, 50.0, 49.0, 90.0, 91.0, 30.0, 31.0], "type": "numeric"},
}

result = association_matrix(columns, strong_threshold=0.5, top_n=10)

# Pares fuertes detectados (orden por relevancia):
for p in result["strong"]:
    print(p["a"], p["b"], p["method"], round(p["value"], 2))
# size price pearson/spearman 1.0      -> num-num lineal casi perfecta
# region score correlation_ratio 0.99  -> la categoria explica la numerica

print(result["methods_legend"]["correlation_ratio"])

Cuando usarla

Cuando necesites una matriz de relaciones de una tabla entera mezclando tipos (numericas, categoricas, fechas, booleanos) en una sola pasada, sin tener que elegir a mano que metrica aplicar a cada par. Ideal en la fase EDA para detectar de un vistazo que columnas estan asociadas (y por que metodo), priorizando los pares fuertes. Reusa las funciones atomicas del registry (pearson, spearman_corr, cramers_v, theils_u, correlation_ratio, mutual_info_columns) y anade informacion mutua normalizada como medida comun no-lineal a todos los pares.

Notas

  • Pura: las atomicas que compone son puras y deterministas; no hace I/O.
  • pearson no limpia None/NaN internamente, asi que los pares num-num se limpian aqui antes de llamarla (se emparejan por indice y se descartan pares con algun lado no numerico).
  • En num-num el value principal es el de mayor valor absoluto entre Pearson y Spearman; ambos quedan en extra (pearson, spearman).
  • En cat-cat el value es Cramer's V (simetrico) y extra lleva Theil's U direccional en ambos sentidos (u_ab = U(a|b), u_ba = U(b|a)).
  • En num-cat el value es el correlation ratio (eta) llamando siempre con la categorica como primer argumento y la numerica como segundo.
  • Se saltan columnas con menos de 3 valores validos, y columnas text cuya cardinalidad sea >= 90% del numero de filas (identificadores / free-text).