Иногда при анализе больших баз данных возникает необходимость поработать с выборкой. Данная статья показывает, каким образом можно сделать выборку в arules, а также показывает некоторые приемы анализа (сравненения) выборки и популяции.

1. Выборка

Для того, чтобы сделать выборку, в arules существует функция sample:

library(arules)
data("Adult")
set.seed(123)
AdultSample <- sample(Adult, 10000, replace =T)

В данном случае мы сделали выборку в 10’000 кейсов из 48842. В статье “Introduction to arules – A computational environment for mining association rules and frequent item sets” описаны различные способы определения оптимального размера выборки, в том числе и методом подбора (постепенного увеличения объема выборки до достижения необходимой точности). Давайте сравним графически уровни поддержки (support) для наиболее часто встречающихся кейсов в выборке (вертикальные бары) и популяции (непрерывная линия):

supp <- .05
itemFrequencyPlot(AdultSample,
                  population=Adult,
                  support=supp,
                  col="steelblue2",
                  cex.name=.5)

Альтернативным способом сравнения будет сравнение относительной частоты в сэмпле против популяции:

itemFrequencyPlot(AdultSample,
                  population=Adult,
                  support=supp,
                  lift = TRUE,
                  col="steelblue2",
                  cex.name=.5)

Как мы видим графически, сэмпл в ~20% довольно хорошо согласуется с популяцией.

2. Количество совпадающих сочетаний

Для заданнного support найдем наиболее часто встречающиеся сочетания в сэмпле и в выборке:

itemsets <- apriori(Adult, parameter = list(support=supp,
                                     target='frequent'))
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport support minlen maxlen            target   ext
##          NA    0.1    1 none FALSE            TRUE    0.05      1     10 frequent itemsets FALSE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 2442 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[115 item(s), 48842 transaction(s)] done [0.05s].
## sorting and recoding items ... [36 item(s)] done [0.01s].
## creating transaction tree ... done [0.04s].
## checking subsets of size 1 2 3 4 5 6 7 8 9 10 done [0.48s].
## writing ... [8496 set(s)] done [0.00s].
## creating S4 object  ... done [0.02s].
itemsetsSample <- apriori(AdultSample, parameter = list(support=supp,
                                     target='frequent'))
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport support minlen maxlen            target   ext
##          NA    0.1    1 none FALSE            TRUE    0.05      1     10 frequent itemsets FALSE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 500 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[114 item(s), 10000 transaction(s)] done [0.01s].
## sorting and recoding items ... [37 item(s)] done [0.00s].
## creating transaction tree ... done [0.01s].
## checking subsets of size 1 2 3 4 5 6 7 8 9 10 done [0.17s].
## writing ... [8575 set(s)] done [0.00s].
## creating S4 object  ... done [0.01s].

Затем, рассчитаем процент совпадающих сочетаний:

mtch <- match(itemsetsSample, itemsets, nomatch=0)
sum(mtch>0)/length(itemsetsSample)
## [1] 0.9665

Как мы видим, на выборке в 20% мы достигли достаточно неплохого (96%) совпадения в наиболее частых сочетаниях.

3. Ошибка в поддержке

Давайте рассчитаем ошибку в support для найденных правил:

supportSample <- quality(itemsetsSample[which(mtch>0)])$support
supportFull <- quality(itemsets[mtch[which(mtch>0)]])$support

err <- 1- abs((supportSample - supportFull)/supportFull)

summary(err)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.882   0.960   0.978   0.973   0.990   1.000

Как мы видим, и на уровне support сэмпл достаточно точно описывает поппуляцию:

  • максимальная разница в support : 0.882
  • среднее значение отклонения: 0.973
Write a comment:

*

Your email address will not be published.

© 2014 In R we trust.
Top
Follow us: