首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >推荐系统实验

推荐系统实验
EN

Stack Overflow用户
提问于 2009-12-01 14:52:22
回答 1查看 1K关注 0票数 1

我正在阅读“编程集体智能”一书,并试图将我所学到的知识应用到Northwind数据库中。虽然我对算法的理解还没有信心,但我开始对一般概念有了一个了解。

使用Northwind数据库,我试图使用以下伪逻辑显示“购买此产品的客户也购买了XYZ”的列表:

  1. 找其他顾客也买了我的商品
  2. 找到那些顾客购买的所有其他物品。
  3. 基于采购计数的等级项目
  4. 从上一步返回顶N项

我正在处理下面的查询:

代码语言:javascript
运行
复制
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个客户,而不是所有购买我的产品的客户。有人能提供指点吗?我朝正确的方向走了吗?我应该采取完全不同的方向吗?

在这一点上,我的目标是性能高于准确性,因为我知道我还没有充分利用算法的经验。我只是想应用这个概念。一旦我满意地理解了它,我打算用更真实的客户数据对一个更大的数据库测试这个查询。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-12-01 15:17:13

这通常被称为“市场篮子”分析或“亲缘分组”,它并不像听起来那么简单,主要是由于大量的组合造成的。首先要考虑的是,导致阳性检测的最小病例数是多少。例如,假设我们有100万篮子,10个购买产品A的人也在同一个篮子里购买了产品B。10个例子是否足以说“买了A的人也买了B"?因此,使用“最近”购买是有点棘手的。这个想法是创建一个乘积对的表,但是如果我们有N个乘积,组合的数目是N*(N-1),所以对于一个1000个产品的存储,我们会有999000个组合,所以这个算法并不简单。

还有一件事要考虑的是项目的顺序和每个项目的价值。例如,购买自行车的顾客可能经常购买"LED灯“。但是,如果一个人把LED灯放在一个篮子里,系统应该在列表中提供自行车吗?

考虑到您使用的是server,我将指出分析服务数据挖掘,它为此使用了“”。通过使用相同的数据,您可以将您的结果与“商业解决方案”进行比较。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1826689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档