标签: market-basket-analysis

基于Apriori算法生成候选项集

我正在尝试实施 Apriori 算法。为此,我需要从长度为 k 的项集(作为字典 L 给出)生成长度为 k+1 的项集。生成组合时必须遵循先验原则。原理说明:只有在输入 L 中存在其所有子集时,才能生成长度为 k+1 的集合。

我有一本字典,我需要从中生成项集。

我目前的尝试是这样的:

import itertools as it
def generateItemsets(Lk,k):

    comb = sum(Lk.keys(), tuple())
    Ck = set(it.combinations(comb, k))
    return Ck
Run Code Online (Sandbox Code Playgroud)

但是该功能需要永远并在错误处中断:超出IOPub数据速率。

示例 1:

Input (dictionary): {(150,): 2, (160,): 3, (170,): 3, (180,): 3}

Output (set): {(150, 160), (150, 170), (150, 180), (160, 170), (160, 180), (170, 180)}
Run Code Online (Sandbox Code Playgroud)

更新 1

该数据集包含近 16000 笔交易。它看起来像这样:

[![数据集][1]][1]

独特的项目范围从 0-999

如您所见,该函数将被赋予一个输入 L_k,它应该输出 C_k+1。输入 L_k 是一个像 ({(301,350): 46, (966,970): 612, (310,350): 216, (548, 550): …

python apriori market-basket-analysis

9
推荐指数
1
解决办法
312
查看次数

如何为arules准备交易数据到篮子里

好的,所以我搜索了很多,并希望在销售数据上运行arules.我只需要以正确的格式正确获取数据,并使用正确的"因子"或"变量"并以篮子形式设置.

现在我有Order#的销售数据,然后是里面的项目.每个订单都是唯一的(每个新订单,新的#创建并包含部分#),但相同的项目显然可以出现在许多订单中.

目前,我的数据设置如下:

Order#    Part#   PartDescription
1         A       PartA
1         B       PartB
1         G       PartG
2         R       PartR
3         A       PartA
3         B       PartB
4         E       PartE
5         Y       PartY
6         A       PartA
6         B       PartB
6         F       PartF
6         V       PartV

因此,R不喜欢这种形式,我必须以arules和数据分析将接受的形式得到它.

是的我将它保存为文本文件并尝试了.csv文件,但是如果我可以逐步说明如何准备它或在RStudio中操作它会很棒.

我读到它假设是一个篮子形式,如..

1(A,B,G)
2(R)
3(A,B)
4(E)
5(Y)
6(A,B,F,V)

如果这不准确,请纠正我.我明白了这个想法,但我只需要一步一步的指示,这些指示似乎无处可寻.我尝试过使用dplyr和tidyr.我对数据分析有很好的理解,但需要更多关于RStudio的直接帮助,所以如果我可以一步一步地进行,我会进一步理解这一点.

r arules market-basket-analysis

8
推荐指数
1
解决办法
1万
查看次数

如何训练序列项目的LSTM模型?

我尝试将LSTM模型用于下一个篮子推荐.我想应用与本文相同的方法:下一个篮子推荐的动态循环模型

在我的情况下,我有一些用户,他们在不同的时间购买一些物品.所以我设计了我的X数据,如:

    user ID       timestep     sequence items    
    user1            1          array(1, 20)
    user1            2            ...       

    user2            1            ...
    user2            2            ...
    user2            3            ...

    user3            1            ...
    user3            1            ...
Run Code Online (Sandbox Code Playgroud)

序列项表示具有形状(1,20)的数组.这些向量是在每个序列期间购买的每个项目(使用word2vec生成)的平均表示.

然后我设计我的标签y:

    user ID       label    
    user1         np.array(1, 6000)
    user2         ...
    user3         ... 
Run Code Online (Sandbox Code Playgroud)

标签用户表示每个用户的下一个订单,在他们过去的订单之后表示X数据.另外,标签是[1 0 1 0 0 0 .. 1]之类的向量,其中1表示用户购买了该项目,否则为0.

因此,我想使用LSTM来训练每个用户的过去序列以预测下一个购买序列.下面,我定义了一个LSTM模型,我没有返回序列,因为我有一个用户标签.

  model_rnn = Sequential()
  model_rnn.add(LSTM(20, return_sequences=False, input_shape=(None, 20)))
  model_rnn.add(Dropout(0.2))
  model_rnn.add(Dense(nb_classes)) 
  model_rnn.add(Activation("sigmoid"))                

  model_rnn.compile(loss='binary_crossentropy', optimizer="Adagrad")
  n_index = X.index.values
  n_sample = int(len(X.index.values)*0.7)
  user_index = np.random.choice(n_index, n_sample, replace=False)
  n_epochs = 10      
  for _ in …
Run Code Online (Sandbox Code Playgroud)

recommendation-engine sequence market-basket-analysis lstm keras

8
推荐指数
1
解决办法
743
查看次数

R篮子分析使用具有唯一订单号但重复订单组合的arules包

R篮子分析使用具有唯一订单号但重复订单组合的arules包

刚刚学习R.我正在尝试使用arules包进行篮子分析(但我完全接受任何其他包装建议!)来比较所购买的6种不同商品类型的所有可能组合.

我的原始数据集如下所示:

OrderNo, ItemType, ItemCount  
111, Health, 1  
111, Leisure, 2  
111, Sports, 1  
222, Health, 3      
333, Food, 7  
333, Clothing, 1  
444, Clothing, 2  
444, Health, 1  
444, Accessories, 2  
Run Code Online (Sandbox Code Playgroud)

...

该名单还有大约3,000个观察结果.

我将数据折叠为一个矩阵,每个唯一的订单包含一行,其中包含特定ItemType的计数:

 OrderNo, Accessories, Clothing, Food, Health, Leisure, Sports  
 111, 0, 0, 0, 1, 2, 1  
 222, 0, 0, 0, 3, 0, 0  
 333, 0, 1, 7, 0 , 0, 0  
 444, 2, 2, 0, 1, 0, 0  
 . . .
Run Code Online (Sandbox Code Playgroud)

每次我尝试使用以下命令读取事务(以及一百万个尝试的变体):

tr <- read.transactions("dataset.csv", rm.duplicates=FALSE, …
Run Code Online (Sandbox Code Playgroud)

r arules market-basket-analysis

6
推荐指数
2
解决办法
1万
查看次数

使用R中的arules包与重复事务进行关联分析

我想以篮子格式创建一个事务对象,我可以随时调用它进行分析.数据包含逗号分隔的项目,包含1001个事务.前10个交易看起来像这样:

hering,corned_b,olives,ham,turkey,bourbon,ice_crea
baguette,soda,hering,cracker,heineken,olives,corned_b
avocado,cracker,artichok,heineken,ham,turkey,sardines
olives,bourbon,coke,turkey,ice_crea,ham,peppers
hering,corned_b,apples,olives,steak,avocado,turkey
sardines,heineken,chicken,coke,ice_crea,peppers,ham
olives,bourbon,coke,turkey,ice_crea,heineken,apples
corned_b,peppers,bourbon,cracker,chicken,ice_crea,baguette
soda,olives,bourbon,cracker,heineken,peppers,baguette
corned_b,peppers,bourbon,cracker,chicken,bordeaux,hering
...
Run Code Online (Sandbox Code Playgroud)

我观察到数据中存在重复的事务并将其删除但每次我尝试读取事务时,我得到:

asMethod(object)中的错误:无法使用重复项的事务强制列表

这是我的代码:

data <- read.csv("AssociationsItemList.txt",header=F)
data <-  data[!duplicated(data),]
pop <- NULL
for(i in 1:length(data)){
pop <- paste(pop, data[i],sep="\n")
}
write(pop, file = "Trans", sep = ",")
transdata <- read.transactions("Trans", format = "basket", sep=",")
Run Code Online (Sandbox Code Playgroud)

我确信我错过了一些不重要的东西.请提供帮助.

r arules market-basket-analysis

6
推荐指数
1
解决办法
1万
查看次数

对订单详细信息进行购物篮分析

我有一张看起来(缩写)的表格:

| order_id  | item_id   | amount    | qty   | date          |
|---------- |---------  |--------   |-----  |------------   |
| 1         | 1         | 10        | 1     | 10-10-2014    |
| 1         | 2         | 20        | 2     | 10-10-2014    |
| 2         | 1         | 10        | 1     | 10-12-2014    |
| 2         | 2         | 20        | 1     | 10-12-2014    |
| 2         | 3         | 45        | 1     | 10-12-2014    |
| 3         | 1         | 10        | …
Run Code Online (Sandbox Code Playgroud)

sql market-basket-analysis

6
推荐指数
1
解决办法
6036
查看次数

使用相互依赖的值在矩阵中进行矢量化计算

我在多个时间分辨率下跟踪多个离散时间序列,产生SxRxB矩阵,其中S是时间序列的数量,R是不同分辨率的数量,B是缓冲区,即每个系列记住的值.每个系列都是离散的,并使用有限范围的自然数来表示其值.我会在这里称这些"符号".

对于每个系列,我想计算在所有测量中,任何先前测量符号直接在任何当前测量符号之前的频率.我已经用如下所示的for循环解决了这个问题,但是出于显而易见的原因想要对其进行矢量化.

我不确定我的数据结构方式是否有效,所以我愿意接受那些建议.特别是我认为比率矩阵可以做得与众不同.

提前致谢!

def supports_loop(data, num_series, resolutions, buffer_size, vocab_size):
    # For small test matrices we can calculate the complete matrix without problems
    indices = []
    indices.append(xrange(num_series))
    indices.append(xrange(vocab_size))
    indices.append(xrange(num_series))
    indices.append(xrange(vocab_size))
    indices.append(xrange(resolutions))

    # This is huge! :/
    # dimensions:
    #   series and value for which we calculate,
    #   series and value which precedes that measurement,
    #   resolution
    ratios = np.full((num_series, vocab_size, num_series, vocab_size, resolutions), 0.0)

    for idx in itertools.product(*indices):
        s0, v0 = idx[0],idx[1]  # the series and symbol for which we …
Run Code Online (Sandbox Code Playgroud)

python numpy vectorization market-basket-analysis

5
推荐指数
1
解决办法
336
查看次数

从规则冻结集中提取字符串

有以下声明:

rules = association_rules(frequent_itemsets, metric="lift", min_threshold=1.2) 
Run Code Online (Sandbox Code Playgroud)

我得到一个格式的规则数据框:

frozenset({'Co_Apples'})
Run Code Online (Sandbox Code Playgroud)

但我需要将 a 提取Co_Apples为字符串。

我怎样才能做到这一点?

python apriori market-basket-analysis frozenset mlxtend

3
推荐指数
2
解决办法
5014
查看次数

在R中安装arules的软件包

我和其他用户的上一篇文章有同样的问题如何在R中上传arules包

我使用的是R版3.0.2(32位)

错误消息是这样的:

> install.packages("arules")
Installing package into ‘C:/Users/HKGGAIT001/Documents/R/win-library/3.0’
(as ‘lib’ is unspecified)
trying URL 'http://cran.ms.unimelb.edu.au/bin/windows/contrib/3.0/arules_1.1-1.zip'
Error in download.file(url, destfile, method, mode = "wb", ...) : 
  cannot open URL 'http://cran.ms.unimelb.edu.au/bin/windows/contrib/3.0/arules_1.1-1.zip'
In addition: Warning message:
In download.file(url, destfile, method, mode = "wb", ...) :
  cannot open: HTTP status was '404 Not Found'
Warning in download.packages(pkgs, destdir = tmpd, available = available,  :
  download of package ‘arules’ failed
Run Code Online (Sandbox Code Playgroud)

这意味着包裹不再可用吗?另外,还有其他市场购物篮分析套餐吗?

非常感谢!

r arules market-basket-analysis

2
推荐指数
1
解决办法
1万
查看次数

将条件应用于R中的多个列

我有一个数据集,它以虚拟变量的形式代表每个客户的一个篮子.

例如:

P1  P2  P3  P4  P5
0   2   0   0   0
0   1   0   0   0
0   0   0   3   0 
0   0   0   0   0
0   0   5   0   0
1   1   0   0   0
Run Code Online (Sandbox Code Playgroud)

其中P1代表产品1,依此类推.

本质上,我想运行一个简单的查询,在其中我可以转换所有超过1到1的值.这样我的数据中只有1和0.我能够使用以下几行来完成它:

df[(df$P1>1] <- 1
Run Code Online (Sandbox Code Playgroud)

是否适用所有功能?

r market-basket-analysis dummy-variable

2
推荐指数
1
解决办法
128
查看次数