La correlación mide el grado y la dirección de la relación lineal o monotónica entre dos variables.
Indica cómo varían dos variables juntas.
Cov(X,Y) = Σ(xi - x̄)(yi - ȳ) / (n-1)
Normaliza la covarianza entre -1 y 1.
Basada en rangos, no en valores absolutos.
import numpy as np
import pandas as pd
# Simulación de datos
np.random.seed(42)
x = np.random.normal(50, 10, 100)
y = 2 * x + np.random.normal(0, 10, 100) # y depende linealmente de x
df = pd.DataFrame({"X": x, "Y": y})
# Covarianza
print("Matriz de covarianza:\n", np.cov(df["X"], df["Y"]))
# Correlación de Pearson
print("\nCorrelación de Pearson:", df["X"].corr(df["Y"]))
👉 Se espera una correlación alta y positiva, cercana a 1.
import numpy as np
import pandas as pd
from scipy.stats import spearmanr
np.random.seed(42)
x = np.random.normal(50, 10, 100)
y = 2 * x + np.random.normal(0, 10, 100)
df = pd.DataFrame({"X": x, "Y": y})
coef, p_value = spearmanr(df["X"], df["Y"])
print("Correlación de Spearman:", coef)
import numpy as np
import pandas as pd
# Dataset con 3 variables
np.random.seed(0)
a = np.random.normal(50, 10, 100)
b = a * 1.5 + np.random.normal(0, 5, 100)
c = np.random.normal(30, 5, 100)
df = pd.DataFrame({"A": a, "B": b, "C": c})
print("Matriz de correlación de Pearson:")
print(df.corr())
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
np.random.seed(0)
a = np.random.normal(50, 10, 100)
b = a * 1.5 + np.random.normal(0, 5, 100)
c = np.random.normal(30, 5, 100)
df = pd.DataFrame({"A": a, "B": b, "C": c})
corr_matrix = df.corr()
plt.figure(figsize=(6,4))
sns.heatmap(corr_matrix, annot=True, cmap="coolwarm", center=0)
plt.title("Mapa de calor de correlaciones (Pearson)")
plt.show()
👉 El heatmap facilita visualizar relaciones fuertes (positivas o negativas).
import numpy as np
import pandas as pd
# Relación cuadrática: no es lineal
x = np.linspace(-10, 10, 200)
y = x**2 + np.random.normal(0, 5, 200)
df = pd.DataFrame({"X": x, "Y": y})
print("Correlación de Pearson:", df["X"].corr(df["Y"]))
print("Correlación de Spearman:", df["X"].corr(df["Y"], method="spearman"))
👉 Aquí Pearson ≈ 0 (porque no hay relación lineal), pero Spearman ≈ 1 (porque la relación es monotónica creciente en valores absolutos).