Tokyo.R #22 Association Rules

11,877 views
12,073 views

Published on

R言語でアソシエーションルール。マーケットバスケット分析。

Tokyo.R #22 Association Rules

  1. 1. アソシエーション分析@bob3bob3Tokyo.R #222012/04/28
  2. 2. 実は• Tokyo.R#05ですでにアソシエーション分析は取り上げられている! • http://www.slideshare.net/hamadakoichi/r-r-4219052
  3. 3. アソシエーション分析とは?• POSデータやECサイトの取引データから一緒に買われやすい商品の組み合わせを探す探索的データ分析の手法。 • 商品同士の組み合わせだけでなく、顧客の属性や購買時間帯などとの 組み合わせも分析可能。• 「おむつとビール」の事例で有名。• 「商品Aを買うと商品Bも買う確率が高い」というようなルールを見つけ出すための手法。 • もちろん、そこにそのようなルールがなければ何も出てこない。
  4. 4. アソシエーション分析とは?• いわゆるデータマイニングの代表的な手法の一つで、単に「データマイニング」と言って、アソシエーション分析を指しているケースも散見される。 • 鉱脈から埋もれた金を発見する“マイニング”のイメージに最も合致する からかも。• 別名: • マーケットバスケット分析、併売分析、アソシエーションルール、連関規 則、連想規則 • 「相関ルール」と呼ばれることもあるがこれは誤訳。 • 相関はcorrelation。
  5. 5. アソシエーション分析とは?• Association • 1 (共通の目的で組織された)団体, 会, 会社;組合;((しばしばA-))(…)協会 the student body association 学生自治会. • 2 [U](…との)交際, つき合い, かかわり, つながり, 共同, 提携((with ...)) in association with ... …に関連して;…と共同で He denied any association with the plane maker. 彼はその航空機メーカーとは何のかかわりもないと言った. • 3 [U]連想;[C]連想されるもの[意味] the association of ideas 《心理学》観念連合, 連想 my associations from the poem その詩から私が思い浮かべること. • 出典:「プログレッシブ英和中辞典」
  6. 6. アソシエーション分析とは?• 活用例 • 店舗のレイアウトや棚割り設計のための資料として活用。 • より併売されやすい商品を近くに配置。 • 顧客の利便性向上とクロスセリングによる売り上げ向上を目指す。• 実用上 • 商品管理単位そのままのデータをアソシエーション分析にかけても、ア イテム数が多すぎて有用な結果は得られにくいので工夫が必要。 • カテゴリごとにグールプ化する。 • ABC分析に基づいて、主力商品を中心に分析する。
  7. 7. アソシエーションルール• X⇒Y • 「XならばY」 • X:条件部、ルールヘッド、前提。 • Y:結論部、ルールボディ。 • シャンプー⇒リンス。 • ビール⇒枝豆。 • 月末⇒残業 • 金曜日の夜&山手線⇒酔っ払い• 実用上 • 商品管理単位そのままのデータをアソシエーション分析にかけても、ア イテム数が多すぎて有用な結果は得られにくいので工夫が必要。 • カテゴリごとにグールプ化する。 • ABC分析に基づいて、主力商品を中心に分析する。
  8. 8. 評価指標• 前提確率• 支持度(support、同時確率)• 確信度(confidence、条件付き確率)• リフト値(lift、改善率) リンス(Y) ○ × 計 シャンプー ○ 7 1 8 (X) × 1 1 2 計 8 2 10
  9. 9. 評価指標• 前提確率  全体の中でXを含むトランザクションの比率。  前提確率が高いルールは良いルール。そのルールが発動する機会が 多いことを意味するので。  8÷10=0.8 リンス(Y) ○ × 計 シャンプー ○ 7 1 8 (X) × 1 1 2 計 8 2 10
  10. 10. アソシエーションルール• 支持度(support、同時確率)  全体の中でXとYの両方を含むトランザクションの比率。  支持度の高いルールは良いルール。  7÷10=0.7 リンス(Y) ○ × 計 シャンプー ○ 7 1 8 (X) × 1 1 2 計 8 3 10
  11. 11. アソシエーションルール• 確信度(confidence、条件付き確率) • Xを含むトランザクションのうちYを含む比率。確信度の高いルールは良 いルール。 • 7÷8=0.875 リンス(Y) ○ × 計 シャンプー ○ 7 1 8 (X) × 1 1 2 計 8 2 10
  12. 12. アソシエーションルール• リフト値(lift、改善率) • 確信度を事前確率で割ったもの。 • Xを買ってYも買う確率は、普通にYが買われる確率の何倍であるか。 • リフト値が1を越えるかどうかが有効なルールかどうかの判断基準の一 つ。 • (7÷8) ÷(8÷10)=0.75÷0.8= 1.09375 リンス(Y) ○ × 計 シャンプー ○ 7 1 8 (X) × 1 1 2 計 8 2 10
  13. 13. Rでアソシエーション分析• {arules}パッケージを使うlibrary(arules)data(Groceries)# arulesパッケージに含まれるデータセット。# ある食料雑貨店で収集した30日間分のPOSデータ。# 牛乳など169品目の9,835件の購入履歴。Groceries# transactions in sparse format with# 9835 transactions (rows) and# 169 items (columns)
  14. 14. Rでアソシエーション分析summary(Groceries)# transactions as itemMatrix in sparse format with# 9835 rows (elements/itemsets/transactions) and# 169 columns (items) and a density of 0.02609146# most frequent items:# whole milk other vegetables rolls/buns soda# 2513 1903 1809 1715# yogurt (Other)# 1372 34055# element (itemset/transaction) length distribution:# sizes# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15# 2159 1643 1299 1005 855 645 545 438 350 246 182 117 78 77 55# 16 17 18 19 20 21 22 23 24 26 27 28 29 32# 46 29 14 14 9 11 4 6 1 1 1 1 3 1# Min. 1st Qu. Median Mean 3rd Qu. Max.# 1.000 2.000 3.000 4.409 6.000 32.000# includes extended item information - examples:# labels level2 level1# 1 frankfurter sausage meet and sausage# 2 sausage sausage meet and sausage# 3 liver loaf sausage meet and sausage
  15. 15. Rでアソシエーション分析inspect(Groceries)# 8283 {frankfurter,# onions,# liquor (appetizer),# napkins}# 8284 {butter}# 8285 {organic sausage,# tropical fruit,# packaged fruit/vegetables,# whole milk,# curd,# yogurt,# soft cheese,# curd cheese,# frozen vegetables,# domestic eggs,# rolls/buns,# pastry,# margarine,# bottled water,# cooking chocolate,# hygiene articles,# shopping bags}
  16. 16. Rでアソシエーション分析# 元データのアイテムごとの件数を確認head(sort(itemFrequency(Groceries, type="absolute"), d=TRUE))# whole milk other vegetables rolls/buns soda yogurt bottled water# 2513 1903 1809 1715 1372 1087# アイテムごとの出現頻度の確認itemFrequencyPlot(Groceries)
  17. 17. Rでアソシエーション分析# aprioriアルゴリズムの実行#デフォルトは信頼度0.8以上、支持度0.1以上のルールのみ抽出grule1 <- apriori(Groceries)# parameter specification:# confidence minval smax arem aval originalSupport support minlen maxlen target ext# 0.8 0.1 1 none FALSE TRUE 0.1 1 10 rules FALSE# algorithmic control:# filter tree heap memopt load sort verbose# 0.1 TRUE TRUE FALSE TRUE 2 TRUE# apriori - find association rules with the apriori algorithm# version 4.21 (2004.05.09) (c) 1996-2004 Christian Borgelt# set item appearances ...[0 item(s)] done [0.00s].# set transactions ...[169 item(s), 9835 transaction(s)] done [0.01s].# sorting and recoding items ... [8 item(s)] done [0.00s].# creating transaction tree ... done [0.00s].# checking subsets of size 1 2 done [0.00s].# writing ... [0 rule(s)] done [0.00s].# creating S4 object ... done [0.00s].## writing...の行で何個のルールが抽出されたか確認できる。
  18. 18. Rでアソシエーション分析#パラメータの指定。extは事前確率の表示。# 確信度0.5、支持度0.01grule2 <- apriori(Groceries, p=list(support=0.01, confidence=0.5, maxlen=4, ext=TRUE))# parameter specification:# confidence minval smax arem aval originalSupport support minlen maxlen target ext# 0.5 0.1 1 none FALSE TRUE 0.01 1 4 rules TRUE# algorithmic control:# filter tree heap memopt load sort verbose# 0.1 TRUE TRUE FALSE TRUE 2 TRUE# apriori - find association rules with the apriori algorithm# version 4.21 (2004.05.09) (c) 1996-2004 Christian Borgelt# set item appearances ...[0 item(s)] done [0.00s].# set transactions ...[169 item(s), 9835 transaction(s)] done [0.00s].# sorting and recoding items ... [88 item(s)] done [0.00s].# creating transaction tree ... done [0.01s].# checking subsets of size 1 2 3 4 done [0.00s].# writing ... [15 rule(s)] done [0.00s].# creating S4 object ... done [0.00s].## ルールが15個出た!
  19. 19. Rでアソシエーション分析# 得られたルールの表示inspect(grule2)# lhs rhs support confidence lhs.support lift# 1 {curd,# yogurt} => {whole milk} 0.01006609 0.5823529 0.01728521 2.279125# 2 {other vegetables,# butter} => {whole milk} 0.01148958 0.5736041 0.02003050 2.244885# 3 {other vegetables,# domestic eggs} => {whole milk} 0.01230300 0.5525114 0.02226741 2.162336# 4 {yogurt,# whipped/sour cream} => {whole milk} 0.01087951 0.5245098 0.02074225 2.052747# 5 {other vegetables,# whipped/sour cream} => {whole milk} 0.01464159 0.5070423 0.02887646 1.984385# 6 {pip fruit,# other vegetables} => {whole milk} 0.01352313 0.5175097 0.02613116 2.025351# 7 {citrus fruit,# root vegetables} => {other vegetables} 0.01037112 0.5862069 0.01769192 3.029608# 8 {tropical fruit,# root vegetables} => {other vegetables} 0.01230300 0.5845411 0.02104728 3.020999# 9 {tropical fruit,# root vegetables} => {whole milk} 0.01199797 0.5700483 0.02104728 2.230969# 10 {tropical fruit,# yogurt} => {whole milk} 0.01514997 0.5173611 0.02928317 2.024770# ……
  20. 20. Rでアソシエーション分析# 任意の評価指標で並び替えてルールを表示。ここではリフト値順。inspect(sort(grule2, by="lift"))# lhs rhs support confidence lhs.support lift# 1 {citrus fruit,# root vegetables} => {other vegetables} 0.01037112 0.5862069 0.01769192 3.029608# 2 {tropical fruit,# root vegetables} => {other vegetables} 0.01230300 0.5845411 0.02104728 3.020999# 3 {root vegetables,# rolls/buns} => {other vegetables} 0.01220132 0.5020921 0.02430097 2.594890# 4 {root vegetables,# yogurt} => {other vegetables} 0.01291307 0.5000000 0.02582613 2.584078# 5 {curd,# yogurt} => {whole milk} 0.01006609 0.5823529 0.01728521 2.279125# 6 {other vegetables,# butter} => {whole milk} 0.01148958 0.5736041 0.02003050 2.244885# 7 {tropical fruit,# root vegetables} => {whole milk} 0.01199797 0.5700483 0.02104728 2.230969# 8 {root vegetables,# yogurt} => {whole milk} 0.01453991 0.5629921 0.02582613 2.203354# 9 {other vegetables,# domestic eggs} => {whole milk} 0.01230300 0.5525114 0.02226741 2.162336# 10 {yogurt,# whipped/sour cream} => {whole milk} 0.01087951 0.5245098 0.02074225 2.052747# ……
  21. 21. Rでアソシエーション分析# 前提や結論を指定してルールを抽出したい。前提にwhole milkを含むルールのみ抽出。grule3 <- apriori(Groceries, p=list(support=0.001, confidence=0.1), appearance=list(lhs="whole milk", default="rhs"))head(inspect(sort(grule3, by="lift")))# lhs rhs support confidence lift# 1 {whole milk} => {butter} 0.02755465 0.1078392 1.9460530# 2 {whole milk} => {curd} 0.02613116 0.1022682 1.9194805# 3 {whole milk} => {domestic eggs} 0.02999492 0.1173896 1.8502027# 4 {whole milk} => {whipped/sour cream} 0.03223183 0.1261441 1.7597542# 5 {whole milk} => {root vegetables} 0.04890696 0.1914047 1.7560310# 6 {whole milk} => {tropical fruit} 0.04229792 0.1655392 1.5775950# 7 {whole milk} => {yogurt} 0.05602440 0.2192598 1.5717351# 8 {whole milk} => {pip fruit} 0.03009659 0.1177875 1.5570432# 9 {whole milk} => {other vegetables} 0.07483477 0.2928770 1.5136341# 10 {whole milk} => {pastry} 0.03324860 0.1301234 1.4625865# 11 {whole milk} => {citrus fruit} 0.03050330 0.1193792 1.4423768# 12 {whole milk} => {fruit/vegetable juice} 0.02663955 0.1042579 1.4421604# 13 {whole milk} => {newspapers} 0.02735130 0.1070434 1.3411103# 14 {whole milk} => {sausage} 0.02989324 0.1169916 1.2452520# 15 {whole milk} => {bottled water} 0.03436706 0.1345006 1.2169396# 16 {whole milk} => {rolls/buns} 0.05663447 0.2216474 1.2050318# ……
  22. 22. Rでアソシエーション分析# そのうち、liftが1.5以上のルールのみgrule4 <- subset(grule3, subset=(lift>=1.5))inspect(grule4)# lhs rhs support confidence lift# 1 {whole milk} => {curd} 0.02613116 0.1022682 1.919481# 2 {whole milk} => {butter} 0.02755465 0.1078392 1.946053# 3 {whole milk} => {domestic eggs} 0.02999492 0.1173896 1.850203# 4 {whole milk} => {whipped/sour cream} 0.03223183 0.1261441 1.759754# 5 {whole milk} => {pip fruit} 0.03009659 0.1177875 1.557043# 6 {whole milk} => {tropical fruit} 0.04229792 0.1655392 1.577595# 7 {whole milk} => {root vegetables} 0.04890696 0.1914047 1.756031# 8 {whole milk} => {yogurt} 0.05602440 0.2192598 1.571735# 9 {whole milk} => {other vegetables} 0.07483477 0.2928770 1.513634
  23. 23. Rでアソシエーション分析library("arulesViz")gruleX <- apriori(Groceries, p=list(support=0.03, confidence=0.05, ext=TRUE))gruleX2 <- subset(gruleX, subset=(lift>=1.5))gruleX2plot(gruleX2, method="graph")

×