Analisis Faktor-Faktor yang Mempengaruhi Profit pada Coffee Chain Dataset

Insight

Insight yang akan diambil yaitu:

  1. Jenis produk yang menghasilkan profit tertinggi.

  2. Perbandingan performa profit antar wilayah pasar.

  3. Faktor yang secara statistik mempengaruhi profit.

Profit merupakan indikator keberhasilan bisnis yang paling mendasar. Memahami faktor-faktor yang mendorong atau menghambat profit sangat penting bagi manajemen untuk mengambil keputusan strategis mulai dari alokasi anggaran pemasaran, pemilihan produk, hingga ekspansi ke wilayah tertentu.

Import library

library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.4.3
## Warning: package 'ggplot2' was built under R version 4.4.3
## Warning: package 'tibble' was built under R version 4.4.2
## Warning: package 'tidyr' was built under R version 4.4.3
## Warning: package 'readr' was built under R version 4.4.3
## Warning: package 'purrr' was built under R version 4.4.3
## Warning: package 'dplyr' was built under R version 4.4.3
## Warning: package 'stringr' was built under R version 4.4.2
## Warning: package 'forcats' was built under R version 4.4.3
## Warning: package 'lubridate' was built under R version 4.4.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   4.0.0     ✔ tibble    3.2.1
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.0.4     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(readxl)
## Warning: package 'readxl' was built under R version 4.4.3
library(ggplot2)
library(scales)
## Warning: package 'scales' was built under R version 4.4.3
## 
## Attaching package: 'scales'
## 
## The following object is masked from 'package:purrr':
## 
##     discard
## 
## The following object is masked from 'package:readr':
## 
##     col_factor
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.4.3
## corrplot 0.95 loaded
library(knitr)
## Warning: package 'knitr' was built under R version 4.4.2
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.4.3
## 
## Attaching package: 'kableExtra'
## 
## The following object is masked from 'package:dplyr':
## 
##     group_rows

Import data

df <- read_excel("C:/Users/LENOVO/OneDrive/Dokumen/WIWID/Sem 4/Sistem Informasi Manajemen/Coffee Chain Datasets.xlsx")

cat("Dimensi dataset:", nrow(df), "baris x", ncol(df), "kolom\n")
## Dimensi dataset: 4248 baris x 20 kolom
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…

Memilih Variabel yang Digunakan

df_clean <- df %>%
  select(
    Market, `Market Size`, `Product Type`, `Product Line`,
    Sales, Profit, Margin, Marketing, COGS, `Total Expenses`,
    `Budget Profit`
  ) %>%
  rename(
    market       = Market,
    market_size  = `Market Size`,
    product_type = `Product Type`,
    product_line = `Product Line`,
    sales        = Sales,
    profit       = Profit,
    margin       = Margin,
    marketing    = Marketing,
    cogs         = COGS,
    total_exp    = `Total Expenses`,
    budget_profit = `Budget Profit`
  )

# Cek missing values
cat("Jumlah nilai kosong per variabel:\n")
## Jumlah nilai kosong per variabel:
colSums(is.na(df_clean))
##        market   market_size  product_type  product_line         sales 
##             0             0             0             0             0 
##        profit        margin     marketing          cogs     total_exp 
##             0             0             0             0             0 
## budget_profit 
##             0

Distribusi Profit Berdasarkan Jenis Produk

# Hitung median per produk untuk label urutan
median_profit <- df_clean %>%
  group_by(product_type) %>%
  summarise(median_profit = median(profit)) %>%
  arrange(desc(median_profit))

df_clean$product_type <- factor(df_clean$product_type,
                                levels = median_profit$product_type)

ggplot(df_clean, aes(x = product_type, y = profit, fill = product_type)) +
  geom_boxplot(alpha = 0.7, outlier.shape = NA) +
  geom_jitter(aes(color = product_type), width = 0.2, size = 0.8, alpha = 0.3) +
  stat_summary(fun = mean, geom = "point", shape = 23,
               size = 3, fill = "white", color = "black") +
  scale_fill_brewer(palette = "Set2") +
  scale_color_brewer(palette = "Set2") +
  labs(
    title    = "Distribusi Profit Berdasarkan Jenis Produk",
    subtitle = "Titik berlian putih menunjukkan nilai rata-rata; produk diurutkan berdasarkan median profit",
    x        = "Jenis Produk",
    y        = "Profit",
    fill     = "Jenis Produk",
    color    = "Jenis Produk"
  ) +
  theme_minimal(base_size = 12) +
  theme(legend.position = "none",
        plot.title    = element_text(face = "bold"),
        plot.subtitle = element_text(color = "gray40", size = 10))

