1. Introduction

Shopping Trends adalah sebuah dataset yang menyajikan informasi detail terkait tren belanja pelanggan di sebuah perusahaan ritel. Dataset ini mencakup berbagai aspek, mulai dari detail demografis pelanggan, kategori produk yang dibeli, hingga metode pembayaran yang digunakan.

Dalam era digital saat ini, memahami perilaku belanja pelanggan adalah kunci keberhasilan bagi banyak perusahaan ritel. Dengan dataset ini, kita dapat memahami lebih dalam tentang preferensi pelanggan, tren belanja musiman, hingga faktor-faktor yang mungkin mempengaruhi keputusan pembelian mereka.

Salah satu aspek menarik yang dapat kita gali dari dataset ini adalah metode pembayaran. Dengan semakin beragamnya pilihan metode pembayaran yang tersedia bagi pelanggan, apakah ada korelasi antara metode pembayaran dengan histori pembelian pelanggan sebelumnya?

Dalam analisis ini, kita akan fokus pada dua pertanyaan utama: 1. Kategori produk apa yang paling banyak dibeli? 2. Pada musim apa pembelian paling banyak dilakukan? 3. Berapa rata-rata jumlah pembelian oleh pelanggan dalam setahun?

Mari kita mulai eksplorasi kita menggunakan R dan temukan jawabannya!

2 Data Preparation

2.1 Prerequisites

2.1.1 Importing Libraries

# For data wrangling
library(tidyr)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
# For visualization
library(ggplot2)

2.1.2 Importing Dataset

df <- read.csv("shopping_trends_updated.csv")

Mari kita inspeksi data kita menggunakan head().

head(df)
##   Customer.ID Age Gender Item.Purchased Category Purchase.Amount..USD.
## 1           1  55   Male         Blouse Clothing                    53
## 2           2  19   Male        Sweater Clothing                    64
## 3           3  50   Male          Jeans Clothing                    73
## 4           4  21   Male        Sandals Footwear                    90
## 5           5  45   Male         Blouse Clothing                    49
## 6           6  46   Male       Sneakers Footwear                    20
##        Location Size     Color Season Review.Rating Subscription.Status
## 1      Kentucky    L      Gray Winter           3.1                 Yes
## 2         Maine    L    Maroon Winter           3.1                 Yes
## 3 Massachusetts    S    Maroon Spring           3.1                 Yes
## 4  Rhode Island    M    Maroon Spring           3.5                 Yes
## 5        Oregon    M Turquoise Spring           2.7                 Yes
## 6       Wyoming    M     White Summer           2.9                 Yes
##   Shipping.Type Discount.Applied Promo.Code.Used Previous.Purchases
## 1       Express              Yes             Yes                 14
## 2       Express              Yes             Yes                  2
## 3 Free Shipping              Yes             Yes                 23
## 4  Next Day Air              Yes             Yes                 49
## 5 Free Shipping              Yes             Yes                 31
## 6      Standard              Yes             Yes                 14
##   Payment.Method Frequency.of.Purchases
## 1          Venmo            Fortnightly
## 2           Cash            Fortnightly
## 3    Credit Card                 Weekly
## 4         PayPal                 Weekly
## 5         PayPal               Annually
## 6          Venmo                 Weekly

Setelah menjalankan kode di atas, Anda akan melihat output dari 6 baris pertama dari dataset Anda. Anda dapat melanjutkan dengan deskripsi kolom seperti pada contoh Anda, tetapi Anda perlu menyesuaikannya berdasarkan kolom yang ada dalam dataset “shopping_trends_updated.csv”.


