Phân tích giỏ hàng trong R
Christopher Bruffaerts
Statistician
Trong cửa hàng có gì?

Hôm nay quý vị muốn gì?

{"Bread", "Cheese", "Cheese", "Cheese"}
Trọng tâm của phân tích giỏ hàng

{"Bread", "Cheese"}
Cửa hàng của tôi - tập
X = {"Bread", "Butter", "Cheese", "Wine"}

Tập con của X - itemset
Siêu tập (superset)
Câu hỏi:
Tập tất cả các tập con có thể của X là gì?
X = {A, B, C, D}

{"Bread"} $\cap$ {"Butter"} = $\emptyset$
{"Bread", "Butter"} $\cap$ {"Butter", "Wine"} = {"Butter"}
library(dplyr)
A = c("Bread", "Butter")
B = c("Bread", "Wine")
intersect(A,B)
[1] "Bread"
{"Bread"} $\cup$ {"Butter"} = {"Bread", "Butter"}
union(A,B)
[1] "Bread" "Butter" "Wine"
Câu hỏi:
Có bao nhiêu tập con kích thước k từ một tập kích thước n?
“n chọn k”
$${n \choose k} = \dfrac{n!}{(n-k)! k!},$$ trong đó
$n! = n \times (n-1) \times (n-2) \times ...\times 2 \times 1$
Ví dụ:
Số giỏ có 2 mặt hàng khác nhau từ cửa hàng:

$${4 \choose 2} = \dfrac{4!}{(4-2)! 2!} = 6$$
Câu hỏi
Có bao nhiêu giỏ có thể tạo từ một tập kích thước n?
Nhị thức Newton
$$\sum_{k=0}^n{n \choose k} = 2^n$$
2^(n_items)
Ví dụ
Tổng số giỏ:
$$2^4 = 16$$

Tổ hợp trong R
n_items = 4
basket_size = 2
choose(n_items, basket_size)
[1] 6
# Lặp qua mọi giá trị có thể
store = matrix(NA, nrow=5, ncol=2)
for (i in 0:n_items){
store[i+1,] = c(i, choose(n_items,i))}
Kết quả
colnames(store)=c("size", "nb_combi")
store
size nb_combi
[1,] 0 1
[2,] 1 4
[3,] 2 6
[4,] 3 4
[5,] 4 1
Hình dung tốc độ tăng của số tổ hợp
n_items = 50
fun_nk = function(x) choose(n_items, x)
# Vẽ biểu đồ
ggplot(data = data.frame(x = 0),
mapping = aes(x=x))+
stat_function(fun = fun_nk)+
xlim(0, n_items)+
xlab("Kích thước tập con")+
ylab("Số tập con")

Phân tích giỏ hàng trong R