Big Data Analytics - Regras de associação
Seja I = i 1 , i 2 , ..., i n um conjunto de n atributos binários chamados itens. Seja D = t 1 , t 2 , ..., t m um conjunto de transações denominado banco de dados. Cada transação em D possui um ID de transação exclusivo e contém um subconjunto dos itens em I. Uma regra é definida como uma implicação da forma X ⇒ Y onde X, Y ⊆ I e X ∩ Y = ∅.
Os conjuntos de itens (para conjuntos de itens curtos) X e Y são chamados de antecedentes (lado esquerdo ou LHS) e conseqüentes (lado direito ou RHS) da regra.
Para ilustrar os conceitos, usamos um pequeno exemplo do domínio do supermercado. O conjunto de itens é I = {leite, pão, manteiga, cerveja} e um pequeno banco de dados contendo os itens é mostrado na tabela a seguir.
ID de transação | Itens |
---|---|
1 | leite pão |
2 | pão manteiga |
3 | Cerveja |
4 | leite, pão, manteiga |
5 | pão manteiga |
Uma regra de exemplo para o supermercado poderia ser {leite, pão} ⇒ {manteiga}, o que significa que se leite e pão forem comprados, os clientes também comprarão manteiga. Para selecionar regras interessantes do conjunto de todas as regras possíveis, podem ser usadas restrições em várias medidas de significância e interesse. As restrições mais conhecidas são os limites mínimos de suporte e confiança.
O suporte supp (X) de um conjunto de itens X é definido como a proporção de transações no conjunto de dados que contém o conjunto de itens. No banco de dados de exemplo na Tabela 1, o conjunto de itens {leite, pão} tem um suporte de 2/5 = 0,4, pois ocorre em 40% de todas as transações (2 de 5 transações). Encontrar conjuntos de itens frequentes pode ser visto como uma simplificação do problema de aprendizado não supervisionado.
A confiança de uma regra é definida conf (X ⇒ Y) = supp (X ∪ Y) / supp (X). Por exemplo, a regra {leite, pão} ⇒ {manteiga} tem uma confiança de 0,2 / 0,4 = 0,5 no banco de dados na Tabela 1, o que significa que para 50% das transações contendo leite e pão a regra está correta. A confiança pode ser interpretada como uma estimativa da probabilidade P (Y | X), a probabilidade de encontrar o RHS da regra em transações sob a condição de que essas transações também contenham o LHS.
No script localizado em bda/part3/apriori.R o código para implementar o apriori algorithm pode ser encontrado.
# 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"))
Para gerar regras usando o algoritmo apriori, precisamos criar uma matriz de transação. O código a seguir mostra como fazer isso em 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}