如果用户已经在购物车中有东西,建议用户可以购买什么

时间:2012-08-27 22:08:17

标签: mysql database machine-learning

我正在开发电子商店,在那里我会卖食物。我想有一个建议框,我建议我的用户可以根据购物车中已有的东西购买其他产品。如果他有啤酒,我希望他通过降低他购买它的概率的百分比来推荐筹码和其他东西。但我希望我的算法能够根据所有用户以前的购买情况来学习杂货。我应该从哪里开始?我有杂货表user_iditem_iddate等。如何在没有强制执行的情况下制作一个不可能的建议框。

12 个答案:

答案 0 :(得分:43)

你所描述的是一个推荐引擎;更具体地说是协同过滤它是亚马逊的“购买x也购买了y”功能的人的心脏,以及Netflix的推荐引擎。

这是一项不平凡的事业。因为,为了获得任何甚至远程有用的东西,可能比首先构建电子商务网站更容易。

例如:

  • 您不想推荐已经在购物篮中的商品。
  • 你不想推荐已经在篮子里的东西的更便宜的版本。
  • 您不想推荐缺货商品。
  • 你不想推荐统计上有效的物品,但没有意义(“嘿,你买了尿布,为什么不买啤酒?” - 有一个故事,在超市里,统计相关性,因为爸爸晚上出去购买尿布并同时拿起六个装。
  • 想要推荐现在促销中的商品
  • 想要推荐与促销中的商品类似的商品

当我尝试类似的项目时,很难向非技术人员解释计算机根本不明白推荐啤酒和尿布是不合适的。一旦我们使基本解决方案工作,构建排除和边缘案例逻辑至少需要花费很长时间。

实际上,我认为这些是你的选择:

  • 手动维护相关产品。耗费时间,但不太可能导致奇怪。
  • 使用现成的解决方案 - SaaS或包含支持此功能的R库。
  • 推荐(半)随机产品。有一组你想推荐的产品,并随机选择一个 - 例如,促销产品,“畅销”列表中的产品,成本低于x的产品。排除可能存在问题的类别。

所有这些选择都可以在合理的时间内实现;从头开始构建一个合适的解决方案的问题是每个人都会针对亚马逊进行测量,他们对你有一个良好的开端......

答案 1 :(得分:8)

这是数据挖掘中Apriori算法解决的常见问题。您可能需要创建另一个表来维护此统计信息,然后根据首选组合进行建议

答案 2 :(得分:6)

嗯......嗯......你正在寻找一个产品推荐引擎然后......好吧,它们基本上是以三种形式出现的:

  • 协作过滤
  • 基于内容的过滤
  • 混合推荐系统

第一个收集并存储有关用户活动,偏好,行为等的数据......然后将这些数据发送到引擎,将其分成用户频道。每个频道都有一些特殊的喜欢和不喜欢。因此,当您有新访问者时,他或她将被分类并被分类为特定的用户个人资料。然后将根据此个人资料的喜欢/不喜欢显示项目。

现在,基于内容的过滤使用了一种不同的方法 - 一种较少社交的方法 - 只考虑用户以前的浏览历史记录,偏好和活动。从本质上讲,这将根据此用户之前喜欢/购买的内容创建推荐。

但为什么只选择其中一个,对吧?混合推荐系统使用两者来提供个性化的社交推荐。在提供建议时,这些通常更准确。

我认为,当您有大量用户涌入时,协作过滤是一个很好的选择 - 只有42个用户/月访问您的网站,很难建立良好的渠道。 基于内容的第二个选项对于拥有大量产品的小型网站来说更好 - 但是,恕我直言,第三个是适合您的网站 - 构建一些可以让用户从一开始就收集并将他们生成的所有数据收集到的内容,在未来,能够提供类似亚马逊的推荐体验!

构建其中一个并非易事,因为我相信你已经知道了...但我强烈推荐这本书(使用个人历史记录过滤!),这在过去真的为我而来:{{ 3}}

祝你好运,学习好!

答案 3 :(得分:5)

我认为最好的方法是对商品进行分类并使用该信息做出选择。

我是在杂货店网站上做到的,效果很好。我们的想法是将组项目分成若干类别。

例如,我们拿一根香蕉。它是一种水果,但它也常用于玉米片或谷物早餐。谷物也是早餐食品,但某些食品可能被认为是健康食品,而其他食品则是含糖食品。

通过这种方法,您可以快速开始制作这样的表:

Item         | Category
-------------+------------
Banana       | Breakfast
Banana       | Quick
Banana       | Fruit
Banana       | Healthy
Museli       | Breakfast
Museli       | Healthy
Sugar Puffs  | Breakfast
Sugar Puffs  | Treat
Kiwi Fruit   | Fruit
Kiwi Fruit   | Healtyh
Kiwi Fruit   | Dessert
Milk         | Breakfast

通过这样的简单查找,您可以根据这些分组轻松找到要建议的好项目。

让我们说某人的篮子里有香蕉,Museli和Sugar Puffs。

这是三个早餐项目,两个健康,一个不是那么多。

建议牛奶与三者相匹配。没有冲动买?再试一次,扔进新西兰水果。等等。

这里的想法是匹配许多不同类别的项目(尤其是那些可能不直接明显的项目),并使用这些计数为您的客户推荐最佳项目。

答案 4 :(得分:5)

根据购买该商品的其他顾客的购物习惯进行交叉销售。假设您在数据库中有此购买历史记录(订单表):

  1. 啤酒,薯条,苏打水
  2. 啤酒,苏打水
  3. 苏打水,蛋糕
  4. 薯条,啤酒
  5. 蛋糕,薯条,啤酒
  6. 然后,如果您的客户在购物车上装有啤酒,则根据您客户的购物习惯,您可以轻松查询并查看与啤酒相关的商品:

    1. 芯片(3次)
    2. 苏打水(2次)
    3. 蛋糕(1次)
    4. 然后你可以建议芯片和汽水......你的购买历史越大,系统的建议就越准确。

答案 5 :(得分:1)

您可能会喜欢非负矩阵分解算法,它可以完全满足您的要求(除了Neville K提到的内容)。购买杂货的数据库表将是分解的矩阵。一个因素是包含人们一起购买的东西的矩阵。该矩阵将比您将每个杂货店与其他杂货店进行比较的矩阵小得多。它会自动找到很好的杂货“群组”,比如Fluffeh建议的那些类别,你会自动找到它们。执行步骤:

  1. 每天或每周:在购买的杂货店桌子上进行分解,以找到新的“趋势”。保存因子矩阵。
  2. 如果有新的购物车到货:使用购物车作为参数调用解算器,您将获得一个装满了适合的产品的购物车。建议尚未载入购物车的东西。
  3. 有人已经提到过Book Programming Collective Intelligence 。这是一个好的开始。

答案 6 :(得分:0)

您可以使用人工神经网络,该网络学习根据以前的购买结合不同的产品。

以下是关于该主题的两个资源:

http://en.wikipedia.org/wiki/Artificial_neural_network

http://www.ai-junkie.com/ann/evolved/nnt1.html

答案 7 :(得分:0)

有两种基本方法:

  1. 手动将数据库中的项目相互关联(耗时但灵活)。
  2. 根据过去的购买情况自动确定其他人购买的商品。
  3. 看起来你倾向于后者。我已经为一个销售各种商品的网站写过这样的内容,并根据其他客户过去的购买建议相关商品。这是我使用的查询:

    SELECT items.*, COUNT( cartitems.itemid ) AS c FROM 
    items
    LEFT JOIN cartitems ON ( cartitems.itemid = items.id )
    LEFT JOIN carts ON ( carts.id = cartitems.cartid )
    WHERE (
        carts.id IN (
            /* Every cart with this item: */
            SELECT cartitems.cartid
            FROM cartitems
            WHERE ( cartitems.itemid = 123456 )
        )
            AND
        ( cartitems.itemid != 123456 ) /* Items other than this one */
            AND
        carts.checkedout = TRUE /* Carts that have checked out */
    )
    GROUP BY cartitems.itemid
    ORDER BY c DESC
    LIMIT 5
    

    此示例假设他们正在查看的项目的ID为123456.“购物车”表包含过去的购买。 “cartitems”表包含过去购买的单个商品。

答案 8 :(得分:0)

在搜索问题的有意义的答案时,我看到了这个文件:

Topic Tracking Model for Analyzing Consumer Purchase Behavior

我只阅读了部分文档,但看起来它可能是您问题的理论答案。我希望它有所帮助。

答案 9 :(得分:0)

1 - 将每个产品分类为3层分类(类型/功能/价格)作为示例,因此当选择特定产品时,您可以忽略所有其他类别,这将节省太多时间和精力,那么您可以从中选择随机产品同样(类型/功能/价格)扔进你的建议框。

如果您不想在理论机器智能或复杂算法的麻烦中潜水,那么就可以进行编码。

度过愉快的一天:)

