山东省高中信息技术学业水平考试试题网 - 数据与计算|信息系统与社会|数据与数据结构|网络基础|数据管理与分析|移动应用设计|三维设计与创意|开源硬件项目设计|算法初步|智能系统初步

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 55|回复: 0

数据挖掘算法:啤酒与尿布的SQL简单实现

[复制链接]

1万

主题

1万

帖子

214748万

积分

超级版主

Rank: 8Rank: 8

积分
2147483647
发表于 2018-2-13 20:24:09 | 显示全部楼层 |阅读模式
啤酒与尿布的算法属于电商领域中的购物篮分析,是用于挖掘不同商品之间的关联规则,进而进行商品引荐的常用算法。
" F& s' m6 k: a+ K1 ~/ _, ]7 T$ X
以下为该算法的SQL简单实现。
6 e/ i- w+ r  s) R: t+ \
7 `; x6 `, t% E8 @/ i# l, }1、源数据1 ^  r+ |% ^. S3 C

5 k6 r, t, B0 D) W0 z9 sselect * from wx_tmp1;
" P! n+ ]( ^5 x; L5 D5 x2 k* V
" W  L7 J  {) I' g
数据格式如下
9 s- |! z* w5 e: ?$ O/ R6 F  y 617200000b1e16e96a9b
9 R+ M# ]# k$ o' V  a5 E4 L" D. n$ S" a
第一列为订单id,第二列为商品id,第三列为商品名称(真实数据,故擦掉),每个商品一条记载。/ K: f0 ]0 p7 X% N" j

& C" o9 M; c4 U! E2、统计每两种商品同时被购买的次数% T# T$ ?. S4 N, _  d9 d  [! ^  X* T1 P1 G

0 d) [( c% A% J( \# |create table wx_tmp2 as! ]8 G% s" \. @& ~

3 K' o' W% t! D0 fselect a.skuid skuid_a,b.skuid skuid_b,count(distinct a.orderid) buy_cnt_together
. }5 P9 m# N! K* S
; ^! h8 P* V; g6 l5 ~5 s5 x+ ]from wx_tmp1 a join wx_tmp1 b on a.orderid=b.orderid* I. ~0 O* ]9 A7 o8 \+ u6 s) ^

, U# m8 F2 t  i; ?where a.skuid<>b.skuid/ b+ F  y! s! p5 H6 z$ \& N% }

! V! a- m3 P. t/ Ogroup by 1,2;9 j. ~# l; d9 X
; Q% T6 K$ t- i
buy_cnt_together为两种商品同时购买的订单量0 [+ c) v. V. A4 W' r
& n4 X6 o! T/ W: L" B
3、计算置信度、支持度及提升度$ K: z' k( V$ _+ B" a& ]2 `2 x+ ~8 R- ?

' p/ c2 C. G4 ^% J; r7 Q8 rcreate table wx_tmp3 as8 v8 e+ }0 _% g3 ~1 h

/ L; B5 d7 e* F7 n( i, d4 eselect a.product_a,a.product_b,a.buy_cnt_together,b.buy_cnt buy_cnt_a,c.buy_cnt buy_cnt_b,d.order_cnt,6 D) Y+ C' `7 G0 c0 L1 `6 T0 B9 I

4 W; x; S! o) ^  n, Ia.buy_cnt_together/d.order_cnt support, --支持度' n- N2 X2 u+ W, e1 r
2 Q2 B. h: `+ {2 [7 i% {5 T
a.buy_cnt_together/b.buy_cnt confidence, --置信度
* P# E8 I# s& m7 H
7 J8 M/ f1 |- I7 c5 W5 k1 E) ]a.buy_cnt_together/(b.buy_cnt*c.buy_cnt/d.order_cnt) lift, --提升度# R) n* y9 g6 j
4 K3 Y3 C) Q0 k
(a.buy_cnt_together/b.buy_cnt+a.buy_cnt_together/c.buy_cnt)/2 kulc, --KULC 度量
3 ?$ V. p& D9 e+ O  t, j$ V
' l# \; m+ P# @9 ?a.buy_cnt_together/b.buy_cnt/(a.buy_cnt_together/c.buy_cnt) ir --不平衡比( K& O: m( F& G; K! o
* O- ?3 x' M: O  H8 J
from wx_tmp2 a join
; G( \8 g3 C* y' R  Q: e" u1 I% E2 h
(
! p* j& O/ H( N4 Y+ V( k# a( |- A. N9 J) c! Q8 F) V$ _& ?2 `/ K
select skuid,count(distinct orderid) buy_cnt% u* S# d# ]$ Z% A
" P; ~$ x' C- r8 C" R
from wx_tmp1* f  f/ n4 N' g4 A# _! B  f5 q5 o& m

