Central Tendency
Exercises ~ Week 6
1 Laporan Analisis Data Pelanggan
1.1 Pendahuluan
Di laporan ini, saya menganalisis data tentang pelanggan sebuah toko. Tujuannya adalah untuk mengetahui gambaran umum tentang pelanggan, seperti:
- Umur rata-rata pelanggan berapa
- Jenis kelamin apa yang sering membeli produk di data tersebut
- Berapa banyak uang yang mereka habiskan
- Lokasi mana saja yang sering mereka datangi
- Seberapa sering mereka datang
- Produk apa yang paling sering dibeli
- Bagaimana tingkat kepuasan mereka
Dengan analisis ini, kita bisa lebih paham pola pelanggan dalam berbelanja.
1.2 Deskripsi Data
Data ini berisi beberapa informasi tentang pelanggan, yaitu:
Jadi data ini intinya tentang siapa pelanggannya, belanja apa, belanjanya berapa banyak, seberapa sering datang, dan puas atau tidak.
1.3 Menganalisa Variabel & Visualisasi
1.3.1 Analisis Variabel Usia
# ANALISIS USIA - MEAN
# Menghitung nilai rata-rata (mean) dari variabel Age,
# dengan mengabaikan data yang hilang (NA)
mean_age <- mean(mydata$Age, na.rm = TRUE)
# Membuat data frame hasil analisis yang berisi:
# - Nama variabel
# - Metode analisis yang digunakan
# - Nilai hasil mean (dibulatkan 2 angka desimal)
# - Keterangan tambahan tentang arti hasil
hasil_usia <- data.frame(
Variabel = "Age",
Metode_Analisis = "Mean",
Hasil = paste(round(mean_age, 2), "Years"),
Keterangan = "Average Age Of Costumer"
)
# Menampilkan hasil analisis dalam bentuk tabel yang rapi
# menggunakan fungsi kable dari library knitr
library(knitr)
kable(hasil_usia, caption = "Age Analysis - Mean")| Variabel | Metode_Analisis | Hasil | Keterangan |
|---|---|---|---|
| Age | Mean | 39.99 Years | Average Age Of Costumer |
1.3.2 Visualisasi Variabel Usia
# VISUALISASI USIA
# Memanggil library ggplot2 untuk membuat grafik
library(ggplot2)
# Membuat histogram dan kurva distribusi usia pelanggan
ggplot(mydata, aes(x = Age)) +
# Membuat histogram dengan lebar tiap batang 5 tahun,
# warna biru muda, dan batas putih
geom_histogram(aes(y = after_stat(density)),
binwidth = 5, fill = "skyblue", color = "white", alpha = 0.7) +
# Menambahkan garis kurva density (sebaran data)
geom_density(color = "darkblue", size = 1, alpha = 0.7) +
# Menambahkan garis vertikal merah untuk menunjukkan nilai rata-rata usia
geom_vline(xintercept = mean_age, color = "red", linetype = "dashed", size = 1.5) +
# Memberikan judul, subjudul, dan label sumbu
labs(
title = "ANALYSE THE AVERAGE AGE OF COSTUMER",
subtitle = paste("Average Age:", mean_age, "Years"),
x = "Age (Years)",
y = "Density"
) +
# Menggunakan tema minimalis untuk tampilan bersih
theme_minimal() +
# Menyesuaikan ukuran dan gaya teks agar lebih menarik
theme(
plot.title = element_text(size = 16, hjust = 0.5, face = "bold"),
plot.subtitle = element_text(size = 14, hjust = 0.5, color = "gray40"),
axis.title = element_text(size = 12, face = "bold"),
axis.text = element_text(size = 10),
panel.grid.major = element_line(color = "grey90"),
panel.grid.minor = element_line(color = "grey95")
)
### Alasan & Interpretasi Interpretasi Usia
Hasil analisis menunjukkan bahwa usia median pelanggan adalah 39 tahun. Artinya, setengah dari pelanggan berusia di bawah 39 tahun, dan setengahnya lagi berusia di atas 39 tahun. Jadi, bisa dibilang sebagian besar pelanggan berada di usia dewasa produktif, yaitu usia yang umumnya sudah memiliki penghasilan tetap dan cukup aktif dalam melakukan pembelian produk.
Alasan
Karena data usia bersifat numerik dan berdistribusi cukup normal, maka mean (rata-rata) paling tepat digunakan untuk menggambarkan kecenderungan umum usia pelanggan secara keseluruhan.
1.3.3 Analisis Variabel Jenis Kelamin
# Menggunakan library modeest untuk menghitung nilai modus
library(modeest)
# ANALISIS JENIS KELAMIN - MODUS
# Menghitung modus (nilai yang paling sering muncul) dari variabel Gender
modus_jk <- mfv(mydata$Gender)
# Membuat data frame hasil analisis yang berisi:
# - Nama variabel (Gender)
# - Metode analisis yang digunakan (Mode)
# - Hasil perhitungan modus
# - Keterangan tambahan tentang arti hasil
hasil_jk <- data.frame(
Variabel = "Gender",
Metode_Analisis = "Mode",
Hasil = as.character(modus_jk[1]), # Mengonversi hasil ke tipe karakter agar aman
Keterangan = "The Most Genders",
stringsAsFactors = FALSE # Hindari factors
)
# Menampilkan hasil dalam tabel
kable(hasil_jk, caption = "Gender Analysis - Mode")| Variabel | Metode_Analisis | Hasil | Keterangan |
|---|---|---|---|
| Gender | Mode | M | The Most Genders |
1.3.4 Visualisasi Variabel Jenis Kelamin
library(dplyr)
library(ggplot2)
# VISUALISASI
# Mengecek apakah variabel "Gender" ada di dataset
if("Gender" %in% names(mydata)) {
# Membuat tabel frekuensi untuk setiap kategori Gender
gender_table <- table(mydata$Gender)
# Mengubah hasil tabel ke dalam bentuk data frame agar mudah diolah
jk_summary <- data.frame(
Gender = names(gender_table),
n = as.numeric(gender_table),
percentage = as.numeric(gender_table) /
sum(gender_table) * 100)
# Menambahkan kolom label yang berisi nama gender + jumlah + persentase
jk_summary$label <- paste0(jk_summary$Gender, "\n",
jk_summary$n, " (",
round(jk_summary$percentage, 1), "%)")}
# Membuat visualisasi batang (bar chart) untuk distribusi jenis kelamin pelanggan
ggplot(jk_summary, aes(x = Gender, y = n, fill = Gender)) +
# Membuat batang berdasarkan jumlah pelanggan per gender
geom_bar(stat = "identity", alpha = 0.8, width = 0.6) +
# Menambahkan label jumlah dan persentase di atas batang
geom_text(aes(label = label), vjust = -0.5, size = 8, fontface = "bold") +
# Memberikan judul, subjudul, dan label sumbu
labs(
title = "COSTUMER GENDER DISTRIBUTION ANALYSIS",
subtitle = paste("Mode (The Most):", modus_jk[1], "-",
jk_summary$n[jk_summary$Gender == modus_jk[1]],
"Costumer (",
round(jk_summary$percentage[jk_summary$Gender == modus_jk[1]], 1), "%)"),
x = "Gender",
y = "Number Of Customers",
caption = "Analyse Using Mode - The Most Common Value Appears"
) +
# Menggunakan tema minimalis agar tampilan bersih dan profesional
theme_minimal() +
# Mengatur ukuran dan posisi teks serta tampilan grid
theme(
plot.title = element_text(size = 24, hjust = 0.5, face = "bold", margin = margin(b = 15)),
plot.subtitle = element_text(size = 18, hjust = 0.5, color = "gray40", margin = margin(b = 20)),
axis.title = element_text(size = 16, face = "bold"),
axis.text = element_text(size = 14),
plot.caption = element_text(size = 12, hjust = 0.5, margin = margin(t = 15)),
legend.position = "none", # Menghilangkan legenda karena sudah ada label di batang
panel.grid.major = element_line(color = "grey90"),
panel.grid.minor = element_blank(),
plot.margin = margin(2, 2, 2, 2, "cm")
) +
# Menentukan warna batang untuk setiap gender (misal M = biru, F = pink)
scale_fill_manual(values = c("M" = "steelblue", "F" = "lightpink")) +
# Mengatur sumbu Y agar ada ruang kosong di atas batang
scale_y_continuous(expand = expansion(mult = c(0, 0.1)))
### Alasan & Interpretasi Interpretasi Jenis
Kelamin
Hasil analisis menunjukkan bahwa jenis kelamin yang paling banyak adalah laki-laki (M). Artinya, sebagian besar pelanggan dalam data pembelian merupakan pria. Dari sini bisa disimpulkan bahwa pelanggan laki-laki lebih dominan dalam aktivitas pembelian. Hasil ini bisa jadi bahan pertimbangan bagi perusahaan untuk menyesuaikan strategi pemasaran, misalnya dengan memahami kebiasaan dan minat belanja laki-laki agar promosi lebih tepat sasaran.
Alasan
Karena gender adalah data kategori (tidak berupa angka), jadi yang bisa dicari hanyalah nilai yang paling sering muncul — yaitu modus.
1.3.5 Analisis Variabel Lokasi Toko
# ANALISIS LOKASI TOKO - MODUS
# Menggunakan library modeest untuk menghitung nilai modus
library(modeest)
# Menghitung modus (lokasi toko yang paling sering dikunjungi pelanggan)
modus_sl <- mfv(mydata$StoreLocation)
# Membuat data frame hasil analisis yang berisi:
# - Nama variabel (Store Location)
# - Metode analisis yang digunakan (Mode)
# - Nilai hasil modus (lokasi toko paling sering dikunjungi)
# - Keterangan tambahan tentang arti hasil
hasil_sl <- data.frame(
Variabel = "Store Location",
Metode_Analisis = "Mode",
Hasil = modus_sl[1],
Keterangan = "Most Frequently Visited Store Locations"
)
# Menampilkan hasil dalam tabel
kable(hasil_sl, caption = "Store Location Analysis - Mode")| Variabel | Metode_Analisis | Hasil | Keterangan |
|---|---|---|---|
| Store Location | Mode | East | Most Frequently Visited Store Locations |
1.3.6 Visualisasi Variabel Lokasi Toko
library(dplyr)
library(ggplot2)
# VISUALISASI LOKASI TOKO
# Mengecek apakah kolom "StoreLocation" ada dalam dataset
if("StoreLocation" %in% names(mydata)) {
# Membuat tabel frekuensi jumlah kunjungan untuk setiap lokasi toko
sl_table <- table(mydata$StoreLocation)
# Mengonversi hasil tabel ke dalam bentuk data frame agar mudah diolah dan divisualisasikan
sl_summary <- data.frame(
StoreLocation = names(sl_table),
n = as.numeric(sl_table),
percentage = as.numeric(sl_table) / sum(sl_table) * 100)
# Membuat kolom label berisi nama lokasi, jumlah kunjungan, dan persentase
sl_summary$label <- paste0(sl_summary$StoreLocation, "\n",
sl_summary$n, " (",
round(sl_summary$percentage, 1), "%)")
# Membuat visualisasi batang (bar chart) distribusi lokasi toko yang dikunjungi
print(
ggplot(sl_summary, aes(x = reorder(StoreLocation, n), y = n, fill = StoreLocation)) +
# Membuat batang berdasarkan jumlah kunjungan
geom_col(alpha = 0.8, width = 0.6) +
# Menambahkan label di atas setiap batang
geom_text(aes(label = label),
vjust = -0.5,
size = 6,
fontface = "bold",
color = "black",
lineheight = 0.8) +
# Menambahkan judul, subjudul, label sumbu, dan caption
labs(
title = "ANALYSIS OF STORE LOCATION DISTRIBUTION",
subtitle = paste("Mode (The Most):", modus_sl, "-",
sl_summary$n[sl_summary$StoreLocation == modus_sl],
"Visit (",
round(sl_summary$percentage[sl_summary$StoreLocation == modus_sl], 1), "%)"),
x = "Store Location",
y = "Number Of Visits",
caption = "Analysis Using Mode - The Location Most Frequently Visited"
) +
# Mengatur tampilan tema agar terlihat bersih dan elegan
theme_minimal() +
theme(
plot.title = element_text(size = 24, hjust = 0.5, face = "bold", margin = margin(b = 15)),
plot.subtitle = element_text(size = 18, hjust = 0.5, color = "gray40", margin = margin(b = 20)),
axis.title = element_text(size = 16, face = "bold"),
axis.text = element_text(size = 14),
plot.caption = element_text(size = 12, hjust = 0.5, margin = margin(t = 15)),
legend.position = "none",
panel.grid.major = element_line(color = "grey90"),
panel.grid.minor = element_blank(),
plot.margin = margin(2, 2, 2, 2, "cm")
) +
# Memberi warna lembut pada batang menggunakan palet "Set2"
scale_fill_brewer(palette = "Set2") +
# Memberikan ruang tambahan di atas batang agar label tidak terpotong
scale_y_continuous(expand = expansion(mult = c(0, 0.3))))} 1.3.7 Alasan & Interpretasi
Interpretasi
Dari hasil analisis, terlihat kalau toko yang paling sering dikunjungi ada di wilayah East. Jadi, bisa dibilang pelanggan paling banyak datang atau belanja di toko yang berada di area tersebut. Ini bisa jadi tanda kalau wilayah East punya minat belanja yang lebih tinggi dibanding lokasi lainnya.
Alasan
Ini juga data kategori (West, East, South, dll.), jadi ukuran pemusatan yang cocok adalah modus — lokasi yang paling sering muncul.
1.3.8 Analisis Variabel Kategori Produk
# ANALISIS KATEGORI - MODUS
# Memanggil library modeest untuk menghitung modus
# dan knitr untuk menampilkan hasil dalam bentuk tabel
library(modeest)
library(knitr)
# Menghitung modus (kategori produk yang paling sering dibeli oleh pelanggan)
modus_kp <- mfv(mydata$ProductCategory)
# Membuat data frame hasil analisis yang berisi:
# - Nama variabel (Product Category)
# - Metode analisis (Mode)
# - Nilai hasil modus (kategori produk paling sering dibeli)
# - Keterangan tambahan tentang arti hasil
hasil_kp <- data.frame(
Variabel = "Product Category",
Metode_Analisis = "Mode",
Hasil = modus_kp[1],
Keterangan = "Most Frequently Purchased Product Category"
)
# Menampilkan hasil dalam tabel
kable(hasil_kp, caption = "Product Category Analysis - Mode")| Variabel | Metode_Analisis | Hasil | Keterangan |
|---|---|---|---|
| Product Category | Mode | Clothing | Most Frequently Purchased Product Category |
1.3.9 Visualisasi Variabel Kategori Produk
library(ggplot2)
library(dplyr)
library(scales)
# Menghitung frekuensi setiap kategori produk dari variabel ProductCategory
kategori_freq <- as.data.frame(table(mydata$ProductCategory))
colnames(kategori_freq) <- c("ProductCategory", "n")
# Mengurutkan kategori berdasarkan jumlah pembelian (dari terbanyak ke paling sedikit)
kategori_freq <- kategori_freq[order(-kategori_freq$n), ]
# Menghitung persentase tiap kategori terhadap total pembelian
kategori_freq$percent <- round(kategori_freq$n / sum(kategori_freq$n) * 100, 1)
# Menyiapkan label untuk setiap batang pada grafik (jumlah dan persentase)
kategori_freq$label <- paste0(kategori_freq$n, " (", kategori_freq$percent, "%)")
# Visualisasi
ggplot(kategori_freq, aes(x = reorder(ProductCategory, n), y = n, fill = ProductCategory)) +
# Membuat batang berdasarkan jumlah pembelian tiap kategori
geom_bar(stat = "identity", alpha = 0.8, width = 0.6) +
# Menambahkan label jumlah dan persentase di atas setiap batang
geom_text(aes(label = label), vjust = -0.5, size = 6, fontface = "bold") +
# Menambahkan judul, subjudul, label sumbu, dan caption
labs(
title = "ANALYSIS OF PRODUCT CATEGORY DISTRIBUTION",
subtitle = paste("Mode (The Most):", modus_kp[1], "-",
kategori_freq$n[kategori_freq$ProductCategory == modus_kp[1]], "Purchase (",
kategori_freq$percent[kategori_freq$ProductCategory == modus_kp[1]], "%)"),
x = "Product Category",
y = "Purchase Amount",
caption = "Analysis using Mode - the product category that is purchased the most"
) +
# Mengatur tema agar tampilan minimalis dan bersih
theme_minimal() +
theme(
plot.title = element_text(size = 24, hjust = 0.5, face = "bold", margin = margin(b = 15)),
plot.subtitle = element_text(size = 18, hjust = 0.5, color = "gray40", margin = margin(b = 20)),
axis.title = element_text(size = 16, face = "bold"),
axis.text = element_text(size = 14),
plot.caption = element_text(size = 12, hjust = 0.5, margin = margin(t = 15)),
legend.position = "none", # Menghilangkan legenda agar fokus ke batang
panel.grid.major = element_line(color = "grey90"),
panel.grid.minor = element_blank(),
plot.margin = margin(2, 2, 2, 2, "cm")
) +
# Memberikan warna lembut untuk tiap kategori produk
scale_fill_brewer(palette = "Set3") +
# Memberikan ruang kosong di atas batang agar label tidak terpotong
scale_y_continuous(expand = expansion(mult = c(0, 0.1)))
### Alasan & Interpretasi Interpretasi
Dari hasil analisis, diketahui bahwa produk yang paling sering dibeli pelanggan adalah kategori pakaian (Clothing). Artinya, dibandingkan dengan jenis produk lainnya, pakaian menjadi produk yang paling diminati dan paling banyak dibeli oleh pelanggan.
Alasan
Sama seperti lokasi, ini juga data kategori. Tidak bisa dihitung rata-ratanya, jadi gunakan modus untuk tahu kategori yang paling sering dibeli.
1.3.10 Analisis Variabel Total Pembelian
# ANALISIS TOTAL PEMBELIAN - MEDIAN
# Mengonversi kolom TotalPurchase ke tipe numerik
# (berguna jika datanya masih berupa karakter)
mydata$TotalPurchase <- as.numeric(mydata$TotalPurchase)
# Menghitung nilai median (nilai tengah) dari total pembelian pelanggan
# Parameter na.rm = TRUE digunakan untuk mengabaikan data yang hilang (NA)
median_purchase <- median(mydata$TotalPurchase, na.rm = TRUE)
# Membuat data frame hasil analisis yang berisi:
# - Nama variabel yang dianalisis (Total Purchase)
# - Metode analisis yang digunakan (Median)
# - Nilai hasil median yang sudah dibulatkan 2 desimal
# - Keterangan singkat tentang arti hasil
hasil_analisis <- data.frame(
Variabel = "Total Purchase",
Metode_Analisis = "Median",
Hasil = paste("$", round(median_purchase, 2)),
Keterangan = "The median total purchase of all customers"
)
# Tampilkan hasil dalam tabel
kable(hasil_analisis, caption = "Total Purchase Analysis - Median")| Variabel | Metode_Analisis | Hasil | Keterangan |
|---|---|---|---|
| Total Purchase | Median | $ 108.5 | The median total purchase of all customers |
1.3.11 Visualisasi Variabel Total Pembelian
# VISUALISASI TOTAL PEMBELIAN
ggplot(mydata, aes(y = TotalPurchase)) +
# Membuat boxplot untuk melihat penyebaran data pembelian
geom_boxplot(
fill = "lightpink", # Warna isi boxplot
alpha = 0.7, # Transparansi boxplot
outlier.color = "red", # Warna titik outlier (nilai ekstrem)
outlier.size = 2, # Ukuran titik outlier
outlier.shape = 16 # Bentuk titik outlier (bulat)
) +
# Menambahkan garis horizontal pada nilai median
geom_hline(
aes(yintercept = median_purchase), # Garis di posisi median
color = "darkblue", # Warna garis median
linetype = "dashed", # Jenis garis putus-putus
size = 1.2 # Ketebalan garis
) +
# Memberi judul dan label sumbu
labs(
title = "TOTAL CUSTOMER PURCHASE DISTRIBUTION",
subtitle = paste("Median Total Purchase: $", round(median_purchase, 2)),
x = NULL, # Hapus label sumbu X
y = "Total Purchase ($)",
caption = "Garis biru putus-putus menunjukkan nilai median"
) +
# Mengatur tampilan tema grafik agar lebih minimalis
theme_minimal() +
theme(
plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
plot.subtitle = element_text(size = 14, hjust = 0.5, color = "darkblue", face = "bold"),
axis.title.y = element_text(size = 12, face = "bold"),
axis.text.y = element_text(size = 10),
axis.title.x = element_blank(), # Menghapus judul sumbu X
axis.text.x = element_blank(), # Menghapus teks di sumbu X
panel.grid.major = element_line(color = "grey90"), # Warna grid besar
panel.grid.minor = element_blank() # Menghilangkan grid kecil
) +
# Menambahkan teks anotasi untuk menunjukkan nilai median pada grafik
annotate("text",
x = 0.7,
y = median_purchase,
label = paste("MEDIAN\n$", round(median_purchase, 2)),
color = "darkblue",
fontface = "bold",
size = 4,
vjust = -0.5)1.3.12 Alasan & Interpretasi
Interpretasi
Dari hasil analisis, diketahui kalau total pembelian tengahnya ada di angka Rp108,5. Maksudnya, setengah dari pelanggan belanjanya kurang dari Rp108,5 dan setengahnya lagi lebih dari itu. Jadi bisa dibilang, rata-rata pembelian pelanggan umumnya ada di sekitar angka tersebut.
Alasan
Karena analisis ini menggunakan median sebagai ukuran pemusatan, maka nilai tengah dipakai untuk menunjukkan pembelian rata-rata pelanggan secara umum. Median dipilih agar dapat menggambarkan posisi tengah data secara lebih akurat tanpa terpengaruh oleh perbedaan jumlah pembelian yang besar antar pelanggan.
1.3.13 Analisis Variabel Jumlah Kunjungan
# ANALISIS JUMLAH KUNJUNGAN - MEAN
# Menghitung rata-rata (mean) dari jumlah kunjungan pelanggan
mean_nov <- mean(mydata$NumberOfVisits, na.rm = TRUE)
# na.rm = TRUE digunakan agar nilai NA (kosong) tidak dihitung dalam perhitungan rata-rata
# Membuat data frame untuk menampung hasil analisis
hasil_nov <- data.frame(
Variabel = "Number Of Visits",
Metode_Analisis = "Mean",
Hasil = paste(round(mean_nov)),
Keterangan = "Average Number of Customer Visits")
# Menampilkan hasil menggunakan kable
library(knitr)
kable(hasil_nov, caption = "Analysis of Visit Numbers - Mean")| Variabel | Metode_Analisis | Hasil | Keterangan |
|---|---|---|---|
| Number Of Visits | Mean | 5 | Average Number of Customer Visits |
1.3.14 Visualisasi Variabel Jumlah Kunjungan
library(ggplot2)
ggplot(mydata, aes(x = NumberOfVisits)) + # Sumbu X merepresentasikan jumlah kunjungan
geom_histogram(aes(y = after_stat(density)), # Membuat histogram dengan sumbu Y = kepadatan (density)
binwidth = 1, fill = "orange", color = "white", alpha = 0.7) +
# Menambahkan garis kurva density (kepadatan data)
geom_density(color = "darkorange", size = 1.5, alpha = 0.7) +
# Menambahkan garis vertikal di posisi rata-rata
geom_vline(xintercept = mean_nov, color = "red", linetype = "dashed", size = 2) +
labs(
title = "ANALYSIS OF VISIT DISTRIBUTION (MEAN)",
subtitle = paste("Mean (Average):", round(mean_nov, 2), "number of visits"),
x = "Number Of Visits",
y = "Density",
caption = "Red Line = Mean | Analysis using the Mean for numerical data"
) +
theme_minimal() +
theme(
plot.title = element_text(size = 24, hjust = 0.5, face = "bold", margin = margin(b = 15)),
plot.subtitle = element_text(size = 18, hjust = 0.5, color = "gray40", margin = margin(b = 20)),
axis.title = element_text(size = 16, face = "bold"),
axis.text = element_text(size = 14),
plot.caption = element_text(size = 12, hjust = 0.5, margin = margin(t = 15)),
panel.grid.major = element_line(color = "grey90"),
panel.grid.minor = element_line(color = "grey95"),
plot.margin = margin(2, 2, 2, 2, "cm")
) +
scale_x_continuous(breaks = seq(0, 12, by = 1))1.3.15 Alasan & Interpretasi
Interpretasi
Dari hasil analisis, diketahui kalau rata-rata pelanggan berkunjung sekitar 5 kali. Jadi bisa dibilang, pelanggan cukup sering datang atau belanja, karena dalam data terlihat kebanyakan melakukan kunjungan lebih dari sekali.
Alasan Karena berupa angka dan bisa dijumlahkan, mean lebih menggambarkan rata-rata banyaknya kunjungan pelanggan.
1.3.16 Analisis Variabel Skor Umpan Balik
# ANALISIS SKOR UMPAN BALIK - MODUS
library(modeest)
modus_fs <- mfv(mydata$FeedbackScore)
hasil_fs <- data.frame(
Variabel = "Feedback Score",
Metode_Analisis = "Mode",
Hasil = modus_fs[1],
Keterangan = "Feedback Score given by many customers")
# Menampilkan hasil dalam tabel
kable(hasil_fs, caption = "Feedback Score Analysis - Mode")| Variabel | Metode_Analisis | Hasil | Keterangan |
|---|---|---|---|
| Feedback Score | Mode | 1 | Feedback Score given by many customers |
1.3.17 Visualisasi Variabel Skor Umpan Balik
feedback_table <- table(mydata$FeedbackScore)
feedback_freq <- data.frame(
FeedbackScore = as.numeric(names(feedback_table)),
n = as.numeric(feedback_table))
# Hitung persentase
feedback_freq$percent <- round(feedback_freq$n / sum(feedback_freq$n) * 100, 1)
feedback_freq$label <- paste0(feedback_freq$n, " (", feedback_freq$percent, "%)")
# VISUALISASI
ggplot(feedback_freq, aes(x = factor(FeedbackScore), y = n, fill = factor(FeedbackScore))) +
geom_bar(stat = "identity", alpha = 0.8, width = 0.7) +
geom_text(aes(label = label), vjust = -0.5, size = 4, fontface = "bold") +
labs(
title = "DISTRIBUTION OF CUSTOMER FEEDBACK SCORES",
subtitle = paste("Mode (Highest Score):", modus_fs[1],
"-", feedback_freq$n[feedback_freq$FeedbackScore == modus_fs[1]],
"responden (",
feedback_freq$percent[feedback_freq$FeedbackScore == modus_fs[1]], "%)"),
x = "Feedback Score",
y = "Number of Respondents",
caption = "Score 1: Very Dissatisfied | 5: Very Satisfied"
) +
theme_minimal() +
theme(
plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
plot.subtitle = element_text(size = 12, hjust = 0.5, color = "red", face = "bold",
margin = margin(b = 15)),
axis.title = element_text(size = 12, face = "bold"),
axis.text = element_text(size = 10),
legend.position = "none",
panel.grid.major = element_line(color = "grey90"),
panel.grid.minor = element_blank()
) +
scale_fill_brewer(palette = "RdYlGn") +
scale_y_continuous(expand = expansion(mult = c(0, 0.1)))1.3.18 Alasan & Interpretasi
Interpretasi
Dari grafik terlihat bahwa skor umpan balik yang paling banyak diberikan adalah skor 1 dengan 53 responden (26,5%). Artinya, sebagian besar responden memberikan penilaian rendah, jadi bisa dibilang umpan balik yang diterima cenderung kurang positif.
Alasan
Karena skor umpan balik termasuk data ordinal (bertingkat), ukuran pemusatan yang paling tepat digunakan adalah modus, yaitu nilai yang paling sering muncul dan dapat menunjukkan tingkat penilaian yang paling banyak diberikan pelanggan.
1.4 Kesimpulan
Berdasarkan hasil analisis data pelanggan, dapat disimpulkan bahwa mayoritas pelanggan berasal dari usia produktif dengan frekuensi belanja yang cukup rutin, serta didominasi oleh satu jenis kelamin tertentu. Produk yang sering dibeli menunjukkan preferensi utama pelanggan, sedangkan nilai mean, median, dan modus membantu memahami pola pengeluaran serta perilaku berbelanja secara umum. Secara keseluruhan, analisis ini memberikan gambaran yang berguna untuk menyusun strategi pemasaran dan meningkatkan pelayanan agar lebih sesuai dengan kebutuhan pelanggan.