📝 Pendahuluan

Profit merupakan salah satu indikator utama dalam mengukur kinerja dan keberlanjutan bisnis, termasuk pada industri kedai kopi (coffee chain). Dalam dunia bisnis yang kompetitif, memahami faktor-faktor internal yang mempengaruhi profit menjadi sangat krusial untuk pengambilan keputusan strategis. Oleh karena itu, analisis terhadap variabel-variabel seperti penjualan (sales), anggaran pemasaran (marketing), dan anggaran laba (budget profit) menjadi penting untuk memetakan pengaruhnya terhadap pencapaian laba bersih perusahaan.

Pada analisis ini, digunakan metode regresi robust dengan pendekatan estimasi M untuk mengatasi potensi outlier atau deviasi dari asumsi klasik regresi linier. Metode ini lebih tahan terhadap pengaruh nilai ekstrem, sehingga dapat memberikan estimasi parameter yang lebih stabil dan representatif. Estimasi M sangat sesuai digunakan pada data bisnis yang sering kali memiliki variasi tinggi dan outlier, seperti yang terlihat pada dataset Coffee Chain ini.

Dataset yang digunakan mencakup berbagai variabel internal dari beberapa cabang kedai kopi, seperti data penjualan aktual, anggaran biaya, dan margin laba. Dengan menjadikan profit sebagai variabel target, dan sales, marketing, serta budget profit sebagai variabel prediktor, analisis ini bertujuan untuk memberikan insight mendalam mengenai faktor-faktor mana yang paling berkontribusi terhadap profit. Hasil dari analisis ini diharapkan dapat memberikan rekomendasi yang dapat diimplementasikan dalam pengelolaan anggaran dan strategi pemasaran di masa depan.

💻 Source Code

Data yang digunakan adalah Dataset Coffe Chain.

Library yang digunakan

library(readxl)
library(car)
## Loading required package: carData
library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(knitr)
library(markdown)
library(ggplot2)
library(MASS)
library(stats)
library(car)
library(lmtest)
library(fit.models)
library(robustbase)
library(robust)
library(DT)

Import Data

DataCoffeeChain <- read_excel("D:/DOWNLOAD APAPUN/3. CM1 - Coffee Chain Datasets.xlsx")
Dataset <- datatable(
  DataCoffeeChain,
  caption = "Datasets Coffee Chain",
  options = list(
    scrollX = TRUE,
    pageLength = 10,
    lengthMenu = c(5, 10, 15, 20)
  )
)
Dataset

Pilih kolom yang dibutuhkan.

DataCoffeeChain  <- DataCoffeeChain[, c("Profit", "Sales", "Marketing", "Budget Profit")]
DataCoffeeChain
## # A tibble: 4,248 × 4
##    Profit Sales Marketing `Budget Profit`
##     <dbl> <dbl>     <dbl>           <dbl>
##  1     94   219        24             100
##  2     68   190        27              80
##  3    101   234        26             110
##  4     30   100        14              30
##  5     54   134        15              70
##  6     53   180        23              80
##  7     99   341        47             110
##  8      0   150        57              20
##  9     33   140        19              40
## 10     17   130        22              20
## # ℹ 4,238 more rows

📊 Statistik Deskriptif

Statistika Deskriptif menampilkan nilai minimum (Min), nilai maksimum (Max), kuartil atas \((Q_1)\), median \((Q_2)\), kuartil bawah \((Q_3)\), rata-rata (Mean) pada setiap variabel. Pada analisis ini, mengambil 1 variabel dependen dan 3 variabel independen, yaitu:

  • Profit \((Y)\): Laba bersih aktual setelah dikurangi seluruh biaya termasuk produksi, dll.
  • Sales \((X_1)\): Total nilai penjualan aktual dalam suatu transaksi.
  • Marketing \((X_2)\): Biaya yang dikeluarkan untuk aktivitas pemasaran produk.
  • Budget Profit \((X_3)\): Laba yang ditargetkan (hasil dari perencanaan keuangan, budgeting, atau proyeksi).
