BAB 1 PENDAHULUAN

1.1 Latar Belakang

Dalam dunia bisnis ritel, penetapan anggaran (budgeting) merupakan salah satu alat manajemen yang paling penting. Anggaran tidak hanya berfungsi sebagai target kinerja, tetapi juga sebagai acuan evaluasi apakah sebuah unit bisnis berjalan sesuai rencana atau tidak. Ketika realisasi jauh meleset dari target, manajemen perlu segera mengidentifikasi penyebabnya dan mengambil langkah korektif.

Dataset Coffee Chain merekam data transaksi penjualan sebuah jaringan kedai kopi di Amerika Serikat selama periode 2012 hingga 2013. Data ini mencakup informasi mengenai produk yang dijual, wilayah pasar, biaya produksi, pendapatan, serta target anggaran yang telah ditetapkan sebelumnya. Dengan membandingkan antara realisasi profit dan target (Budget Profit), kita dapat mengevaluasi seberapa efektif strategi bisnis yang telah dijalankan di masing-masing wilayah dan lini produk.

1.2 Rumusan Masalah

Berdasarkan latar belakang di atas, rumusan masalah dalam analisis ini adalah:

  1. Apakah secara keseluruhan realisasi profit Coffee Chain berbeda secara signifikan dari target yang telah dianggarkan?
  2. Apakah terdapat perbedaan kinerja profit gap yang signifikan di antara keempat wilayah pasar?
  3. Produk mana yang paling konsisten melampaui target, dan produk mana yang paling sering gagal mencapainya?

1.3 Tujuan Analisis

Tujuan dari analisis ini adalah:

  1. Mengevaluasi tingkat pencapaian profit secara keseluruhan menggunakan pendekatan statistik inferensial.
  2. Mengidentifikasi perbedaan kinerja antar wilayah pasar secara statistik.
  3. Memberikan gambaran visual dan kuantitatif mengenai performa setiap produk terhadap target anggaran.
  4. Memberikan rekomendasi bisnis berbasis data sebagai bahan pertimbangan pengambilan keputusan manajemen.

1.4 Manfaat Analisis

Hasil analisis ini diharapkan dapat memberikan gambaran yang jelas kepada manajemen Coffee Chain mengenai kondisi kinerja aktual dibandingkan target, sehingga dapat dijadikan dasar evaluasi strategi penjualan, alokasi sumber daya, dan penyesuaian target anggaran di masa mendatang.


BAB 2 DESKRIPSI DATA

2.1 Sumber dan Struktur Data

Dataset yang digunakan dalam analisis ini adalah Coffee Chain Datasets yang tersedia dalam format .xlsx. Data terdiri dari satu lembar utama (sheet data) yang memuat 4.248 baris observasi dan 20 variabel. Setiap baris mewakili satu transaksi penjualan dari kombinasi produk, wilayah, dan periode tertentu.

# install.packages(c("readxl", "dplyr", "ggplot2", "scales", "tidyr"))

library(readxl)
library(dplyr)
library(ggplot2)
library(scales)
library(tidyr)

# Sesuaikan path file dengan lokasi di komputer masing-masing
df <- read_excel("C:/Users/DELL/Downloads/1. Tugas SIM 2025B - Coffee Chain Datasets/1. Tugas SIM 2025B - Coffee Chain Datasets.xlsx",
                 sheet = "data")

glimpse(df)
## Rows: 4,248
## Columns: 20
## $ `Area Code`      <dbl> 719, 970, 970, 303, 303, 720, 970, 719, 970, 719, 303…
## $ Date             <dttm> 2012-01-01, 2012-01-01, 2012-01-01, 2012-01-01, 2012…
## $ Market           <chr> "Central", "Central", "Central", "Central", "Central"…
## $ `Market Size`    <chr> "Major Market", "Major Market", "Major Market", "Majo…
## $ Product          <chr> "Amaretto", "Colombian", "Decaf Irish Cream", "Green …
## $ `Product Line`   <chr> "Beans", "Beans", "Beans", "Leaves", "Beans", "Beans"…
## $ `Product Type`   <chr> "Coffee", "Coffee", "Coffee", "Tea", "Espresso", "Esp…
## $ State            <chr> "Colorado", "Colorado", "Colorado", "Colorado", "Colo…
## $ Type             <chr> "Regular", "Regular", "Decaf", "Regular", "Regular", …
## $ `Budget COGS`    <dbl> 90, 80, 100, 30, 60, 80, 140, 50, 50, 40, 50, 150, 10…
## $ `Budget Margin`  <dbl> 130, 110, 140, 50, 90, 130, 160, 80, 70, 70, 70, 210,…
## $ `Budget Profit`  <dbl> 100, 80, 110, 30, 70, 80, 110, 20, 40, 20, 40, 130, 1…
## $ `Budget Sales`   <dbl> 220, 190, 240, 80, 150, 210, 300, 130, 120, 110, 120,…
## $ COGS             <dbl> 89, 83, 95, 44, 54, 72, 170, 63, 60, 58, 64, 144, 95,…
## $ Inventory        <dbl> 777, 623, 821, 623, 456, 558, 1091, 435, 336, 338, 96…
## $ Margin           <dbl> 130, 107, 139, 56, 80, 108, 171, 87, 80, 72, 76, 201,…
## $ Marketing        <dbl> 24, 27, 26, 14, 15, 23, 47, 57, 19, 22, 19, 47, 30, 7…
## $ Profit           <dbl> 94, 68, 101, 30, 54, 53, 99, 0, 33, 17, 36, 111, 87, …
## $ Sales            <dbl> 219, 190, 234, 100, 134, 180, 341, 150, 140, 130, 140…
## $ `Total Expenses` <dbl> 36, 39, 38, 26, 26, 55, 72, 87, 47, 55, 40, 90, 52, 1…

