Big-data-analytics-association-rules

提供:Dev Guides
移動先:案内検索

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

_I = i〜1〜、i〜2〜、…​、i〜n〜_を、アイテムと呼ばれるn個のバイナリ属性のセットとします。 _D = t〜1〜、t〜2〜、…​、t〜m〜_をデータベースと呼ばれるトランザクションのセットとします。 Dの各トランザクションには一意のトランザクションIDがあり、Iのアイテムのサブセットが含まれています。 ルールは、X⇒Yの形式の含意として定義されます。ここで、X、Y⊆IおよびX∩Y =∅です。

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

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

Transaction ID Items
1 milk, bread
2 bread, butter
3 beer
4 milk, bread, butter
5 bread, butter

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

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

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

*bda/part3/apriori.R* にあるスクリプトには、* aprioriアルゴリズム*を実装するコードがあります。
# 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}