2009年7月8日
一 前言
使用关联规则挖掘算法分析购物清单时,会产生不止“啤酒→尿布”的单一关联规则,而将出现涉及多种商品的“纵横交错”的多条关联规则。针对这一实际问题,本文利用学生日常购物记录数据进行关联分析,通过概念分层从不同粒度上分析商品之间的关联性,从而找到商品之间的关联规则,实现优化超市货物摆放次序的目的。
二 数据预处理
1)在SQL server 2000 查询分析器里执行下面的SQL语句
declare @sql varchar(8000)
set @sql = 'select zid ,xh'
select @sql = @sql + ' , max(case goodsid when ''' + goodsid + ''' then goodsid end) [' + 'n'+ goodsid + ']'
from (select distinct goodsid from rcxfjl) as a
set @sql = @sql + ' into table_a from rcxfjl group by zid,xh'
exec(@sql)
2)在PB里将有购买记录的列改为”yes”
for i=1 to dw_1.rowcount()
for li_index=1 to long(dw_1.object.datawindow.column.count)
if integer(dw_1.getitemstring(i,dw_1.describe('#' + string(li_index) + ".name")))>0 then
dw_1.setitem(i,dw_1.describe('#' + string(li_index) + ".name"),"yes")
end if
next
next
3)将处理好的数据直接导出到Excel中
4)将Excel表中的空格替换成”?”(在weka中?表示缺省值)
三 前7710条真实数据分析
1 商品按小类分析
1.1 商品规范化
中类商品再分小类对挖掘没有太大意义,故都将其看作一类;对于学生来说,家庭用品也没有太大意义,将其删除掉。数据预处理过程如下:
统一商品名:
表1 统一商品
商品类名 | 原来编号 | 处理后编号 |
饮料 | 02 | 020010001 |
罐头\八宝粥 | 03001 | 030010001 |
冲调食品 | 03002 | 030020001 |
奶粉 | 03003 | 030030001 |
营养保健 | 03004 | 030040001 |
冲泡包面\粉 | 04001 | 040010001 |
罐头食品 | 04002 | 040020001 |
南北干货 | 04004 | 040040001 |
冷藏\冷冻食品 | 05001 | 050010001 |
冰制品 | 05002 | 050020001 |
外购面包 | 05003 | 050030001 |
个人清洁用品 | 07002 | 070020001 |
头饰\首饰 | 07003 | 070030001 |
纸类用品 | 07004 | 070040001 |
书报 | 10001 | 100010001 |
纸品 | 10002 | 100020001 |
文具 | 10003 | 100030001 |
礼品 | 10004 | 100040001 |
内衣 | 11001 | 110010001 |
睡衣 | 11002 | 110020001 |
鞋类 | 11003 | 110030001 |
女装 | 11004 | 110040001 |
男装 | 11005 | 110050001 |
帽子 | 11006 | 110060001 |
商品类名 | 编号 | 处理方式 |
烟酒 | 02004 | 删除 |
厨房调料 | 04003 | 删除 |
蔬菜 | 06001 | 删除 |
家禽类 | 06003 | 删除 |
肉类 | 06004 | 删除 |
家用清洁用品 | 07001 | 删除 |
百货\家居类 | 08 | 删除 |
百货\综合类 | 12 | 删除 |
Best rules found:
1. N030010001=yes 127 ==> N020010001=yes 71 conf:(0.56)
2. N010010002=yes 148 ==> N020010001=yes 66 conf:(0.45)
3. N010010001=yes 180 ==> N020010001=yes 79 conf:(0.44)
4. N010010002=yes 148 ==> N010010001=yes 63 conf:(0.43)
5. N040010001=yes 233 ==> N020010001=yes 99 conf:(0.42)
注:N030010001:罐头\八宝粥,020010001:饮料,N010010002:小面包,N010010001:蛋糕,040010001:冲泡包面\粉
从关联结果可知,买罐头\八宝粥又买饮料关联性最强,其次是小面包、蛋糕、冲泡包面\粉。在日常生活购物中,我们买了罐头、面包后再买饮料或牛奶的概率极大,关联结果比较符合事实。
1.2商品筛选
筛选出商品的购买次数>25的商品然后进行关联分析,结果如下
Minimum support: 0.035 ,Minimum metric Best rules found: 1. N010010005=yes 120 ==> N010010001=yes 53 conf:(0.44) 2. N010010005=yes 120 ==> N010010002=yes 53 conf:(0.44) 3. N010010002=yes 148 ==> N010010001=yes 63 conf:(0.43) 4. N010010002=yes 148 ==> N010010005=yes 53 conf:(0.36) 5. N010010001=yes 180 ==> N010010002=yes 63 conf:(0.35) 注:N010010005:绿豆糕,N010010001:蛋糕,N010010002:小面包 从关联结果可知,买绿豆糕又买蛋糕关联性最强,其次是小面包,关联结果也比较符合事实。 2 商品按中类分析 由于总共才有1535个事务,故将算法参数支持度和置信度设置较低,Minimum support: 0.04 ,Minimum metric Best rules found: 1. N01002=yes 136 ==> N01001=yes 77 conf:(0.57) 2. N02002=yes 161 ==> N01001=yes 83 conf:(0.52) 3. N03001=yes 127 ==> N01001=yes 65 conf:(0.51) 4. N02001=yes 226 ==> N01001=yes 104 conf:(0.46) 5. N04001=yes 233 ==> N01001=yes 85 conf:(0.36) 6. N01003=yes 176 ==> N01001=yes 62 conf:(0.35) 7. N02001=yes 226 ==> N04001=yes 67 conf:(0.3) 8. N04001=yes 233 ==> N02001=yes 67 conf:(0.29) 9. N01001=yes 494 ==> N02001=yes 104 conf:(0.21) 从结果可知,买糖果\巧克力又买饼干\糕点的概率最大,乳品饮料与饼干\糕点、罐头\八宝粥与饼干\糕点、碳酸饮料与饼干\糕点概率次之。 3 商品按大类分析 Minimum support: 0.04 ,Minimum metric Best rules found: 1. N02=yes N04=yes 103 ==> N01=yes 69 conf:(0.67) 2. N03=yes N02=yes 93 ==> N01=yes 61 conf:(0.66) 3. N01=yes N04=yes 106 ==> N02=yes 69 conf:(0.65) 4. N03=yes N01=yes 97 ==> N02=yes 61 conf:(0.63) 5. N02=yes 436 ==> N01=yes 238 conf:(0.55) 6. N03=yes 197 ==> N01=yes 97 conf:(0.49) 7. N03=yes 197 ==> N02=yes 93 conf:(0.47) 从结果可知买食品\酒饮类、食品\粮油类与买食品\休闲类关联性最大。 注:N01是“食品\休闲类”,N02是“食品\酒饮类”,N03是“食品\冲调类”,N04是“食品\粮油类”。 4 分析比较 从上面中类和大类分析可知,食品之间的关联性最大,其实这也是显而易见的,顾客买了罐头\八宝粥后会买饼干\糕点等食品,再买饮料的概率也很大,而实际中超市几乎都是这样安排商品的,大多食品都放在一起饮料放在旁边,这样方便顾客购买,增加销售。 四 后44904条随机数据分析 1 商品按小类分析 1.1 商品规范化 统一商品名: 表3 统一商品 Best rules found: 1. N030010001=yes 127 ==> N020010001=yes 71 conf:(0.56) 2. N010010002=yes 148 ==> N020010001=yes 66 conf:(0.45) 3. N010010001=yes 180 ==> N020010001=yes 79 conf:(0.44) 4. N010010002=yes 148 ==> N010010001=yes 63 conf:(0.43) 5. N040010001=yes 233 ==> N020010001=yes 99 conf:(0.42) 6. N010010001=yes 180 ==> N010010002=yes 63 conf:(0.35) 注:N030010001:罐头\八宝粥,020010001:饮料,N010010002:小面包,N010010001:蛋糕,040010001:冲泡包面\粉,N010010005 从关联结果可知,买罐头\八宝粥又买饮料关联性最强,其次是小面包与饮料,至于得出这样的结果,原因可能是我选取后面的44904条数据不完全都是随机生成的。 1.2商品筛选 筛选出商品的购买次数>190的商品然后进行关联分析,结果如下 Minimum support: 0.01 ,Minimum metric Best rules found: 1. N040010003=yes 252 ==> N040010002=yes 59 conf:(0.23) 2. N010010002=yes 290 ==> N010010001=yes 65 conf:(0.22) 3. N040010002=yes 282 ==> N040010003=yes 59 conf:(0.21) 4. N010010001=yes 313 ==> N010010002=yes 65 conf:(0.21) 注:N040010003:热干面,N040010002:酱拌面, N010010001:蛋糕,N010010002:小面包 从关联结果可知,买热干面又买酱拌面关联性最强,其次是小面包与蛋糕,但其支持度和置信度均较低。 2 商品按中类分析 Minimum support: 0.15,Minimum metric Best rules found: 1. N10003=yes 1335 ==> N08006=yes 793 conf:(0.59) 2. N10006=yes 1260 ==> N08006=yes 744 conf:(0.59) 3. N08005=yes 1159 ==> N08006=yes 680 conf:(0.59) 4. N08003=yes 1163 ==> N08006=yes 682 conf:(0.59) 5. N02001=yes 1186 ==> N08006=yes 693 conf:(0.58) 6. N01002=yes 1281 ==> N08006=yes 747 conf:(0.58) 7. N07001=yes 1207 ==> N08006=yes 701 conf:(0.58) 8. N06002=yes 1288 ==> N08006=yes 747 conf:(0.58) 9. N01001=yes 1383 ==> N08006=yes 787 conf:(0.57) 10. N07002=yes 2172 ==> N08006=yes 1231 conf:(0.57) 11. N01003=yes 2106 ==> N08006=yes 11 conf:(0.56) 12. N01001=yes 1383 ==> N07002=yes 707 conf:(0.51) 从结果可知,工具(N08006)与其他商品关联性较强,但是仔细分析数据库中的数据会发现中类“工具”下包括的商品种类是最多的,用随机数生成数据时“工具“中类的商品会明显多于其他中类的商品,所以用中类划分随机数进行关联分析不科学。 3 商品按大类分析 Minimum support: 0.5,Minimum metric Best rules found: 1. N10=yes 3170 ==> N08=yes 2753 conf:(0.87) 2. N01=yes 3368 ==> N08=yes 2920 conf:(0.87) 3. N07=yes 3244 ==> N08=yes 2811 conf:(0.87) 4. N02=yes 2800 ==> N08=yes 2418 conf:(0.86) 从结果可知,用大类划分随机数进行关联分析也存在上述问题。 4 分析比较 从上面中类和大类分析可知,不管用大类还是用中类划分随机数进行关联分析都会存在划分不平均的问题。而用处理后的小类商品分析得出买热干面又买酱拌面概率最大。 五 52614条混合数据分析 1 商品按小类分析 1.1 商品规范化 统一商品名: 表5 统一商品 Best rules found: 1. N070030002=yes 2267 ==> N020010001=yes 1272 conf:(0.56) 2. N100030001=yes 1407 ==> N020010001=yes 7 conf:(0.56) 3. N030020001=yes 1015 ==> N020010001=yes 565 conf:(0.56) 4. N040010001=yes 944 ==> N020010001=yes 522 conf:(0.55) 5. N070030003=yes 906 ==> N020010001=yes 4 conf:(0.54) 6. N030020001=yes 1015 ==> N070030002=yes 509 conf:(0.5) 注:N070030002:头绳,020010001:饮料,N100030001:果冻,N030020001:蜂蜜,040010001:冲泡包面\粉,N070030003:发卡 从关联结果可知,买头绳又买饮料关联性最强,其次是果冻、蜂蜜和冲泡包面\粉,另一个有趣的是发卡果冻关联性较大。 1.2商品筛选 筛选出商品的购买次数>190的商品然后进行关联分析,结果如下 Minimum support: 0.01 ,Minimum metric Best rules found: 1. N040010003=yes 252 ==> N040010002=yes 59 conf:(0.23) 2. N010010002=yes 290 ==> N010010001=yes 65 conf:(0.22) 3. N040010002=yes 282 ==> N040010003=yes 59 conf:(0.21) 4. N010010001=yes 313 ==> N010010002=yes 65 conf:(0.21) 注:N040010003:热干面,N040010002:酱拌面, N010010001:蛋糕,N010010002:小面包 从关联结果可知,买热干面又买酱拌面关联性最强,其次是小面包与蛋糕,但其支持度和置信度均较低。 2 商品按中类分析 Minimum support: 0.1,Minimum metric Best rules found: 1. N10006=yes 1299 ==> N08006=yes 755 conf:(0.58) 2. N10003=yes 1407 ==> N08006=yes 815 conf:(0.58) 3. N08005=yes 1196 ==> N08006=yes 691 conf:(0.58) 4. N08003=yes 1223 ==> N08006=yes 703 conf:(0.57) 5. N04003=yes 1070 ==> N08006=yes 608 conf:(0.57) 6. N01003=yes N07002=yes 1072 ==> N08006=yes 593 conf:(0.55) 7. N07002=yes 2267 ==> N08006=yes 1254 conf:(0.55) 8. N01002=yes 1420 ==> N08006=yes 770 conf:(0.54) 9. N01003=yes 2295 ==> N08006=yes 1213 conf:(0.53) 10. N06002=yes 1439 ==> N08006=yes 758 conf:(0.53) 11. N07001=yes 13 ==> N08006=yes 717 conf:(0.53) 12. N02002=yes 1277 ==> N08006=yes 650 conf:(0.51) 13. N02001=yes 1408 ==> N08006=yes 708 conf:(0.5) 从结果可知,用中类划分数据进行关联分析存在上述问题。 3 商品按大类分析 Minimum support: 0.1,Minimum metric Best rules found: 1. N07=yes N01=yes N04=yes N10=yes 800 ==> N08=yes 728 conf:(0.91) 2. N07=yes N04=yes N06=yes 742 ==> N08=yes 673 conf:(0.91) 3. N07=yes N01=yes N04=yes N06=yes 555 ==> N08=yes 501 conf:(0.9) 4. N01=yes N04=yes N10=yes N11=yes 543 ==> N08=yes 490 conf:(0.9) 从结果可知,用大类划分随机数进行关联分析仍存在上述问题。 4分析比较 从上面中类和大类分析可知,不管用大类还是用中类划分随机数进行关联分析都会存在划分不平均的问题。而用处理后的小类商品分析得出买热干面又买酱拌面概率最大。 六 总结 本文通过概念分层从不同粒度上分析商品之间的关联性,虽然用大类和用中类划分随机数进行关联分析都会存在划分不平均的问题,但根据处理后的小类分析仍得到了一些有趣的规则,例如热干面与酱拌面的关联性较大,发卡与果冻的关联性也较大。下载本文
商品类名 原来编号 处理后编号 饮料 02 020010001 罐头\八宝粥 03001 030010001 冲调食品 03002 030020001 奶粉 03003 030030001 营养保健 03004 030040001 冲泡包面\粉 04001 040010001 罐头食品 04002 040020001 南北干货 04004 040040001 冷藏\冷冻食品 05001 050010001 冰制品 05002 050020001 外购面包 05003 050030001 个人清洁用品 07002 070020001 头饰\首饰 07003 070030001 纸类用品 07004 070040001 书报 10001 100010001 纸品 10002 100020001 文具 10003 100030001 礼品 10004 100040001 内衣 11001 110010001
表4 删除的商品睡衣 11002 110020001 鞋类 11003 110030001 女装 11004 110040001 男装 11005 110050001 帽子 11006 110060001
Minimum support: 0.04 ,Minimum metric 商品类名 编号 处理方式 烟酒 02004 删除 厨房调料 04003 删除 蔬菜 06001 删除 家禽类 06003 删除 肉类 06004 删除 家用清洁用品 07001 删除 百货\家居类 08 删除 百货\综合类 12 删除 商品类名 原来编号 处理后编号 饮料 02 020010001 罐头\八宝粥 03001 030010001 冲调食品 03002 030020001 奶粉 03003 030030001 营养保健 03004 030040001 冲泡包面\粉 04001 040010001 罐头食品 04002 040020001 南北干货 04004 040040001 冷藏\冷冻食品 05001 050010001 冰制品 05002 050020001 外购面包 05003 050030001 个人清洁用品 07002 070020001 头饰\首饰 07003 070030001 纸类用品 07004 070040001 书报 10001 100010001 纸品 10002 100020001 文具 10003 100030001 礼品 10004 100040001 内衣 11001 110010001
表6 删除的商品睡衣 11002 110020001 鞋类 11003 110030001 女装 11004 110040001 男装 11005 110050001 帽子 11006 110060001
Minimum support: 0.08 ,Minimum metric 商品类名 编号 处理方式 烟酒 02004 删除 厨房调料 04003 删除 蔬菜 06001 删除 家禽类 06003 删除 肉类 06004 删除 家用清洁用品 07001 删除 百货\家居类 08 删除 百货\综合类 12 删除