Latar Belakang

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.


Deskripsi Dataset

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:

1. Informasi Lokasi dan Pasar

Variabel ini menggambarkan karakteristik geografis dan segmentasi pasar dari setiap transaksi.

  • Area Code: Kode wilayah tempat transaksi terjadi.
  • Market: Wilayah pasar yang lebih luas (misalnya regional atau negara bagian tertentu).
  • Market Size: Kategori ukuran pasar (misalnya Major Market dan Small Market) yang menunjukkan skala potensi pasar.
  • State: Nama negara bagian atau wilayah administratif yang lebih spesifik.

2. Informasi Produk

Kelompok variabel ini menjelaskan karakteristik barang yang dijual.

  • Product: Nama produk spesifik yang terjual.
  • Product Line: Kategori besar dari produk (misalnya jenis minuman atau kelompok produk tertentu).
  • Product Type: Subkategori produk yang lebih rinci dalam satu product line.

3. Informasi Waktu

  • Date: Tanggal transaksi terjadi.

4. Informasi Keuangan (Kinerja Aktual)

Kelompok variabel ini merepresentasikan hasil aktual dari aktivitas bisnis.

  • Sales: Total nilai penjualan dari transaksi.
  • Profit: Keuntungan bersih yang diperoleh.
  • COGS (Cost of Goods Sold): Biaya langsung produksi atau pembelian barang.
  • Margin: Selisih antara pendapatan dan biaya yang mencerminkan tingkat keuntungan.
  • Marketing: Biaya yang dikeluarkan untuk aktivitas pemasaran.
  • Total Expenses: Total seluruh biaya operasional.

5. Data Perencanaan (Budget)

Kelompok ini berisi target atau rencana yang telah ditetapkan sebelumnya.

  • Budget Sales: Target penjualan yang direncanakan.
  • Budget Profit: Target keuntungan yang diharapkan.
  • Budget COGS: Rencana biaya produksi atau pembelian barang.

Load Dataset dan Preprocessing

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`)

Analisis Deskriptif

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.


Visualisasi

1. Total Sales vs Profit berdasarkan Market Size

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.


2. Distribusi Sales per Transaksi (Boxplot)

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.


3. Tren Sales Bulanan berdasarkan Market Size

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.


4. Proporsi Tipe Produk per Market Size

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.


Analisis Statistik Inferensial

1. Uji Normalitas Sales — Shapiro-Wilk

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:

  • Major Market: W = 0.8420, p = 3.54 × 10⁻³⁸
  • Small Market: W = 0.7539, p = 5.53 × 10⁻⁵²

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.


2. Uji Mann-Whitney: Sales berdasarkan Market Size

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.


3. Uji Normalitas Profit — Shapiro-Wilk

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.


4. Uji Mann-Whitney: Profit berdasarkan Market Size

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).


5. Uji Chi-Square: Distribusi Tipe Produk antar Market Size

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.


Top Produk Terlaris berdasarkan Market Size

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))
    )
  )
)

Kesimpulan

  1. Terdapat perbedaan yang signifikan antara Major Market dan Small Market dalam hal Sales, Profit, serta komposisi produk.

  2. 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.

  3. 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.