Berdasarkan inspeksi awal data, dataset belanja kita terdiri dari kolom-kolom berikut:

  • Customer ID - Pengidentifikasi unik untuk setiap pelanggan.
  • Age - Usia dari pelanggan.
  • Gender - Jenis kelamin pelanggan (Pria/Wanita).
  • Item Purchased - Barang yang dibeli oleh pelanggan.
  • Category - Kategori dari barang yang dibeli.
  • Purchase Amount (USD) - Jumlah pembelian dalam USD.
  • Location - Lokasi di mana pembelian dilakukan.
  • Size - Ukuran dari barang yang dibeli.
  • Color - Warna dari barang yang dibeli.
  • Season - Musim saat pembelian dilakukan.
  • Review Rating - Rating yang diberikan oleh pelanggan untuk barang yang dibeli.
  • Subscription Status - Menunjukkan apakah pelanggan memiliki langganan (Ya/Tidak).
  • Shipping Type - Jenis pengiriman yang dipilih oleh pelanggan.
  • Discount Applied - Menunjukkan apakah diskon diterapkan pada pembelian (Ya/Tidak).
  • Promo Code Used - Menunjukkan apakah kode promo digunakan untuk pembelian (Ya/Tidak).
  • Previous Purchases - Jumlah total transaksi yang dilakukan oleh pelanggan di toko, tidak termasuk transaksi yang sedang berlangsung.
  • Payment Method - Metode pembayaran yang paling disukai pelanggan.
  • Frequency of Purchases - Seberapa sering pelanggan melakukan pembelian (misalnya, Mingguan, Dwi-mingguan, Bulanan).

3. Data Processing

3.1 Duplicates

Pertama-tama, kita akan memeriksa data yang duplikat. Hal ini dapat dilakukan dengan fungsi duplicated(). Untuk melihat jumlah baris yang duplikat, kita dapat membalut fungsi duplicated() dengan fungsi sum().

sum(duplicated(df))
## [1] 0

Jika kita mendapatkan hasil [1] 0, berarti tidak ada baris yang identik. Namun, untuk memastikan, mari kita periksa apakah ada Customer ID yang duplikat.

sum(duplicated(df$Customer.ID))
## [1] 0

3.2 Missing Values

Mari kita periksa nilai yang hilang dalam dataset kita.

colSums(is.na(df))
##            Customer.ID                    Age                 Gender 
##                      0                      0                      0 
##         Item.Purchased               Category  Purchase.Amount..USD. 
##                      0                      0                      0 
##               Location                   Size                  Color 
##                      0                      0                      0 
##                 Season          Review.Rating    Subscription.Status 
##                      0                      0                      0 
##          Shipping.Type       Discount.Applied        Promo.Code.Used 
##                      0                      0                      0 
##     Previous.Purchases         Payment.Method Frequency.of.Purchases 
##                      0                      0                      0

Jika terdapat kolom dengan banyak missing values, kita dapat memutuskan untuk menghapus kolom tersebut atau mengimputasi missing values.

3.3 Data Types

Kita perlu memastikan bahwa tipe data dari setiap kolom sesuai dengan informasi yang mereka wakili.

str(df)
## 'data.frame':    3900 obs. of  18 variables:
##  $ Customer.ID           : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Age                   : int  55 19 50 21 45 46 63 27 26 57 ...
##  $ Gender                : chr  "Male" "Male" "Male" "Male" ...
##  $ Item.Purchased        : chr  "Blouse" "Sweater" "Jeans" "Sandals" ...
##  $ Category              : chr  "Clothing" "Clothing" "Clothing" "Footwear" ...
##  $ Purchase.Amount..USD. : int  53 64 73 90 49 20 85 34 97 31 ...
##  $ Location              : chr  "Kentucky" "Maine" "Massachusetts" "Rhode Island" ...
##  $ Size                  : chr  "L" "L" "S" "M" ...
##  $ Color                 : chr  "Gray" "Maroon" "Maroon" "Maroon" ...
##  $ Season                : chr  "Winter" "Winter" "Spring" "Spring" ...
##  $ Review.Rating         : num  3.1 3.1 3.1 3.5 2.7 2.9 3.2 3.2 2.6 4.8 ...
##  $ Subscription.Status   : chr  "Yes" "Yes" "Yes" "Yes" ...
##  $ Shipping.Type         : chr  "Express" "Express" "Free Shipping" "Next Day Air" ...
##  $ Discount.Applied      : chr  "Yes" "Yes" "Yes" "Yes" ...
##  $ Promo.Code.Used       : chr  "Yes" "Yes" "Yes" "Yes" ...
##  $ Previous.Purchases    : int  14 2 23 49 31 14 49 19 8 4 ...
##  $ Payment.Method        : chr  "Venmo" "Cash" "Credit Card" "PayPal" ...
##  $ Frequency.of.Purchases: chr  "Fortnightly" "Fortnightly" "Weekly" "Weekly" ...

