email : ?_?
ntraktir : https://trakteer.id/contekansial
nyawer :
https://saweria.co/contekansial
github :
https://bit.ly/origin-AL-GitHub
youtube :
https://bit.ly/origin-AL-youtube
AL. Fashion adalah sebuah toko fashion yang menjual
berbagai produk seperti jeans, kemeja, kosmetik, dan lain-lain. Walaupun
cukup berkembang, namun dengan semakin banyaknya kompetitor dan banyak
produk yang stoknya masih banyak tentunya membuat khawatir pemilik
toko.
Salah satu solusi adalah membuat paket yang inovatif. Dimana produk yang sebelumnya tidak terlalu laku tapi punya pangsa pasar malah bisa dipaketkan dan laku.
Kamu sebagai seorang data scientist, ditugaskan membantu
mengidentifikasi paket produk yang menarik untuk dipaketkan sehingga
akhirnya bisa meningkatkan keuntungan dan loyalitas para pelanggan
AL. Fashion. Kamu akan menggunakan R dan
algoritma apriori dari paket arules di sepanjang
project ini.
AL. FashionUntuk memulai project ini, data engineer dari
AL. Fashion memberikan data transaksi 3 bulan kepada kamu
dalam bentuk format TSV (Tab Separated Value) dengan nama
transaksi_dqlab_retail.tsv dengan jumlah baris 33,669 baris
data (3,450 kode transaksi).
Berikut adalah tampilan datanya.
Kode Transaksi Nama Barang
#1 Kaos
#1 Shampo Biasa
#1 Sepatu Sport merk Z
#1 Serum Vitamin
#1 Baju Renang Pria Dewasa
#1 Baju Renang Wanita Dewasa
#1 Baju Kaos Olahraga
#1 Celana Jogger Casual
#1 Dompet Card Holder
#2 Celana Jeans Sobek Wanita
#2 Blouse Denim
#2 Baju Batik Wanita
#2 Hair and Scalp
#2 Shampo Biasa
#2 Minyak Rambut
#2 Wedges Hitam
#2 Sepatu Sandal Anak
#2 Tas Sekolah Anak Perempuan
#2 Baju Kemeja Putih
#2 Dompet Flip Cover
#3 Shampo Biasa
#3 Hair Tonic
Data transaksi ini telah dirapikan untuk kamu dengan hanya mengandung dua variabel, yaitu:
Variabel lain seperti harga, tanggal, jumlah pembelian, dan lain-lain tidak dimasukkan dengan alasan dua variabel tersebut sudah cukup.
Project ini terdiri dari 3 permasalahan, yaitu:
Tiap permasalahan memerlukan input dataset yang telah dijelaskan pada sub-bab sebelumnya. Setelah diproses maka kamu perlu menuliskan dalam nama file sesuai petunjuk.
Coba code dimana file dataset
dibaca dan kemudian langsung ditulis menggunakan fuction
write dan package arules
Begini :
#set library yang dibutuhkan
library("arules")
library("Matrix")
#membuat variabel dataset
transaksi.AL <- read.transactions(file="https://storage.googleapis.com/dqlab-dataset/transaksi_dqlab_retail.tsv", format="single", sep="\t", cols=c(1,2), skip=1)
#mengubah ke file.txt
write(transaksi.AL, file="test_project_retail.txt", sep=",")Tahap pertama sebenarnya yang diinginkan oleh pemilik toko adalah melihat apakah kamu mampu memberikan info top 10 dari dataset transaksi yang diberikan.
Buatlah script R untuk menghasilkan daftar
tersebut, dan hasilnya disimpan ke dalam file
top10 item retail.txt !
Hint: Gunakan kombinasi function
itemFrequency, names, sort, dan
data.frame.
Begini :
#cara 1
#set library yang dibutuhkan
library("arules")
library("Matrix")
#membuat variabel dataset
transaksi.AL <- read.transactions(file="https://storage.googleapis.com/dqlab-dataset/transaksi_dqlab_retail.tsv", format="single", sep="\t", cols=c(1,2), skip=1)
#menggunakan fungsi sort dan itemFrequency
top.10 <- sort(itemFrequency(transaksi.AL,type='absolute'), decreasing=TRUE)[1:10]
#menggunakan fungsi data.frame dan names
top.10 <- data.frame("Nama.Produk"=names(top.10), "Jumlah"=top.10, row.names=NULL)
#menulis file
write.csv(top.10,file="top10 item retail.txt")# cara 2
library("arules")
library("Matrix")
item <- sort(
itemFrequency(
read.transactions(
file="https://storage.googleapis.com/dqlab-dataset/transaksi_dqlab_retail.tsv",
format="single",
sep="\t",
cols=c(1,2),
skip=1
),
type="absolute"),
decreasing = TRUE
)[1:10]
write.csv(
data.frame(
"Nama.Produk"=names(item),
"Jumlah"=item,
row.names=NULL
),
file="top10 item retail 2.txt"
)Tahap berikutnya adalah kamu harus bisa memberikan informasi bottom 10 dari dataset transaksi yang diberikan.
Buatlah script R untuk menghasilkan daftar
tersebut, dan hasilnya disimpan ke dalam file
bottom10 item retail.txt !
Hint: Gunakan kombinasi function
itemFrequency, names, sort, dan
data.frame.
Begini :
#cara 1
#set library yang dibutuhkan
library("arules")
library("Matrix")
#membuat variabel dataset
transaksi.AL <- read.transactions(file="https://storage.googleapis.com/dqlab-dataset/transaksi_dqlab_retail.tsv", format="single", sep="\t", cols=c(1,2), skip=1)
#menggunakan fungsi sort dan itemFrequency
bottom.10 <- sort(itemFrequency(transaksi.AL,type='absolute'), decreasing=FALSE)[1:10]
#menggunakan fungsi data.frame dan names
bottom.10 <- data.frame("Nama.Produk"=names(bottom.10), "Jumlah"=bottom.10, row.names=NULL)
#menulis file
write.csv(bottom.10,file="bottom10 item retail.txt")# cara 2
library("arules")
library("Matrix")
item <- sort(
itemFrequency(
read.transactions(
file="https://storage.googleapis.com/dqlab-dataset/transaksi_dqlab_retail.tsv",
format="single",
sep="\t",
cols=c(1,2),
skip=1
),
type="absolute"),
decreasing = FALSE
)[1:10]
write.csv(
data.frame(
"Nama.Produk"=names(item),
"Jumlah"=item,
row.names=NULL
),
file="bottom10 item retail 2.txt"
)Setelah yakin kamu dapat melakukannya, pemilik toko ingin kamu mengirimkan file yang berisi daftar 10 paket kombinasi produk yang paling menarik.
Kamu pertamanya bingung, apa sih definisi menarik versi pemilik toko ini. Setelah wawancara intensif, ternyata pengertiannya adalah sebagai berikut:
Buatlah script R untuk menghasilkan daftar
tersebut dan hasilnya disimpan ke dalam file
kombinasi retail.txt. Namun untuk menulis hasil dari
rules, kamu tidak perlu melakukan konversi rules
menjadi data.frame. Gunakan langsung fungsi
write dengan syntax berikut:
write(variable_untuk_rules, file="nama_file_yang_diinginkan.txt")
Begini :
#set library yang dibutuhkan
library("arules")
library("Matrix")
#membuat variabel dataset
transaksi.AL <- read.transactions(file="https://storage.googleapis.com/dqlab-dataset/transaksi_dqlab_retail.tsv", format="single", sep="\t", cols=c(1,2), skip=1)
#membuat kombinasi min 2 item, maks 3 item, conf 50%
rules <- apriori(transaksi.AL, parameter = list(supp=10/length(transaksi.AL), conf=0.5, minlen=2, maxlen=3))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 done [0.00s].
writing ... [4637 rule(s)] done [0.00s].
creating S4 object ... done [0.00s].
#mencari kombinasi min 10 dari semua transaksi
apriori_rules <- c(head(sort(rules, by="lift"), n=10))
#menulis file
write(apriori_rules, file="kombinasi retail.txt")Slow-moving item adalah produk yang pergerakan penjualannya lambat atau kurang cepat. Ini akan bermasalah apabila item produk tersebut masih menumpuk.
Kadang kala item ini belum tentu tidak laku, hanya saja mungkin harganya tidak bagus dan jarang dibutuhkan jika dijual satuan. Nah, jika tidak dijual satuan kita perlu cari asosiasi kuat dari item produk ini dengan produk lain sehingga jika dipaketkan akan menjadi lebih menarik.
Pemilik toko juga meyakini hal ini, dan ingin agar kamu membantu mengidentifikasi dua item produk yang menurut dia stoknya masih banyak dan perlu dicari pasangan item untuk pemaketannya.
Dua item produk tersebut adalah “Tas Makeup” dan “Baju Renang Pria Anak-anak”. Pemilik toko ingin meminta kombinasi yang bisa dipaketkan dengan kedua produk tersebut.
Masing-masing produk tersebut dikeluarkan 3 rules yang asosiasi nya paling kuat, sehingga total ada 6 rules. Persyaratan-persyaratan asosiasi kuat ini masih sama dengan yang telah disebutkan pemilik toko sebelumnya, kecuali tingkat confidence dicoba pada tingkat minimal 0.1.
Buatlah script R untuk menghasilkan daftar
tersebut dan hasilnya disimpan ke dalam file
kombinasi retail slow moving.txt. Dan untuk menghasilkan
file ini, rules tidak usah dikonversi menjadi
data.frame dan bisa langsung ditulis dengan
write seperti syntax berikut.
write(variable_untuk_rules, file="nama_file_yang_diinginkan.txt")
Hint: Pada association rules, item “Tas
Makeup” dan “Baju Renang Pria Anak-anak” tersebut kita masukkan di
rhs (right hand side). Gabungkan kedua subset
rules yang dengan function c sebelum
dituliskan ke file.
Begini :
# cara 1
#set library yang dibutuhkan
library("arules")
library("Matrix")
#membuat variabel dataset
transaksi.AL <- read.transactions(file="https://storage.googleapis.com/dqlab-dataset/transaksi_dqlab_retail.tsv", format="single", sep="\t", cols=c(1,2), skip=1)
#membuat kombinasi min 2 item, maks 3 item, conf 10%
rules <- apriori(transaksi.AL, parameter = list(minlen = 2, maxlen = 3, conf = 0.1,
support=10/length(transaksi.AL)))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.00s].
sorting and recoding items ... [68 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 done [0.00s].
writing ... [39832 rule(s)] done [0.00s].
creating S4 object ... done [0.01s].
#mencari kombinasi produk yang bisa dipaketkan
A <- subset(rules,rhs %in% "Tas Makeup")
L <- subset(rules,rhs %in% "Baju Renang Pria Anak-anak")
#melihat 3 rules yang memiliki asosiasi kuat
A <- head(sort(A, by="lift", decreasing=TRUE), n=3L)
L <- head(sort(L, by="lift", decreasing=TRUE), n=3L)
#menggabungkan subset rules
AL <- c(A,L)
inspect(AL) lhs rhs support confidence coverage lift count
[1] {Baju Renang Anak Perempuan,
Tas Pinggang Wanita} => {Tas Makeup} 0.010434783 0.8000000 0.01304348 19.57447 36
[2] {Baju Renang Anak Perempuan,
Tas Ransel Mini} => {Tas Makeup} 0.011304348 0.7959184 0.01420290 19.47460 39
[3] {Baju Renang Anak Perempuan,
Celana Pendek Green/Hijau} => {Tas Makeup} 0.010144928 0.7777778 0.01304348 19.03073 35
[4] {Gembok Koper,
Tas Waist Bag} => {Baju Renang Pria Anak-anak} 0.004057971 0.2745098 0.01478261 29.59559 14
[5] {Flat Shoes Ballerina,
Gembok Koper} => {Baju Renang Pria Anak-anak} 0.004057971 0.1866667 0.02173913 20.12500 14
[6] {Celana Jeans Sobek Wanita,
Jeans Jumbo} => {Baju Renang Pria Anak-anak} 0.005507246 0.1210191 0.04550725 13.04737 19
#menulis file
write(AL, file="kombinasi retail slow moving.txt")# cara 2
library("arules")
library("Matrix")
transaksi.AL <- read.transactions(file="https://storage.googleapis.com/dqlab-dataset/transaksi_dqlab_retail.tsv", format="single", sep="\t", cols=c(1,2), skip=1)
rules <- apriori(transaksi.AL, parameter = list(minlen = 2, maxlen = 3, conf = 0.1,
support=10/length(transaksi.AL)))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.00s].
sorting and recoding items ... [68 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 done [0.00s].
writing ... [39832 rule(s)] done [0.00s].
creating S4 object ... done [0.01s].
apriori_rules1 <- subset(rules,rhs %in% "Tas Makeup")
apriori_rules2 <- subset(rules,rhs %in% "Baju Renang Pria Anak-anak")
apriori_rules1 <- sort(apriori_rules1, by="lift") [1:3]
apriori_rules2 <- sort(apriori_rules2, by="lift") [1:3]
apriori_rules <- c(apriori_rules1, apriori_rules2)
inspect(apriori_rules) lhs rhs support confidence coverage lift count
[1] {Baju Renang Anak Perempuan,
Tas Pinggang Wanita} => {Tas Makeup} 0.010434783 0.8000000 0.01304348 19.57447 36
[2] {Baju Renang Anak Perempuan,
Tas Ransel Mini} => {Tas Makeup} 0.011304348 0.7959184 0.01420290 19.47460 39
[3] {Baju Renang Anak Perempuan,
Celana Pendek Green/Hijau} => {Tas Makeup} 0.010144928 0.7777778 0.01304348 19.03073 35
[4] {Gembok Koper,
Tas Waist Bag} => {Baju Renang Pria Anak-anak} 0.004057971 0.2745098 0.01478261 29.59559 14
[5] {Flat Shoes Ballerina,
Gembok Koper} => {Baju Renang Pria Anak-anak} 0.004057971 0.1866667 0.02173913 20.12500 14
[6] {Celana Jeans Sobek Wanita,
Jeans Jumbo} => {Baju Renang Pria Anak-anak} 0.005507246 0.1210191 0.04550725 13.04737 19
write(apriori_rules, file="kombinasi retail slow moving 2.txt")