El método que les voy a mostrar se llama filtrado colaborativo. Es llamado colaborativo porque hace recomendaciones basadas en otras personas. Supongamos que te quiero recomendar un artículo de un blog. Busco entre todos los usuarios de mi blog una persona similar a tí. Una vez haya encontrado a esa persona puedo ver qué artículos le gustaron y recomendártelos.
¿Cómo puedo encontrar a alguien con preferencias similares?
Imaginemos que los usuarios pueden dar un puntaje a un artículo en un rango de 0 a 5. Para hacer el ejemplo más simple vamos a restringir los puntajes a solo dos artículos: "Operadores lógicos en Python" y "Operadores de asignación en Python".
Aqui hay tres usuarios que le han dado un puntaje a esos artículos:
Código :
Juan: [5,5] Carlos: [2,5] Luis: [1,4]
Me gustaría recomendarle un libro a una cuarta persona llamada Jhon quien le dió un puntaje a "Operadores lógicos en Python" de 4, y a "Operadores de asignación en Python" de 2. Lo primero es encontrar la persona más similar o más cercana. Esto lo hacemos calculando la distancia.
La Distancia Euclídea
Esta fórmula matemática es bastante simple. Cada persona está representada por un punto (x,y). Agregaré un subíndice para referirme a una persona en específico. Entonces (x1,y1) podría ser Juan y (x2,xy2) puede ser Jhon. La distancia está definida por:
Veamos qué distancia hay entre Juan y Jhon.
x1 es el puntaje que la primera persona le dió al primer artículo y x2 es el puntaje que la segunda persona le dió al mismo artículo; y1 es el puntaje que la primera persona le dió al segundo artículo y y2 es el puntaje que le dió la segunda persona.
La distancia entre Juan y Jhon quedaría definida así:
Calculando las distancias restantes:
Código :
Juan - Jhon = 3.16 Carlos - Jhon = 3.61 Luis - Jhon = 3.61
La persona más cercana a Jhon es Juan y vemos por ejemplo en su historial, que le dió un puntaje de 5 al artículo "Funciones matemáticas en Python", entonces podríamos recomendarle ese artículo a Jhon.
En la segunda parte veremos técnicas mas avanzadas y algo de código en Python.