Dalam industri minuman seperti kopi dan teh, segmentasi pasar merupakan salah satu hal penting yang digunakan dalam penyusunan strategi pemasaran. Hal ini dikarenakan perbedaan karakteristik antar segmen pasar dapat memengaruhi pola penjualan, profit, hingga efektivitas strategi pemasaran yang diterapkan. Pada dataset ini, pembagian pasar dibagi menjadi dua kategori berdasarkan ukurannya, yaitu Major Market dan Small Market. Perbedaan ukuran pasar ini menimbulkan pertanyaan mengenai nilai transaksi, yaitu:
Apakah nilai transaksi individual (per observasi) di kedua segmen pasar berbeda secara statistik?
Apabila distribusi nilai Sales dan Profit per transaksi memang berbeda, maka strategi bisnis, mulai dari penetapan harga, alokasi anggaran marketing, hingga pemilihan produk yang dipasarkan dapat disesuaikan dengan karakteristik masing-masing segmen.
Dataset yang digunakan merupakan data penjualan dari sebuah coffee chain yang terdiri dari 4.248 observasi dan 20 variabel dengan beberapa kelompok variabel yang merepresentasikan aspek lokasi pasar, produk, waktu, serta kinerja keuangan dan perencanaan bisnis. Berikut penjelasan masing-masing variabel:
Variabel ini menggambarkan karakteristik geografis dan segmentasi pasar dari setiap transaksi.
Kelompok variabel ini menjelaskan karakteristik barang yang dijual.
Kelompok variabel ini merepresentasikan hasil aktual dari aktivitas bisnis.
Kelompok ini berisi target atau rencana yang telah ditetapkan sebelumnya.
library(dplyr)
library(ggplot2)
library(DT)
library(plotly)
library(readxl)
library(scales)
library(tidyr)
# Import dataset
dt <- read_excel("D:/SEMESTER 4/SIM/1. Tugas SIM 2025B - Coffee Chain Datasets.xlsx",
sheet = "data")
# Cek duplikat
cat("Jumlah duplikat:", sum(duplicated(dt)), "\n")
## Jumlah duplikat: 0
# Cek missing value
cat("Total missing value:", sum(is.na(dt)), "\n")
## Total missing value: 0
# Konversi tipe data
dt$Date <- as.Date(dt$Date)
dt$`Market Size` <- as.factor(dt$`Market Size`)
desc <- dt %>%
group_by(`Market Size`) %>%
summarise(
N = n(),
Mean = round(mean(Sales), 2),
Median = round(median(Sales), 2),
SD = round(sd(Sales), 2),
Min = min(Sales),
Max = max(Sales),
.groups = "drop"
)
print(desc)
## # A tibble: 2 × 7
## `Market Size` N Mean Median SD Min Max
## <fct> <int> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Major Market 1704 250. 199 175. 41 912
## 2 Small Market 2544 155. 122 119. 17 716
Hasil deskriptif menunjukkan adanya perbedaan yang cukup jelas antara kedua segmen pasar. Major Market memiliki median Sales sebesar 199, dengan rata-rata 250 dan standar deviasi 175. Sedangkan, Small Market memiliki median Sales sebesar 122, dengan rata-rata 155 dan standar deviasi 119.
Dalam hal ini, median lebih tepat digunakan sebagai ukuran utama karena distribusi Sales pada kedua segmen cenderung right-skewed, yang terlihat dari nilai rata-rata yang lebih tinggi dibandingkan median. Hal ini menunjukkan bahwa terdapat beberapa transaksi dengan nilai yang cukup besar yang menarik rata-rata ke atas. Selain itu, standar deviasi pada Major Market yang lebih besar menunjukkan bahwa variasi nilai transaksi di segmen ini lebih beragam dibandingkan Small Market.
Untuk melihat perbandingan kinerja finansial secara keseluruhan, dilakukan agregasi Total Sales dan Total Profit pada masing-masing kategori Market Size.
summary_data <- dt %>%
group_by(`Market Size`) %>%
summarise(
Total_Sales = sum(Sales),
Total_Profit = sum(Profit),
.groups = "drop"
) %>%
pivot_longer(
cols = c(Total_Sales, Total_Profit),
names_to = "Metric",
values_to = "Value"
)
plot_ly(
data = summary_data,
x = ~`Market Size`,
y = ~Value,
color = ~Metric,
type = "bar",
colors = c(
"Total_Sales" = "#C29470",
"Total_Profit" = "#247D7F"
),
text = ~format(Value, big.mark = ","),
textposition = "auto",
hovertemplate = paste(
"Market Size: %{x}<br>",
"Metric: %{customdata}<br>",
"Value: %{y:,} USD<extra></extra>"
),
customdata = ~Metric
) %>%
layout(
barmode = "group",
title = "Perbandingan Total Sales dan Profit berdasarkan Market Size",
xaxis = list(title = "Market Size"),
yaxis = list(title = "Nilai (USD)"),
legend = list(title = list(text = "Metric"))
)
Secara keseluruhan, Major Market menunjukkan nilai Total Sales dan Total Profit yang lebih tinggi dibanding Small Market. Hal ini mengindikasikan bahwa segmen Major Market memberikan kontribusi yang lebih besar terhadap performa keuangan perusahaan, baik dari sisi pendapatan maupun keuntungan.
Boxplot berikut menampilkan distribusi nilai Sales per transaksi untuk memahami karakteristik tiap segmen.
plot_ly(
data = dt,
x = ~`Market Size`,
y = ~Sales,
type = "box",
color = ~`Market Size`,
colors = c("Major Market" = "#C29470", "Small Market" = "#247D7F"),
boxmean = TRUE,
hovertemplate = paste(
"Market: %{x}<br>",
"Sales: %{y:,} USD<extra></extra>"
)
) %>%
layout(
title = "Distribusi Sales per Transaksi berdasarkan Market Size",
xaxis = list(title = "Market Size"),
yaxis = list(title = "Sales per Transaksi (USD)"),
showlegend = FALSE,
annotations = list(
list(
text = "Garis tengah = median | Titik = mean",
xref = "paper", yref = "paper",
x = 0.5, y = -0.12,
showarrow = FALSE,
font = list(size = 11, color = "gray")
)
)
)
Boxplot menunjukkan bahwa Major Market memiliki nilai tengah (median) yang lebih tinggi dibanding Small Market. Selain itu, sebaran nilai transaksi di Major Market juga lebih lebar, yang berarti variasi transaksi di segmen ini lebih beragam. Di kedua segmen juga terlihat adanya beberapa nilai ekstrem (outlier), yang menunjukkan bahwa distribusi data cenderung tidak merata dan memiliki beberapa transaksi dengan nilai yang sangat tinggi.
trend_data <- dt %>%
mutate(YearMonth = format(Date, "%Y-%m")) %>%
group_by(YearMonth, `Market Size`) %>%
summarise(Total_Sales = sum(Sales), .groups = "drop")
plot_ly(
trend_data,
x = ~YearMonth,
y = ~Total_Sales,
color = ~`Market Size`,
colors = c("Major Market" = "#C29470", "Small Market" = "#247D7F"),
type = "scatter",
mode = "lines+markers",
hovertemplate = paste(
"Periode: %{x}<br>",
"Total Sales: %{y:,} USD<extra></extra>"
)
) %>%
layout(
title = "Tren Sales Bulanan berdasarkan Market Size",
xaxis = list(title = "Periode", tickangle = 45),
yaxis = list(title = "Total Sales (USD)")
)
Berdasarkan plot time series, penjualan di Major Market selalu lebih tinggi dibanding Small Market selama periode pengamatan. Kedua segmen juga menunjukkan pola naik turun yang mirip, sehingga perubahan penjualan di keduanya kemungkinan dipengaruhi oleh faktor yang sama, seperti musim atau aktivitas promosi.
product_dist <- dt %>%
group_by(`Market Size`, `Product Type`) %>%
summarise(Count = n(), .groups = "drop") %>%
group_by(`Market Size`) %>%
mutate(Pct = round(Count / sum(Count) * 100, 1))
plot_ly(
product_dist,
x = ~`Product Type`,
y = ~Pct,
color = ~`Market Size`,
colors = c("Major Market" = "#C29470", "Small Market" = "#247D7F"),
type = "bar",
text = ~paste0(Pct, "%"),
textposition = "auto",
hovertemplate = paste(
"Produk: %{x}<br>",
"Proporsi: %{y:.1f}%<extra></extra>"
)
) %>%
layout(
barmode = "group",
title = "Proporsi Tipe Produk berdasarkan Market Size",
xaxis = list(title = "Product Type"),
yaxis = list(title = "Proporsi (%)")
)
Proporsi digunakan agar perbandingan antar segmen lebih adil karena jumlah data pada masing-masing Market Size tidak sama (Major: 1.704 dan Small: 2.544). Dari hasil visualisasi terlihat bahwa komposisi tipe produk memang berbeda antara kedua segmen. Perbedaan paling jelas muncul pada kategori Espresso dan Herbal Tea, yang menunjukkan adanya perbedaan preferensi produk antara Major Market dan Small Market.
Sebelum melakukan uji untuk melihat perbedaan antara kedua size market, perlu diperiksa apakah data Sales di masing-masing kelompok berdistribusi normal. Uji dilakukan per kelompok (bukan pada seluruh data) karena asumsi normalitas yang relevan adalah distribusi dalam masing-masing grup.
Hipotesis:
\[H_0 : \text{Data Sales pada kelompok tersebut berdistribusi normal}\] \[H_1 : \text{Data Sales pada kelompok tersebut tidak berdistribusi normal}\]
\[\alpha = 0.05 \quad \Rightarrow \quad \text{Tolak } H_0 \text{ jika } p\text{-value} < \alpha\]
major_sales <- dt$Sales[dt$`Market Size` == "Major Market"]
small_sales <- dt$Sales[dt$`Market Size` == "Small Market"]
sw_major_sales <- shapiro.test(major_sales)
sw_small_sales <- shapiro.test(small_sales)
cat("Shapiro-Wilk — Major Market (Sales):\n")
## Shapiro-Wilk — Major Market (Sales):
print(sw_major_sales)
##
## Shapiro-Wilk normality test
##
## data: major_sales
## W = 0.84196, p-value < 2.2e-16
cat("\nShapiro-Wilk — Small Market (Sales):\n")
##
## Shapiro-Wilk — Small Market (Sales):
print(sw_small_sales)
##
## Shapiro-Wilk normality test
##
## data: small_sales
## W = 0.75389, p-value < 2.2e-16
Kesimpulan: Kedua kelompok menghasilkan p-value jauh di bawah 0.05:
H₀ ditolak untuk kedua kelompok, yang berarti data Sales tidak berdistribusi normal. Oleh karena itu, digunakan uji non-parametrik Mann-Whitney U Test untuk perbandingan antar kelompok.
Mann-Whitney U Test digunakan untuk membandingkan distribusi nilai Sales per transaksi antar kedua segmen, karena asumsi normalitas tidak terpenuhi.
Hipotesis:
\[H_0 : \text{Distribusi Sales antara Major Market dan Small Market adalah sama}\] \[H_1 : \text{Distribusi Sales antara Major Market dan Small Market berbeda}\]
\[\alpha = 0.05 \quad \Rightarrow \quad \text{Tolak } H_0 \text{ jika } p\text{-value} < \alpha\]
wilcox_sales <- wilcox.test(Sales ~ `Market Size`, data = dt)
print(wilcox_sales)
##
## Wilcoxon rank sum test with continuity correction
##
## data: Sales by Market Size
## W = 3044262, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0
if (wilcox_sales$p.value < 0.05) {
cat("\nKESIMPULAN: Terdapat perbedaan signifikan distribusi Sales antar Market Size (tolak H0).\n")
} else {
cat("\nKESIMPULAN: Tidak terdapat perbedaan signifikan distribusi Sales antar Market Size (gagal tolak H0).\n")
}
##
## KESIMPULAN: Terdapat perbedaan signifikan distribusi Sales antar Market Size (tolak H0).
Hasil: p.value < 0.05 → H₀ ditolak.
Terdapat perbedaan yang sangat signifikan pada distribusi Sales per transaksi antara Major Market dan Small Market. Berdasarkan nilai median (Major: 199 USD vs Small: 122 USD), transaksi di Major Market cenderung memiliki nilai yang lebih tinggi. Hal ini menunjukkan adanya perbedaan karakteristik nilai transaksi antara kedua segmen pasar.
Untuk memperkuat hasil analisis Sales, dilakukan pula pengujian terhadap variabel Profit. Prosedur yang sama diterapkan, yaitu uji normalitas terlebih dahulu sebelum membandingkan distribusi antar segmen.
Hipotesis:
\[H_0 : \text{Data Profit pada kelompok tersebut berdistribusi normal}\] \[H_1 : \text{Data Profit pada kelompok tersebut tidak berdistribusi normal}\]
\[\alpha = 0.05 \quad \Rightarrow \quad \text{Tolak } H_0 \text{ jika } p\text{-value} < \alpha\]
major_profit <- dt$Profit[dt$`Market Size` == "Major Market"]
small_profit <- dt$Profit[dt$`Market Size` == "Small Market"]
sw_major_profit <- shapiro.test(major_profit)
sw_small_profit <- shapiro.test(small_profit)
cat("Shapiro-Wilk — Major Market (Profit):\n")
## Shapiro-Wilk — Major Market (Profit):
print(sw_major_profit)
##
## Shapiro-Wilk normality test
##
## data: major_profit
## W = 0.89157, p-value < 2.2e-16
cat("\nShapiro-Wilk — Small Market (Profit):\n")
##
## Shapiro-Wilk — Small Market (Profit):
print(sw_small_profit)
##
## Shapiro-Wilk normality test
##
## data: small_profit
## W = 0.68676, p-value < 2.2e-16
Kesimpulan: Sama seperti Sales, data Profit pada kedua kelompok juga tidak berdistribusi normal (p-value < 0.05), sehingga H₀ ditolak. Oleh karena itu, analisis perbedaan Profit antar segmen dilanjutkan menggunakan uji non-parametrik Mann-Whitney U Test.
Hipotesis:
\[H_0 : \text{Distribusi Profit antara Major Market dan Small Market adalah sama}\] \[H_1 : \text{Distribusi Profit antara Major Market dan Small Market berbeda}\]
\[\alpha = 0.05 \quad \Rightarrow \quad \text{Tolak } H_0 \text{ jika } p\text{-value} < \alpha\]
wilcox_profit <- wilcox.test(Profit ~ `Market Size`, data = dt)
print(wilcox_profit)
##
## Wilcoxon rank sum test with continuity correction
##
## data: Profit by Market Size
## W = 2975087, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0
if (wilcox_profit$p.value < 0.05) {
cat("\nKESIMPULAN: Terdapat perbedaan signifikan distribusi Profit antar Market Size (tolak H0).\n")
} else {
cat("\nKESIMPULAN: Tidak terdapat perbedaan signifikan distribusi Profit antar Market Size (gagal tolak H0).\n")
}
##
## KESIMPULAN: Terdapat perbedaan signifikan distribusi Profit antar Market Size (tolak H0).
Hasil: U = 2.975.087, p = 2.05 × 10⁻⁹⁴ → H₀ ditolak.
Perbedaan signifikan juga ditemukan pada sisi Profit, yang memperkuat temuan sebelumnya pada variabel Sales. Hal ini berarti Major Market tidak hanya menghasilkan nilai transaksi yang lebih tinggi, tetapi juga keuntungan per transaksi yang lebih besar. Dengan demikian, perbedaan performa bisnis antar segmen mencakup baik sisi pendapatan (Sales) maupun profitabilitas (Profit).
Uji Chi-Square digunakan untuk menganalisis apakah terdapat hubungan antara Market Size dan tipe produk yang dibeli, yaitu untuk melihat apakah komposisi produk yang dibeli berbeda secara signifikan antar segmen pasar. Analisis ini dilakukan untuk mendukung hasil analisis sebelumnya pada variabel Sales dan Profit, dengan menguji apakah perbedaan tersebut juga dipengaruhi oleh perbedaan preferensi produk di masing-masing Market Size.
Hipotesis:
\[H_0 : \text{Distribusi tipe produk sama antara Major Market dan Small Market}\] \[H_1 : \text{Distribusi tipe produk berbeda antara Major Market dan Small Market}\]
\[\alpha = 0.05 \quad \Rightarrow \quad \text{Tolak } H_0 \text{ jika } p\text{-value} < \alpha\]
tab <- table(dt$`Market Size`, dt$`Product Type`)
print(tab)
##
## Coffee Espresso Herbal Tea Tea
## Major Market 408 432 456 408
## Small Market 648 744 600 552
chi_test <- chisq.test(tab)
print(chi_test)
##
## Pearson's Chi-squared test
##
## data: tab
## X-squared = 12.962, df = 3, p-value = 0.004718
if (chi_test$p.value < 0.05) {
cat("\nKESIMPULAN: Distribusi tipe produk berbeda secara signifikan antar Market Size (tolak H0).\n")
} else {
cat("\nKESIMPULAN: Distribusi tipe produk tidak berbeda secara signifikan antar Market Size (gagal tolak H0).\n")
}
##
## KESIMPULAN: Distribusi tipe produk berbeda secara signifikan antar Market Size (tolak H0).
Hasil: χ² = 12.96, df = 3, p = 0.00472 → H₀ ditolak.
Distribusi tipe produk menunjukkan adanya perbedaan pola antara Major Market dan Small Market. Secara umum, Major Market cenderung memiliki proporsi penjualan yang lebih besar pada produk Herbal Tea, sementara Small Market lebih didominasi oleh produk Espresso. Perbedaan pola konsumsi ini menunjukkan bahwa masing-masing segmen memiliki preferensi produk yang berbeda, yang diduga turut berkontribusi terhadap perbedaan kinerja Sales dan Profit yang telah ditemukan sebelumnya, karena setiap jenis produk memiliki karakteristik harga dan margin yang berbeda.
Untuk mendukung penyusunan strategi pemasaran dan pengambilan keputusan bisnis, dilakukan analisis terhadap produk-produk dengan tingkat penjualan tertinggi pada masing-masing segmen pasar. Analisis ini bertujuan untuk mengidentifikasi produk unggulan di setiap Market Size, sehingga dapat digunakan sebagai dasar dalam menentukan prioritas promosi, pengelolaan stok, maupun pengembangan strategi produk yang lebih tepat sasaran.
prod_table <- dt %>%
group_by(`Market Size`, Product) %>%
summarise(
Jumlah_Transaksi = n(),
Total_Sales = sum(Sales),
Rata_Sales = round(mean(Sales), 1),
.groups = "drop"
) %>%
arrange(`Market Size`, desc(Total_Sales)) %>%
group_by(`Market Size`) %>%
mutate(Rank = row_number()) %>%
ungroup()
datatable(
prod_table,
filter = "top",
rownames = FALSE,
colnames = c("Market Size", "Product", "Jumlah Transaksi",
"Total Sales (USD)", "Rata-rata Sales (USD)", "Rank"),
options = list(
pageLength = 10,
order = list(list(3, "desc")),
columnDefs = list(
list(className = "dt-center", targets = c(0, 2, 3, 4, 5))
)
)
)
Terdapat perbedaan yang signifikan antara Major Market dan Small Market dalam hal Sales, Profit, serta komposisi produk.
Major Market secara konsisten memiliki nilai transaksi (Sales dan Profit) yang lebih tinggi dibanding Small Market. Perbedaan ini tidak hanya dipengaruhi oleh volume transaksi, tetapi juga oleh perbedaan preferensi produk di masing-masing segmen.
Hasil uji statistik (Mann-Whitney dan Chi-Square) menunjukkan bahwa perbedaan tersebut signifikan secara statistik.
Implikasi bisnis: Berdasarkan hasil analisis, perusahaan disarankan untuk menerapkan strategi yang berbeda pada masing-masing segmen pasar karena karakteristiknya tidak sama. Pada Major Market, fokus dapat diarahkan pada peningkatan nilai transaksi serta optimalisasi produk dengan margin yang lebih tinggi untuk memaksimalkan profitabilitas. Sementara itu, pada Small Market, strategi yang lebih tepat adalah meningkatkan volume penjualan melalui penguatan produk yang paling diminati, seperti Espresso, serta menjaga efisiensi biaya pemasaran. Selain itu, perusahaan juga perlu menyesuaikan portofolio produk di setiap segmen agar lebih sesuai dengan preferensi konsumen, sehingga strategi pemasaran dapat menjadi lebih efektif dan tepat sasaran.