【问题标题】:What do I need in a database for "Customers Who Bought This Item Also Bought"?我需要数据库中的“购买了此商品的客户也购买了”的数据库?
【发布时间】:2010-12-31 23:11:22
【问题描述】:

亚马逊有“购买此商品的客户也购买了”。

我想知道并想将此添加到我制作的购物车中。

我需要数据库中的哪些字段?有任何网站、博客或资源吗?

你能建议我应该如何编码的机制吗?

【问题讨论】:

    标签: mysql recommendation-engine


    【解决方案1】:
    【解决方案2】:

    您可能不需要数据库中的任何新字段 - 只需保留您的订单历史记录即可。然后,当您想查找其他人购买的商品列表时:

    1. 选择所有订单中包含项目 X 的​​用户
    2. 对于每个用户,将他们购买的其他所有东西加起来
    3. 获得前 3/5 名/随便什么,这就是你的名单。

    【讨论】:

    • 简单的基于计数的系统通常会产生非常弱的推荐引擎。这确实是一个统计/数据挖掘问题。
    • @RickNZ 简单计数是稳健的估计量。复杂的≢更好。 @nickf @alix axel 您可以合并交叉点并修剪掉最不相关的 25% 并提高计数。
    • 在第 2 步中,我只会计算与 X 大约在同一时间订购的商品或赋予它们更高的权重。
    【解决方案3】:

    这不是太棘手。假设您有以下表格:

    • 客户,主键 CustomerID
    • 产品,主键 ProductID
    • 订单,主键OrderID,外键CustomerID
    • OrderItems、主键OrderItemID、外键OrderID、ProductID

    要找到您要寻找的产品,您需要找到购买了该特定产品 ID 的客户集:

    SELECT CustomerID
    FROM (Customers INNER JOIN (Orders INNER JOIN OrderItems))
    WHERE OrderItem.ProductID = <your product id here>
    

    然后,您需要获取这些客户购买的其他产品:

    SELECT ProductID
    FROM (Customers INNER JOIN (Orders INNER JOIN OrderItems))
    WHERE (Customer = <given customer ID>) AND (ProductID <> <your product id>)
    

    然后选择前几款产品,您就可以参加比赛了。

    注意:我是一个数字人。数据库专家将能够在 1 个查询中做到这一点! :)

    【讨论】:

      【解决方案4】:

      您需要订单历史记录,以便您可以检查与用户当前正在查看的商品一起购买的其他商品。

      【讨论】:

        【解决方案5】:

        您需要"Programming Collective Intelligence"。他们有一些关于推荐等的好章节。您需要了解 Pearson 差异和其他衡量标准。

        【讨论】:

          【解决方案6】:

          查看Algorithms of the intelligent web,第 3 章“创建建议和建议”。对于您的问题:可选地,您可能需要一个包含不同项目的用户评分的表格。根据这些评级,您将能够衡量两个客户之间的相似性,然后根据这些值对客户之一即将实现的项目进行估计。这些估计用于对项目进行排名。

          另外,请查看Apriori algorithm 第 4 章或对它的一般描述here;这适用于一起购买的物品并提取一些关联规则。根据这些规则,您将检测到您销售的哪些商品可能会添加到客户的购物篮中。对于您的问题:不应将其他字段添加到您的数据库中;您只需要维护一个表格即可将一起购买的物品(市场篮内容)分组。

          【讨论】:

            【解决方案7】:
            select `A`.`ORDER_NO`, `A`.`SKU`, `B`.`SKU` `REL_SKU`
            from `order_detail` `A`
            inner join 
                (select DISTINCT `ORDER_NO`, `SKU` 
                    from `order_detail`) `B`
                on `B`.`ORDER_NO` = `A`.`ORDER_NO`  
            WHERE `B`.`SKU` = 'XXXXXXXX'
              AND `A`.`SKU` <> 'XXXXXXXX'
            

            这对我有用。当然,在 where 子句中适当添加任何过滤器,例如订单状态等...

            【讨论】:

              猜你喜欢
              • 2011-06-08
              • 1970-01-01
              • 1970-01-01
              • 2018-02-24
              • 1970-01-01
              • 1970-01-01
              • 2020-04-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多