Wstęp

Celem mojego projektu jest przeanalizowanie koszyków zakupów spożywczych na podstawie zbioru danych z Kaggle dotyczącego koszyków zakupowych klientów pewnego indyjskiego sklepu spożywczego. Użyłam do tego analizy reguł asocjacyjnych, która dobrze nadaje się do rozpoznania wzorów, które później mogą przydać się właścicielowi sklepu przy zoptymalizowaniu pracy sklepu.

library(arules)
## Warning: pakiet 'arules' został zbudowany w wersji R 4.5.2
## Ładowanie wymaganego pakietu: Matrix
## 
## Dołączanie pakietu: 'arules'
## Następujące obiekty zostały zakryte z 'package:base':
## 
##     abbreviate, write
library(arulesViz)
## Warning: pakiet 'arulesViz' został zbudowany w wersji R 4.5.2

Wczytanie danych

trans1 <- read.transactions("Market_Basket_Optimisation.csv", format = "basket",
                            sep = ",", skip = 1)
## Warning in asMethod(object): removing duplicated items in transactions
length(trans1)
## [1] 7500
summary(size(trans1))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.000   2.000   3.000   3.912   5.000  19.000

Zbiór danych zawiera 7500 obserwacji, czyli koszyków zakupowych zakupionych przez klientów sklepu, z którego pochodzą dane. Po wczytaniu danych i analizie danych statystycznych mozna zobaczyć, że dominowały koszyki liczące tylko kilka produktów. Sugeruje to, że klienci przychodzili do sklepu po małe zakupy.

Najczęściej kupowane produkty

itemFrequencyPlot(trans1, topN = 10)

Powyższy wykres pokazuje, że najczęściej pojawiającymi się produktami w koszykach były produkty podstawowe, takie jak woda mineralna czy jajka, oraz bazę pod przyhotowanie szybkiego posiłku, na przykład makaron spaghetti czy frytki.

Analiza reguł asocjacyjnych

Kod poniżej wyszukuje reguł asocjacyjnych, Wybrałam do tego funkcję “apriori”, której zaletą jest to, że eliminuje produkty występujące rzadko, gdyż reguły asocjacyjne z nich wynikające zachodziły by równie rzadko. Ustawiłam jednak niskie miary “support” i “confidence”, gdyż ze względu na raczej małe zakupy dokonywane przez klientów, produkty były stosunkowo rzadko kupowane razem. Poniżej takżę sortuję najważniejsze reguły asocjacyjne według miary “confidence” i “lift”.

rules.trans1 <- apriori(trans1,
                        parameter = list(supp = 0.01, conf = 0.05))
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##        0.05    0.1    1 none FALSE            TRUE       5    0.01      1
##  maxlen target  ext
##      10  rules TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 75 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[119 item(s), 7500 transaction(s)] done [0.00s].
## sorting and recoding items ... [75 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 4 done [0.00s].
## writing ... [407 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].
rules.by.conf <- sort(rules.trans1, by = "confidence", decreasing = TRUE)
inspect(head(rules.by.conf))
##     lhs                          rhs             support    confidence
## [1] {eggs, ground beef}       => {mineral water} 0.01013333 0.5066667 
## [2] {ground beef, milk}       => {mineral water} 0.01106667 0.5030303 
## [3] {chocolate, ground beef}  => {mineral water} 0.01093333 0.4739884 
## [4] {frozen vegetables, milk} => {mineral water} 0.01106667 0.4689266 
## [5] {soup}                    => {mineral water} 0.02306667 0.4564644 
## [6] {pancakes, spaghetti}     => {mineral water} 0.01146667 0.4550265 
##     coverage   lift     count
## [1] 0.02000000 2.126469  76  
## [2] 0.02200000 2.111207  83  
## [3] 0.02306667 1.989319  82  
## [4] 0.02360000 1.968075  83  
## [5] 0.05053333 1.915771 173  
## [6] 0.02520000 1.909736  86
rules.by.lift <- sort(rules.trans1, by = "lift", decreasing = TRUE)
inspect(head(rules.by.lift))
##     lhs                           rhs                 support    confidence
## [1] {ground beef}              => {herb & pepper}     0.01600000 0.1628223 
## [2] {herb & pepper}            => {ground beef}       0.01600000 0.3234501 
## [3] {mineral water, spaghetti} => {ground beef}       0.01706667 0.2857143 
## [4] {mineral water, spaghetti} => {olive oil}         0.01026667 0.1718750 
## [5] {frozen vegetables}        => {tomatoes}          0.01613333 0.1692308 
## [6] {tomatoes}                 => {frozen vegetables} 0.01613333 0.2358674 
##     coverage   lift     count
## [1] 0.09826667 3.291555 120  
## [2] 0.04946667 3.291555 120  
## [3] 0.05973333 2.907540 128  
## [4] 0.05973333 2.614731  77  
## [5] 0.09533333 2.474134 121  
## [6] 0.06840000 2.474134 121

` Reguły z najwyższą “confidence” wskazują, że zakup różnych produktów (pojedyńczo i w parach) asocjuje z zakupem wody mineralej. Produkty te łączy to, że należą do jednych z najczęściej kupowanych, czyli pojawiają się w wielu koszykach, tak samo jak woda mineralna. Można to zinterpretować jako fakt, że osoby robiące podstawowe zakupy spożywcze, kupują też często wodę mineralną.

Reguły z najwyższą miarą “lift”, charakteryzujące się duzą siłą, zaś dostarczają nam innej perspektywy na dokonywane zakupy. Na przykład, mielona wołowina często jest kupowana razem z przyprawami oraz makaronem spaghetti, co wskazuje na to, że klienci przychodzą do analizowanego sklepu, aby kupić wszystkie niezbędne składniki do przygotowania dania. Na podstawie reguł z wysoka wartością “lift” sklep może podjąć decyzję o ułożeniu danych produktów na półkach niedaleko siebie, gdyż zakup jednych zwiększa prawdopodobieńswto zakupu również drugich.

Dla wizualizacji pozsostałych reguł zamieszcam także poniższy wykres.

## Warning: Too many rules supplied. Only plotting the best 100 using 'lift'
## (change control parameter max if needed).

Wnioski

Analiza reguł asocjacyjnych dostarcza nie tylko informacji na temat najczęściej kupowanych produktów, ale także tego, które produkty zwiększają sprzedaż innych. Można także odczytać z niej cele, w jakich klienci przychodzą na zakupy do badanego sklepu, a przychodzą po: 1. podstawowe produkty spożywcze, 2. niezbędne produkty do stworzenia kompletnego dania.

Informacje te mogą pomóc badanemu sklepowi dostosować lepiej asortyment do potrzeb klienta oraz ustawić produkty na półkach tak, aby w jednym miejscy znalazły się składniki do stworzenia dania, gdyż wtedy konsument z większym prawdopodobieństwem je kupi.