トップページ | ひとつ上のページ | 目次ページ | このサイトについて | ENGLISH

アソシエーション分析

データマイニング の事例として、ビールとオムツの話は有名です。 アソシエーション分析は、この事例のような分析ができる手法です。

「アソシエーション・ルール」、「連関規則」、「マーケット・バスケット分析」とも呼ばれています。

指標

確信度は、XとYを入れ替えて計算すると、違う値なので、2つの変数に対して非対称です。 矢印のついたネットワークグラフを描くことができます。

支持度は、2つの変数に対して対称的です。

ラフ集合分析との関係

ラフ集合分析 には独自のアルゴリズムで、ラフ集合を見つける方法が紹介されています。

アソシエーション分析のアルゴリズムは、 ラフ集合分析 にも使えます。

Rの実施例

質的データを量的データに変換 のページに、質的データには3種類の形式があることが説明されています。 Rでは、どの形式からでもできるようになっていますが、以下は、 「@ 質的データのそれぞれが、変数になっていて、「あり・なし」が1と0で表されている形式」と 「A 表形式になっていて、質的変数として、質的データが入っている形式」 で使えるようにしています。 また、@の場合に質的データと量的データ混在していても使えるようにしています。 ただし、「整数」とRが認識してしまうと、量的データを質的データとして扱ってしまいます。 例えば、1行目に「25」等の整数が入っている場合は、「25.0」にしてからファイルを読み込むようにしてください。

R の使用例は下記になります。 (下記は、コピーペーストで、そのまま使えます。 この例では、Cドライブの「Rtest」というフォルダに、 「Data.csv」という名前でデータが入っている事を想定しています。 このコードの前に、ライブラリ「arules」、「dummies」、「ggplot2」のインストールが必要です。

下の表は一部で、実際は106行分あります。 データは、質的データと量的データが混ざったものです。 量的データは、 1次元クラスタリング で質的データに変換して分析することにしています。 こうすると、 決定木 と併用しやすくなります。
Decision Tree

setwd("C:/Rtest") # 作業用ディレクトリを変更
library(arules)
# ライブラリを読み込み
library(dummies)
# ライブラリを読み込み
Data <- read.csv("Data.csv", header=T)
# データを読み込み
for (i in 1:ncol(Data)) {
# ループの始まり。データの列数を数えて同じ回数繰り返す
if (class(Data[,i]) == "numeric") {
# 条件分岐の始まり
Data[,i] <- droplevels(cut(Data[,i], breaks = 5,include.lowest = TRUE))
# 5分割する場合。量的データは、質的データに変換する。
}
# if文の処理の終わり
}
# ループの終わり
Data <- dummy.data.frame(Data)
# ダミー変換
Data3 <- as(Data, "matrix")
# マトリックス形式にする
Data4 <- as(Data3, "transactions")
# トランザクション形式にする
ap <- apriori(Data4, parameter = list(support = 5/nrow(Data), maxlen = 2, minlen = 2))
# 連関規則の作成。
ap_inspect <- inspect(ap)
# 連関規則の抽出
ap_inspect$set <- paste(ap_inspect$lhs,"->",ap_inspect$rhs)
# 出力用のデータに行を追加
#棒グラフを描くための処理
library(ggplot2)
# ライブラリを読み込み
ap21 <- head(ap_inspect[order(ap_inspect$support, decreasing=T),],20)
# support(支持度:同時確率)上位20位までの抽出
ggplot(ap21, aes(x=support, y=reorder(set, support))) + geom_bar(stat = "identity")
# 上位20セットの棒グラフを描く
ap22 <- head(ap_inspect[order(ap_inspect$confidence, decreasing=T),],20)
# support(確信度:条件付き確率)上位30位までの抽出
ggplot(ap22, aes(x=confidence, y=reorder(set, confidence))) + geom_bar(stat = "identity")
# 上位20セットの棒グラフを描く
ap23 <- head(ap_inspect[order(ap_inspect$lift, decreasing=T),],20)
# lift(リフト)上位20位までの抽出
ggplot(ap23, aes(x=lift, y=reorder(set, lift))) + geom_bar(stat = "identity")
# 上位20セットの棒グラフを描く
#ネットワークグラフ
library(igraph)
#ライブラリを読み込み
ap31<- graph.data.frame(ap21[,c(1,3)], directed = F)
# グラフ用のデータを作成
plot(ap31)
# 支持度のグラフを作成
ap32<- graph.data.frame(ap22[,c(1,3)])
# グラフ用のデータを作成
plot(ap32)
# 確信度のグラフを作成
ap33<- graph.data.frame(ap23[,c(1,3)])
# グラフ用のデータを作成
plot(ap33)
# リフトのグラフを作成

下のグラフは、いずれも確信度のグラフです。
Decision Tree Decision Tree

パラメータの設定の考え方

上のコードでは、下記の考え方でパラメータを設定しました。 決定木 と補完し合う目的でアソシエーション分析を使う時は、この設定で良いと思っていますが、ベストかどうかはわかりません。




if-thenルールと因果関係の関係

手法の使い分け


参考文献

データマイニング入門 :Rで学ぶ最新データ解析」 豊田秀樹 編著 東京図書 2008
入力データが、「@ 質的データのそれぞれが、変数になっていて、「あり・なし」が1と0で表されている形式」と、 「A 表形式になっていて、質的変数として、質的データが入っている形式」 の2種類について、Rの実施例があります。 この本では、@とAの違いは、matrixにする行を入れるかどうかの違いだけです。 このサイトの実施例では、量的データが混ざっている場合に、質的データに変換してから使うコードを入れたこともあり、、 @とAのどちらでも大丈夫です。@の時は、何の心配もいらないのですが、Aの時は量的データの1行目が整数だと、 その列はダミー変換がされません。読み込むファイルの1行目は、25.0等の小数点を含むデータにしてください。
パラメータの設定の仕方も詳しいです。


同志社大学 金明哲先生のページ
入力データが、「各サンプルが質的データのセットになっている形式」になっている場合が、Rの実施例になっています。
https://www.cis.doshisha.ac.jp/mjin/R/40/40.html


フリーソフトではじめる機械学習入門」 荒木雅弘 著 森北出版 2014
アソシエーション分析では、計算する組み合わせが膨大になるため、 優先度の高い組み合わせだけが計算されるようになっています。 そのアルゴリズムは、アプリオリアルゴリズムや、FP-Growthアルゴリズムと呼ばれるものですが、これらのアルゴリズムを図解しています。


Albert社のページ
各指標が、図解されていてわかりやすいです。リフトが1より小さい時は、おすすめしないようにするそうです。
https://www.albert2005.co.jp/knowledge/marketing/customer_product_analysis/abc_association



順路 次は 個々のカテゴリの相関分析

Tweet データサイエンス教室