8 r( P' R$ d& b) t7 m* ^group by 13 b0 A. F+ k8 X* M5 H
7 T, J9 y# k" ]" W; k
) b on a.product_a=b.skuid join; b7 m9 {" \& ?. u
: k4 D1 N# M1 f$ ?
(( Q: H4 O# W, e& M
1 W. z2 }# [+ f, E
select skuid,count(distinct orderid) buy_cnt; H8 k6 e% [! r9 U

% o2 B+ u! R9 ]6 mfrom wx_tmp1
) I% }6 b5 _, r6 b$ a: [  {! M; i9 Y7 x& L/ ?1 r
group by 1# q; v, J: |$ Q, p$ [4 ^

' f3 k' I  R3 j2 B" ]) c on a.product_b=c.skuid join% j7 f6 D- d% A" R: l& h& M

& W) s/ V+ Y9 T' Q(
) l4 o# W9 F& O6 V1 Y5 p! I) p2 h9 ]! Q/ J
select count(distinct orderid) order_cnt
% M3 y4 E* F  g! |  R0 e: X( c4 a3 B. B, h
from wx_tmp1- \4 q) V5 [7 n
, {* f# ]1 d  j7 ^& U& h9 _
) d on 1=1;9 w: g3 z0 V! g: j- q! g: Z
6 P% z: i7 G( j+ Q
结果如下
1 P+ F8 d) F& y8 x5 d- `8 n2 l+ ]& c; u* H" Q
616d0005308146b2e1de 4 D, v* D; T$ O4 k
9 v* S9 H; R3 U/ g3 y+ h2 r; A
每一行即商品A和商品B的关联规则。5 F4 q5 ^1 `8 i7 H- I' x

% m& C" J, _- G& F; c* Q6 [第一列为商品A,第二列为商品B,第三列为商品A与商品B同时购买的订单量,第四列为购买商品A的订单量,第五列为购买商品B的订单量,第六列为总的订单量,- [# ^8 G% n* v* |

3 e( W. t- k5 i+ U# E第七列为支持度,即buy_cnt_together/order_cnt
3 W9 C, L; t4 j& l: B, Z0 i, ~* i, f  M
第八列为置信度,即buy_cnt_together/buy_cnt_a
% X& \) m. y& e! ]" O5 c, j) W# V0 R( F% h+ X
第九列为提升度,即buy_cnt_together/buy_cnt_a/(buy_cnt_b/order_cnt),可以用来评估商品A对商品B的提升程度。% E! O4 Z! g$ c7 c

6 n' }2 p6 K+ m0 P9 V如果提升度等于 1,说明两个商品没有任何关联。如果小于 1,说明两个商品是负相关的关系,意味着商品A的销量越高,可能商品B的销量越低。大于 1 才表示具有正相关的关系。一般当提升度大于 3 时,我们才以为挖掘出的关联规则是有价值的。; }2 G  f" ?0 ]- S! |/ S" x; g
8 V- k5 m1 |  }$ n* S
提升度是一种判断关联规则能否有效的简单手段,实际中受零事务(也即不包含商品A也不包含商品B的订单)的影响比较大。所以如果数据中含有的零事务数量较大,该度量则不合适运用。
! O, m8 @$ P& J2 ?5 N* y5 @) J1 x& a2 u' A( P
第十列为KULC 度量,(buy_cnt_together/buy_cnt_a+buy_cnt_together/)/2,可以理解为两个置信度的平均值,取值0 ~ 1,值越大,联络越大,关系越大,是常用的判断关联规则能否有效的度量。同时该度量不受零事务数量影响。
; E$ ]  L- j1 G* G/ S/ l3 I0 i  H) S! l+ w: @  u# D% Q: `
第十一列为IR(不平衡比),即buy_cnt_b/buy_cnt_a,如果IR值太大,说明两个商品的关联关系非常不平衡,购买商品A的顾客很可能同时会买商品B,而购买了商品B的用户不太会再去买商品A。! E% q1 N% K8 o7 b+ z. V4 n
& i. ]* K" @+ ^! H

5 o7 x( P; `# o( W; }以上内容整理自互联网,如有侵权,请联系删除!
楼主热帖



上一篇:「7」小学生都能理解的Python判断语句教程
下一篇:数字化签名正在成为比特币的大热门
+1
55°C
沙发哦 ^ ^ 马上
回复

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站务公告栏:
0元购 优惠券① 百度一下 优惠券② 0元淘

QQ|Archiver|手机版|小黑屋|山东省高中信息技术学业水平考试试题网 ( 鲁ICP备16049757号 )|网站地图|申请友情链接

GMT+8, 2018-2-24 13:52 , Processed in 0.302723 second(s), 38 queries .

快速回复 返回顶部 返回列表

商品:金丝绒打底衫女韩版加肥加大码显瘦上衣V领挂脖荷叶边灯笼袖T恤
原价:58.00元 券后价:48元
购买链接:Click here!
推荐理由:宽松泡泡袖,遮肉又显瘦,螺纹松紧,展现纤细手腕,保暖舒适,独特款式,时尚魅力 top100:48
淘宝优惠券领取处:Click here!