Coffee memiliki nilai median dan rata-rata profit tertinggi dibandingkan produk lainnya, meskipun penyebarannya cukup lebar yang menandakan adanya variasi profit yang tinggi. Espresso dan Herbal Tea cenderung memiliki distribusi profit yang lebih stabil dengan variasi yang tidak terlalu ekstrem. Tea memiliki beberapa nilai profit negatif yang cukup besar, sehingga dapat disimpulkan bahwa produk ini memiliki risiko kerugian yang lebih tinggi dibandingkan produk lainnya.

Perbandingan Rata-Rata Profit Antar Wilayah Pasar

df_market <- df_clean %>%
  group_by(market) %>%
  summarise(
    avg_profit    = mean(profit),
    avg_sales     = mean(sales),
    avg_marketing = mean(marketing),
    .groups       = "drop"
  ) %>%
  pivot_longer(cols = -market, names_to = "Metrik", values_to = "Nilai") %>%
  mutate(Metrik = recode(Metrik,
    avg_profit    = "Rata-rata Profit",
    avg_sales     = "Rata-rata Sales",
    avg_marketing = "Rata-rata Marketing"
  ))

ggplot(df_market, aes(x = market, y = Nilai, fill = Metrik)) +
  geom_col(position = "dodge", alpha = 0.85) +
  geom_text(aes(label = round(Nilai, 1)),
            position = position_dodge(width = 0.9),
            vjust = -0.5, size = 3.2) +
  scale_fill_brewer(palette = "Paired") +
  labs(
    title    = "Perbandingan Performa per Wilayah Pasar",
    subtitle = "Rata-rata Profit, Sales, dan Marketing per Wilayah",
    x        = "Wilayah",
    y        = "Nilai Rata-Rata",
    fill     = "Metrik"
  ) +
  theme_minimal(base_size = 12) +
  theme(plot.title    = element_text(face = "bold"),
        plot.subtitle = element_text(color = "gray40", size = 10),
        legend.position = "bottom")

Wilayah Central mencatat rata-rata profit tertinggi meskipun bukan yang memiliki rata-rata sales tertinggi. Hal ini menunjukkan efisiensi operasional yang lebih baik di wilayah tersebut. Sebaliknya, wilayah West memiliki rata-rata sales dan biaya marketing tertinggi, namun profit-nya hanya menempati urutan ketiga mengindikasikan adanya inefisiensi, dimana pengeluaran yang lebih besar belum mampu menghasilkan profit yang sebanding.

Hubungan Sales dan Profit

ggplot(df_clean, aes(x = sales, y = profit, color = product_type)) +
  geom_point(alpha = 0.4, size = 1.5) +
  geom_smooth(method = "lm", se = TRUE, linewidth = 1) +
  scale_color_brewer(palette = "Set1") +
  facet_wrap(~ product_type, ncol = 2) +
  labs(
    title    = "Hubungan Sales dan Profit per Jenis Produk",
    subtitle = "Garis regresi linier dengan interval kepercayaan 95%",
    x        = "Sales",
    y        = "Profit",
    color    = "Jenis Produk"
  ) +
  theme_minimal(base_size = 11) +
  theme(plot.title    = element_text(face = "bold"),
        plot.subtitle = element_text(color = "gray40", size = 10),
        legend.position = "none")
## `geom_smooth()` using formula = 'y ~ x'