答案 10 :(得分:0)

我认为最好的方法是使用“标签模式”。 例如:

products Table:
=================================
product_id
product_name

tags Table:
=================================
tag_id
tag_name

tags_products Table:
=================================
id_product
id_tag

products registry example:
=================================
1 | Beer
2 | Chips
3 | Cake

tags registry example:
=================================
1 | beer
2 | chips
3 | cake

tags_products registry example:
=================================
1 | 2
1 | 3
2 | 1
2 | 3
3 | 1

然后,您可以轻松关联所有内容并轻松进行查询:)

快乐。

素不相识。

答案 11 :(得分:0)

与上述人员一样,完成这项工作的关键是实施

'x users'还买了'y item'

基本上您需要做的是在现有数据库中试验更多的表行和列,或者链接new以保存人们查看的产品的统计数据。 您需要的一个非常重要的列是评级或喜欢(不喜欢脸书)

您需要新的表格,如:

  • 朋友表(将user_ID连接在一起形成'朋友')
  • 喜欢表格(会将“朋友”表和“产品”表格与“匹配”产品相关联)
  • 统计表(将链接到Like表和Product表)

您还需要使用额外的列更新现有表,例如:

  • 每件产品的average_rating(0-5 / 0-10 / 0-100或类似0/1)

如果用户x 用户y 是朋友,则他们的ID会在好友列表中匹配。喜欢的表格会将两个用户为朋友的产品与产品z 一起使用:(评级0-5 / 0-10 / 0- 100;像0/1)你决定采用哪种方法。

当产品被喜欢/评级时,其ID将具有特定列名称产品评级,使用+ X或-X更新,具体取决于其评级或喜欢。如果产品被评级或喜欢,您还需要确定平均值。一个例子是50%的评级和100个喜欢的评论。

完成所有这些后,当用户x购买产品时,您可以匹配以查看是否:

  • 用户有朋友
  • 用户的朋友也购买产品y
  • 什么是朋友的评价/喜欢产品y
  • 其他产品用户x的朋友评价高或喜欢
  • 其他产品用户x的朋友评价差或不喜欢

除了推荐产品外,您还可以做很多事情。只需一点点努力,您就可以与人们及其朋友进行热门交易。新产品在市场上出现,它和产品z一样,只会更好。如果X人和他们的所有朋友都喜欢产品z,他们可能会喜欢并购买新产品。