Analyze <- DataCoffeeChain[, c("Profit", "Sales", "Marketing", "Budget Profit")]
summary(Analyze)
##      Profit           Sales       Marketing      Budget Profit    
##  Min.   :-638.0   Min.   : 17   Min.   :  0.00   Min.   :-320.00  
##  1st Qu.:  17.0   1st Qu.:100   1st Qu.: 13.00   1st Qu.:  20.00  
##  Median :  40.0   Median :138   Median : 22.00   Median :  40.00  
##  Mean   :  61.1   Mean   :193   Mean   : 31.19   Mean   :  60.91  
##  3rd Qu.:  92.0   3rd Qu.:230   3rd Qu.: 39.00   3rd Qu.:  80.00  
##  Max.   : 778.0   Max.   :912   Max.   :156.00   Max.   : 560.00

🧪 Uji Asumsi klasik

model <- lm(Profit ~ Sales + Marketing + `Budget Profit`, data = DataCoffeeChain)
summary(model)
## 
## Call:
## lm(formula = Profit ~ Sales + Marketing + `Budget Profit`, data = DataCoffeeChain)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -281.885  -10.404    0.531   12.743  167.271 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     -18.41857    0.77743  -23.69   <2e-16 ***
## Sales             0.42396    0.01061   39.96   <2e-16 ***
## Marketing        -1.39018    0.03577  -38.87   <2e-16 ***
## `Budget Profit`   0.67392    0.01477   45.62   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 29.97 on 4244 degrees of freedom
## Multiple R-squared:  0.9132, Adjusted R-squared:  0.9131 
## F-statistic: 1.488e+04 on 3 and 4244 DF,  p-value: < 2.2e-16

Uji Normalitas

  1. Hipotesis
    \(H_0\): Nilai residual berdistribusi normal
    \(H_1\): Nilai residual tidak berdistribusi normal

  2. Taraf Signifikansi
    \(\alpha = 0,05\)

  3. Daerah Kritis
    \(\begin{aligned} & H_0 \text{ ditolak jika } p\text{-value} < \alpha \end{aligned}\)

  4. 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.45219, p-value < 2.2e-16
