私は「集合知プログラミング」という本を読んでいて、学んだことをノースウィンドデータベースに適用しようとしています。提示されたアルゴリズムについての理解にはまだ自信がありませんが、一般的な概念については理解し始めています。
Northwindデータベースを使用して、次の疑似ロジックを使用して「これを購入した顧客もXYZを購入した」リストを表示しようとしています。
- 私の商品を購入した他の顧客を探す
- それらの顧客が購入した他のすべてのアイテムを検索する
- 購入数に基づいてアイテムをランク付けする
- 前のステップから上位N個のアイテムを返す
私は以下のクエリを使用しています:
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
次のステップは、クエリを分割して、(過去のすべての購入ではなく)最近の購入に基づいてフィルタリングし、製品を購入したすべての顧客ではなく、N人の顧客に一致する顧客を制限できるようにすることだと思います。誰かがポインタを提供できますか?私は正しい方向に向かっていますか?まったく別の方向に進むべきですか?
現時点では、アルゴリズムを最大限に活用する経験がまだないことを知っているので、私の目標は精度よりもパフォーマンスです。私は単にその概念を適用しようとしているだけです。十分に理解できたら、より現実的な顧客データを使用して、このクエリをより大きなデータベースに対してテストする予定です。