2.2 Deskripsi Variabel

Dari 20 variabel yang tersedia, analisis ini berfokus pada 8 variabel yang relevan dengan pertanyaan penelitian. Berikut penjelasan masing-masing variabel:

Variabel Tipe Keterangan
Date Date Tanggal transaksi (Januari 2012 – Desember 2013)
Market Kategorik Wilayah pasar: Central, East, South, West
Market Size Kategorik Ukuran pasar: Major Market / Small Market
Product Kategorik Nama produk (13 produk berbeda)
Product Line Kategorik Lini produk: Beans (kopi) atau Leaves (teh)
Profit Numerik Realisasi profit aktual (USD)
Budget Profit Numerik Target profit yang dianggarkan (USD)
Sales Numerik Realisasi penjualan aktual (USD)

Dua variabel baru juga diturunkan dari data untuk keperluan analisis:

  • Profit Gap = Profit − Budget Profit. Nilai positif menunjukkan realisasi melebihi target; nilai negatif menunjukkan realisasi di bawah target.
  • Profit Achievement (%) = (Profit / Budget Profit) × 100. Mengukur persentase pencapaian target profit. Hanya dihitung untuk observasi dengan Budget Profit > 0.
df$Date <- as.Date(df$Date)

cat("Jumlah baris dengan Budget Profit <= 0:",
    sum(df$`Budget Profit` <= 0, na.rm = TRUE), "\n")
## Jumlah baris dengan Budget Profit <= 0: 340
df <- df %>%
  mutate(
    Year  = format(Date, "%Y"),
    Month = format(Date, "%Y-%m"),
    Profit_Gap = Profit - `Budget Profit`,
    Profit_Achievement = ifelse(`Budget Profit` > 0,
                                (Profit / `Budget Profit`) * 100,
                                NA_real_)
  )

cat("Jumlah NA pada Profit_Achievement:",
    sum(is.na(df$Profit_Achievement)), "\n")
## Jumlah NA pada Profit_Achievement: 340

Terdapat 340 observasi dengan nilai Budget Profit ≤ 0 yang tidak dapat digunakan untuk menghitung persentase pencapaian, sehingga nilai Profit_Achievement untuk observasi tersebut dikosongkan (NA). Observasi ini tetap diikutsertakan dalam perhitungan Profit Gap karena selisih profit masih dapat dihitung secara valid.

2.3 Statistik Deskriptif

summary(df[, c("Profit", "Budget Profit", "Profit_Gap", "Profit_Achievement")])
##      Profit       Budget Profit       Profit_Gap        Profit_Achievement
##  Min.   :-638.0   Min.   :-320.00   Min.   :-369.0000   Min.   :-390.00   
##  1st Qu.:  17.0   1st Qu.:  20.00   1st Qu.: -14.0000   1st Qu.:  66.67   
##  Median :  40.0   Median :  40.00   Median :  -4.0000   Median :  93.33   
##  Mean   :  61.1   Mean   :  60.91   Mean   :   0.1843   Mean   :  90.04   
##  3rd Qu.:  92.0   3rd Qu.:  80.00   3rd Qu.:   9.0000   3rd Qu.: 121.67   
##  Max.   : 778.0   Max.   : 560.00   Max.   : 249.0000   Max.   : 290.00   
##                                                         NA's   :340

