Покупка товара - если потребитель покупает товар х, насколько вероятно, что он купит товар - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть некоторые данные о покупках на уровне магазина, случайная выборка данных выглядит следующим образом:

      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 PANID с за 4 года данных для 3 категорий продуктов (BEER, SALTY, PIZZA).Я пытаюсь выяснить, покупают ли люди, купившие BEER на данной неделе, SALTY /, строят ли вероятность того, что PANID: 3144766 купили SALTY за WEEK: 2009-06-15 какова вероятность того, что они также будут BEER.Делая то же самое для pizza, т.е. учитывая, что они купили BEER вероятность того, что они купят PIZZA, и, наконец, учитывая, что они купили PIZZA, вероятность того, что они купят SALTY.

Например, человек ниже купил 3 пакета SALTY и одну единицу BEER, но на другой неделе они просто купили бы BEER и PIZZA или просто SALTY.

> 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

Данные:

EDIT1: данные удалены из-за ограничения по количеству символов.Можно найти здесь: https://textuploader.com/db1kf

EDIT2:

Я запускаю следующий код, чтобы получить следующий вывод:

#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 вероятность не покупать SALTY (таблица 1).Однако, если я куплю SALTY, тогда у меня будет 0.272 вероятность покупки PIZZA и 0.728 не покупки PIZZA (таблица 3)?

1 Ответ

0 голосов
/ 14 ноября 2018

Я не на 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

Теперь мы можем создать таблицу, в которой указана вероятность покупки ПИВА или СОЛТИ (на любую сумму), если ПИЦЦА (на любую сумму) была приобретена на той же неделе:

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

Таким образом, мы можем видеть, что, если пицца была куплена, вероятность того, что пиво и соленое снизится, по сравнению с неделями, когда пицца не покупается.

То же самое можно сделать для пива и соли, конечно.

Альтернативой, поскольку у нас есть числовая переменная для каждого из трех продуктов, будет расчет корреляции или даже регрессии, но это не то, что вы просили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...