商品组合

R 中的购物篮分析

Christopher Bruffaerts

Statistician

回到杂货店

商店里有什么?

所有商品表情图

今天想买什么?

面包和3份奶酪

{"Bread", "Cheese", "Cheese", "Cheese"}

购物篮分析关注点

面包和奶酪

{"Bread", "Cheese"}

R 中的购物篮分析

子集与超集

我的商店——集合

X = {"Bread", "Butter", "Cheese", "Wine"}

所有商品表情图

X 的子集——项集

  • 大小 0: { ${ \emptyset }$ }
  • 大小 1: {"Bread"}, {"Wine"}, ...
  • 大小 2: {"Bread", "Wine"}, ...

超集

  • {"Bread", "Butter"} 是 {"Bread"} 的超集
  • {"Bread", "Butter", "Cheese", "Wine"} 是 {"Bread", "Butter"} 的超集
R 中的购物篮分析

项集图

问题:

X 的所有可能子集的集合是什么?

X = {A, B, C, D}

项集格图

R 中的购物篮分析

交集与并集

  • 交集

{"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"
R 中的购物篮分析

大小为 k 的篮子有多少?

问题:

从大小为 n 的集合中选取大小为 k 的子集有多少种?

"从 n 中选 k"

$${n \choose k} = \dfrac{n!}{(n-k)! k!},$$ 其中

$n! = n \times (n-1) \times (n-2) \times ...\times 2 \times 1$

示例:

商店中由2个不同商品组成的篮子数:

所有商品表情图

$${4 \choose 2} = \dfrac{4!}{(4-2)! 2!} = 6$$

R 中的购物篮分析

可能的篮子有多少?

问题

从大小为 n 的集合能创建多少种可能的篮子?

牛顿二项式

$$\sum_{k=0}^n{n \choose k} = 2^n$$

2^(n_items)

示例

篮子总数:

$$2^4 = 16$$

所有商品表情图

R 中的购物篮分析

R 中的篮子数量

R 中的组合数

n_items = 4
basket_size = 2
choose(n_items, basket_size)
[1] 6
# 遍历所有可能的取值
store = matrix(NA, nrow=5, ncol=2)
for (i in 0:n_items){
  store[i+1,] = c(i, choose(n_items,i))}

输出

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
R 中的购物篮分析

绘制组合数量

了解组合数量增长有多快

n_items = 50
fun_nk = function(x) choose(n_items, x)
# 绘图
ggplot(data = data.frame(x = 0),
    mapping = aes(x=x))+
  stat_function(fun = fun_nk)+
  xlim(0, n_items)+
  xlab("子集大小")+
  ylab("子集数量")

组合分布图

R 中的购物篮分析

准备好来数数了吗?

R 中的购物篮分析

Preparing Video For Download...