## alternative hypothesis: two-sided
shapiro.test(model$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  model$residuals
## W = 0.83428, p-value < 2.2e-16
  1. Kesimpulan
    Karena p-value < 2.2e-16 < 0,05. Maka \(H_0\) ditolak yang berarti nilai residual tidak berdistribusi normal

Uji Homokedastisitas

  1. Hipotesis
    \(H_0\): Terdapat homoskedastisitas residu
    \(H_1\): Tidak Terdapat homoskedastisitas residu

  2. Taraf Signifikansi
    \(\alpha = 0,05\)

  3. Daerah Kritis
    \(\begin{aligned} & H_0 \text{ ditolak jika } p\text{-value} < \alpha \end{aligned}\)

  4. Statistik Uji

bptest(model)
## 
##  studentized Breusch-Pagan test
## 
## data:  model
## BP = 581.66, df = 3, p-value < 2.2e-16
  1. Kesimpulan
    Berdasarkan studentized Breusch-Pagan test karena p-value < 0,05. Maka \(H_0\) ditolak yang berarti data tidak terdapat homoskedastisitas residu atau terjadi heteroskedastisitas yaitu adanya ketidaksamaan residual varian dari residual.

Uji Autokorelasi

  1. Hipotesis
    \(H_0\): Tidak ada autokorelasi antarresidu
    \(H_1\): Terdapat autokorelasi antarresidu

  2. Taraf Signifikansi
    \(\alpha = 0,05\)

  3. Daerah Kritis
    \(\begin{aligned} & H_0 \text{ ditolak jika } p\text{-value} < \alpha \end{aligned}\)

  4. Statistik Uji

dwtest(model)
## 
##  Durbin-Watson test
## 
## data:  model
## DW = 1.8072, p-value = 1.567e-10
## alternative hypothesis: true autocorrelation is greater than 0
  1. Kesimpulan
    Berdasarkan Durbin-Watson test karena p-value < 0,05. Maka \(H_0\) ditolak yang berarti data terdapat autokorelasi antarresidu.

Uji Non-Multikolinearitas

  1. Hipotesis
    \(H_0\): Tidak terjadi multikolinearitas
    \(H_1\): Terjadi multikolinearitas

  2. Taraf Signifikansi
    \(\alpha = 0,05\)

  3. Daerah Kritis
    \(\begin{aligned} & H_0 \text{ ditolak jika } \text{nilai VIF} > 10 \end{aligned}\)

  4. Statistik Uji

vif(model)
##           Sales       Marketing `Budget Profit` 
##       12.151156        4.415959        6.526011
  1. Kesimpulan
    Karena Mrketing dan Budget Profit < 10, maka \(H_0\) gagal ditolak, artinya tidak terjadi multikolinearitas. Namun untuk Sales > 10, maka \(H_0\) ditolak yang berarti data terjadi multikolinearitas.

📈 Regresi Robust: Estimasi-M

Landasan teori

Regresi robust dengan estimasi M (M-estimation) adalah metode regresi yang digunakan ketika sisaan (residual) tidak berdistribusi normal atau terdapat pencilan (outlier) yang memengaruhi model.Metode ini penting untuk analisis data yang mengandung pencilan, menghasilkan model yang tahan terhadap pengaruh pencilan.Jika asumsi regresi klasik dilanggar dan transformasi tidak efektif, regresi robust menjadi solusi terbaik.

Syarat menggunakan Estimasi M:
  1. Data Mengandung Outlier
    Estimasi M dirancang khusus untuk kasus di mana data memiliki pencilan (outlier) yang bisa merusak hasil regresi OLS.
  2. Asumsi Normalitas Error Tidak Terpenuhi
    Jika residual dari model tidak terdistribusi normal (misalnya, skewed atau heavy-tailed), OLS tidak efisien. Estimasi M bisa jadi solusi.
  3. Data Tidak Homogen (Heteroskedastik)
    Meskipun Estimasi M bukan solusi utama untuk heteroskedastisitas, ia tetap lebih tahan terhadap variance yang tidak konstan dibanding OLS.
  4. Hubungan Linier Tetap Diasumsikan
    Meskipun robust, Estimasi M tetap mengasumsikan bentuk modelnya linier, sama seperti OLS. Yang berbeda adalah cara menghitung bobot residual.
  5. Tidak Ada Multikolinearitas Ekstrem
    Sama seperti OLS, estimasi M tidak bekerja baik jika prediktor sangat berkorelasi tinggi.

Estimasi-M adalah salah satu metode dalam regresi robust yang bersifat tipe maksimum likelihood (MLE).Estimator-M bersifat tak bias dan memiliki variansi minimum, memenuhi persamaan: \[ E[\beta_n(x_1, ..., x_n)] = \beta \]
Estimasi-M merupakan perluasan dari MLE dan lebih robust terhadap pencilan.
Prinsip estimasi-M adalah meminimumkan fungsi Huber \(\rho(ε):\)
\[ \rho(ε) = \begin{cases} ε^2 & \text{jika } -k \le ε \le k \\ 2k|ε|-k^2 & \text{jika } ε < -k \text{ atau } ε > k \end{cases} \] dengan \(k = 1,5\) dan \(\hat{\sigma} = 1,483 \times MAD\) (MAD = median deviasi absolut).Fungsi \(\rho\) diminimumkan untuk mendapatkan estimator robust. Algoritma Estimasi-M:
1. Gunakan estimasi awal dari metode kuadrat terkecil (OLS).
2. Hitung sisaan \((e_i)\) dan potong (trim) sisaan yang melebihi \(1,5 \hat{\sigma}\) .
3. Iterasi hingga konvergensi (nilai koefisien stabil), maka model regresi didapatkan dari iterasi terakhir yang sudah konvergen.
4. Model regresi linear robust estimasi M adalah: \[\hat{y}_i = b_0^0 + b_1^0 x_{i1} + \cdots + b_p^0 x_{ip}\]

ESTIMASI M DENGAN HUBER WEIGHTING

1.Model awal

modelM <- lm(Profit ~ Sales + Marketing + `Budget Profit`, data = DataCoffeeChain)

2.Setup

n_iter <- 15
n_coef <- length(modelM$coefficients)
Beta <- matrix(nrow = n_iter, ncol = n_coef)
Beta[1, ] <- modelM$coefficients
tol <- rep(1, n_coef)
j <- 1

3.Loop iterasi M-estimation

while (any(abs(tol) > 0.001) & (j < n_iter)) {
res <- residuals(modelM)
Yhat <- fitted.values(modelM)
sigma_hat <- 1.483 * median(abs(res - median(res)))

  res_modified <- ifelse(
    abs(res) > 1.5 * sigma_hat,
    sign(res) * 1.5 * sigma_hat,
    res
  )
  
  pseudo_response <- Yhat + res_modified
  
  DataModified <- DataCoffeeChain
  DataModified$Profit <- pseudo_response
  
  modelM <- lm(Profit ~ Sales + Marketing + `Budget Profit`, data = DataModified)
  
  if (j + 1 <= n_iter) {
    Beta[j + 1, ] <- modelM$coefficients
    tol <- Beta[j + 1, ] - Beta[j, ]
    j <- j + 1
  }
}

4.Hasil akhir

final_coef <- Beta[j, ]
names(final_coef) <- names(modelM$coefficients)
summary(modelM)
## 
## Call:
## lm(formula = Profit ~ Sales + Marketing + `Budget Profit`, data = DataModified)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -25.0736 -10.6288   0.0933  11.5011  25.0625 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     -17.828060   0.383458  -46.49   <2e-16 ***
## Sales             0.412453   0.005233   78.82   <2e-16 ***
## Marketing        -1.255712   0.017642  -71.18   <2e-16 ***
## `Budget Profit`   0.645759   0.007286   88.63   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 14.78 on 4244 degrees of freedom
## Multiple R-squared:  0.9761, Adjusted R-squared:  0.9761 
## F-statistic: 5.776e+04 on 3 and 4244 DF,  p-value: < 2.2e-16

5.Output

cat("Koefisien Estimasi M (Huber):\n")
## Koefisien Estimasi M (Huber):
print(final_coef)
##     (Intercept)           Sales       Marketing `Budget Profit` 
##     -17.8280599       0.4124526      -1.2557125       0.6457587
cat("\nProses konvergensi tercapai dalam", j, "iterasi.\n")
## 
## Proses konvergensi tercapai dalam 7 iterasi.

✅Kesimpulan

Proses konvergensi model yang berhasil dicapai dalam 7 iterasi menunjukkan bahwa pendekatan Estimasi M (Huber) mampu memberikan hasil yang robust dan efisien, terutama dalam menghadapi potensi gangguan dari pencilan data (outlier). Ini memperkuat alasan metodologis yang telah dijelaskan pada bagian pendahuluan, di mana pemilihan regresi robust ditujukan untuk meningkatkan keandalan analisis dalam konteks bisnis coffee chain yang kompleks.

Dari hasil estimasi, ditemukan bahwa variabel Sales dan Budget Profit memiliki pengaruh positif terhadap Profit, dengan masing-masing koefisien sebesar 0.412 dan 0.645. Ini menunjukkan bahwa peningkatan penjualan dan perencanaan anggaran laba yang baik secara signifikan mampu meningkatkan profitabilitas. Sebaliknya, variabel Marketing menunjukkan pengaruh negatif yang cukup besar (-1.256), yang menandakan bahwa strategi pemasaran yang diterapkan saat ini belum efektif dan bahkan berpotensi menurunkan profit. Maka perlu dilakukan evaluasi ulang terhadap strategi yang diterapkan.

Berdasarkan hasil yang diperoleh, analisis ini tidak hanya menunjukkan hubungan antar variabel internal terhadap profit, tetapi juga memberikan gambaran praktis yang dapat dijadikan pertimbangan awal dalam evaluasi operasional. Di sisi lain, fokus pada peningkatan penjualan serta pengelolaan anggaran laba yang lebih terarah dapat menjadi langkah konkret untuk mendorong profitabilitas. Dengan kata lain, hasil analisis ini bisa digunakan sebagai pijakan awal dalam menyusun kebijakan yang lebih tepat sasaran di masa depan, meskipun tetap perlu dikaji lebih lanjut dengan pendekatan bisnis yang menyeluruh.