Setelah memeriksa tipe data dari setiap kolom, kita dapat mengubah tipe data yang tidak sesuai menggunakan fungsi seperti as.factor() atau as.numeric().

Berdasarkan deskripsi awal dataset, kita akan melakukan beberapa perubahan tipe data:

  • Customer ID: Akan diubah menjadi faktor karena setiap ID adalah unik dan tidak memiliki urutan tertentu.
  • Age: Harusnya sudah berupa integer atau numerik.
  • Gender: Dijadikan faktor.
  • Purchase Amount (USD): Harusnya sudah berupa numerik.
  • Subscription Status, Discount Applied, dan Promo Code Used: Dijadikan faktor.
  • Previous Purchases: Harusnya sudah berupa integer atau numerik.
  • Payment Method dan Frequency of Purchases: Dijadikan faktor.

Mari kita lakukan perubahan:

df <- df %>%
  mutate(
    Gender = as.factor(Gender),
    `Subscription.Status` = as.factor(`Subscription.Status`),
    `Discount.Applied` = as.factor(`Discount.Applied`),
    `Promo.Code.Used` = as.factor(`Promo.Code.Used`),
    `Payment.Method` = as.factor(`Payment.Method`),
    `Frequency.of.Purchases` = as.factor(`Frequency.of.Purchases`)
  )

Setelah melakukan perubahan, mari kita periksa tipe data untuk memastikan bahwa semua perubahan telah berhasil dilakukan:


str(df)
## 'data.frame':    3900 obs. of  18 variables:
##  $ Customer.ID           : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Age                   : int  55 19 50 21 45 46 63 27 26 57 ...
##  $ Gender                : Factor w/ 2 levels "Female","Male": 2 2 2 2 2 2 2 2 2 2 ...
##  $ Item.Purchased        : chr  "Blouse" "Sweater" "Jeans" "Sandals" ...
##  $ Category              : chr  "Clothing" "Clothing" "Clothing" "Footwear" ...
##  $ Purchase.Amount..USD. : int  53 64 73 90 49 20 85 34 97 31 ...
##  $ Location              : chr  "Kentucky" "Maine" "Massachusetts" "Rhode Island" ...
##  $ Size                  : chr  "L" "L" "S" "M" ...
##  $ Color                 : chr  "Gray" "Maroon" "Maroon" "Maroon" ...
##  $ Season                : chr  "Winter" "Winter" "Spring" "Spring" ...
##  $ Review.Rating         : num  3.1 3.1 3.1 3.5 2.7 2.9 3.2 3.2 2.6 4.8 ...
##  $ Subscription.Status   : Factor w/ 2 levels "No","Yes": 2 2 2 2 2 2 2 2 2 2 ...
##  $ Shipping.Type         : chr  "Express" "Express" "Free Shipping" "Next Day Air" ...
##  $ Discount.Applied      : Factor w/ 2 levels "No","Yes": 2 2 2 2 2 2 2 2 2 2 ...
##  $ Promo.Code.Used       : Factor w/ 2 levels "No","Yes": 2 2 2 2 2 2 2 2 2 2 ...
##  $ Previous.Purchases    : int  14 2 23 49 31 14 49 19 8 4 ...
##  $ Payment.Method        : Factor w/ 6 levels "Bank Transfer",..: 6 2 3 5 5 6 2 3 6 2 ...
##  $ Frequency.of.Purchases: Factor w/ 7 levels "Annually","Bi-Weekly",..: 4 4 7 7 1 7 6 7 1 6 ...

