我正在阅读“编程集体智能”一书,并试图将我所学到的知识应用到Northwind数据库中。虽然我对算法的理解还没有信心,但我开始对一般概念有了一个了解。
使用Northwind数据库,我试图使用以下伪逻辑显示“购买此产品的客户也购买了XYZ”的列表:
我正在处理下面的查询:
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个客户,而不是所有购买我的产品的客户。有人能提供指点吗?我朝正确的方向走了吗?我应该采取完全不同的方向吗?
在这一点上,我的目标是性能高于准确性,因为我知道我还没有充分利用算法的经验。我只是想应用这个概念。一旦我满意地理解了它,我打算用更真实的客户数据对一个更大的数据库测试这个查询。
发布于 2009-12-01 15:17:13
这通常被称为“市场篮子”分析或“亲缘分组”,它并不像听起来那么简单,主要是由于大量的组合造成的。首先要考虑的是,导致阳性检测的最小病例数是多少。例如,假设我们有100万篮子,10个购买产品A的人也在同一个篮子里购买了产品B。10个例子是否足以说“买了A的人也买了B"?因此,使用“最近”购买是有点棘手的。这个想法是创建一个乘积对的表,但是如果我们有N个乘积,组合的数目是N*(N-1),所以对于一个1000个产品的存储,我们会有999000个组合,所以这个算法并不简单。
还有一件事要考虑的是项目的顺序和每个项目的价值。例如,购买自行车的顾客可能经常购买"LED灯“。但是,如果一个人把LED灯放在一个篮子里,系统应该在列表中提供自行车吗?
考虑到您使用的是server,我将指出分析服务数据挖掘,它为此使用了“”。通过使用相同的数据,您可以将您的结果与“商业解决方案”进行比较。
https://stackoverflow.com/questions/1826689
复制相似问题