Dalam era bisnis yang semakin kompetitif, khususnya pada industri makanan dan minuman seperti kedai kopi, pemanfaatan data menjadi komponen penting dalam mendukung pengambilan keputusan yang efektif. Melalui analisis data, perusahaan dapat memahami perilaku konsumen, mengevaluasi efisiensi operasional, serta mengidentifikasi strategi yang berdampak langsung pada peningkatan pendapatan. Salah satu pendekatan yang umum digunakan adalah analisis hubungan antara variabel penentu operasional dengan tingkat penjualan yang mencerminkan kinerja keuangan utama suatu usaha.
Pada artikel ini digunakan dataset Coffee Chain untuk menganalisis pengaruh tiga variabel independen, yaitu biaya pokok penjualan (Cost of Goods Sold/COGS), belanja pemasaran (Marketing), dan nilai persediaan (Inventory) terhadap variabel dependen yaitu penjualan (Sales). Metode yang digunakan adalah regresi robust, yang dipilih karena mampu memberikan hasil estimasi yang stabil meskipun terdapat pencilan atau pelanggaran terhadap asumsi klasik regresi linier. Tujuan dari analisis ini adalah untuk mengetahui sejauh mana variabel-variabel tersebut memengaruhi tingkat penjualan, serta memberikan dasar yang kuat bagi manajemen dalam merumuskan strategi bisnis berbasis data.
Data yang digunakan yaitu Coffee Chain Datasets
Data <- read_excel("C:/Users/ASUS/Downloads/Dataset CM SIM.xlsx")
Dataset <- datatable(
Data,
caption = "Datasets Coffee Chain",
options = list(
scrollX = TRUE,
pageLength = 10,
lengthMenu = c(5, 10, 15, 20)
)
)
Dataset
Analyze <- Data[, c("Sales", "Inventory", "COGS", "Marketing")]
summary(Analyze)
## Sales Inventory COGS Marketing
## Min. : 17.0 Min. :-3534.0 Min. : 10.00 Min. : 3.00
## 1st Qu.:103.0 1st Qu.: 432.0 1st Qu.: 43.00 1st Qu.: 14.00
## Median :140.0 Median : 622.0 Median : 61.00 Median : 22.00
## Mean :195.3 Mean : 752.4 Mean : 85.77 Mean : 31.68
## 3rd Qu.:232.0 3rd Qu.: 923.0 3rd Qu.:100.00 3rd Qu.: 40.00
## Max. :912.0 Max. : 8252.0 Max. :364.00 Max. :156.00
Interpretasi:
Keempat variabel menunjukkan
sebaran nilai yang luas, dengan indikasi adanya outlier khususnya pada
variabel Inventory dan Sales. Perbedaan signifikan antara nilai
rata-rata dan median pada sebagian variabel juga menunjukkan adanya
distribusi yang tidak simetris. Oleh karena itu, pendekatan regresi
robust dipilih untuk mengatasi kemungkinan bias akibat pencilan dan
untuk menghasilkan model yang lebih stabil dalam mengukur pengaruh
Inventory, COGS, dan Marketing terhadap Sales.
model <- lm(Sales ~ Inventory + COGS + Marketing, data = Data)
summary(model)
##
## Call:
## lm(formula = Sales ~ Inventory + COGS + Marketing, data = Data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -520.99 -16.74 0.27 23.97 383.33
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 43.746114 1.435587 30.473 < 2e-16 ***
## Inventory -0.084858 0.001627 -52.148 < 2e-16 ***
## COGS 2.626135 0.024159 108.702 < 2e-16 ***
## Marketing -0.309143 0.054091 -5.715 1.17e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 54.72 on 4178 degrees of freedom
## Multiple R-squared: 0.869, Adjusted R-squared: 0.8689
## F-statistic: 9239 on 3 and 4178 DF, p-value: < 2.2e-16
Hipotesis
\(H_0\) : Data berdistribusi normal
\(H_1\) : Data tidak berdistribusi
normal
Taraf Signifikansi
\(\alpha = 5\% \ (0.05)\) K
Daerah Kritis
Tolak \(H_0\) jika:
\(P\text{-Value} < \alpha\) atau \(P\text{-Value} < 0.05\)
Statistik Uji
ks.test(model$residuals, "pnorm")
## Warning in ks.test.default(model$residuals, "pnorm"): ties should not be
## present for the Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: model$residuals
## D = 0.4687, p-value < 2.2e-16
## alternative hypothesis: two-sided
Hipotesis
\(H_0\) :
Tidak ada autokorelasi antarresidu
\(H_1\) : Terdapat autokorelasi
antarresidu
Taraf Signifikansi
\(\alpha = 5\% \ (0.05)\)
Daerah Kritis
Tolak \(H_0\) jika:
\(P\text{-Value} < \alpha\) atau \(P\text{-Value} < 0.05\)
Statistik Uji
dwtest(model)
##
## Durbin-Watson test
##
## data: model
## DW = 2.0845, p-value = 0.9968
## alternative hypothesis: true autocorrelation is greater than 0
Hipotesis
\(H_0\) :
Tidak terjadi multikolinearitas
\(H_1\) : Terjadi multikolinearitas
Taraf Signifikansi
\(\alpha = 5\% \ (0.05)\)
Daerah Kritis
Tolak \(H_0\) jika: nilai VIF > 10
Statistik Uji
vif(model)
## Inventory COGS Marketing
## 1.637707 3.650301 2.966356
bptest(model)
##
## studentized Breusch-Pagan test
##
## data: model
## BP = 357.47, df = 3, p-value < 2.2e-16
Estimasi M adalah metode dalam regresi robust yang digunakan untuk
memperkirakan parameter model ketika data mengandung pencilan (outlier)
atau tidak memenuhi asumsi klasik regresi linier. Berbeda dari metode
kuadrat terkecil (OLS) yang meminimalkan jumlah kuadrat dari residual,
estimasi M meminimalkan fungsi kerugian tertentu yang lebih fleksibel
dan kurang sensitif terhadap nilai-nilai ekstrem.
Maka dari itu, estimasi M menjadi pilihan yang tepat dibandingkan regresi OLS karena mampu mengurangi pengaruh data ekstrem dan menghasilkan estimasi parameter yang lebih stabil dan akurat
Pemberian Nilai Awal
Hitung residual awal
dari model OLS: \[r_i = y_i -
X_i\beta_{OLS}\]
Pembobotan Huber
Berikan bobot untuk tiap
observasi: \[
w_i =
\begin{cases}
1 & \text{untuk } |r_i| \leq k \\
k/|r_i| & \text{untuk } |r_i| > k
\end{cases}
\] dengan default \(k =
1.345\)
Iterasi Reweighted Least Squares
Update
koefisien hingga konvergen: \[\beta_{new} =
(X^TWX)^{-1}X^TWy \] dimana \(W\) adalah matriks diagonal berisi \(w_i\)
model_rlm <- rlm(Sales ~ Inventory + COGS + Marketing, data = Data,
psi = psi.huber,
k = 1.5,
maxit = 15)
## Warning in rlm.default(x, y, weights, method = method, wt.method = wt.method, :
## 'rlm' failed to converge in 15 steps
final_coef_rlm <- coef(model_rlm)
names(final_coef_rlm) <- names(coef(model_rlm))
summary(model_rlm)
##
## Call: rlm(formula = Sales ~ Inventory + COGS + Marketing, data = Data,
## psi = psi.huber, k = 1.5, maxit = 15)
## Residuals:
## Min 1Q Median 3Q Max
## -542.2499 -9.6476 0.3977 9.4672 480.9652
##
## Coefficients:
## Value Std. Error t value
## (Intercept) 19.4738 0.4293 45.3665
## Inventory -0.0279 0.0005 -57.2876
## COGS 2.3625 0.0072 327.0498
## Marketing 0.0055 0.0162 0.3381
##
## Residual standard error: 14.15 on 4178 degrees of freedom
Interpretasi:# Hitung efisiensi marketing (Sales per Produk)
Data$Eff_Marketing <- Data$Sales / Data$Marketing
# Ambil 10 produk secara acak untuk visualisasi
sample_Data <- Data[sample(nrow(Data), 10), ]
barplot(sample_Data$Eff_Marketing, names.arg = sample_Data$Product,
las = 2, col = "#E8C999",
main = "Jumlah Penjualan Per Produk",
ylab = "Penjualan")
Interpretasi :
Berdasarkan grafik Jumlah Penjualan
Per Produk yang ditampilkan, terlihat bahwa produk dengan penjualan
tertinggi adalah salah satu varian Earl Grey, diikuti oleh Colombian dan
beberapa produk lainnya dengan jumlah penjualan yang relatif stabil di
kisaran 7–8 unit. Sementara itu, produk dengan penjualan paling rendah
adalah Irish Cream, yang secara signifikan memiliki jumlah penjualan
jauh di bawah produk lainnya, hanya sekitar 2 unit. Hal ini menunjukkan
adanya perbedaan preferensi konsumen yang cukup jelas terhadap jenis
produk, sehingga strategi pemasaran dapat difokuskan pada peningkatan
daya tarik produk dengan penjualan rendah atau penguatan stok dan
promosi pada produk-produk unggulan.
# Agregasi bulanan
monthly_data <- Data %>%
mutate(Month = floor_date(Date, "month")) %>%
group_by(Month) %>%
summarise(Sales = sum(Sales, na.rm = TRUE),
COGS = sum(COGS, na.rm = TRUE),
Marketing = sum(Marketing, na.rm = TRUE),
Inventory = sum(Inventory, na.rm = TRUE))
# Buat plot ggplot
p <- ggplot(monthly_data, aes(x = Month)) +
geom_line(aes(y = Sales, color = "Sales"), size = 1.2) +
geom_line(aes(y = COGS, color = "COGS"), size = 1.2) +
geom_line(aes(y = Marketing, color = "Marketing"), size = 1.2) +
geom_line(aes(y = Inventory, color = "Inventory"), size = 1.2) +
labs(title = "Tren Bulanan: Sales, COGS, Marketing, dan Inventory",
x = "Bulan", y = "Jumlah (Rp)", color = "Kategori", xanchor = 'center', font = list(size = 16), x = 0.5) +
scale_color_manual(values = c("Sales" = "#706233",
"COGS" = "#B0926A",
"Marketing" = "#E1C78F",
"Inventory" = "#FAE7C9")) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
axis.title.x = element_text(face = "bold"),
axis.title.y = element_text(face = "bold"),
plot.margin = margin(t = 10, r = 8, b = 10, l = 8),
legend.title = element_blank()
)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
fig <- ggplotly(p) %>% config(displayModeBar = FALSE)
fig
Interpretasi :
Grafik Tren Bulanan: Sales, COGS,
Marketing, dan Inventory menunjukkan bahwa kategori Inventory memiliki
nilai yang paling tinggi dibandingkan kategori lainnya, dengan tren yang
cenderung meningkat secara konsisten selama periode 2012 hingga awal
2014, meskipun sempat mengalami penurunan tajam pada awal tahun 2013.
Sales juga menunjukkan pertumbuhan stabil dari waktu ke waktu, sementara
COGS dan Marketing berada pada level yang lebih rendah dan relatif
stabil. Pola ini mencerminkan bahwa pengeluaran untuk inventaris menjadi
komponen utama dalam operasional bisnis, sementara biaya pemasaran dan
biaya pokok penjualan dijaga dalam batas yang terkendali. Ini dapat
menjadi indikator efisiensi operasional dan strategi pengelolaan sumber
daya yang baik.
monthly_stacked <- melt(monthly_data, id.vars = "Month", measure.vars = c("COGS", "Marketing", "Sales"))
join <- ggplot(monthly_stacked, aes(x = Month, y = value, fill = variable)) +
geom_bar(stat = "identity") +
labs(title = "Pengaruh Biaya terhadap Sales",
x = "Bulan", y = "Jumlah (Rp)", fill = "Komponen") +
scale_fill_manual(values = c("Sales" = "#706233",
"COGS" = "#B0926A",
"Marketing" = "#E1C78F"
)) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
axis.title.x = element_text(face = "bold"),
axis.title.y = element_text(face = "bold"),
plot.margin = margin(t = 10, r = 8, b = 10, l = 8),
legend.title = element_blank()
)
fig <- ggplotly(join) %>% config(displayModeBar = FALSE)
fig
Interpretasi : Grafik Pengaruh Biaya terhadap Sales menunjukkan bahwa nilai penjualan (Sales) per bulan terdiri dari kontribusi dua komponen utama, yaitu biaya pemasaran (Marketing) dan biaya pokok penjualan (COGS). Sepanjang periode dari awal 2012 hingga awal 2014, tren penjualan mengalami peningkatan secara bertahap, dengan puncak terlihat pada pertengahan hingga akhir tahun 2012 dan pertengahan 2013. Meskipun terdapat fluktuasi kecil, komposisi biaya dalam total penjualan terlihat cukup konsisten, di mana porsi terbesar tetap berasal dari nilai penjualan bersih itu sendiri, diikuti oleh COGS dan marketing. Hal ini mencerminkan bahwa peningkatan penjualan cenderung tidak diiringi oleh lonjakan biaya yang signifikan, yang menunjukkan pengelolaan biaya yang efisien dalam mendukung pertumbuhan penjualan.
Secara keseluruhan, peningkatan nilai Sales terjadi seiring dengan pertumbuhan Inventory dan stabilnya pengeluaran untuk Marketing dan COGS, yang menunjukkan bahwa penjualan dapat ditingkatkan tanpa harus menaikkan biaya secara proporsional.