Algoritmo de similitud de Pearson

El algoritmo de similitud de Pearson es un importante algoritmo de análisis de similitud aplicado al estudio de grafos que toma en cuenta la covarianza entre vectores n-dimensionales que se encuentran divididos por el producto de sus desviaciones estándar. Esto tomando en cuenta la aplicación del coeficiente de correlación de Pearson.

A continuación, descubriremos más sobre este algoritmo, sus principales casos de uso y un ejemplo práctico para comprender su funcionalidad.

¿Qué es el algoritmo de similitud de Pearson?

Este algoritmo toma su nombre ya que se basa en el concepto de correlación de Pearson en el que se evalúan dos variables X y Y, tomando en cuenta la desigualdad de Cauchy-Shwarz donde se obtienen valores entre +1 y -1 para obtener correlaciones lineales, no lineales y negativas. En este caso se toma que los valores -1 son diferentes y 1 totalmente similares.

Para la aplicación de este algoritmo recurrimos a la ejecución de su función cuando se trata de conjuntos de datos pequeños, mientras que para conjuntos de datos de mayor tamaño se debe utilizar los procedimientos que ayudan a paralelizar el cálculo.

Una vez comprendido su concepto y origen, vamos a aprender un poco más sobre su principal caso de uso.

Casos de uso del algoritmo de similitud de Pearson

Este algoritmo nos permite entender o resolver la similitud existente entre dos cosas. Planteando conjuntos de datos con elementos de estudio podemos construir recomendaciones de elementos en los que los usuarios puedan descubrir productos o servicios gracias a características que han aprovechado o conocido en otras oportunidades.

pearson

Ejemplo de función del algoritmo de similitud de Pearson

Una de las formas de aplicar el algoritmo de similitud de Pearson es analizar conjuntos de datos de dimensiones moderadas a través de su función principal. Para ilustrar esto de mejor forma ejecutaremos una consulta de este algoritmo estudiando dos listas de números, tomando en cuenta que este algoritmo solo se calcula sobre dimensiones no NULL, obligándonos a proporcionar a los elementos de análisis, listas de datos que contengan elementos superpuestos.

Se introducen dos listas codificadas de números

RETURN algo.similarity.pearson([5,8,7,5,4,9], [7,8,6,6,4,5]) AS similarity
Similarity
0.28767798089123053

Se tiene como resultado que la similitud de los conjuntos de datos introducida en la consulta es de 0.28. Ahora bien, si queremos analizar algo un poco más complicado, podemos ejecutarlo creando un grafo y conectando los elementos que queremos evaluar.

Para este ejemplo crearemos un grafo compuesto por nombres de películas y personas que han evaluado las películas asignando cierta puntuación

MERGE (home_alone:Movie {name:'Home Alone'})
MERGE (matrix:Movie {name:'The Matrix'})
MERGE (good_men:Movie {name:'A Few Good Men'})
MERGE (top_gun:Movie {name:'Top Gun'})
MERGE (jerry:Movie {name:'Jerry Maguire'})
MERGE (gruffalo:Movie {name:'The Gruffalo'})
MERGE (zhen:Person {name: "Zhen"})
MERGE (praveena:Person {name: "Praveena"})
MERGE (michael:Person {name: "Michael"})
MERGE (arya:Person {name: "Arya"})
MERGE (karin:Person {name: "Karin"})
MERGE (zhen)-[:RATED {score: 2}]->(home_alone)
MERGE (zhen)-[:RATED {score: 2}]->(good_men)
MERGE (zhen)-[:RATED {score: 3}]->(matrix)
MERGE (zhen)-[:RATED {score: 6}]->(jerry)
MERGE (praveena)-[:RATED {score: 6}]->(home_alone)
MERGE (praveena)-[:RATED {score: 7}]->(good_men)
MERGE (praveena)-[:RATED {score: 8}]->(matrix)
MERGE (praveena)-[:RATED {score: 9}]->(jerry)
MERGE (michael)-[:RATED {score: 7}]->(home_alone)
MERGE (michael)-[:RATED {score: 9}]->(good_men)
MERGE (michael)-[:RATED {score: 3}]->(jerry)
MERGE (michael)-[:RATED {score: 4}]->(top_gun)
MERGE (arya)-[:RATED {score: 8}]->(top_gun)
MERGE (arya)-[:RATED {score: 1}]->(matrix)
MERGE (arya)-[:RATED {score: 10}]->(jerry)
MERGE (arya)-[:RATED {score: 10}]->(gruffalo)
MERGE (karin)-[:RATED {score: 9}]->(top_gun)
MERGE (karin)-[:RATED {score: 7}]->(matrix)
MERGE (karin)-[:RATED {score: 7}]->(home_alone)
MERGE (karin)-[:RATED {score: 9}]->(gruffalo) 

Una vez construido el grafo ejecutamos el algoritmo para evaluar la similitud entre los componentes de los datos. Para este ejemplo solo evaluaremos la similitud de calificación de dos elementos contenidos en el grafo:

MATCH (p1:Person {name: 'Arya'})-[rated:RATED]->(movie)
WITH p1, algo.similarity.asVector(movie, rated.score) AS p1Vector
MATCH (p2:Person {name: 'Karin'})-[rated:RATED]->(movie)
WITH p1, p2, p1Vector, algo.similarity.asVector(movie, rated.score) AS p2Vector
RETURN p1.name AS from,
       p2.name AS to,
       algo.similarity.pearson(p1Vector, p2Vector, {vectorType: "maps"}) AS similarity

Resultados:

fromtosimilarity
«Arya»«Karin»0.8194651785206903

Podemos observar gracias a la tabla de resultados que existe un índice de similitud alto entre los datos contenidos o expresados por Arya y Karin dentro de la estructura del grafo indicando que sus preferencias pueden ser parecidas.

Esperamos que esta información sea de utilidad para comprender la aplicabilidad de estos algoritmos a tu proyecto.

Visita más de Grapheverywhere para conocer todo lo que necesitas sobre algoritmos de análisis de similitud orientados a grafos.

Share This