1 Reading Dataset

library(arules)
## Loading required package: Matrix
## 
## Attaching package: 'arules'
## The following objects are masked from 'package:base':
## 
##     abbreviate, write
transaksi_tabular <- read.transactions(file="https://storage.googleapis.com/dqlab-dataset/transaksi_dqlab_retail.tsv", 
                                       format="single", sep="\t", cols=c(1,2), skip=1)
write(transaksi_tabular, file="test_project_retail_1.txt", sep=",")

2 Sorting the Top and Bottom 10 Products

2.1 Viewing All Items

all_item <- itemFrequency(transaksi_tabular, type = "absolute")
names(all_item)
##  [1] "Atasan Baju Belang"               "Atasan Kaos Putih"               
##  [3] "Baju Batik Wanita"                "Baju Kaos Anak - Karakter Kartun"
##  [5] "Baju Kaos Anak - Superheroes"     "Baju Kaos Olahraga"              
##  [7] "Baju Kemeja Putih"                "Baju Renang Anak Perempuan"      
##  [9] "Baju Renang Pria Anak-anak"       "Baju Renang Pria Dewasa"         
## [11] "Baju Renang Wanita Dewasa"        "Blouse Denim"                    
## [13] "Celana Jeans Sobek Pria"          "Celana Jeans Sobek Wanita"       
## [15] "Celana Jogger Casual"             "Celana Panjang Format Hitam"     
## [17] "Celana Pendek Casual"             "Celana Pendek Green/Hijau"       
## [19] "Celana Pendek Jeans"              "Celana Tactical "                
## [21] "Cover Koper"                      "Cream Whitening"                 
## [23] "Dompet Card Holder"               "Dompet Flip Cover"               
## [25] "Dompet Kulit Pria"                "Dompet STNK Gantungan"           
## [27] "Dompet Unisex"                    "Flat Shoes Ballerina"            
## [29] "Gembok Koper"                     "Hair and Scalp"                  
## [31] "Hair Dryer"                       "Hair Dye"                        
## [33] "Hair Tonic"                       "Jeans Jumbo"                     
## [35] "Kaos"                             "Koper Fiber"                     
## [37] "Kuas Makeup "                     "Mascara"                         
## [39] "Minyak Rambut"                    "Obat Penumbuh Rambut"            
## [41] "Pelembab"                         "Sepatu Kulit Casual"             
## [43] "Sepatu Sandal Anak"               "Sepatu Sekolah Hitam W"          
## [45] "Sepatu Sport merk Y"              "Sepatu Sport merk Z"             
## [47] "Serum Vitamin"                    "Shampo Anti Dandruff"            
## [49] "Shampo Biasa"                     "Stripe Pants"                    
## [51] "Sunblock Cream"                   "Sweater Top Panjang"             
## [53] "Tali Ban Ikat Pinggang"           "Tali Pinggang Anak"              
## [55] "Tali Pinggang Gesper Pria"        "Tank Top"                        
## [57] "Tas Kosmetik"                     "Tas Kulit Selempang"             
## [59] "Tas Makeup"                       "Tas Multifungsi"                 
## [61] "Tas Pinggang Wanita"              "Tas Ransel Mini"                 
## [63] "Tas Sekolah Anak Laki-laki"       "Tas Sekolah Anak Perempuan"      
## [65] "Tas Tangan"                       "Tas Travel"                      
## [67] "Tas Waist Bag"                    "Wedges Hitam"                    
## [69] "Woman Ripped Jeans "

2.2 Sorting the Top 10 Products

top10_item <- sort(all_item, decreasing = TRUE)[1:10]
top10_item <- data.frame("Nama.Produk" = names(top10_item), 
                         "Jumlah" = top10_item, row.names = NULL)
write.csv(top10_item, file = "top10_item_retail.txt")
top10_item

2.3 Sorting the Bottom 10 Products

bottom10_item <- sort(all_item, decreasing = FALSE)[1:10]
bottom10_item <- data.frame("Nama.Produk" = names(bottom10_item), 
                            "Jumlah" = bottom10_item, row.names = NULL)
write.csv(bottom10_item, file = "bottom10_item_retail.txt")
bottom10_item

3 Creating The Interesting Product Combinations

kombinasi_retail <- apriori(
  data = transaksi_tabular, 
  parameter = list(
    support = 10/length(transaksi_tabular), # minimum support
    confidence = 0.50, # minimum confidence  
    minlen = 2, # minimum banyaknya produk dalam satu rule
    maxlen = 3 # maksimum banyaknya produk dalam satu rule
  )
)
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime     support minlen
##         0.5    0.1    1 none FALSE            TRUE       5 0.002898551      2
##  maxlen target  ext
##       3  rules TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 10 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[69 item(s), 3450 transaction(s)] done [0.00s].
## sorting and recoding items ... [68 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3
## Warning in apriori(data = transaksi_tabular, parameter = list(support = 10/
## length(transaksi_tabular), : Mining stopped (maxlen reached). Only patterns up
## to a length of 3 returned!
##  done [0.02s].
## writing ... [4637 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].
kombinasi_retail <- head(sort(kombinasi_retail, decreasing = TRUE, 
                              by = 'lift'), n = 10)
write(kombinasi_retail, file = "kombinasi_retail.txt")
kombinasi_retail
## set of 10 rules

4 Packaging with Slow Moving Product

kombinasi_retail <- apriori(
  data = transaksi_tabular, 
  parameter = list(
    support = 10/length(transaksi_tabular), # minimum support
    confidence = 0.10, # minimum confidence  
    minlen = 2, # minimum banyaknya produk dalam satu rule
    maxlen = 3 # maksimum banyaknya produk dalam satu rule
  )
)
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime     support minlen
##         0.1    0.1    1 none FALSE            TRUE       5 0.002898551      2
##  maxlen target  ext
##       3  rules TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 10 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[69 item(s), 3450 transaction(s)] done [0.01s].
## sorting and recoding items ... [68 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3
## Warning in apriori(data = transaksi_tabular, parameter = list(support = 10/
## length(transaksi_tabular), : Mining stopped (maxlen reached). Only patterns up
## to a length of 3 returned!
##  done [0.01s].
## writing ... [39832 rule(s)] done [0.02s].
## creating S4 object  ... done [0.02s].
kombinasi_retail1 <- subset(kombinasi_retail, lift > 1 & rhs %in% "Tas Makeup")
kombinasi_retail1 <- sort(kombinasi_retail1, by='lift', decreasing = T)[1:3]
kombinasi_retail2 <- subset(kombinasi_retail, lift > 1 & rhs %in% "Baju Renang Pria Anak-anak")
kombinasi_retail2 <- sort(kombinasi_retail2, by='lift', decreasing = T)[1:3]
kombinasi_retail <- c(kombinasi_retail1, kombinasi_retail2)
kombinasi_retail
## set of 6 rules
write(kombinasi_retail,file="kombinasi_retail_slow_moving.txt")