Подсчет появлений комбинации элементов в R

У меня есть крупный клиент, который часто покупает у меня. Я хотел бы знать, какие комбинации продуктов он часто покупает вместе. Например, каждый раз, когда он покупает продукт A, он также покупает продукт W. То же самое и с другими комбинациями продуктов.

Моя цель - определить эти комбинации продуктов, чтобы я мог предлагать продукт W другим моим клиентам, которые покупают только продукт A (возможно, они покупают продукт W от моих конкурентов, не зная, что я его продаю).

Мои данные выглядят так

   codclient  codproduct            quant         date
1      101249     A                4.1600     2016-10-01
2      101249     W                1.3880     2016-10-01
3      101249     B                1.5268     2016-10-01
4      101249     A                0.8328     2016-11-01
5      101249     W                2.9148     2016-11-01
6      101249     B                2.7760     2016-11-01
7      101249     C                1.8750     2016-11-01
8      101250     A                0.6940     2016-10-01
9      101250     A                7.0000     2016-11-01
10     101251     B               12.0000     2016-11-01
11     101251     C             1000.0000     2016-11-01
12     101252     W             1000.0000     2016-11-01

Используя intersect или Reduce(intersect, list = (products_by_month)), я могу видеть только те товары, которые всегда покупаются.

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

Я могу создать вектор комбинаций продуктов, используя combn (каждой комбинации из двух или трех продуктов было бы достаточно), но мне все еще не хватает того, как подсчитать, сколько раз они появляются вместе в каждом векторе приобретенных продуктов за каждый месяц.

Есть мысли, как это сделать?


person Felipe Alvarenga    schedule 28.04.2017    source источник
comment
Вы можете найти здесь что-нибудь полезное здесь, например crossprod(table(month, product))   -  person alexis_laz    schedule 29.04.2017
comment
Я бы, вероятно, построил полный граф с продуктами в качестве узлов; установить вес между парой товаров = # раз, когда они покупаются вместе; и использовать некоторые стандартные графические инструменты для поиска кластеров (... я просто предполагаю, что они существуют).   -  person Frank    schedule 29.04.2017


Ответы (2)


Я уже давно хотел углубиться в аналитику корзины, и я знаю, что в r есть специальный пакет для этого:

https://cran.r-project.org/web/packages/arules/index.html

Это может вам помочь, а может и не помочь, но я решил, что на всякий случай выкину его там.

person Knachman    schedule 29.04.2017
comment
Это намного больше, чем я думал. Спасибо - person Felipe Alvarenga; 03.05.2017
comment
Нет проблем! Это действительно интересная тема. - person Knachman; 04.05.2017

Вы можете сделать это с помощью dplyr:

spread(filter(df,codClient == 101249),codproduct,quant)

     codclient      date      A       B        C         W
1       101249 10/1/2016 4.1600  1.5268       NA    1.3880
2       101249 11/1/2016 0.8328  2.7760    1.875    2.9148
person PhilC    schedule 28.04.2017