【问题标题】:Recommendation system experimentation推荐系统实验
【发布时间】:2009-12-01 14:52:22
【问题描述】:

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

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

  1. 查找其他也购买了我的商品的客户
  2. 查找这些客户购买的所有其他商品
  3. 根据购买次数对商品进行排名
  4. 从上一步返回前 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 个客户,而不是购买我产品的所有客户。任何人都可以提供任何指示吗?我是否朝着正确的方向前进?我应该采取完全不同的方向吗?

在这一点上,我的目标是性能而不是准确性,因为我知道我还没有将算法应用到最大收益的经验。我只是想应用这个概念。一旦我对它的理解感到满意,我打算针对具有更真实客户数据的更大数据库测试此查询。

【问题讨论】:

    标签: sql-server recommendation-engine collective-intelligence


    【解决方案1】:

    这通常被称为“购物篮”分析或“亲和性分组”,它并不像听起来那么简单,主要是由于组合数量众多。首先要考虑的是导致阳性检测的最小病例数是多少。例如,假设我们有 100 万个购物篮,并且有 10 个人购买了产品 A,同时也在同一个购物篮中购买了产品 B。 10箱就足以说“买了A的人也买了B”吗?因此,使用“最近”购买有点棘手。这个想法是创建一个产品对表,但是如果我们有 N 个产品,组合的数量是 N*(N-1),所以对于 1000 个产品的商店,我们将有 999000 个组合,所以修剪这个的算法是不简单。

    要考虑的另一件事是项目的顺序和每个项目的价值。例如,购买自行车的客户可能经常购买(添加)“LED 灯”。但是,如果将 LED 灯放在篮子里,系统是否应该在列表中提供一辆自行车?

    考虑到您使用的是 SQL 服务器,我会向您指出 Analysis Services Data Mining,它为此使用了“MS 关联算法”。通过使用相同的数据,您可以将结果与“商业解决方案”进行比较。

    【讨论】:

      猜你喜欢
      • 2011-09-12
      • 2014-06-10
      • 1970-01-01
      • 2016-02-14
      • 2021-04-24
      • 2012-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多