4. Exploratory Data Analysis

Dalam bagian EDA ini, kita akan mencoba menjawab pertanyaan-pertanyaan bisnis yang telah diajukan.

head(df)
##   Customer.ID Age Gender Item.Purchased Category Purchase.Amount..USD.
## 1           1  55   Male         Blouse Clothing                    53
## 2           2  19   Male        Sweater Clothing                    64
## 3           3  50   Male          Jeans Clothing                    73
## 4           4  21   Male        Sandals Footwear                    90
## 5           5  45   Male         Blouse Clothing                    49
## 6           6  46   Male       Sneakers Footwear                    20
##        Location Size     Color Season Review.Rating Subscription.Status
## 1      Kentucky    L      Gray Winter           3.1                 Yes
## 2         Maine    L    Maroon Winter           3.1                 Yes
## 3 Massachusetts    S    Maroon Spring           3.1                 Yes
## 4  Rhode Island    M    Maroon Spring           3.5                 Yes
## 5        Oregon    M Turquoise Spring           2.7                 Yes
## 6       Wyoming    M     White Summer           2.9                 Yes
##   Shipping.Type Discount.Applied Promo.Code.Used Previous.Purchases
## 1       Express              Yes             Yes                 14
## 2       Express              Yes             Yes                  2
## 3 Free Shipping              Yes             Yes                 23
## 4  Next Day Air              Yes             Yes                 49
## 5 Free Shipping              Yes             Yes                 31
## 6      Standard              Yes             Yes                 14
##   Payment.Method Frequency.of.Purchases
## 1          Venmo            Fortnightly
## 2           Cash            Fortnightly
## 3    Credit Card                 Weekly
## 4         PayPal                 Weekly
## 5         PayPal               Annually
## 6          Venmo                 Weekly

4.1 Kategori Produk yang Paling Banyak Dibeli

Mari kita lihat kategori produk yang paling banyak dibeli oleh pelanggan.

ggplot(df, aes(x = Category)) +
  geom_bar() +
  labs(title = "Distribusi Kategori Produk yang Dibeli", 
       x = "Kategori Produk", 
       y = "Jumlah Pembelian") +
  theme_minimal() +
  coord_flip()

Dari visualisasi di atas, kita dapat mengetahui kategori produk yang paling diminati oleh pelanggan.

4.2 Musim dengan Pembelian Terbanyak

Selanjutnya, kita akan melihat pada musim apa pembelian paling banyak dilakukan.

ggplot(df, aes(x = Season)) +
  geom_bar() +
  labs(title = "Distribusi Pembelian Berdasarkan Musim", 
       x = "Musim", 
       y = "Jumlah Pembelian") +
  theme_minimal()

Dengan visualisasi tersebut, kita dapat mengetahui musim mana yang paling banyak dihubungkan dengan aktivitas pembelian.

4.3 Rata-Rata Jumlah Pembelian oleh Pelanggan dalam Setahun

Untuk mengetahui rata-rata jumlah pembelian oleh pelanggan dalam setahun, kita dapat menggunakan statistik deskriptif.

summary(df$Frequency.of.Purchases)
##       Annually      Bi-Weekly Every 3 Months    Fortnightly        Monthly 
##            572            547            584            542            553 
##      Quarterly         Weekly 
##            563            539

Ini memberi kita gambaran tentang seberapa sering pelanggan melakukan pembelian dalam setahun. Sebagai contoh, 572 pelanggan berbelanja setiap tahun, sementara 539 pelanggan berbelanja setiap minggu.

5. Explanatory Visualization

