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.
Berdasarkan latar belakang di atas, rumusan masalah dalam analisis ini adalah:
Tujuan dari analisis ini adalah:
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.
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…
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:
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.
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.
# 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")
| 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")
| 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 |
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.
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.
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.
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.
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.
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.
Statistik uji t dihitung sebagai:
\[t = \frac{\bar{X} - \mu_0}{s / \sqrt{n}}\]
Di mana:
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.
Tingkat signifikansi yang digunakan: \(\alpha = 0,05\)
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
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.
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.
Statistik uji F dihitung sebagai:
\[F = \frac{MS_{between}}{MS_{within}} = \frac{SS_{between} / df_{between}}{SS_{within} / df_{within}}\]
Di mana:
Tingkat signifikansi: \(\alpha = 0{,}05\)
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.
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
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
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:
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.
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 = ","))
| 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.
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.
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.
Berdasarkan hasil analisis, beberapa rekomendasi yang dapat diberikan kepada manajemen Coffee Chain adalah:
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.
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.
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.
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.