Hubungan antara sales dan profit pada setiap jenis produk menunjukkan adanya korelasi positif yang kuat, dimana peningkatan sales cenderung diikuti oleh peningkatan profit. Coffee memiliki sebaran data yang paling luas dengan beberapa titik profit sangat tinggi, mencerminkan potensi keuntungan besar namun dengan variabilitas yang tinggi. Tea menunjukkan pola regresi yang paling konsisten dan linier, namun terdapat beberapa nilai profit negatif yang cukup ekstrem pada sales rendah. Herbal Tea memiliki pola serupa dengan Tea, tetapi dengan distribusi yang sedikit lebih tersebar dan beberapa transaksi bernilai profit tinggi pada volume sales besar. Espresso memiliki volume penjualan yang rendah dengan sebagian besar transaksi berada di kisaran sales, tetapi terdapat satu outlier dengan profit hampir 700 dan beberapa transaksi merugi hingga -400, menunjukkan bahwa produk ini memiliki risiko dan potensi keuntungan yang sama-sama ekstrem. Secara keseluruhan, Coffee dan Herbal Tea tampak menjadi produk dengan potensi pertumbuhan profit paling menjanjikan seiring meningkatnya volume penjualan.

Matriks Korelasi Variabel Numerik

cor_matrix <- df_clean %>%
  select(sales, profit, margin, marketing, cogs, total_exp) %>%
  cor()

corrplot(cor_matrix,
         method  = "color",
         type    = "upper",
         addCoef.col = "black",
         tl.col  = "black",
         tl.srt  = 45,
         number.cex = 0.8,
         col     = colorRampPalette(c("#d73027", "white", "#1a9850"))(200),
         title   = "Matriks Korelasi Variabel Numerik",
         mar     = c(0, 0, 2, 0))

Analisis Korelasi

Sebelum membangun model regresi, dilakukan analisis korelasi Pearson untuk mengidentifikasi hubungan linear antara variabel numerik dengan profit.

cor_profit <- df_clean %>%
  select(sales, profit, margin, marketing, cogs, total_exp) %>%
  cor() %>%
  as.data.frame() %>%
  select(profit) %>%
  rownames_to_column("Variabel") %>%
  filter(Variabel != "profit") %>%
  arrange(desc(abs(profit))) %>%
  rename(`Korelasi dengan Profit` = profit)

kable(cor_profit, digits = 4,
      caption = "Tabel 1. Korelasi Variabel Numerik terhadap Profit") %>%
  kable_styling(bootstrap_options = c("striped", "hover"),
                full_width = FALSE) %>%
  column_spec(2, bold = TRUE,
              color = ifelse(cor_profit$`Korelasi dengan Profit` > 0,
                             "#1a9850", "#d73027"))
Tabel 1. Korelasi Variabel Numerik terhadap Profit
Variabel Korelasi dengan Profit
margin 0.9206
sales 0.7973
cogs 0.4648
marketing 0.2255
total_exp 0.2000

Seluruh variabel menunjukkan korelasi positif satu sama lain. Variabel yang paling kuat mempengaruhi profit adalah margin (r=0,9206) dan sales (r=0,7973), artinya peningkatan efisiensi margin dan volume penjualan adalah kunci utama profitabilitas. Sebaliknya, marketing (r=0,2255) dan total_exp (r=0,2000) memiliki korelasi sangat rendah terhadap profit menunjukkan bahwa besarnya pengeluaran operasional tidak menjamin peningkatan keuntungan secara proporsional. Perlu diwaspadai korelasi sangat tinggi antara marketing dan total_exp (r=0,97) yang mengindikasikan potensi multikolinearitas dalam model regresi. Untuk meningkatkan profit, manajemen sebaiknya berfokus pada peningkatan margin dan volume penjualan daripada menambah anggaran pemasaran karena keduanya terbukti memiliki hubungan yang jauh lebih kuat terhadap profitabilitas bisnis.

Profit per Produk

tabel_produk <- df_clean %>%
  group_by(product_type) %>%
  summarise(
    N           = n(),
    `Mean Profit` = round(mean(profit), 2),
    `Median Profit` = round(median(profit), 2),
    `SD Profit`  = round(sd(profit), 2),
    `Mean Sales` = round(mean(sales), 2),
    `Mean Margin` = round(mean(margin), 2),
    .groups = "drop"
  ) %>%
  arrange(desc(`Mean Profit`))

kable(tabel_produk,
      caption = "Tabel 2. Statistik Deskriptif Profit per Jenis Produk") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE)
