Tengo una base de datos de aproximadamente 700k usuarios junto con elementos que han visto/escuchado/leído/comprado/etc. Me gustaría crear un motor de recomendación que recomiende nuevos elementos según lo que han disfrutado los usuarios con gusto similar, así como también encontrar personas con las que el usuario quiera ser amigo en una red social que estoy construyendo (similar a Last FM).Algoritmo de recomendación (e implementación) para encontrar artículos y usuarios similares
Mis requisitos son los siguientes:
- La mayoría de los "usuarios" en mi base de datos no son en realidad los usuarios de mi sitio web. Han sido datos extraídos de fuentes de terceros. Sin embargo, al recomendar a los usuarios, me gustaría limitar la búsqueda a las personas que son miembros de mi sitio web (mientras se sigue aprovechando el conjunto de datos más grande).
- Necesito tomar varios elementos en consideración. No "personas a las que les gusta este artículo que disfrutaste ...", sino "personas a quienes les gustan la mayoría de los artículos que disfrutaste ...".
- Necesito calcular las similitudes entre los usuarios y mostrarlos al ver sus perfiles (taste-o-meter).
- Algunos ítems son calificados, otros no lo son. Las clasificaciones son de 1-10, no valores booleanos. En la mayoría de los casos, sería posible deducir un valor de clasificación de otras estadísticas si no está presente (por ejemplo, si el usuario ha preferido un artículo, pero no lo ha calificado, podría suponer una calificación de 9).
- Tiene que interactuar con el código de Python de una forma u otra. Preferiblemente, debe usar una base de datos separada (posiblemente NoSQL) y exponer una API para usar en mi back-end web. El proyecto que estoy haciendo usa Pyramid y SQLAlchemy.
- Me gustaría tener en cuenta los géneros de elementos.
- Me gustaría mostrar artículos similares en páginas de artículos basadas en su género (posiblemente etiquetas) y lo que les gustó a los usuarios (como las "personas que compraron este artículo" de Amazon y las páginas de Last.fm). Aún se deben mostrar elementos de diferentes géneros, pero tienen un valor de similitud menor.
- Preferiría una implementación bien documentada de un algoritmo con algunos ejemplos.
Por favor, no responda como "use pysuggest o mahout", ya que implementa una gran cantidad de algoritmos y estoy buscando uno que sea más adecuado para mis datos/uso. Me interesó Neo4j y cómo se podría expresar como un gráfico de conexiones entre usuarios y elementos.
para géneros Recomiendo los nodos de categoría de géneros a los que están conectados los elementos y puedes tenerlos en cuenta en la cláusula –
. Es bastante útil, el enlace publicado almacena la información en un gráfico-db en lugar de ser un gráfico enfoque basado en la recomendación. – Steve
¡Gracias! He leído un poco más, he echado un vistazo al libro de cocina cypher en la documentación de Neo4j y hace exactamente lo que necesito que haga. Decidí ir con el enfoque de la base de datos de gráficos para mi motor de recomendación. – vomitcuddle