A. Pendahuluan

Laporan ini disusun untuk melihat bagaimana kegiatan operasional di Coffee Chain berpengaruh terhadap keuntungan yang didapat perusahaan, dilakukan dengan menganalisis hubungan antara stok barang yang tersedia (Inventory) dan seberapa banyak barang yang laku terjual (Sales) dalam menghasilkan laba (Profit). Di sini, kita ingin memastikan apakah penjualan yang terjadi benar-benar efektif memberikan keuntungan bersih bagi bisnis. Selain itu, laporan ini juga membahas bagaimana setiap jenis produk (Product Type) mampu menciptakan variasi keuntungan yang berbeda-beda atau tidak.

Rumusan Masalah:

  1. Apakah terdapat hubungan linear yang signifikan antara ketersediaan stok (Inventory) dengan efektivitas penjualan (Sales)?
  2. Apakah jenis produk (Product Type) memengaruhi rata-rata keuntungan yang dihasilkan?
  3. Bagaimana peran stok (Inventory) dan penjualan(Sales) secara bersamaan dalam menghasilkan profit, dan mana yang lebih dominan di antara keduanya?

B. Deskripsi dari Insight (Data) yang diambil

Analisis ini menggunakan data gabungan dari facttable (data transaksi) dan tabel product (atribut produk). Hal yang ingin dibahas dalam laporan ini meliputi:

Analisis ini bertujuan membantu manajemen merumuskan kebijakan inventaris yang lebih tepat sasaran. Kita ingin memastikan stok yang tersedia mampu mendukung target penjualan secara maksimal, sekaligus menghindari risiko pembengkakan biaya operasional akibat tumpukan barang yang tidak terjual.

C. Koneksi Database SQL ke R Studio

Bagian ini menampilkan seluruh library dan sintaks yang digunakan untuk memproses data dari database MySQL.

library(DBI)
library(odbc)
library(knitr)
library(ggplot2)
library(dplyr)

con <- dbConnect(odbc::odbc(), 
                 Driver   = "MySQL ODBC 8.0 ANSI Driver",
                 Server   = "127.0.0.1",
                 Database = "db", 
                 UID      = "root",
                 PWD      = "amadea07",
                 Port     = 3306)

D. Manajemen data dari hasil koneksi di R

# Pengecekan atribut tabel
dbListFields(con, "facttable")
##  [1] "Profit"         "Margin"         "Sales"          "COGS"          
##  [5] "Total Expenses" "Marketing"      "Inventory"      "Budget Profit" 
##  [9] "Budget COGS"    "Budget Margin"  "Budget Sales"   "Area Code"     
## [13] "ProductId"      "Date"
dbListFields(con, "product")
## [1] "Product Line" "Product Type" "Product"      "ProductId"    "Type"
# Menampilkan data awal
df_coffeechain <- dbGetQuery(con, "SELECT * FROM facttable, product LIMIT 100") 
kable(head(df_coffeechain, 10), caption = "Pratinjau 10 Baris Data Coffee Chain")
Pratinjau 10 Baris Data Coffee Chain
Profit Margin Sales COGS Total Expenses Marketing Inventory Budget Profit Budget COGS Budget Margin Budget Sales Area Code ProductId Date Product Line Product Type Product ProductId Type
94 130 219 89 36 24 777 100 90 130 220 719 1 2012-01-01 00:00:00 Leaves Tea Green Tea 13 Regular
94 130 219 89 36 24 777 100 90 130 220 719 1 2012-01-01 00:00:00 Leaves Tea Earl Grey 12 Regular
94 130 219 89 36 24 777 100 90 130 220 719 1 2012-01-01 00:00:00 Leaves Tea Darjeeling 11 Regular
94 130 219 89 36 24 777 100 90 130 220 719 1 2012-01-01 00:00:00 Leaves Herbal Tea Mint 10 Decaf
94 130 219 89 36 24 777 100 90 130 220 719 1 2012-01-01 00:00:00 Leaves Herbal Tea Lemon 9 Decaf
94 130 219 89 36 24 777 100 90 130 220 719 1 2012-01-01 00:00:00 Leaves Herbal Tea Chamomile 8 Decaf
94 130 219 89 36 24 777 100 90 130 220 719 1 2012-01-01 00:00:00 Beans Espresso Regular Espresso 7 Regular
94 130 219 89 36 24 777 100 90 130 220 719 1 2012-01-01 00:00:00 Beans Espresso Decaf Espresso 6 Decaf
94 130 219 89 36 24 777 100 90 130 220 719 1 2012-01-01 00:00:00 Beans Espresso Caffe Mocha 5 Regular
94 130 219 89 36 24 777 100 90 130 220 719 1 2012-01-01 00:00:00 Beans Espresso Caffe Latte 4 Regular

