Je suis en train de lire le livre Programmation de l'intelligence collective et d'essayer d'appliquer ce que j'ai appris sur la base de données Northwind. Bien que je ne sois pas encore confiant dans ma compréhension des algorithmes présentés, je commence à avoir une idée des concepts généraux.Expérimentation du système de recommandation
Utilisation de la base de données Northwind, je tente de montrer une liste de « clients qui ont acheté ce également acheté XYZ » en utilisant le pseudo-logique suivante:
- Trouver d'autres clients qui ont aussi acheté mon article
- Trouver tous les autres articles achetés par les clients
- articles classement basés sur l'achat compte
- articles Retour haut N de l'étape précédente
Je travaille avec la requête ci-dessous:
declare
@customerid nchar(5),
@productid int;
set @customerid = 'ALFKI';
set @productid = 59;
-- find other products from customers who
-- also purchased my productid
select top 10
od.productid, c.categoryname, p.productname, p.unitsonorder, count(od.productid)
from
[order details] od
inner join orders o on o.orderid = od.orderid
inner join products p on p.productid = od.productid
inner join categories c on c.categoryid = p.categoryid
where
o.customerid <> @customerid and
od.productid <> @productid and
p.discontinued = 0
group by
od.productid, c.categoryname, p.productname, p.unitsonorder
order by 5 desc,4 desc
Je pense que la prochaine étape serait de briser la requête pour que je puisse filtrer en fonction des achats récents (par opposition à tous les achats historiques) et le client limite correspondant à N clients, plutôt que tous les clients qui ont acheté mon produit. Quelqu'un peut-il fournir des pointeurs? Suis-je dans la bonne direction? Devrais-je prendre une direction différente entièrement? À ce stade, mon objectif est la performance par rapport à la précision, car je sais que je n'ai pas encore l'expérience pour appliquer les algorithmes à leur maximum. J'essaie simplement d'appliquer le concept. Une fois satisfait je comprends assez bien, j'ai l'intention de tester cette requête par rapport à une base de données plus grande avec des données client plus réalistes.