Dalam dunia bisnis, analisis terhadap kinerja produk menjadi hal yang penting untuk mendukung pengambilan keputusan yang tepat. Salah satu indikator yang sering digunakan adalah profit sebagai ukuran keuntungan yang diperoleh perusahaan. Namun, profit saja belum cukup untuk menggambarkan efisiensi suatu produk dalam menghasilkan keuntungan. Oleh karena itu, diperlukan analisis tambahan seperti profit margin yang menunjukkan perbandingan antara keuntungan dan penjualan.
Pada data Coffee Chain, terdapat beberapa product line seperti Beans dan Leaves yang memiliki karakteristik penjualan dan keuntungan yang berbeda. Perbedaan ini menarik untuk dianalisis lebih lanjut guna mengetahui apakah terdapat perbedaan kinerja yang signifikan antara kedua jenis produk tersebut, baik dari segi profit maupun efisiensinya.
Deskripsi data adalah tahap awal analisis untuk menggambarkan karakteristik data secara ringkas, sehingga pola dan informasi dasar dapat dipahami sebelum analisis lanjutan dilakukan.
library(readxl)
## Warning: package 'readxl' was built under R version 4.4.3
library(knitr)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
coffe <- read_xlsx("D:/Coffee Chain Datasets.xlsx")
kable(head(coffe))
| Area Code | Date | Market | Market Size | Product | Product Line | Product Type | State | Type | Budget COGS | Budget Margin | Budget Profit | Budget Sales | COGS | Inventory | Margin | Marketing | Profit | Sales | Total Expenses |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 719 | 2012-01-01 | Central | Major Market | Amaretto | Beans | Coffee | Colorado | Regular | 90 | 130 | 100 | 220 | 89 | 777 | 130 | 24 | 94 | 219 | 36 |
| 970 | 2012-01-01 | Central | Major Market | Colombian | Beans | Coffee | Colorado | Regular | 80 | 110 | 80 | 190 | 83 | 623 | 107 | 27 | 68 | 190 | 39 |
| 970 | 2012-01-01 | Central | Major Market | Decaf Irish Cream | Beans | Coffee | Colorado | Decaf | 100 | 140 | 110 | 240 | 95 | 821 | 139 | 26 | 101 | 234 | 38 |
| 303 | 2012-01-01 | Central | Major Market | Green Tea | Leaves | Tea | Colorado | Regular | 30 | 50 | 30 | 80 | 44 | 623 | 56 | 14 | 30 | 100 | 26 |
| 303 | 2012-01-01 | Central | Major Market | Caffe Mocha | Beans | Espresso | Colorado | Regular | 60 | 90 | 70 | 150 | 54 | 456 | 80 | 15 | 54 | 134 | 26 |
| 720 | 2012-01-01 | Central | Major Market | Decaf Espresso | Beans | Espresso | Colorado | Decaf | 80 | 130 | 80 | 210 | 72 | 558 | 108 | 23 | 53 | 180 | 55 |
Beberapa penjelasan singkat mengenai variabel atau kolom :
Area Code : Kode area. Market : Daerah atau wilayah. Market Size : Ukuran dari Market. Product : Jenis dari produk, kopi atau teh. Product Line : Bentuk dari produk. Product Type : Tipe dari produk. State : Negara bagian (Amerika Serikat). Type : Jenis produk, kafein atau tanpa kafein. Budget COGS : Estimasi biaya pokok penjualan. Budget Margin : Estimasi margin keuntungan. Budget Profit : Estimasi keuntungan. Budget Sales : Estimasi total penjualan. COGS : Biaya pokok penjualan aktual. Inventory : Jumlah stok barang yang tersedia. Margin : Margin keuntungan aktual. Profit : Keuntungan aktual. Sales : Total penjualan aktual. Total Expenses: Total seluruh biaya yang dikeluarkan.
p = sum(is.na(coffe))
q = sum(duplicated(coffe))
cat(" Jumlah Missing Value :", p, "\n","Jumlah Duplicate data :", q)
## Jumlah Missing Value : 0
## Jumlah Duplicate data : 0
str(coffe)
## tibble [4,248 × 20] (S3: tbl_df/tbl/data.frame)
## $ Area Code : num [1:4248] 719 970 970 303 303 720 970 719 970 719 ...
## $ Date : POSIXct[1:4248], format: "2012-01-01" "2012-01-01" ...
## $ Market : chr [1:4248] "Central" "Central" "Central" "Central" ...
## $ Market Size : chr [1:4248] "Major Market" "Major Market" "Major Market" "Major Market" ...
## $ Product : chr [1:4248] "Amaretto" "Colombian" "Decaf Irish Cream" "Green Tea" ...
## $ Product Line : chr [1:4248] "Beans" "Beans" "Beans" "Leaves" ...
## $ Product Type : chr [1:4248] "Coffee" "Coffee" "Coffee" "Tea" ...
## $ State : chr [1:4248] "Colorado" "Colorado" "Colorado" "Colorado" ...
## $ Type : chr [1:4248] "Regular" "Regular" "Decaf" "Regular" ...
## $ Budget COGS : num [1:4248] 90 80 100 30 60 80 140 50 50 40 ...
## $ Budget Margin : num [1:4248] 130 110 140 50 90 130 160 80 70 70 ...
## $ Budget Profit : num [1:4248] 100 80 110 30 70 80 110 20 40 20 ...
## $ Budget Sales : num [1:4248] 220 190 240 80 150 210 300 130 120 110 ...
## $ COGS : num [1:4248] 89 83 95 44 54 72 170 63 60 58 ...
## $ Inventory : num [1:4248] 777 623 821 623 456 ...
## $ Margin : num [1:4248] 130 107 139 56 80 108 171 87 80 72 ...
## $ Marketing : num [1:4248] 24 27 26 14 15 23 47 57 19 22 ...
## $ Profit : num [1:4248] 94 68 101 30 54 53 99 0 33 17 ...
## $ Sales : num [1:4248] 219 190 234 100 134 180 341 150 140 130 ...
## $ Total Expenses: num [1:4248] 36 39 38 26 26 55 72 87 47 55 ...
Menggunakan variabel yang akan digunakan untuk analisis.
data <- coffe %>%
select('Product Line', Profit, Sales, Market)
print(data)
## # A tibble: 4,248 × 4
## `Product Line` Profit Sales Market
## <chr> <dbl> <dbl> <chr>
## 1 Beans 94 219 Central
## 2 Beans 68 190 Central
## 3 Beans 101 234 Central
## 4 Leaves 30 100 Central
## 5 Beans 54 134 Central
## 6 Beans 53 180 Central
## 7 Leaves 99 341 Central
## 8 Leaves 0 150 Central
## 9 Leaves 33 140 Central
## 10 Leaves 17 130 Central
## # ℹ 4,238 more rows
Rata - rata Profit per Produk Line
profitsummary <- data %>%
group_by(`Product Line`) %>%
summarise(average_profit = mean(Profit, na.rm = TRUE))
ggplot(profitsummary, aes(x = `Product Line`, y = average_profit)) +
geom_bar(stat = "identity") +
labs(title = "Rata-rata Profit per Product Line",
x = "Product Line",
y = "Average Profit")
Berdasarkan visualisasi perbandingan profit, terlihat bahwa rata-rata
profit antara product line Beans dan Leaves tidak menunjukkan perbedaan
yang terlalu mencolok. Meskipun terdapat sedikit perbedaan nilai
rata-rata, secara umum kedua produk memberikan kontribusi keuntungan
yang relatif serupa.
Rata - rata Profit per Produk Line
data <- data %>%
mutate(profit_margin = Profit / Sales)
margin_summary <- data %>%
group_by(`Product Line`) %>%
summarise(avg_margin = mean(profit_margin, na.rm = TRUE))
margin_summary
## # A tibble: 2 × 2
## `Product Line` avg_margin
## <chr> <dbl>
## 1 Beans 0.228
## 2 Leaves 0.0579
ggplot(margin_summary, aes(x = `Product Line`, y = avg_margin)) +
geom_bar(stat = "identity") +
labs(title = "Rata-rata Profit Margin per Product Line",
x = "Product Line",
y = "Profit Margin")
Berbeda dengan profit, visualisasi profit margin menunjukkan adanya
perbedaan yang cukup jelas antara Beans dan Leaves. Produk Beans
memiliki margin yang lebih tinggi dibandingkan Leaves, yang
mengindikasikan bahwa Beans lebih efisien dalam menghasilkan keuntungan
dari setiap penjualan. Dengan kata lain, meskipun profit total tidak
jauh berbeda, kualitas keuntungan dari Beans lebih baik dibandingkan
Leaves.
Keuntungan per Area (Market)
market_summary <- data %>%
group_by(Market, `Product Line`) %>%
summarise(total_profit = sum(Profit, na.rm = TRUE), .groups = "drop")
market_summary
## # A tibble: 8 × 3
## Market `Product Line` total_profit
## <chr> <chr> <dbl>
## 1 Central Beans 46765
## 2 Central Leaves 47087
## 3 East Beans 37236
## 4 East Leaves 21981
## 5 South Beans 26707
## 6 South Leaves 5771
## 7 West Beans 32595
## 8 West Leaves 41401
ggplot(market_summary, aes(x = Market, y = total_profit, fill = `Product Line`)) +
geom_bar(stat = "identity", position = "dodge") +
labs(title = "Total Profit per Market dan Product Line",
x = "Market",
y = "Total Profit")
Visualisasi keuntungan per area menunjukkan adanya variasi kontribusi
profit di masing-masing market. Beberapa area memberikan kontribusi
profit yang lebih besar dibandingkan area lainnya, yang menunjukkan
bahwa performa penjualan tidak merata di setiap wilayah. Hal ini
mengindikasikan bahwa faktor geografis atau karakteristik pasar juga
berperan dalam memengaruhi tingkat keuntungan yang diperoleh
perusahaan.
Uji Normalitas untuk Profit per Product Line
hasil <- data.frame(
kelompok = c("Beans", "Leaves"),
p_value = c(
shapiro.test(data$Profit[data$`Product Line` == "Beans"])$p.value,
shapiro.test(data$Profit[data$`Product Line` == "Leaves"])$p.value
)
)
hasil
## kelompok p_value
## 1 Beans 3.191887e-47
## 2 Leaves 7.071586e-45
Berdasarkan uji Shapiro-Wilk, diperoleh p-value pada kelompok beans sebesar 3,19×10⁻⁴⁷ dan leaves sebesar 7,07×10⁻⁴⁵ (keduanya < 0,05), sehingga H₀ ditolak. Hal ini menunjukkan bahwa data profit pada kedua kelompok tidak berdistribusi normal. Oleh karena itu, analisis perbandingan rata-rata dilakukan menggunakan uji non-parametrik yaitu Wilcoxon Rank Sum Test.
Uji Wilcoxon Rank Sum Test Profit Beans vs Profit Leaves
wilcox.test(Profit ~ `Product Line`, data = data)
##
## Wilcoxon rank sum test with continuity correction
##
## data: Profit by Product Line
## W = 2200291, p-value = 0.2143
## alternative hypothesis: true location shift is not equal to 0
Tidak terdapat perbedaan yang signifikan antara distribusi profit beans dan leaves
Uji Normal Margin
data_subset <- data %>%
mutate(profit_margin = Profit / Sales)
beans_margin <- data_subset %>% filter(`Product Line` == "Beans")
leaves_margin <- data_subset %>% filter(`Product Line` == "Leaves")
Nm <- data.frame(SV = c("Beans.Margin","Leaves.Margin"), p_value = c(
shapiro.test(beans_margin$profit_margin)$p.value,
shapiro.test(leaves_margin$profit_margin)$p.value
))
print(Nm)
## SV p_value
## 1 Beans.Margin 7.284758e-62
## 2 Leaves.Margin 8.080005e-70
Setelah dicek normalitasnya menggunakan uji shapiro wilk, didapat p_value dari Beans.margin dan Leaves.Margin < 0.05, sehingga H0 ditolak. Hal ini menunjukkan bahwa data mmargin pada kedua kelompok tidak berdistribusi normal. Oleh karena itu, analisis perbandingan rata-rata dilakukan menggunakan uji non-parametrik yaitu Wilcoxon Rank Sum Test.
Uji Wilcoxon Rank Sum Test Margin Beans vs Margin Leaves
wilcox.test(profit_margin ~ `Product Line`, data = data_subset)
##
## Wilcoxon rank sum test with continuity correction
##
## data: profit_margin by Product Line
## W = 2134752, p-value = 0.003931
## alternative hypothesis: true location shift is not equal to 0
Setelah dicek menggunakan uji Wilcoxon Rank, ternyata ada perbedaan signifikan.
Berdasarkan hasil analisis yang telah dilakukan, diketahui bahwa tidak terdapat perbedaan yang signifikan pada profit antara product line Beans dan Leaves berdasarkan uji Wilcoxon. Hal ini menunjukkan bahwa secara total keuntungan, kedua jenis produk memberikan kontribusi yang relatif serupa. Namun, dari sisi profit margin, terlihat adanya perbedaan yang cukup jelas, di mana Beans memiliki margin yang lebih tinggi dibandingkan Leaves, yang mengindikasikan bahwa Beans lebih efisien dalam menghasilkan keuntungan dari setiap penjualan.
Selain itu, hasil visualisasi menunjukkan bahwa terdapat variasi kontribusi profit di masing-masing market, yang mengindikasikan bahwa performa produk juga dipengaruhi oleh faktor wilayah pemasaran. Dengan demikian, meskipun profit total tidak berbeda secara signifikan, perbedaan dalam efisiensi dan distribusi keuntungan memberikan insight penting dalam mengevaluasi kinerja produk secara keseluruhan.