Explanatory visualization merupakan tahap membuat visualisasi untuk mempresentasikan data kita. Oleh karena itu, pada tahap ini kita akan membuat visualisasi dengan tampilan yang informatif menarik.

Mari kita buat visualisasi yang menunjukkan distribusi pembelian berdasarkan musim dengan masing-masing kategori produk.

Pertama-tama, mari kita buat dataframe dari tabel frekuensi yang telah kita buat sebelumnya.

purchase_freq <- as.data.frame(table(df$Season, df$Category))
colnames(purchase_freq) <- c("Season", "Category", "Freq")

Selanjutnya, kita akan memasukkan dataframe ini ke dalam kode visualisasi kita.

5.1 Distribusi Pembelian Berdasarkan Musim dan Kategori Produk

# Heatmap of Purchases by Season and Category
plot_combined <- ggplot(data = purchase_freq, aes(x = Season, y = Category, fill = Freq)) +
  geom_tile() +
  geom_text(aes(label = Freq), color = "black", size = 4) +
  scale_fill_gradient(low = "white", high = "#3498db") +
  labs(x = "Musim",
       y = "Kategori Produk",
       title = "Distribusi Pembelian",
       subtitle = "Berdasarkan Kategori Produk dan Produk",
       fill = "Jumlah Pembelian") +
  theme_light(base_size = 14) + 
  theme(legend.title = element_text(face = "bold"),
        legend.text = element_text(face = "italic"),
        plot.title = element_text(face = "bold", size = 16),
        plot.subtitle = element_text(size = 14),
        axis.title.x = element_text(face = "bold"),
        axis.title.y = element_text(face = "bold"))

print(plot_combined)

Salah satu pertanyaan yang ingin kita jawab adalah: “Pada musim apa pembelian paling banyak dilakukan?” dan “Kategori produk apa yang paling banyak dibeli?”. Dengan menggabungkan kedua pertanyaan ini, kita dapat mencari tahu distribusi pembelian berdasarkan musim dengan masing-masing kategori produk.

Dari visualisasi heatmap di atas, kita dapat dengan jelas melihat distribusi pembelian berdasarkan musim dan kategori produk. Setiap sel pada heatmap menunjukkan jumlah pembelian untuk kombinasi kategori produk dan musim tertentu.

Beberapa poin penting yang dapat kita ambil dari visualisasi ini adalah:

  1. Kategori Produk yang Populer: Dengan melihat sumbu y (Kategori Produk) heatmap, kita dapat dengan cepat mengetahui kategori produk mana yang paling banyak dibeli oleh pelanggan.
  2. Musim Belanja Puncak: Sumbu x (Musim) heatmap memberikan gambaran tentang musim belanja yang paling sibuk. Ini sangat berguna bagi perusahaan ritel untuk menyiapkan strategi pemasaran atau promosi yang sesuai.
  3. Interaksi Musim dan Kategori: Sel-sel yang lebih gelap pada heatmap menunjukkan kombinasi musim dan kategori produk yang paling banyak dibeli. Dengan informasi ini, perusahaan ritel dapat menargetkan promosi atau diskon untuk kategori produk tertentu pada musim tertentu.

Secara keseluruhan, heatmap adalah alat visualisasi yang efektif untuk menampilkan dua dimensi data (dalam hal ini, musim dan kategori produk) terhadap variabel ketiga (jumlah pembelian). Dengan warna yang berbeda untuk menunjukkan intensitas, kita dapat dengan cepat menafsirkan dan memahami distribusi data.

Untuk perusahaan ritel, informasi ini sangat berharga. Misalnya, jika mereka melihat bahwa pembelian produk kategori tertentu meningkat pada musim tertentu, mereka dapat meningkatkan stok produk tersebut sebelum musim dimulai. Selain itu, mereka juga dapat menawarkan diskon atau promosi khusus untuk kategori produk yang kurang populer untuk meningkatkan penjualannya.