E. Proses Pengambilan dan Penggabungan Data

query1 <- "SELECT f.Inventory, f.Sales, f.Profit, p.`Product Type`
          FROM facttable f
          JOIN product p ON f.ProductId = p.ProductId"

data1 <- dbGetQuery(con, query1)

kable(head(data1, 10), caption = "Pratinjau 10 baris pertama data gabungan")
Pratinjau 10 baris pertama data gabungan
Inventory Sales Profit Product Type
777 219 94 Coffee
623 190 68 Coffee
821 234 101 Coffee
623 100 30 Tea
456 134 54 Espresso
558 180 53 Espresso
1091 341 99 Herbal Tea
435 150 0 Herbal Tea
336 140 33 Herbal Tea
338 130 17 Tea

F. Visualisasi Data dan Interpretasinya

1. Hubungan Inventory terhadap Sales

# Visualisasi 1: Scatter Plot
ggplot(data1, aes(x = Inventory, y = Sales)) +
  geom_jitter(alpha = 0.2, color = "steelblue") +
  geom_smooth(method = "lm", color = "red") +
  theme_minimal() +
  labs(title = "Tren Inventory vs Sales",
       x = "Stok", y = "Volume Penjualan")

Interpretasi Hasil Visualisasi 1 :

Grafik ini menunjukkan hubungan antara jumlah stok barang (Inventory) dengan volume penjualan (Sales). Garis merah yang naik ke kanan (regresi) menandakan adanya korelasi positif, yang artinya secara umum, semakin banyak stok yang tersedia, maka volume penjualan juga cenderung meningkat. Namun, jika dilihat dari persebaran titik-titiknya, data ini memiliki variasi yang sangat tinggi. Sebagian besar data menumpuk pada level stok yang rendah dengan volume penjualan yang beragam, sementara terdapat beberapa data pencilan (outliers) di mana stok sangat tinggi namun penjualannya justru rendah. Hal ini menunjukkan bahwa meskipun stok penting untuk mendukung penjualan, jumlah stok yang berlebih tidak selalu menjamin peningkatan penjualan yang sebanding, sehingga diperlukan manajemen inventaris yang lebih efisien agar tidak terjadi penumpukan barang yang sia-sia.

2. Variansi Profit antar Product Type

# Visualisasi 2: Boxplot
ggplot(data1, aes(x = `Product Type`, y = Profit, fill = `Product Type`)) +
  geom_boxplot(outlier.shape = NA) +
  coord_cartesian(ylim = c(-200, 400)) +
  theme_minimal() +
  labs(title = "Perbandingan Profit Tiap Product Type",
       x = "Jenis Produk", y = "Keuntungan")

Interpretasi Hasil Visualisasi 2 :

Grafik boxplot ini memperlihatkan perbedaan pola keuntungan dari setiap kategori produk. Menariknya, produk Coffee dan Herbal Tea menunjukkan performa yang sekilas hampir sama stabilnya. Namun, jika diperhatikan lebih detail, kategori Tea (ungu) memiliki rentang keuntungan yang paling lebar, di mana penjualannya bisa menghasilkan untung yang sangat tinggi namun juga memiliki risiko variasi yang besar.

Sementara itu, produk Coffee, Espresso, dan Herbal Tea memiliki sebaran yang lebih rapat. Ini menandakan bahwa ketiga jenis produk ini merupakan penyumbang profit yang lebih konsisten bagi perusahaan, meskipun nilai keuntungan maksimal per transaksinya tidak sebesar kategori teh.

3. Perbandingan Profit Berdasarkan Level Inventory

datavisualisasi3 <- data1 %>%
  mutate(Kategori_Stok = ifelse(Inventory > median(Inventory), "Stok Tinggi", "Stok Rendah")) %>%
  group_by(`Product Type`, Kategori_Stok) %>%
  summarise(Rata_Profit = mean(Profit, na.rm = TRUE), .groups = 'drop')

ggplot(datavisualisasi3, aes(x = `Product Type`, y = Rata_Profit, fill = Kategori_Stok)) +
  geom_bar(stat = "identity", position = "dodge") +
  theme_minimal() +
  scale_fill_manual(values = c("Stok Rendah" = "#eb4d4b", "Stok Tinggi" = "#6ab04c")) +
  labs(title = "Eksplorasi 3: Rata-rata Profit Berdasarkan Level Inventory",
       x = "Jenis Produk", y = "Rata-rata Keuntungan", fill = "Kondisi Stok")

Interpretasi Hasil Visualisasi 3 :

