转载:关联规则算法Apriori的学习与SQL简单实现购物篮分析
关联规则挖掘用于寻找给定数据集中项之间的有趣的关联或相关关系。
关联规则揭示了数据项间的未知的依赖关系,根据所挖掘的关联关系,可以从一个数据对象的信息来推断另一个数据对象的信息。
例如购物篮分析。牛奶 ⇒ 面包 [支持度:3%,置信度:40%]
支持度3%:意味3%顾客同时购买牛奶和面包。
置信度40%:意味购买牛奶的顾客40%也购买面包。
规则的支持度和置信度是两个规则兴趣度度量,它们分别反映发现规则的有用性和确定性。
这里就使用SQL做简单的购物篮分析(仅实现单维关联规则算法)。
声明1: 使用的数据全部都是随机造出的,因此,分析的结果不代表真实的场景。
声明2: 此次分析过程在Mysql中实现。
建表语句如下:
CREATE TABLE shopcart (
car VARCHAR(50),
product VARCHAR(200)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
数据文件见附件。
数据格式如下:
cart,product
shopcart_1,家具/家具定制/宜家代购
shopcart_10,玩具/模型/娃娃/人偶
shopcart_10,个人护理/保健/按摩器材
shopcart_10,奶粉/辅食/营养品
shopcart_10,品牌手表/流行手表
shopcart_10,酒店客栈/景点门票/度假旅游
shopcart_100,个人护理/保健/按摩器材
shopcart_100,珠宝/钻石/翡翠/黄金
shopcart_100,品牌保健品
shopcart_100,笔记本电脑
shopcart_100,益智玩具/早教/童车床/出行
shopcart_1000,尿片/洗护/喂哺等用品
shopcart_1000,家装饰品/窗帘/地毯
shopcart_1000,传统滋补品/其他保健营养品
shopcart_1000,女士内衣/男士内衣/家居服
shopcart_1000,电脑硬件/显示器/电脑周边
shopcart_101,网店/网络服务/个性定制/软件
shopcart_101,女装/女士精品
shopcart_101,粮油/蔬果/干货/速食/水产
shopcart_101,乐器/吉他/钢琴/配件
shopcart_102,厨房电器
shopcart_103,奶粉/辅食/营养品
shopcart_103,女鞋
每个商品一条记录,没有真实的交易数据,因此用类目代替商品名称。
第一步:使用自关联(多对多),统计每两种商品同时被购买的次数。
CREATE TABLE tmp1 AS
select product_a,
product_b,
count(distinct cart) as buy_cnt_together
from (
select a.cart,
a.product as product_a,
b.product as product_b
from shopcart a join shopcart b
on (a.cart = b.cart)
) x
group by product_a,
product_b;
数据格式如下:
第二步:计算置信度和支持度
create table result as
select product_a,
product_b,
buy_cnt_together,
buy_cnt,
zz.cart_cnt,
xx.buy_cnt_together/yy.buy_cnt AS confidence,
xx.buy_cnt_together/zz.cart_cnt AS support
from tmp1 xx join (
----每种商品被购买的交易次数
SELECT product,
count(DISTINCT cart) AS buy_cnt
FROM shopcart
GROUP BY product
) yy
on (xx.product_a = yy.product)
join (
----总的交易次数
SELECT COUNT(DISTINCT cart) AS cart_cnt
FROM shopcart
) zz
where xx.product_a <> xx.product_b
数据如下:
–验证,购买了”服饰配件/皮带/帽子/围巾”商品,同时购买”演出/吃喝玩乐折扣券”商品
–购买”服饰配件/皮带/帽子/围巾”交易次数 47
SELECT COUNT(DISTINCT cart)
FROM shopcart
WHERE product = ‘服饰配件/皮带/帽子/围巾';
–同时购买了”服饰配件/皮带/帽子/围巾”和”演出/吃喝玩乐折扣券”的次数 9
SELECT COUNT(DISTINCT cart)
FROM tmp1
WHERE products LIKE ‘%服饰配件/皮带/帽子/围巾%’
AND products LIKE ‘%演出/吃喝玩乐折扣券%’
–因此,这条规则置信度为 9/47=0.1915
–总共交易数为 997
SELECT COUNT(DISTINCT cart) AS cart_cnt
FROM shopcart
–因此,这条规则支持度为 9/997 = 0.009
商品A and 商品B
置信度计算规则为: 同时购买商品A和商品B的交易次数/购买了商品A的次数
支持度计算规则为: 同时购买了商品A和商品B的交易次数/总的交易次数