Tabel 2. Statistik Deskriptif Profit per Jenis Produk
product_type N Mean Profit Median Profit SD Profit Mean Sales Mean Margin
Coffee 1056 70.72 39 118.84 205.33 115.12
Herbal Tea 1056 59.90 40 85.36 196.23 104.17
Espresso 1176 58.35 40 91.23 189.62 103.04
Tea 960 55.19 44 109.16 179.97 94.06

Profit per Wilayah

tabel_wilayah <- df_clean %>%
  group_by(market) %>%
  summarise(
    N              = n(),
    `Mean Profit`  = round(mean(profit), 2),
    `Mean Sales`   = round(mean(sales), 2),
    `Mean Marketing` = round(mean(marketing), 2),
    `Profit Margin (%)` = round(mean(profit / sales * 100), 2),
    .groups = "drop"
  ) %>%
  arrange(desc(`Mean Profit`))

kable(tabel_wilayah,
      caption = "Tabel 3. Statistik Deskriptif Profit per Wilayah Pasar") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE)
Tabel 3. Statistik Deskriptif Profit per Wilayah Pasar
market N Mean Profit Mean Sales Mean Marketing Profit Margin (%)
Central 1344 69.83 197.21 29.32 30.43
East 888 66.69 201.10 33.16 17.19
West 1344 55.06 202.58 35.01 -8.87
South 672 48.33 154.65 24.65 27.19

Regresi Linier Berganda

Metode regresi linier berganda digunakan Untuk mengidentifikasi faktor-faktor yang secara signifikan mempengaruhi profit dengan variabel dependen profit, sedangkan variabel independennya yaitu sales, marketing, cogs, total_exp, serta variabel kategorikal market dan product_type.

model <- lm(profit ~ sales + marketing + cogs + total_exp +
              market + product_type,
            data = df_clean)
summary(model)
## 
## Call:
## lm(formula = profit ~ sales + marketing + cogs + total_exp + 
##     market + product_type, data = df_clean)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -112.292   -5.701    0.529    5.516  104.950 
## 
## Coefficients:
##                         Estimate Std. Error  t value Pr(>|t|)    
## (Intercept)             2.219590   0.898572    2.470   0.0135 *  
## sales                   1.208294   0.003751  322.116  < 2e-16 ***
## marketing               0.201018   0.040963    4.907 9.58e-07 ***
## cogs                   -1.241929   0.010345 -120.048  < 2e-16 ***
## total_exp              -1.405094   0.031658  -44.383  < 2e-16 ***
## marketEast              0.120218   0.735084    0.164   0.8701    
## marketSouth             0.134025   0.821005    0.163   0.8703    
## marketWest              0.314260   0.657767    0.478   0.6328    
## product_typeEspresso   -0.048777   0.760774   -0.064   0.9489    
## product_typeHerbal Tea  0.015906   0.767147    0.021   0.9835    
## product_typeCoffee      0.449482   0.778337    0.577   0.5636    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 16.87 on 4237 degrees of freedom
## Multiple R-squared:  0.9726, Adjusted R-squared:  0.9725 
## F-statistic: 1.502e+04 on 10 and 4237 DF,  p-value: < 2.2e-16

Model regresi menghasilkan Adjusted R² sebesar 0,9725, artinya 97,25% variasi profit dapat dijelaskan oleh variabel dalam model. Variabel yang berpengaruh signifikan terhadap profit adalah sales (1,21), marketing (0,20), cogs (-1,24), dan total_exp (-1,41). Sales dan marketing berpengaruh positif, yaitu semakin tinggi penjualan dan pemasaran, semakin besar profit. Sebaliknya, cogs dan total_exp berpengaruh negatif, semakin tinggi biaya produksi dan pengeluaran, semakin kecil profit. Sementara itu, variabel wilayah dan jenis produk tidak menunjukkan pengaruh yang signifikan.

Uji ANOVA

ANOVA Satu Aarah digunakan untuk menguji apakah terdapat perbedaan profit yang signifikan secara statistik antar wilayah.