Diagram batang ini menunjukkan bahwa kondisi Stok Tinggi (hijau) secara konsisten menghasilkan rata-rata keuntungan yang jauh lebih besar di seluruh kategori produk dibandingkan kondisi Stok Rendah (merah). Kategori Espresso dan Coffee mencatatkan potensi keuntungan tertinggi saat stok melimpah, sementara Tea memiliki rata-rata keuntungan yang paling rendah pada kondisi stok tinggi tersebut. Di sisi lain, Espresso menjadi produk yang paling rentan terhadap penipisan barang karena rata-rata profitnya turun paling rendah dari yang lain saat stoknya menipis, berbeda dengan kategori Coffee yang tetap menunjukkan performa stabil dan mampu mempertahankan keuntungan tinggi meski dalam kondisi stok terbatas.

G. Analisis dan Interpretasinya

1. Uji Korelasi Pearson (Inventory & Sales)

hasil_korelasi <- cor.test(data1$Inventory, data1$Sales)
print(hasil_korelasi)
## 
##  Pearson's product-moment correlation
## 
## data:  data1$Inventory and data1$Sales
## t = 22.465, df = 4246, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.2987891 0.3525510
## sample estimates:
##       cor 
## 0.3259335

Interpretasi Analisis 1

Hasil uji korelasi menunjukkan nilai p-value yang sangat kecil (p < 0,05), sehingga korelasi positif antara stok dan penjualan adalah signifikan secara statistik. Hal ini membuktikan bahwa penambahan stok secara empiris mampu meningkatkan peluang volume transaksi di pasar.

2. Uji ANOVA (Perbedaan antar Produk)

# Analisis 2: Uji ANOVA
hasil_anova <- aov(Profit ~ `Product Type`, data = data1)
summary_anova <- summary(hasil_anova)
print(summary_anova)
##                  Df   Sum Sq Mean Sq F value  Pr(>F)   
## `Product Type`    3   141680   47227   4.577 0.00333 **
## Residuals      4244 43791957   10319                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Interpretasi Analisis 2

Nilai F-statistik menunjukkan hasil yang signifikan (p < 0,05), sehingga kita menolak H0. Secara statistik, terbukti bahwa rata-rata profit antar keempat jenis produk tidak sama. Ini menunjukkan bahwa Product Type merupakan faktor penentu utama dalam besar kecilnya laba yang dihasilkan.

3. Regresi Liniear Berganda (Prediksi Profit)

model_final <- lm(Profit ~ Inventory + Sales, data = data1)
summary_final <- summary(model_final)
print(summary_final)
## 
## Call:
## lm(formula = Profit ~ Inventory + Sales, data = data1)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -464.22  -24.94    3.59   31.99  307.43 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -13.764220   1.329095  -10.36   <2e-16 ***
## Inventory    -0.060498   0.001188  -50.94   <2e-16 ***
## Sales         0.622827   0.005195  119.89   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 48.37 on 4245 degrees of freedom
## Multiple R-squared:  0.7739, Adjusted R-squared:  0.7738 
## F-statistic:  7265 on 2 and 4245 DF,  p-value: < 2.2e-16

Interpretasi Analisis 3

Nilai Adjusted R-Squared sebesar 0.7738 menjelaskan bahwa 77,38% variasi profit dapat dijelaskan oleh variabel stok dan penjualan dalam model ini. Sales memiliki pengaruh positif yang dominan, sementara Inventory memiliki koefisien yang menunjukkan bahwa jika stok terlalu berlebih tanpa diikuti penjualan, hal tersebut berisiko menjadi beban biaya penyimpanan (carrying cost) yang menekan margin keuntungan.

H. Kesimpulan dan Saran

Berdasarkan hasil analisis data Coffee Chain, ketersediaan stok (Inventory) terbukti memiliki pengaruh yang signifikan dalam mendorong volume penjualan (Sales) dan perolehan keuntungan perusahaan. Melalui pengujian statistik, ditemukan bahwa Sales merupakan faktor yang paling dominan dalam menentukan besar kecilnya Profit. Meskipun setiap kategori produk memiliki karakteristik yang berbeda, seperti Coffee yang tetap stabil dan Espresso yang sangat bergantung pada kecukupan stok. Secara keseluruhan kondisi stok yang tinggi mampu memberikan rata-rata keuntungan yang lebih maksimal.

Sebagai saran kebijakan, manajemen direkomendasikan untuk menjaga stok pada level yang optimal. Artinya, ketersediaan barang harus cukup untuk memenuhi permintaan pelanggan guna menghindari hilangnya potensi laba, namun tetap terkontrol agar tidak terjadi penumpukan barang berlebih yang justru dapat meningkatkan biaya penyimpanan dan menekan margin keuntungan perusahaan.