Enfoque guía: Reducción de la dimensionalidad
PCA — de 6 sensores a 2 ejes que el operador pueda mirar
Ver concepto general MathPlay · Ruta IA matemática (MathPlay) →Reducción de la dimensionalidad
PCA: comprimir 6 sensores en un gráfico 2D sin perder la señal de espuma
Puente desde Curso 1
En la unidad 6 (autovalores) y 8 (transformaciones lineales) ya viste que una matriz puede rotar el espacio de datos. PCA encuentra la rotación donde la varianza (movimiento real de planta) se concentra en pocos ejes.
Problema en planta: 6 curvas en el DCS abruman al turno. PCA permite un mapa 2D: un eje “estrés de espuma”, otro “variación de mineral”.
1. Matemática — PCA
Z = XW · W = autovectores de la matriz de covarianza
Pasos: (1) estandarizar sensores, (2) calcular covarianza, (3) autovalores/autovectores, (4) proyectar en las 2 direcciones con mayor varianza.
Demo (6 variables, n=120)
| Componente | Varianza explicada | Interpretación tentativa |
|---|---|---|
| PC1 | ~40 % | Espumante y nivel (carga ≈ −0,58 / −0,55) |
| PC2 | ~17 % | Mezcla pH / aire / ley cabeza |
| PC1 + PC2 | ~57 % | Gráfico 2D útil en clase |
2. PCA vs otras técnicas
3. Excel — covarianza y proyección (2D)
CSV demo · matriz COVAR en rango estandarizado H2:M121.
=' Matriz covarianza 6x6:
=COVAR.MATRIZ(H2:M121)
=' En clase: usar PCA del Análisis de datos (si disponible)
=' o Python para autovectores exactos
=' Proyección fila 2 en PC1 (coeficientes desde Python):
=SUMAPRODUCTO(H2:M2; coef_PC1)
=' Graficar PC1 vs PC2; colorear sobre_espumacion
4. Python — PCA
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
features = ["ph","p80_um","flujo_aire","dosif_espumante_ml_min","nivel_celda_pct","ley_cabeza_cu_pct"]
df = pd.read_csv("datos_flotacion_demo.csv")
X = StandardScaler().fit_transform(df[features])
pca = PCA(n_components=2)
Z = pca.fit_transform(X)
print("Varianza PC1, PC2:", [round(v*100,1) for v in pca.explained_variance_ratio_])
print("Cargas PC1:", dict(zip(features, pca.components_[0].round(2))))
plt.scatter(Z[:,0], Z[:,1], c=df["sobre_espumacion"], cmap="coolwarm", alpha=0.7)
plt.xlabel("PC1"); plt.ylabel("PC2"); plt.title("Flotación Cu — PCA 2D")
plt.savefig("pca_flotacion.png", dpi=120)
5. Investigación sugerida
¿Las 14 horas con espuma quedan agrupadas en un rincón del gráfico PC1–PC2? Propón un umbral visual en PC1 para alerta temprana.
Regístrate al boletín MathPlay
Datos, simulación, visualización, IA y tecnología aplicada a problemas reales de industria y minería.
Sin calendario fijo. Sin spam.
Listo. Te escribo cuando haya algo nuevo.