Dari ringkasan statistik di atas, dapat dilihat bahwa nilai rata-rata Profit dan Budget Profit berada pada kisaran yang relatif berdekatan, mengindikasikan bahwa secara agregat penetapan target cukup mendekati realisasi. Namun demikian, terdapat variabilitas yang cukup besar pada kolom Profit Gap, yang menunjukkan bahwa kinerja antar observasi tidak seragam. Nilai minimum Profit Gap yang negatif mengindikasikan adanya transaksi atau periode di mana realisasi profit jauh di bawah target.

2.4 Komposisi Data

# Jumlah produk dan wilayah
cat("Jumlah wilayah:", n_distinct(df$Market), "\n")
## Jumlah wilayah: 4
cat("Jumlah produk :", n_distinct(df$Product), "\n")
## Jumlah produk : 13
cat("Periode data  :", min(df$Date), "s.d.", max(df$Date), "\n\n")
## Periode data  : 15340 s.d. 16040
# Distribusi transaksi per wilayah
df %>%
  count(Market, name = "Jumlah Transaksi") %>%
  knitr::kable(caption = "Distribusi Jumlah Transaksi per Wilayah")
Distribusi Jumlah Transaksi per Wilayah
Market Jumlah Transaksi
Central 1344
East 888
South 672
West 1344
# Distribusi transaksi per lini produk
df %>%
  count(`Product Line`, Product, name = "N") %>%
  arrange(`Product Line`, desc(N)) %>%
  knitr::kable(caption = "Distribusi Produk per Lini")
Distribusi Produk per Lini
Product Line Product N
Beans Caffe Mocha 480
Beans Colombian 480
Beans Decaf Espresso 408
Beans Decaf Irish Cream 384
Beans Caffe Latte 216
Beans Amaretto 192
Beans Regular Espresso 72
Leaves Lemon 480
Leaves Chamomile 384
Leaves Darjeeling 384
Leaves Earl Grey 288
Leaves Green Tea 288
Leaves Mint 192

2.5 Plot Time Series Data

Untuk memahami pola penjualan dari waktu ke waktu, berikut disajikan plot time series total profit aktual dan target per bulan selama periode 2012–2013.

