generar ‘sugerencias’ de productos para usuarios basadas en información relativa de otros usuarios

Tengo una base de datos con tres tablas configuradas así:

Usuarios : nombre de usuario, ID de usuario
Productos : product_name, product_id
User_Products : product_id, user_id, relation_level

Todo esto es bastante directo, cuando un usuario hace clic en ‘me gusta’ un producto, pregunta cuánto le gusta (calificado 1-5) y almacena esa información en la tabla User_Products, almacenando el product_id de la tabla Products, user_id de la tabla Usuarios y el nivel de relación en función de cuánto les gusta el producto.

Lo que quiero hacer es generar sugerencias para los productos que le gusten al usuario, en función de los productos que le gustan y cuánto les gustan, obtener usuarios que les gusten productos similares y encontrar productos que el usuario aún no conoce, según el número de personas que les gusta y el nivel que les gusta.

¿Alguien tiene alguna idea de cómo puedo lograr esto?

Esto suena como el más clásico y canónico de los problemas del motor recomendador. Apache Mahout tiene un marco completo de motor de recomendación, que incluye una versión simple no distribuida y no Hadoop con la que será fácil experimentar.

En particular, solo querrá conectar una de las implementaciones de DataModel basadas en DataModel para comenzar a leer sus datos. El rest son unas pocas líneas de código.

Ahora, sé que dijiste PHP. Mahout es Java. Pero puedes ver cómo configurar esto como un servicio web al que tu PHP podría acceder.