Иногда при анализе больших баз данных возникает необходимость поработать с выборкой. Данная статья показывает, каким образом можно сделать выборку в 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: