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}