Insight: Apakah ada hubungan antara Sales (Penjualan) dan Profit (Keuntungan) pada data penjualan Coffee Chain? Dan bagaimana perbandingan rata-rata profit antar jenis produk?
Dataset ini berasal dari jaringan Coffee Chain yang mencatat penjualan berbagai produk (kopi, espresso, teh herbal, dan teh) di berbagai wilayah Amerika Serikat dari tahun 2012 hingga 2013. Total data yang dianalisis sebanyak 4.248 transaksi.
Dari tabel factTable, kita hanya menggunakan dua
variabel utama:
| Variabel | Keterangan |
|---|---|
Sales |
Nilai penjualan dalam satuan dollar |
Profit |
Keuntungan bersih |
Dari tabel Product, kita menggunakan:
| Variabel | Keterangan |
|---|---|
Product Type |
Kategori produk: Coffee, Espresso, Herbal Tea, Tea |
Kita sengaja tidak pakai semua kolom karena tujuannya hanya melihat pola Sales vs Profit dan perbedaan profit antar produk.
library(DBI)
library(RSQLite)
library(ggplot2)
library(dplyr)
library(MASS)
library(lmtest)
con <- DBI::dbConnect(odbc::odbc(),
Driver = "MySQL ODBC 8.0 ANSI Driver",
Server = "127.0.0.1",
Database = "coffee-chain",
UID = "root",
PWD = "sotoayam26",
Port = 3306)
df <- dbGetQuery(con, "
SELECT
f.Sales,
f.Profit,
p.`Product Type` AS Product_Type
FROM factTable f
JOIN Product p
ON f.ProductID = p.ProductID
")
# EDA
str(df)
## 'data.frame': 4248 obs. of 3 variables:
## $ Sales : int 219 190 234 100 134 180 341 150 140 130 ...
## $ Profit : int 94 68 101 30 54 53 99 0 33 17 ...
## $ Product_Type: chr "Coffee" "Coffee" "Coffee" "Tea" ...
summary(df)
## Sales Profit Product_Type
## Min. : 17 Min. :-638.0 Length:4248
## 1st Qu.:100 1st Qu.: 17.0 Class :character
## Median :138 Median : 40.0 Mode :character
## Mean :193 Mean : 61.1
## 3rd Qu.:230 3rd Qu.: 92.0
## Max. :912 Max. : 778.0
head(df)
## Sales Profit Product_Type
## 1 219 94 Coffee
## 2 190 68 Coffee
## 3 234 101 Coffee
## 4 100 30 Tea
## 5 134 54 Espresso
## 6 180 53 Espresso
Berdasarkan hasil eksplorasi data, variabel Sales memiliki nilai minimum sebesar 17 dan maksimum sebesar 912, dengan rata-rata sekitar 193. Hal ini menunjukkan adanya variasi nilai penjualan yang cukup besar. Variabel Profit memiliki nilai minimum sebesar -638 dan maksimum sebesar 778, dengan rata-rata sekitar 61,1. Nilai minimum yang negatif menunjukkan bahwa terdapat beberapa transaksi yang mengalami kerugian. Selain itu, Product Type merupakan variabel kategorik yang terdiri dari beberapa jenis produk seperti Coffee, Espresso, Herbal Tea, dan Tea.
correlation <- cor(df$Sales, df$Profit)
cat("Nilai korelasi antara Sales dan Profit =", round(correlation, 4), "\n")
## Nilai korelasi antara Sales dan Profit = 0.7973
Nilai korelasi sebesar 0,80 menunjukkan hubungan yang kuat dan positif antara penjualan dan keuntungan. Semakin tinggi penjualan, semakin besar pula keuntungannya.
model <- lm(Profit ~ Sales, data = df)
summary(model)
##
## Call:
## lm(formula = Profit ~ Sales, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -606.28 -9.15 11.77 28.31 466.85
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -42.456004 1.527850 -27.79 <2e-16 ***
## Sales 0.536582 0.006233 86.08 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 61.39 on 4246 degrees of freedom
## Multiple R-squared: 0.6357, Adjusted R-squared: 0.6357
## F-statistic: 7410 on 1 and 4246 DF, p-value: < 2.2e-16
Uji Asumsi
shapiro.test(residuals(model))
##
## Shapiro-Wilk normality test
##
## data: residuals(model)
## W = 0.67128, p-value < 2.2e-16
bptest(model)
##
## studentized Breusch-Pagan test
##
## data: model
## BP = 0.63012, df = 1, p-value = 0.4273
Hasil uji asumsi menunjukkan bahwa model regresi linear tidak sepenuhnya memenuhi asumsi normalitas dan homoskedastisitas. Oleh karena itu, digunakan regresi robust yang lebih tahan terhadap penyimpangan asumsi, sehingga hasil analisis menjadi lebih stabil.
Regresi Robust
model_robust <- rlm(Profit ~ Sales, data = df)
summary(model_robust)
##
## Call: rlm(formula = Profit ~ Sales, data = df)
## Residuals:
## Min 1Q Median 3Q Max
## -623.397 -18.975 1.816 15.896 490.978
##
## Coefficients:
## Value Std. Error t value
## (Intercept) -24.0434 0.7875 -30.5317
## Sales 0.4720 0.0032 146.9217
##
## Residual standard error: 25.76 on 4246 degrees of freedom
Model Regresi Robust: \[\hat{\text{Profit}} = -24.0434 + 0.4720 \times \text{Sales}\]
Interpretasi:
Hasil regresi robust menunjukkan bahwa sales berpengaruh positif
terhadap profit. Setiap peningkatan sales sebesar $1 akan meningkatkan
profit sebesar $0.4720. Hal ini menunjukkan bahwa semakin tinggi
penjualan, maka profit juga meningkat. Nilai intercept sebesar -24.04
menunjukkan bahwa ketika sales bernilai nol, profit diperkirakan
bernilai negatif sebesar $-24.04. Namun, kondisi ini kurang relevan
karena dalam kenyataannya penjualan tidak mungkin bernilai nol.
ggplot(df, aes(x = Sales, y = Profit)) +
geom_point(alpha = 0.4, color = "#4E9AF1", size = 1.8) +
geom_abline(
intercept = coef(model_robust)[1],
slope = coef(model_robust)[2],
color = "#E05252",
linewidth = 1.2
) +
labs(
title = "Hubungan Sales dan Profit (Robust Regression)",
x = "Sales ($)",
y = "Profit ($)"
) +
theme_minimal()
product_summary <- df %>%
group_by(Product_Type) %>%
summarise(
Avg_Profit = mean(Profit, na.rm = TRUE),
Avg_Sales = mean(Sales, na.rm = TRUE),
N = n()
)
ggplot(product_summary, aes(x = reorder(Product_Type, Avg_Profit),
y = Avg_Profit, fill = Product_Type)) +
geom_col(width = 0.6, show.legend = FALSE) +
geom_text(aes(label = paste0("$", round(Avg_Profit, 1))),
hjust = -0.15, size = 4, fontface = "bold") +
coord_flip(ylim = c(0, 90)) +
scale_fill_manual(values = c(
"Coffee" = "#6F4E37",
"Espresso" = "#C0773F",
"Herbal Tea" = "#5A9E6F",
"Tea" = "#4A90D9"
)) +
labs(
title = "Rata-rata Profit per Jenis Produk",
subtitle = "Coffee Chain Dataset",
x = NULL,
y = "Rata-rata Profit ($)"
) +
theme_minimal(base_size = 12) +
theme(plot.title = element_text(face = "bold"))
Dari analisis korelasi dan regresi:
Hubungan antara Sales dan Profit cukup kuat (r = 0,80). Model menunjukkan bahwa sebagian besar variasi profit dapat dijelaskan oleh sales, meskipun masih terdapat faktor lain di luar model. Berdasarkan regresi robust, setiap peningkatan sales sebesar $1 akan meningkatkan profit sekitar $0,47. Hal ini menunjukkan bahwa peningkatan penjualan berkontribusi langsung terhadap peningkatan keuntungan.
Dari perbandingan antar produk:
| Produk | Avg. Profit |
|---|---|
| Coffee | $70,7 (tertinggi) |
| Herbal Tea | $59,9 |
| Espresso | $58,4 |
| Tea | $55,2 (terendah) |
Produk Coffee menghasilkan rata-rata profit tertinggi, sementara Tea paling rendah. Selisihnya tidak terlalu besar ($15,5).
Dari analisis dataset Coffee Chain ini, dapat disimpulkan:
Sales dan Profit berkorelasi kuat (r = 0,80) strategi meningkatkan penjualan kemungkinan besar akan berdampak positif pada keuntungan.
Model regresi menunjukkan bahwa setiap tambahan $1 penjualan menghasilkan sekitar $0,47 keuntungan tambahan.
Produk Coffee memberi profit tertinggi dibanding kategori lain, sehingga bisa menjadi fokus strategi penjualan jika perusahaan ingin memaksimalkan keuntungan.
Masih terdapat faktor lain di luar sales yang mempengaruhi profit, sehingga model dapat dikembangkan lebih lanjut.