ts_data <- df %>%
  group_by(Month) %>%
  summarise(
    Total_Profit = sum(Profit, na.rm = TRUE),
    Total_Budget = sum(`Budget Profit`, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  mutate(Month_Date = as.Date(paste0(Month, "-01"))) %>%
  pivot_longer(cols = c(Total_Profit, Total_Budget),
               names_to = "Tipe", values_to = "Nilai") %>%
  mutate(Tipe = recode(Tipe,
    "Total_Profit" = "Realisasi Profit",
    "Total_Budget" = "Target Profit"
  ))

ggplot(ts_data, aes(x = Month_Date, y = Nilai, color = Tipe, group = Tipe)) +
  geom_line(linewidth = 0.9) +
  geom_point(size = 1.5) +
  scale_x_date(date_breaks = "6 months", date_labels = "%b %Y") +
  scale_y_continuous(labels = comma) +
  scale_color_manual(values = c("Realisasi Profit" = "#4E79A7",
                                 "Target Profit"    = "#F28E2B")) +
  labs(
    title    = "Tren Total Profit Aktual vs Target Bulanan (2012–2013)",
    subtitle = "Coffee Chain Datasets",
    x        = "Bulan",
    y        = "Total Profit (USD)",
    color    = ""
  ) +
  theme_minimal(base_size = 12) +
  theme(legend.position  = "top",
        plot.title        = element_text(face = "bold"),
        axis.text.x       = element_text(angle = 45, hjust = 1))

Dari grafik time series di atas, terlihat bahwa tren profit aktual dan target bergerak relatif beriringan sepanjang periode pengamatan. Terdapat beberapa bulan di mana realisasi profit berada di bawah target, namun secara umum polanya cukup konsisten. Tidak terlihat tren penurunan jangka panjang yang signifikan, yang menunjukkan bahwa bisnis Coffee Chain relatif stabil selama empat tahun tersebut. Fluktuasi yang ada kemungkinan dipengaruhi oleh faktor musiman atau perubahan komposisi produk yang terjual di tiap periode.


BAB 3 ANALISIS DATA

3.1 Visualisasi Perbandingan Profit per Wilayah

Sebelum masuk ke pengujian statistik, visualisasi berikut memberikan gambaran awal mengenai perbandingan total profit aktual dan target di masing-masing wilayah.

market_summary <- df %>%
  group_by(Market) %>%
  summarise(
    Total_Profit     = sum(Profit, na.rm = TRUE),
    Total_Budget     = sum(`Budget Profit`, na.rm = TRUE),
    Profit_Gap_Total = sum(Profit_Gap, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  pivot_longer(cols = c(Total_Profit, Total_Budget),
               names_to = "Tipe", values_to = "Nilai") %>%
  mutate(Tipe = recode(Tipe,
    "Total_Profit" = "Realisasi Profit",
    "Total_Budget" = "Target Profit"
  ))

ggplot(market_summary, aes(x = Market, y = Nilai, fill = Tipe)) +
  geom_bar(stat = "identity", position = "dodge", width = 0.6) +
  geom_text(aes(label = comma(round(Nilai, 0))),
            position = position_dodge(width = 0.6),
            vjust = -0.5, size = 3.2) +
  scale_y_continuous(labels = comma) +
  scale_fill_manual(values = c("Realisasi Profit" = "#4E79A7",
                                "Target Profit"    = "#F28E2B")) +
  labs(
    title    = "Perbandingan Total Profit Aktual vs Target per Wilayah Pasar",
    subtitle = "Data Coffee Chain 2012–2013",
    x        = "Wilayah Pasar",
    y        = "Total Profit (USD)",
    fill     = ""
  ) +
  theme_minimal(base_size = 13) +
  theme(legend.position = "top",
        plot.title = element_text(face = "bold"))

Interpretasi: Wilayah Central dan East menunjukkan kinerja yang baik karena profit aktualnya melampaui target, dengan selisih positif yang cukup jelas. Sebaliknya, wilayah South dan West tidak berhasil mencapai target profit. Pada wilayah South, selisih antara profit aktual dan target cukup signifikan, yang mengindikasikan adanya potensi masalah seperti rendahnya penjualan atau tingginya biaya operasional. Sementara wilayah West hanya sedikit di bawah target. Perbedaan kinerja antar wilayah ini mendorong perlunya pengujian statistik untuk membuktikan apakah perbedaan tersebut signifikan atau hanya terjadi secara kebetulan.


3.2 Visualisasi Profit Achievement per Produk

product_ach <- df %>%
  group_by(Product, `Product Line`) %>%
  summarise(
    Avg_Achievement = mean(Profit_Achievement, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  arrange(Avg_Achievement)

product_ach$Product <- factor(product_ach$Product,
                               levels = product_ach$Product)

ggplot(product_ach, aes(x = Product, y = Avg_Achievement, fill = `Product Line`)) +
  geom_col(width = 0.7) +
  geom_hline(yintercept = 100, linetype = "dashed", color = "red", linewidth = 1) +
  geom_text(aes(label = paste0(round(Avg_Achievement, 1), "%")),
            hjust = -0.1, size = 3.3) +
  coord_flip() +
  scale_fill_manual(values = c("Beans" = "#76B7B2", "Leaves" = "#59A14F")) +
  scale_y_continuous(limits = c(0, 145), labels = function(x) paste0(x, "%")) +
  labs(
    title    = "Rata-rata Profit Achievement per Produk",
    subtitle = "Garis merah = target 100% | Di atas garis = melampaui target",
    x        = "Produk",
    y        = "Profit Achievement (%)",
    fill     = "Lini Produk"
  ) +
  theme_minimal(base_size = 12) +
  theme(legend.position = "top",
        plot.title = element_text(face = "bold"))

Interpretasi: Dari 13 produk, hanya 3 yang berhasil melampaui target 100%, yaitu Earl Grey (128,4%), Mint (117,4%), dan Darjeeling (111%), ketiganya berasal dari lini Leaves (teh). Seluruh produk lini Beans (kopi) berada di bawah target, dengan performa terendah pada Decaf Irish Cream (61,7%), Amaretto (68%), dan Caffe Mocha (69%). Pola ini menunjukkan perbedaan yang sangat jelas antara kedua lini produk.


3.3 Tren Profit Gap Bulanan per Wilayah

trend_data <- df %>%
  group_by(Month, Market) %>%
  summarise(
    Avg_Profit_Gap = mean(Profit_Gap, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  mutate(Month_Date = as.Date(paste0(Month, "-01")))

ggplot(trend_data, aes(x = Month_Date, y = Avg_Profit_Gap,
                        color = Market, group = Market)) +
  geom_line(linewidth = 0.8) +
  geom_point(size = 1.5) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "gray40") +
  facet_wrap(~ Market, ncol = 2) +
  scale_x_date(date_breaks = "1 year", date_labels = "%Y") +
  scale_color_brewer(palette = "Set1") +
  labs(
    title    = "Tren Rata-rata Profit Gap Bulanan per Wilayah (2012–2013)",
    subtitle = "Di atas garis = melebihi target | Di bawah garis = di bawah target",
    x        = "Bulan",
    y        = "Rata-rata Profit Gap (USD)",
    color    = "Wilayah"
  ) +
  theme_minimal(base_size = 12) +
  theme(legend.position = "none",
        plot.title  = element_text(face = "bold"),
        strip.text  = element_text(face = "bold"))

Interpretasi: Wilayah Central dan East cenderung berada di atas garis nol sepanjang periode pengamatan, yang berarti kedua wilayah ini secara konsisten mampu melampaui target profit. Wilayah South tampak paling sering berada di bawah garis nol, terutama pada periode-periode tertentu, yang memperkuat dugaan bahwa wilayah ini memiliki kinerja paling lemah. Wilayah West menunjukkan pola yang lebih variatif — kadang di atas, kadang di bawah target, mengindikasikan ketidakstabilan kinerja yang perlu diantisipasi.


3.4 Heatmap Profit Gap per Produk dan Wilayah

heatmap_data <- df %>%
  group_by(Product, Market) %>%
  summarise(
    Avg_Gap = mean(Profit_Gap, na.rm = TRUE),
    .groups = "drop"
  )

ggplot(heatmap_data, aes(x = Market, y = Product, fill = Avg_Gap)) +
  geom_tile(color = "white", linewidth = 0.5) +
  geom_text(aes(label = round(Avg_Gap, 1)), size = 3.2) +
  scale_fill_gradient2(
    low      = "#D73027",
    mid      = "#FFFFBF",
    high     = "#1A9850",
    midpoint = 0,
    name     = "Profit Gap\n(USD)"
  ) +
  labs(
    title    = "Heatmap Rata-rata Profit Gap per Produk dan Wilayah",
    subtitle = "Hijau = di atas target | Merah = di bawah target",
    x        = "Wilayah Pasar",
    y        = "Produk"
  ) +
  theme_minimal(base_size = 12) +
  theme(plot.title = element_text(face = "bold"),
        axis.text.y = element_text(size = 10))

Interpretasi: Heatmap ini memberikan gambaran menyeluruh pada level kombinasi produk dan wilayah. Warna merah yang dominan pada produk-produk lini Beans di wilayah South mengonfirmasi temuan sebelumnya bahwa kombinasi tersebut merupakan area yang paling memerlukan perhatian. Sebaliknya, produk-produk lini Leaves hampir seluruhnya menampilkan warna hijau atau netral di semua wilayah, menandakan kinerja yang lebih baik dan merata.


3.5 Uji t Satu Sampel

Landasan Teori

Uji t satu sampel (one sample t-test) digunakan untuk menguji apakah rata-rata suatu populasi berbeda secara signifikan dari nilai tertentu yang telah ditetapkan. Dalam konteks analisis ini, uji t digunakan untuk menguji apakah rata-rata Profit Gap secara keseluruhan berbeda dari nol. Jika rata-rata Profit Gap = 0, artinya realisasi profit sama persis dengan target secara rata-rata.

Rumus

Statistik uji t dihitung sebagai:

\[t = \frac{\bar{X} - \mu_0}{s / \sqrt{n}}\]

Di mana:

  • \(\bar{X}\) = rata-rata sampel (Profit Gap)
  • \(\mu_0\) = nilai hipotesis nol (dalam hal ini = 0)
  • \(s\) = standar deviasi sampel
  • \(n\) = jumlah observasi

Nilai \(t\) yang dihasilkan kemudian dibandingkan dengan distribusi t dengan derajat bebas \(df = n - 1\). Keputusan diambil berdasarkan p-value: jika p-value < 0,05 maka H₀ ditolak.

Hipotesis

  • H₀: \(\mu_{gap} = 0\) (rata-rata Profit Gap sama dengan nol, artinya realisasi profit sama dengan target)
  • H₁: \(\mu_{gap} \neq 0\) (rata-rata Profit Gap berbeda dari nol)

Tingkat signifikansi yang digunakan: \(\alpha = 0,05\)

Hasil Pengujian

gap_vector <- df$Profit_Gap
t_result <- t.test(gap_vector, mu = 0, alternative = "two.sided")
print(t_result)
## 
##  One Sample t-test
## 
## data:  gap_vector
## t = 0.31011, df = 4247, p-value = 0.7565
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  -0.9809752  1.3496193
## sample estimates:
## mean of x 
##  0.184322

Interpretasi

Berdasarkan hasil pengujian, diperoleh nilai \(t = 0{,}310\) dengan \(df = 4247\) dan p-value \(= 0{,}7565\). Karena p-value jauh lebih besar dari \(\alpha = 0{,}05\), maka H₀ gagal ditolak. Rata-rata Profit Gap sebesar \(0{,}184\) USD secara statistik tidak berbeda signifikan dari nol.

Hasil ini menunjukkan bahwa secara agregat, realisasi profit Coffee Chain cukup akurat mendekati target yang telah ditetapkan. Namun perlu diperhatikan bahwa hasil agregat ini bisa menyembunyikan perbedaan kinerja antar wilayah — wilayah yang berkinerja baik dan buruk saling mengimbangi sehingga secara keseluruhan seolah semuanya on-track. Oleh karena itu, analisis dilanjutkan dengan membandingkan kinerja antar wilayah menggunakan ANOVA.


3.6 Analisis ANOVA Satu Arah

Landasan Teori

Analysis of Variance (ANOVA) satu arah digunakan untuk menguji apakah terdapat perbedaan rata-rata yang signifikan di antara tiga atau lebih kelompok. Dalam analisis ini, ANOVA digunakan untuk menguji apakah rata-rata Profit Gap berbeda antar keempat wilayah pasar (Central, East, South, West).

ANOVA bekerja dengan membandingkan dua sumber variasi: variasi antar kelompok (between groups) dan variasi dalam kelompok (within groups). Jika variasi antar kelompok jauh lebih besar dibanding variasi dalam kelompok, maka dapat disimpulkan bahwa ada perbedaan yang nyata antar kelompok.

Rumus

Statistik uji F dihitung sebagai:

\[F = \frac{MS_{between}}{MS_{within}} = \frac{SS_{between} / df_{between}}{SS_{within} / df_{within}}\]

Di mana:

  • \(SS_{between} = \sum_{j} n_j (\bar{X}_j - \bar{X})^2\) (jumlah kuadrat antar kelompok)
  • \(SS_{within} = \sum_{j} \sum_{i} (X_{ij} - \bar{X}_j)^2\) (jumlah kuadrat dalam kelompok)
  • \(df_{between} = k - 1\) dengan \(k\) = jumlah kelompok
  • \(df_{within} = N - k\) dengan \(N\) = total observasi

Hipotesis

  • H₀: \(\mu_{Central} = \mu_{East} = \mu_{South} = \mu_{West}\) (rata-rata Profit Gap sama di semua wilayah)
  • H₁: Minimal ada satu wilayah yang rata-rata Profit Gap-nya berbeda

Tingkat signifikansi: \(\alpha = 0{,}05\)

Asumsi ANOVA

Sebelum melakukan ANOVA, perlu dipastikan beberapa asumsi dasar terpenuhi, yaitu: (1) data berskala numerik, (2) setiap kelompok bersifat independen, dan (3) varians antar kelompok relatif homogen. Mengingat jumlah data yang besar (n > 4.000), ANOVA bersifat cukup robust terhadap pelanggaran normalitas.

Hasil Pengujian

anova_model <- aov(Profit_Gap ~ Market, data = df)
summary(anova_model)
##               Df  Sum Sq Mean Sq F value  Pr(>F)   
## Market         3   17614    5871    3.92 0.00831 **
## Residuals   4244 6356157    1498                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Uji Post-hoc Tukey HSD

Karena hasil ANOVA signifikan, dilakukan uji lanjut (post-hoc) menggunakan metode Tukey HSD (Honestly Significant Difference) untuk mengidentifikasi pasangan wilayah mana yang berbeda secara spesifik. Metode Tukey dipilih karena mampu mengendalikan tingkat kesalahan tipe I secara keseluruhan (family-wise error rate) meskipun dilakukan banyak perbandingan sekaligus.

tukey_result <- TukeyHSD(anova_model)
print(tukey_result)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = Profit_Gap ~ Market, data = df)
## 
## $Market
##                    diff        lwr        upr     p adj
## East-Central   1.797941  -2.503284  6.0991659 0.7052691
## South-Central -4.758929  -9.458002 -0.0598556 0.0458156
## West-Central  -1.217262  -5.054039  2.6195151 0.8472375
## South-East    -6.556869 -11.642237 -1.4715015 0.0051362
## West-East     -3.015203  -7.316428  1.2860224 0.2726398
## West-South     3.541667  -1.157406  8.2407396 0.2126902

Interpretasi

Hasil ANOVA menunjukkan nilai \(F = 3{,}92\) dengan p-value \(= 0{,}00831 < 0{,}05\), sehingga H₀ ditolak. Artinya, terdapat perbedaan rata-rata Profit Gap yang signifikan di antara keempat wilayah pasar.

Hasil uji post-hoc Tukey mengidentifikasi dua pasangan wilayah yang berbeda secara signifikan:

  • South vs Central: \(p_{adj} = 0{,}046 < 0{,}05\) → berbeda signifikan
  • South vs East: \(p_{adj} = 0{,}005 < 0{,}05\) → berbeda signifikan

Pasangan wilayah lainnya (East vs Central, West vs Central, West vs East, West vs South) tidak menunjukkan perbedaan yang signifikan (\(p_{adj} > 0{,}05\)).

Wilayah South terbukti memiliki rata-rata Profit Gap yang paling rendah dibandingkan wilayah lain dan menjadi satu-satunya wilayah dengan total selisih negatif (realisasi profit di bawah target sebesar −2.562 USD), sementara wilayah lainnya masih mampu melampaui target secara total.


3.7 Ringkasan Statistik per Wilayah

ringkasan <- df %>%
  group_by(Market) %>%
  summarise(
    N                = n(),
    Total_Profit     = sum(Profit),
    Total_Target     = sum(`Budget Profit`),
    Selisih          = Total_Profit - Total_Target,
    Rata_Achievement = round(mean(Profit_Achievement, na.rm = TRUE), 2),
    SD_Achievement   = round(sd(Profit_Achievement, na.rm = TRUE), 2),
    .groups = "drop"
  )

knitr::kable(ringkasan,
             caption = "Ringkasan Kinerja Profit per Wilayah",
             col.names = c("Wilayah", "N Transaksi", "Total Profit",
                           "Total Target", "Selisih", "Avg Achievement (%)", "SD (%)"),
             format.args = list(big.mark = ","))
Ringkasan Kinerja Profit per Wilayah
Wilayah N Transaksi Total Profit Total Target Selisih Avg Achievement (%) SD (%)
Central 1,344 93,852 92,580 1,272 89.62 52.21
East 888 59,217 56,780 2,437 89.60 52.09
South 672 32,478 35,040 -2,562 83.49 59.41
West 1,344 73,996 74,360 -364 94.06 57.73

Dari tabel di atas terlihat bahwa wilayah West memiliki rata-rata Profit Achievement tertinggi (94,1%), diikuti Central (89,6%) dan East (89,6%). Wilayah South memiliki rata-rata pencapaian terendah (83,5%) sekaligus standar deviasi yang cukup tinggi (59,4%), mengindikasikan kinerja yang tidak hanya rendah tetapi juga tidak konsisten dari waktu ke waktu.


3.8 Peringkat Produk berdasarkan Profit Achievement

prod_rank <- df %>%
  group_by(Product, `Product Line`) %>%
  summarise(
    Avg_Achievement = round(mean(Profit_Achievement, na.rm = TRUE), 2),
    Avg_Profit      = round(mean(Profit, na.rm = TRUE), 2),
    Avg_Budget      = round(mean(`Budget Profit`, na.rm = TRUE), 2),
    .groups = "drop"
  ) %>%
  arrange(desc(Avg_Achievement))

cat("=== TOP 5 PRODUK (Achievement Tertinggi) ===\n")
## === TOP 5 PRODUK (Achievement Tertinggi) ===
knitr::kable(head(prod_rank, 5),
             col.names = c("Produk", "Lini", "Avg Achievement (%)",
                           "Avg Profit (USD)", "Avg Budget (USD)"))
Produk Lini Avg Achievement (%) Avg Profit (USD) Avg Budget (USD)
Earl Grey Leaves 128.44 83.90 61.11
Mint Leaves 117.36 32.05 35.31
Darjeeling Leaves 110.96 75.66 59.53
Regular Espresso Beans 97.60 139.79 125.83
Caffe Latte Beans 96.48 52.66 46.76
cat("\n=== BOTTOM 5 PRODUK (Achievement Terendah) ===\n")
## 
## === BOTTOM 5 PRODUK (Achievement Terendah) ===
knitr::kable(tail(prod_rank, 5),
             col.names = c("Produk", "Lini", "Avg Achievement (%)",
                           "Avg Profit (USD)", "Avg Budget (USD)"))
Produk Lini Avg Achievement (%) Avg Profit (USD) Avg Budget (USD)
Green Tea Leaves 89.53 -0.80 13.19
Colombian Beans 79.74 116.26 120.42
Caffe Mocha Beans 68.98 36.83 48.50
Amaretto Beans 68.02 25.47 36.56
Decaf Irish Cream Beans 61.68 36.43 49.64

Tabel peringkat ini mengonfirmasi temuan pada visualisasi sebelumnya. Seluruh produk dalam 5 besar adalah dari lini Leaves, sementara seluruh 5 produk terbawah berasal dari lini Beans. Perbedaan rata-rata Profit Achievement antara produk terbaik (Earl Grey, 128,4%) dan terburuk (Decaf Irish Cream, 61,7%) mencapai hampir 67 poin persentase — kesenjangan yang sangat signifikan dari sisi bisnis.


BAB 4 KESIMPULAN DAN REKOMENDASI

4.1 Kesimpulan

Berdasarkan serangkaian visualisasi dan analisis statistik yang telah dilakukan terhadap dataset Coffee Chain periode 2012–2015, dapat ditarik kesimpulan sebagai berikut:

1. Pencapaian Target Secara Keseluruhan

Hasil uji t satu sampel menunjukkan bahwa rata-rata Profit Gap sebesar 0,184 USD dengan p-value = 0,7565 (> 0,05), sehingga H₀ gagal ditolak. Hal ini mengindikasikan bahwa secara agregat, realisasi profit Coffee Chain tidak berbeda secara signifikan dari target yang telah ditetapkan. Dengan kata lain, perusahaan secara umum mampu menetapkan target yang cukup realistis. Namun, hasil agregat ini perlu diinterpretasikan dengan hati-hati karena wilayah yang berkinerja baik dan buruk saling mengimbangi sehingga secara keseluruhan seolah semua wilayah on-track, padahal terdapat perbedaan yang cukup mencolok di tingkat wilayah.

2. Perbedaan Antar Wilayah

Hasil ANOVA satu arah menunjukkan terdapat perbedaan rata-rata Profit Gap yang signifikan antar wilayah pasar (F = 3,92; p-value = 0,00831 < 0,05), sehingga H₀ ditolak. Uji post-hoc Tukey mengidentifikasi bahwa pasangan wilayah yang berbeda secara signifikan adalah South vs Central (p adj = 0,046) dan South vs East (p adj = 0,005). Wilayah South menjadi wilayah yang paling bermasalah, dengan total selisih profit aktual terhadap target sebesar −2.562 USD — satu-satunya wilayah yang realisasi profitnya berada di bawah target secara keseluruhan.

3. Kinerja Produk

Analisis menunjukkan perbedaan yang sangat mencolok antara dua lini produk. Lini Leaves (teh) mendominasi performa terbaik dengan tiga produk yang secara konsisten melampaui target: Earl Grey (128,4%), Mint (117,4%), dan Darjeeling (111%). Sebaliknya, seluruh produk lini Beans (kopi) berada di bawah target, dengan performa terendah pada Decaf Irish Cream (61,7%), Amaretto (68%), dan Caffe Mocha (69%). Temuan ini mengindikasikan bahwa target anggaran pada lini Beans kemungkinan ditetapkan terlalu optimistis, atau strategi penjualan produk kopi kurang efektif sehingga perlu evaluasi lebih lanjut.

4.2 Rekomendasi Bisnis

Berdasarkan hasil analisis, beberapa rekomendasi yang dapat diberikan kepada manajemen Coffee Chain adalah:

  1. Evaluasi mendalam pada wilayah South. Manajemen perlu melakukan kajian menyeluruh terhadap strategi penjualan, komposisi produk, dan efisiensi operasional di wilayah South. Wilayah ini secara statistik terbukti memiliki kinerja yang berbeda signifikan dibanding wilayah lain, sehingga membutuhkan intervensi yang lebih terstruktur.

  2. Peninjauan target anggaran lini Beans. Kesenjangan yang konsisten antara realisasi dan target pada seluruh produk Beans mengindikasikan kemungkinan target yang terlalu tinggi. Manajemen dapat mempertimbangkan untuk merevisi target secara lebih realistis atau merancang strategi promosi khusus untuk mendorong penjualan produk kopi, terutama Decaf Irish Cream, Amaretto, dan Caffe Mocha.

  3. Replikasi strategi lini Leaves. Produk-produk teh seperti Earl Grey, Mint, dan Darjeeling secara konsisten melampaui target di hampir semua wilayah. Manajemen dapat mengkaji faktor-faktor keberhasilan lini ini — baik dari sisi penetapan harga, promosi, maupun distribusi — untuk kemudian diterapkan pada lini Beans.

  4. Pemantauan berkala berbasis data. Analisis semacam ini sebaiknya dilakukan secara rutin (misalnya per kuartal) agar manajemen dapat mendeteksi tren penurunan kinerja lebih awal dan mengambil tindakan korektif sebelum dampaknya meluas.