anova_model <- aov(profit ~ market, data = df_clean)
summary(anova_model)
##               Df   Sum Sq Mean Sq F value   Pr(>F)    
## market         3   288811   96270   9.361 3.64e-06 ***
## Residuals   4244 43644825   10284                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Hasil uji ANOVA menunjukkan F-value sebesar 9,361 dengan p-value 3,64e-06 < 0,05, yang berarti terdapat perbedaan profit yang signifikan antar wilayah. Wilayah tempat penjualan berlangsung terbukti mempengaruhi besarnya profit yang dihasilkan.

# Uji Post-hoc Tukey untuk melihat pasangan wilayah yang berbeda signifikan
tukey <- TukeyHSD(anova_model)
as.data.frame(tukey$market) %>%
  rownames_to_column("Perbandingan Wilayah") %>%
  rename(
    `Selisih Rata-rata` = diff,
    `Batas Bawah (95%)` = lwr,
    `Batas Atas (95%)`  = upr,
    `p-value (adj.)`    = `p adj`
  ) %>%
  mutate(Signifikan = ifelse(`p-value (adj.)` < 0.05, "Ya ✓", "Tidak")) %>%
  kable(digits = 4,
        caption = "Tabel 5. Uji Post-hoc Tukey — Perbedaan Profit Antar Wilayah") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE)
Tabel 5. Uji Post-hoc Tukey — Perbedaan Profit Antar Wilayah
Perbandingan Wilayah Selisih Rata-rata Batas Bawah (95%) Batas Atas (95%) p-value (adj.) Signifikan
East-Central -3.1445 -14.4155 8.1264 0.8904 Tidak
South-Central -21.5000 -33.8135 -9.1865 0.0000 Ya ✓
West-Central -14.7738 -24.8277 -4.7199 0.0009 Ya ✓
South-East -18.3555 -31.6812 -5.0297 0.0023 Ya ✓
West-East -11.6293 -22.9002 -0.3583 0.0401 Ya ✓
West-South 6.7262 -5.5873 19.0397 0.4969 Tidak

Uji Tukey dilakukan untuk melihat wilayah mana yang berbeda secara spesifik. Hasilnya menunjukkan bahwa South dan Central memiliki perbedaan profit terbesar (selisih -21,50) dan paling signifikan (p=0,000). Wilayah South juga berbeda signifikan dengan East (p=0,002) dan West dengan East (p=0,040). Sementara perbandingan East-Central dan West-South tidak menunjukkan perbedaan yang signifikan. Secara keseluruhan, wilayah South secara konsisten memiliki profit lebih rendah dibandingkan wilayah lainnya.

Kesimpulan

Berdasarkan analisis yang telah dilakukan terhadap Coffee Chain Dataset diperoleh:

  1. Sales dan Margin adalah prediktor profit terkuat. Korelasi keduanya terhadap profit masing-masing sebesar 0,7973 dan 0,9206. Upaya meningkatkan volume penjualan dan menjaga efisiensi margin akan berdampak langsung pada profitabilitas bisnis.

  2. Coffee adalah produk dengan performa profit tertinggi, baik dari sisi rata-rata maupun potensi nilai transaksi tinggi. Meskipun demikian, perbedaan antar produk tidak signifikan secara statistik setelah mengontrol faktor lain, artinya strategi peningkatan sales pada semua kategori produk sama pentingnya.

  3. Wilayah Central memimpin dalam efisiensi profit. Meskipun bukan wilayah dengan sales atau marketing tertinggi, Central menghasilkan profit rata-rata tertinggi. Sebaliknya, wilayah South secara konsisten memiliki performa profit terendah dan berbeda signifikan dari ketiga wilayah lainnya, ini menjadi sinyal bahwa dibutuhkan evaluasi strategi operasional di wilayah tersebut.

  4. Model regresi linier berganda mampu menjelaskan ±97% variasi profit, dengan Sales dan COGS sebagai prediktor paling berpengaruh. Biaya pemasaran yang tinggi tidak selalu berbanding lurus dengan peningkatan profit, efisiensi pengeluaran perlu menjadi perhatian, khususnya di wilayah West.

  5. Rekomendasi manajerial: Fokus pada sumber daya pada peningkatan volume penjualan produk Coffee dan Herbal Tea di wilayah Central dan East, sembari melakukan evaluasi efisiensi biaya di wilayah South dan West untuk mendongkrak profitabilitas secara keseluruhan.