在 Python 中实现 Apriori 算法

17 Mar 2025 | 5 分钟阅读

Apriori 算法是一种机器学习算法,用于理解各种产品之间关系的模式。该算法最常见的用途是根据用户购物车中已有的商品来推荐商品。沃尔玛尤其利用该算法向用户推荐商品。

数据集: 杂货店数据

Python 实现算法

步骤 1:导入所需的库

步骤 2:加载和探索数据

输出

InvoiceNoStockCode描述数量InvoiceDateUnitPriceCustomerID国家
053636585123AWHITE HANGING HEART T-LIGHT HOLDER62010-12-01 08:26:002.5517850.0英国
153636571053WHITE METAL LANTERN62010-12-01 08:26:003.3917850.0英国
253636584406BCREAM CUPID HEARTS COAT HANGER82010-12-01 08:26:002.7517850.0英国
353636584406BKNITTED UNION FLAG HOT WATER BOTTLE62010-12-01 08:26:003.3917850.0英国
453636584029ERED WOOLLY HOTTIE WHITE HEART.62010-12-01 08:26:003.3917850.0英国

输入

输出

Index(['InvoiceNo', 'StockCode', 'Description', 'Quantity', 'InvoiceDate',
       'UnitPrice', 'CustomerID', 'Country'],
      Dtype = 'object')

输入

输出

array(['United Kingdom', 'France', 'Australia', 'Netherlands', 'Germany',
       'Norway', 'EIRE', 'Switzerland', 'Spain', 'Poland', 'Portugal',
       'Italy', 'Belgium', 'Lithuania', 'Japan', 'Iceland',
       'Channel Islands', 'Denmark', 'Cyprus', 'Sweden', 'Austria',
       'Israel', 'Finland', 'Bahrain', 'Greece', 'Hong Kong', 'Singapore',
       'Lebanon', 'United Arab Emirates', 'Saudi Arabia',
       'Czech Republic', 'Canada', 'Unspecified', 'Brazil', 'USA',
       'European Community', 'Malta', 'RSA'], dtype = object)

步骤 3:清理数据

步骤 4:根据交易地区拆分数据

步骤 5:对数据进行独热编码

步骤 6:构建模型并分析结果

a) 法国

输出

antecedents \
45 (JUMBO BAG WOODLAND ANIMALS)
260 (PLASTERS IN TIN CIRCUS PARADE, RED TOADSTOOL ...
272 (RED TOADSTOOL LED NIGHT LIGHT, PLASTERS IN TI...
302 (SET/6 RED SPOTTY PAPER CUPS, SET/20 RED RETRO...
301 (SET/6 RED SPOTTY PAPER PLATES, SET/20 RED RET...
consequents antecedent support consequent support \
45 (POSTAGE) 0.076531 0.765306
260 (POSTAGE) 0.051020 0.765306
272 (POSTAGE) 0.053571 0.765306
302 (SET/6 RED SPOTTY PAPER PLATES) 0.102041s 0.127551
301 (SET/6 RED SPOTTY PAPER CUPS) 0.102041 0.137755
support confidence lift leverage conviction
45 0.076531 1.000 1.306667 0.017961 inf
260 0.051020 1.000 1.306667 0.011974 inf
272 0.053571 1.000 1.306667 0.012573 inf
302 0.099490 0.975 7.644000 0.086474 34.897959
301 0.099490 0.975 7.077778 0.085433 34.489796

从以上输出可以看出,纸杯、纸盘和盘子在法国一起被购买。这是因为法国人每周至少会与朋友和家人聚会一次。此外,由于法国政府禁止在该国使用塑料,人们不得不购买纸质替代品。

b) 英国


Implementing Apriori Algorithm in Python

如果更详细地检查英国交易的指南,会发现英国消费者购买各种颜色的茶盘。原因可能是英国人喜爱茶,并倾向于收集不同颜色的茶盘以适应不同场合。

c) 葡萄牙

输出

antecedents consequents \
1170 (SET 12 COLOUR PENCILS DOLLY GIRL) (SET 12 COLOUR PENCILS SPACEBOY)
1171 (SET 12 COLOUR PENCILS SPACEBOY) (SET 12 COLOUR PENCILS DOLLY GIRL)
1172 (SET OF 4 KNICK KNACK TINS LONDON) (SET 12 COLOUR PENCILS DOLLY GIRL)
1173 (SET 12 COLOUR PENCILS DOLLY GIRL) (SET OF 4 KNICK KNACK TINS LONDON)
1174 (SET 12 COLOUR PENCILS DOLLY GIRL) (SET OF 4 KNICK KNACK TINS POPPIES)
antecedent support consequent support support confidence lift \
1170 0.051724 0.051724 0.051724 1.0 19.333333
1171 0.051724 0.051724 0.051724 1.0 19.333333
1172 0.051724 0.051724 0.051724 1.0 19.333333
1173 0.051724 0.051724 0.051724 1.0 19.333333
1174 0.051724 0.051724 0.051724 1.0 19.333333
leverage conviction
1170 0.049049 inf
1171 0.049049 inf
1172 0.049049 inf
1173 0.049049 inf
1174 0.049049 inf

在分析葡萄牙交易的关联规则时,可以发现饭盒套装(Knick Knack Tins)和彩色铅笔的使用。这两件物品通常属于小学儿童。学生们在学校需要这两样物品来携带午餐以及进行需要创造力的工作,因此将它们配对是有道理的。

d) 瑞典

输出

antecedents consequents \
0 (PACK OF 72 SKULL CAKE CASES) (12 PENCILS SMALL TUBE SKULL)
1 (12 PENCILS SMALL TUBE SKULL) (PACK OF 72 SKULL CAKE CASES)
4 (36 DOILIES DOLLY GIRL) (ASSORTED BOTTLE TOP MAGNETS)
5 (ASSORTED BOTTLE TOP MAGNETS) (36 DOILIES DOLLY GIRL)
180 (CHILDRENS CUTLERY DOLLY GIRL) (CHILDRENS CUTLERY CIRCUS PARADE)
antecedent support consequent support support confidence lift \
0 0.055556 0.055556 0.055556 1.0 18.0
1 0.055556 0.055556 0.055556 1.0 18.0
4 0.055556 0.055556 0.055556 1.0 18.0
5 0.055556 0.055556 0.055556 1.0 18.0
180 0.055556 0.055556 0.055556 1.0 18.0
leverage conviction
0 0.052469 inf
1 0.052469 inf
4 0.052469 inf
5 0.052469 inf
180 0.052469 inf

通过分析上述指南和上述规则,我们发现女孩和男孩的餐具被放在一起。这是有道理的,因为当父母为孩子购买餐具时,他们希望这些餐具是孩子喜欢的。