build议用户可以购买什么,如果他已经有东西在购物车
我正在开发出售食物的电子商店。 我想要一个build议框,在那里我会build议我的用户可以购买什么,基于他已经有什么购物车。 如果他有啤酒,我希望他可以通过降低他可能购买的概率来推荐筹码和其他东西。 但是我希望我的algorithm能够学习根据所有用户以前的购买build议杂货。 我应该从哪里开始? 我有食品杂货表user_id
, item_id
, date
和类似的。 我怎样才能build立一个没有蛮力的build议,这是不可能的。
你所描述的是推荐引擎。 更具体的是协同过滤。 这是亚马逊“购买x的人也买了y”function的核心,以及Netflix的推荐引擎。
这是一个不平凡的事业。 因为要获得甚至是远程有用的东西,首先要做的不仅仅是构build电子商务网站。
例如:
- 你不想推荐已经在篮子里的物品。
- 你不想推荐已经在篮子里的东西的更便宜的版本。
- 你不想推荐缺货的产品。
- 你不想推荐那些统计上有效的东西,但没有意义(“嘿,你买了尿布,为什么不买啤酒?”) – 有一个故事,在超市里,有一个统计的相关性,因为爸爸出去晚上买尿布,同时拿起六包)。
- 您确实想推荐现在正在进行促销的项目
- 您不想推荐与促销中的商品类似的商品
当我尝试了一个类似的项目时,很难向非技术人员解释,电脑根本不明白推荐啤酒和尿布并不合适。 一旦我们得到了基本解决scheme的工作,构build排除和边缘案例逻辑至less需要很长时间。
实际上,我认为这是你的select:
- 手动维护相关产品。 费时,但不太可能导致怪异。
- 使用现成的解决scheme – 要么是SaaS,要么包含一个像R这样的库。
- 推荐(半)随机产品。 有一套你想推荐的产品,并随机挑选一个产品 – 例如,促销产品,“畅销产品”列表中的产品,成本低于x的产品。 排除可能有问题的类别。
所有这些select都可以在合理的时间内实现; 从头开始build立一个合适的解决scheme的问题是,每个人都会对亚马逊进行衡量,他们在你身上有一个开始。
这是Apriorialgorithm在数据挖掘中解决的常见问题。 您可能需要创build另一个表来维护此统计信息,然后根据首选组合提出build议
Humm …你正在寻找一个产品推荐引擎…那么,他们基本上有三种口味:
- 协作过滤
- 基于内容的过滤
- 混合推荐系统
第一个收集和存储你的用户的活动,偏好,行为等数据…这些数据然后发送到一个引擎,将其分为用户渠道 。 每个频道都有一定的特色好恶。 所以,当你有一个新的访问者,他或她将被分类和被指定一个特定的用户configuration文件 。 然后将根据此configuration文件的喜好/不喜欢显示项目。
现在,基于内容的过滤使用了一种不同的方法 – 一种不那么社交的方法 – 只考虑用户以前的浏览历史,他的偏好和活动。 基本上,这将根据此用户以前喜欢/购买的内容来创buildbuild议。
但为什么只select其中一个,对吧? 混合推荐系统使用一点二者来提供个性化的社交推荐 。 在提供build议时,这些通常更为准确。
我认为,当您有大量用户涌入时,协作过滤是一个很好的select – build立一个只有42个用户每月访问您的网站的好渠道是相当困难的。 第二种select,基于内容,对于有很多产品的小型网站来说更好 – 但是,恕我直言,第三个是你自己的 – build立一些能够让用户从一开始就收集所有他们产生的数据,将来能够提供类似亚马逊的推荐体验!
build立其中之一并不容易,因为我相信你已经知道了……但是我强烈推荐这本书(使用个人历史过滤!),这对我来说真的已经过去了: http:// www .amazon.com /algorithm,智能的Web-HARALAMBOS-Marmanis / DP / 1933988665
祝你好运,学习好!
我认为最好的办法是分类你的项目,并使用该信息做出select。
我在一个杂货店网站上做了这个,结果工作得很好。 这个想法是将组项目分成若干类别。
例如,让我们拿一根香蕉。 这是一种水果,但它也常用玉米片或谷类食品早餐。 谷类食品也是一种早餐食品,但某些食品可能被认为是健康食品,而其他食品则是含糖食品。
通过这种方法,您可以快速开始制作这样的表格:
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
通过这样简单的查找,您可以根据这些分组轻松findbuild议的好项目。
可以说有人的篮子里有一个香蕉,缪斯利和糖泡芙。
这是三个早餐,两个健康,一个不是很多。
build议牛奶,因为它匹配所有三个。 没有冲动购买? 再试一次,扔猕猴桃。 等等等等。
这里的想法是匹配许多不同类别的项目(特别是那些可能不是直接明显的项目),并使用这些数字来为您的客户build议最好的项目。
根据购买该项目的其他客户的购物习惯进行交叉销售。 假设您在数据库中有这个购买logging(订单表):
- 啤酒,薯片,苏打水
- 啤酒,苏打水
- 苏打水,蛋糕
- 芯片,啤酒
- 蛋糕,芯片,啤酒
那么,如果你的顾客在他的购物车上有啤酒,根据你的顾客的购物习惯,你可以很容易地进行查询,看到啤酒相关的物品是:
- 芯片(3次)
- 苏打(2次)
- 蛋糕(1次)
那么你可以build议芯片和苏打水可能…你的采购历史越大,系统将提出更准确的build议。
你可能会喜欢非负matrix分解algorithm,它可以做你正在寻找的东西(除了内维尔K提到的东西)。 购买杂货的数据库表将成为matrix分解。 一个因素将是一个包含人们一起买东西的matrix。 这个matrix将比你比较每个杂货和所有其他的matrix小得多。 它会自动find合适的食品杂货群,比如Fluffehbuild议的类别,你会自动find那些。 执行步骤:
- 每天或每周:在购买的杂货店表上运行分解以find新的“趋势”。 保存因子matrix。
- 如果一个新的购物车到达:以购物车为参数调用一个求解器,你会得到一个充满了适合的产品的购物车。 build议不在购物车中的东西。
有人已经提到了图书编程集体智慧 。 这是一个好的开始。
你可以使用一个人工neural network学习根据以前的购买结合不同的产品。
这里有两个关于这个话题的资源:
有两个基本的方法来做到这一点:
- 手动关联数据库中的项目(耗时但灵活)。
- 根据他们过去的购买情况自动确定其他人购买的项目。
看起来你正在倾向于后者。 我写了一个这样的网站,销售各种物品,并根据其他客户的过去的购买build议相关的项目。 这是我使用的查询:
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
此示例假定他们正在查看的项目具有123456的标识。“购物车”表包含过去的购买。 “cartitems”表包含过去购买的单个项目。
寻找一个有意义的回答你的问题,我遇到了这个文件:
分析消费者购买行为的主题追踪模型
我只读了部分文档,但看起来这可能是您的问题的理论答案。 我希望它有帮助。
1 – 将每个产品分类为3层分类(types/function/价格)作为例子,所以当一个特定的产品select,你可以忽略所有其他类别,这将节省太多的时间和精力,那么你可以select相同的随机产品types/function/价格)扔在你的build议框中。
这是如果你不想在理论机器智能或复杂algorithm的麻烦潜水编码。
祝你今天愉快 :)
我认为最好的办法是用“标签模式”。 例如:
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
然后,你可以把所有你想要的和做一个简单的查询:)
要开心。
素不相识。
就像上面所说的每个人一样,做这个工作的关键是要实现这个目标
'x用户'也买了'y item'
基本上你需要做的是在已经存在的数据库中试验更多的表格行和列,或者链接新的关于人们查看的产品的统计数据。 您需要的一个非常重要的列是评级或类似(不像Facebook)
你需要新的表格,如:
- 朋友表(将用户ID联系在一起形成“朋友”)
- 像表(将链接朋友表和产品表的'匹配'产品)
- 统计表(将链接到Like表和Product表)
您还需要使用额外的列更新现有的表,如:
- Product_table每个产品的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
- 什么是朋友对产品的评价/喜欢?
- 其他产品用户x的朋友评价高或喜欢
- 哪些其他产品的用户x的朋友评价不好或不喜欢
你可以做更多的build议产品。 只需要一点点努力,你就可以和人和朋友进行热销。 市场上出现的新产品,只有更好的产品z。 如果X人和他们的朋友喜欢产品Z,他们可能会喜欢并购买新产品。