产品购买-如果消费者购买产品x他们购买产品y的可能性如何

时间:2018-11-13 20:53:14

标签: r

我有一些关于商店购买的数据,数据的随机样本如下所示:

      PANID       WEEK    L1
966 3357632 2011-02-21 PIZZA
352 3357632 2009-11-09 SALTY
68  3357632 2012-06-18  BEER
65  3357632 2012-03-05  BEER
43  3108696 2011-10-31  BEER
672 3144766 2010-03-29 SALTY
70  3357632 2012-06-18  BEER
810 3144766 2012-06-18 SALTY
546 3144766 2008-05-05 SALTY
933 3357632 2009-06-15 PIZZA

(编辑:此随机样本包含2012年信息,由于字符数的原因,我提供的数据是从2007年-2010年过滤的)

3种产品(PANIDBEERSALTY)的4年中有3个PIZZA数据。我试图找出在给定的一周内购买了BEER的人是否也购买了SALTY /并构造了一个概率,假设PANID: 3144766SALTY中购买了WEEK: 2009-06-15他们也会BEER的概率是多少。对pizza执行相同的操作,即假设他们购买了BEER,他们有购买PIZZA的可能性,最后假设他们购买了PIZZA,他们有购买{{1} }。

E.G。下面的人购买了3包SALTY和一包SALTY,但在不同的一周,他们将刚购买了BEERBEERPIZZA

SALTY

数据:

EDIT1:由于字符限制而删除了数据。可以在这里找到:https://textuploader.com/db1kf

EDIT2:

我运行以下代码以获取以下输出:

> data %>%
+   group_by(PANID) %>%
+   filter(WEEK == "2009-06-15") %>%
+   filter(PANID == "3144766")
# A tibble: 6 x 3
# Groups:   PANID [1]
    PANID WEEK       L1   
    <int> <date>     <chr>
1 3144766 2009-06-15 BEER 
2 3144766 2009-06-15 SALTY
3 3144766 2009-06-15 SALTY
4 3144766 2009-06-15 SALTY
5 3144766 2009-06-15 PIZZA
6 3144766 2009-06-15 PIZZA

输出:

#Probability of buying BEER or SALTY if PIZZA was bought
dat %>% 
  group_by(PIZZA > 0) %>% 
  summarise(beer = sum(BEER > 0) / n(), nobeer = sum(BEER == 0) / n(),
            salty = sum(SALTY > 0) / n(), nosalty = sum(SALTY == 0) / n())

#Probability of buying SALTY or PIZZA if BEER was bought
dat %>% 
  group_by(BEER > 0) %>% 
  summarise(pizza = sum(PIZZA > 0) / n(), nopizza = sum(PIZZA == 0) / n(),
            salty = sum(SALTY > 0) / n(), nosalty = sum(SALTY == 0) / n())


#Probability of buying BEER or PIZZA if SALTY was bought
dat %>% 
  group_by(SALTY > 0) %>% 
  summarise(pizza = sum(PIZZA > 0) / n(), nopizza = sum(PIZZA == 0) / n(),
            beer = sum(BEER > 0) / n(), nobeer = sum(BEER == 0) / n())

所以我的理解是正确的。如果我购买1) # A tibble: 2 x 5 `PIZZA > 0` beer nobeer salty nosalty <lgl> <dbl> <dbl> <dbl> <dbl> 1 FALSE 0.333 0.667 0.833 0.167 2 TRUE 0.257 0.743 0.586 0.414 2) # A tibble: 2 x 5 `BEER > 0` pizza nopizza salty nosalty <lgl> <dbl> <dbl> <dbl> <dbl> 1 FALSE 0.371 0.629 0.843 0.157 2 TRUE 0.290 0.710 0.532 0.468 3) # A tibble: 2 x 5 `SALTY > 0` pizza nopizza beer nobeer <lgl> <dbl> <dbl> <dbl> <dbl> 1 FALSE 0.569 0.431 0.569 0.431 2 TRUE 0.272 0.728 0.219 0.781 ,则有PIZZA的可能性购买0.586,而有SALTY的可能性则没有购买0.414(表1)。但是,如果我购买SALTY,那么我有SALTY的概率购买0.272而有PIZZA的概率不购买0.728(表3)?

1 个答案:

答案 0 :(得分:1)

我不是100%肯定这是您要寻找的东西,所以请让我知道我是否偏离轨道。

我们从我在评论中建议的内容开始(经过微调以将NA替换为0):

df<- df %>% group_by(PANID, year, WEEK,L1) %>% summarize(n=n()) %>% tidyr::spread(L1, n, fill=0)

这为我们提供了一种广泛的数据格式,在该数据格式中,每人每周可以看到三种食物中每种食物的购买次数,例如:

> head(df,3)
# A tibble: 3 x 6
# Groups:   PANID, year, WEEK [3]
    PANID  year WEEK        BEER PIZZA SALTY
    <int> <int> <date>     <dbl> <dbl> <dbl>
1 3108696  2007 2007-12-31     2     4     6
2 3108696  2008 2008-01-21     0     2     2
3 3108696  2008 2008-02-04     1     0     2

现在,我们可以创建一个表,该表给出了如果在同一周购买了PIZZA(任意数量)的啤酒或咸(任意数量)的概率:

df %>% group_by(PIZZA>0) %>% 
  summarise(beer=sum(BEER>0)/n(),nobeer=sum(BEER==0)/n(),
    salty=sum(SALTY>0)/n(),nosalty=sum(SALTY==0)/n())

结果:

# A tibble: 2 x 5
  `PIZZA > 0`  beer nobeer salty nosalty
  <lgl>       <dbl>  <dbl> <dbl>   <dbl>
1 FALSE       0.333  0.667 0.833   0.167
2 TRUE        0.257  0.743 0.586   0.414

因此,我们可以看到,如果购买了披萨,则与不购买披萨的几周相比,啤酒和咸味的可能性降低了。

当然,啤酒和盐也可以做到这一点。

另一种选择是,由于我们对三种食物的每种都有一个数字变量,因此将计算相关性甚至回归,但这不是您要的。