763e06c127
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
66 lines
3.0 KiB
Markdown
66 lines
3.0 KiB
Markdown
---
|
|
name: pca_explained
|
|
kind: function
|
|
lang: py
|
|
domain: datascience
|
|
version: "1.0.0"
|
|
purity: pure
|
|
signature: "def pca_explained(columns: dict, n_components: int = 2) -> dict"
|
|
description: "PCA rapido sobre columnas numericas: estandariza (z-score), descarta filas con valores faltantes y ajusta sklearn PCA determinista para revelar estructura latente y cuanta varianza concentran pocos componentes. EDA barato."
|
|
tags: [eda, models, pca, dimensionality-reduction, variance, datascience, sklearn]
|
|
params:
|
|
- name: columns
|
|
desc: "Mapa {nombre_columna: [valores numericos]}. Listas alineadas por fila (misma longitud). Columnas no numericas o constantes se descartan; None/NaN marcan filas a descartar."
|
|
- name: n_components
|
|
desc: "Numero maximo de componentes principales (default 2). Se acota a min(n_features, n_filas_validas)."
|
|
output: "dict con n_components, n_rows_used, n_features, explained_variance_ratio (lista), cumulative (lista), top_loadings (lista de {component, feature, loading}) y projection (matriz cap a 1000 filas). Con <2 columnas numericas o <3 filas validas devuelve {n_components:0, explained_variance_ratio:[], note:'datos insuficientes'}."
|
|
uses_functions: []
|
|
uses_types: []
|
|
returns: []
|
|
returns_optional: false
|
|
error_type: ""
|
|
imports: [numpy, scikit-learn]
|
|
tested: true
|
|
tests: ["test_pc1_concentra_varianza_con_columnas_colineales", "test_una_sola_columna_numerica_datos_insuficientes", "test_pocas_filas_validas_datos_insuficientes"]
|
|
test_file_path: "python/functions/datascience/pca_explained_test.py"
|
|
file_path: "python/functions/datascience/pca_explained.py"
|
|
---
|
|
|
|
## Ejemplo
|
|
|
|
```python
|
|
from datascience import pca_explained
|
|
|
|
# x e y casi colineales (y ~= 2x); z independiente.
|
|
n = 50
|
|
cols = {
|
|
"x": [float(i) for i in range(n)],
|
|
"y": [2.0 * i for i in range(n)],
|
|
"z": [float((i * 7) % 13) for i in range(n)],
|
|
}
|
|
|
|
res = pca_explained(cols, n_components=2)
|
|
# res["explained_variance_ratio"][0] > 0.6 -> PC1 concentra la varianza
|
|
# res["cumulative"][-1] ~ 1.0 con 2 componentes sobre 3 features
|
|
# res["top_loadings"][0] -> {"component": 0, "feature": "x" o "y", "loading": ...}
|
|
```
|
|
|
|
## Cuando usarla
|
|
|
|
Cuando exploras un dataset tabular numerico y quieres ver, de un vistazo y sin
|
|
montar un pipeline, si pocas dimensiones explican casi toda la varianza (alta
|
|
correlacion entre columnas) y que features pesan en cada componente. Util como
|
|
primer paso de EDA antes de decidir reduccion de dimensionalidad o seleccion de
|
|
variables. Pasa las columnas alineadas por fila; la funcion limpia filas con
|
|
faltantes y estandariza por ti.
|
|
|
|
## Notas
|
|
|
|
Funcion pura y determinista: estandariza con `StandardScaler`, ajusta
|
|
`sklearn.decomposition.PCA` con `random_state=0`. No hace I/O. Las columnas no
|
|
numericas o que no pueden coercerse a float se descartan; los None se tratan
|
|
como NaN y eliminan la fila completa. `projection` se acota a las primeras 1000
|
|
filas para mantener la salida manejable. Degrada con gracia: con menos de 2
|
|
columnas numericas o menos de 3 filas validas devuelve `note: "datos
|
|
insuficientes"` sin lanzar excepcion.
|