ビッグデータ分析-アソシエーションルール

してみましょう私は、I = 1、私は、2、...、私はn個のアイテムと呼ばれる一連のn個のバイナリ属性があること。ましょうD = T 1、T 2、...、T Mデータベースと呼ばれるトランザクションの集合です。Dの各トランザクションには一意のトランザクションIDがあり、Iのアイテムのサブセットが含まれています。ルールは、X⇒Yの形式の含意として定義されます。ここで、X、Y⊆IおよびX∩Y=∅です。

アイテムのセット(短いアイテムセットの場合)XおよびYは、ルールの前件(左側またはLHS)および後件(右側またはRHS)と呼ばれます。

概念を説明するために、スーパーマーケットドメインの小さな例を使用します。アイテムのセットはI = {牛乳、パン、バター、ビール}であり、アイテムを含む小さなデータベースを次の表に示します。

トランザクションID アイテム
1 牛乳、パン
2 パン、バター
3 ビール
4 牛乳、パン、バター
5 パン、バター

スーパーマーケットのルールの例としては、{牛乳、パン}⇒{バター}があります。これは、牛乳とパンを購入すると、顧客もバターを購入することを意味します。考えられるすべてのルールのセットから興味深いルールを選択するために、重要性と関心のさまざまな尺度に対する制約を使用できます。最もよく知られている制約は、サポートと信頼性の最小しきい値です。

アイテムセットXのサポートsupp(X)は、アイテムセットを含むデータセット内のトランザクションの割合として定義されます。表1のデータベースの例では、アイテムセット{milk、bread}は、すべてのトランザクションの40%(5トランザクションのうち2トランザクション)で発生するため、2/5 = 0.4のサポートがあります。頻繁なアイテムセットを見つけることは、教師なし学習の問題を単純化したものと見なすことができます。

ルールの信頼度は、conf(X⇒Y)= supp(X∪Y)/ supp(X)で定義されます。たとえば、ルール{milk、bread}⇒{butter}は、表1のデータベースで0.2 / 0.4 = 0.5の信頼度を持っています。これは、牛乳とパンを含むトランザクションの50%でルールが正しいことを意味します。信頼度は、確率P(Y | X)の推定値として解釈できます。これは、トランザクションにLHSも含まれているという条件の下で、トランザクション内のルールのRHSを見つける確率です。

にあるスクリプトで bda/part3/apriori.R を実装するためのコード apriori algorithm 見つけることができます。

# Load the library for doing association rules
# install.packages(’arules’) 
library(arules)  

# Data preprocessing 
data("AdultUCI") 
AdultUCI[1:2,]  
AdultUCI[["fnlwgt"]] <- NULL 
AdultUCI[["education-num"]] <- NULL  

AdultUCI[[ "age"]] <- ordered(cut(AdultUCI[[ "age"]], c(15,25,45,65,100)), 
   labels = c("Young", "Middle-aged", "Senior", "Old")) 
AdultUCI[[ "hours-per-week"]] <- ordered(cut(AdultUCI[[ "hours-per-week"]], 
   c(0,25,40,60,168)), labels = c("Part-time", "Full-time", "Over-time", "Workaholic")) 
AdultUCI[[ "capital-gain"]] <- ordered(cut(AdultUCI[[ "capital-gain"]], 
   c(-Inf,0,median(AdultUCI[[ "capital-gain"]][AdultUCI[[ "capitalgain"]]>0]),Inf)), 
   labels = c("None", "Low", "High")) 
AdultUCI[[ "capital-loss"]] <- ordered(cut(AdultUCI[[ "capital-loss"]], 
   c(-Inf,0, median(AdultUCI[[ "capital-loss"]][AdultUCI[[ "capitalloss"]]>0]),Inf)), 
   labels = c("none", "low", "high"))

aprioriアルゴリズムを使用してルールを生成するには、トランザクションマトリックスを作成する必要があります。次のコードは、Rでこれを行う方法を示しています。

# Convert the data into a transactions format
Adult <- as(AdultUCI, "transactions") 
Adult 
# transactions in sparse format with 
# 48842 transactions (rows) and 
# 115 items (columns)  

summary(Adult)  
# Plot frequent item-sets 
itemFrequencyPlot(Adult, support = 0.1, cex.names = 0.8)  

# generate rules 
min_support = 0.01 
confidence = 0.6 
rules <- apriori(Adult, parameter = list(support = min_support, confidence = confidence))

rules 
inspect(rules[100:110, ]) 
# lhs                             rhs                      support     confidence  lift
# {occupation = Farming-fishing} => {sex = Male}        0.02856148  0.9362416   1.4005486
# {occupation = Farming-fishing} => {race = White}      0.02831579  0.9281879   1.0855456
# {occupation = Farming-fishing} => {native-country     0.02671881  0.8758389   0.9759474
                                       = United-States}