Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Similitud del Coseno y Correlación de Pearson | Sistemas de Filtrado Colaborativo y Emparejamiento de Comportamientos
Análisis de Canasta de Mercado y Sistemas de Recomendación

Similitud del Coseno y Correlación de Pearson

Desliza para mostrar el menú

Similitud del coseno

La similitud del coseno es una métrica que cuantifica la similitud entre dos vectores midiendo el coseno del ángulo entre ellos. Se define matemáticamente como:

Similitud del coseno = i=1nAiBii=1nAi2i=1nBi2\frac {\sum_{i=1}^{n} A_i B_i} {\sqrt{\sum_{i=1}^{n} A_i^2} \cdot \sqrt{\sum_{i=1}^{n} B_i^2}}

donde A y B son vectores de usuario o de ítem. Geométricamente, la similitud del coseno captura cuán alineados están dos vectores, independientemente de su magnitud. Un valor de 1 significa que los vectores apuntan en la misma dirección (máxima similitud), 0 significa que son ortogonales (sin similitud), y -1 significa que apuntan en direcciones opuestas. En el emparejamiento de comportamiento, la similitud del coseno es útil cuando interesa el patrón de preferencias más que sus valores absolutos, como al comparar usuarios que califican ítems en diferentes escalas.

Correlación de Pearson

La correlación de Pearson mide la relación lineal entre dos vectores, teniendo en cuenta tanto la dirección como la media de los datos. La fórmula es:

Pearson Correlation=i=1n(AiAˉ)(BiBˉ)i=1n(AiAˉ)2i=1n(BiBˉ)2\text{Pearson Correlation} = \frac{\sum_{i=1}^{n} (A_i - \bar{A})(B_i - \bar{B})}{\sqrt{\sum_{i=1}^{n} (A_i - \bar{A})^2} \cdot \sqrt{\sum_{i=1}^{n} (B_i - \bar{B})^2}}

donde Aˉ\bar{A} y Bˉ\bar{B} son las medias de los vectores A y B. La correlación de Pearson varía entre -1 (relación lineal negativa perfecta) y 1 (relación lineal positiva perfecta), con 0 indicando ausencia de relación lineal. Esta métrica es especialmente útil cuando se desea comparar usuarios o ítems eliminando sesgos individuales, como cuando un usuario tiende a calificar todo más alto o más bajo que otro.

Comparación

Similitud del coseno
expand arrow
  • Se centra en la orientación de los vectores e ignora su media y magnitud;
  • Es una buena opción para datos dispersos donde faltan muchas valoraciones o son cero, pero puede sobrestimar la similitud cuando los usuarios tienen escalas de valoración sistemáticamente diferentes.
Correlación de Pearson
expand arrow
  • Elimina la valoración promedio de cada vector, lo que la hace robusta frente a diferencias de escala o preferencia base;
  • Es mejor cuando se desea controlar el sesgo de usuario o ítem, pero puede no captar relaciones no lineales.

Ejemplo: Cálculo de Ambos Métricos

Supón que tienes dos usuarios que calificaron cuatro artículos. Sus calificaciones son:

  • Usuario 1: [4, 0, 3, 5]
  • Usuario 2: [5, 1, 2, 4]

Puedes calcular tanto la similitud del coseno como la correlación de Pearson para estos vectores y comparar su similitud de comportamiento.

12345678910111213141516171819
import numpy as np # User ratings user1 = np.array([4, 0, 3, 5]) user2 = np.array([5, 1, 2, 4]) # Cosine similarity def cosine_similarity(a, b): dot_product = np.dot(a, b) norm_a = np.linalg.norm(a) norm_b = np.linalg.norm(b) return dot_product / (norm_a * norm_b) cos_sim = cosine_similarity(user1, user2) print(f"Cosine Similarity: {cos_sim:.4f}") # Pearson correlation pearson_corr = np.corrcoef(user1, user2)[0, 1] print(f"Pearson Correlation: {pearson_corr:.4f}")

Explicación Paso a Paso del Código

Definición de los Arreglos de Calificaciones de Usuarios

  • user1 = np.array([4, 0, 3, 5]);
  • user2 = np.array([5, 1, 2, 4]);

Se crean dos arreglos de NumPy, cada uno representando las calificaciones de un usuario para cuatro artículos. Estos arreglos son los vectores de usuario.

Definición de la Función de Similitud del Coseno

def cosine_similarity(a, b):
    dot_product = np.dot(a, b)
    norm_a = np.linalg.norm(a)
    norm_b = np.linalg.norm(b)
    return dot_product / (norm_a * norm_b)
  • Cálculo del Producto Punto: dot_product = np.dot(a, b);
    Multiplica los elementos correspondientes de los dos vectores y los suma. Esto mide cuánto apuntan los dos vectores en la misma dirección.
  • Cálculo de las Normas:
    norm_a = np.linalg.norm(a);
    norm_b = np.linalg.norm(b);
    Calcula la longitud (magnitud) de cada vector de usuario. La norma es la raíz cuadrada de la suma de los cuadrados de los elementos del vector.
  • Cálculo de la Similitud: return dot_product / (norm_a * norm_b);
    Divide el producto punto entre el producto de las dos normas. El resultado es el coseno del ángulo entre los dos vectores, indicando su similitud.

Cálculo de la Similitud del Coseno e Impresión
cos_sim = cosine_similarity(user1, user2);
print(f"Cosine Similarity: {cos_sim:.4f}");
Se llama la función con los vectores de usuario para calcular su similitud del coseno y luego se imprime el resultado formateado a cuatro decimales.

Cálculo de la Correlación de Pearson e Impresión
pearson_corr = np.corrcoef(user1, user2)[0, 1];
print(f"Pearson Correlation: {pearson_corr:.4f}");
Se utiliza np.corrcoef para calcular la matriz de correlación de Pearson para los dos vectores de usuario. El valor en la posición [0, 1] da la correlación entre user1 y user2. Imprimir este valor muestra cuán fuertemente los patrones de calificación de los usuarios están relacionados linealmente después de eliminar el sesgo de la calificación promedio.

1. ¿Cuál es la principal diferencia entre la similitud del coseno y la correlación de Pearson al comparar vectores de usuarios?

2. ¿Qué métrica deberías elegir si quieres comparar usuarios que califican ítems en escalas muy diferentes (por ejemplo, un usuario siempre da calificaciones altas y otro da calificaciones bajas)?

question mark

¿Cuál es la principal diferencia entre la similitud del coseno y la correlación de Pearson al comparar vectores de usuarios?

Selecciona la respuesta correcta

question mark

¿Qué métrica deberías elegir si quieres comparar usuarios que califican ítems en escalas muy diferentes (por ejemplo, un usuario siempre da calificaciones altas y otro da calificaciones bajas)?

Selecciona la respuesta correcta

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 2

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Sección 3. Capítulo 2
some-alt