Analisis Profitabilitas Lini dan Jenis Produk serta Identifikasi Penggerak Utama Profit dengan Pendekatan Pareto pada Coffe Chain Dataset tahun 2012-2013

LATAR BELAKANG

Di tengah ketatnya persaingan industri kopi dan teh, perusahaan dituntut untuk cerdik dalam memetakan portofolio produk agar tidak terjebak pada angka penjualan semu yang belum tentu menjamin kesehatan profit. Melalui pemanfaatan Dataset Coffee Chain 2012–2013, riset ini bertujuan membedah dinamika profitabilitas dengan mengombinasikan data transaksi riil guna mengidentifikasi produk-produk “vital” yang menjadi penggerak utama bisnis berdasarkan Prinsip Pareto. Dengan memahami kaitan antara margin keuntungan dan efisiensi biaya, analisis ini diharapkan dapat menjadi navigasi strategis bagi manajemen dalam mengalokasikan sumber daya secara lebih tepat sasaran demi menjaga keberlangsungan finansial perusahaan.

TUJUAN PENELITIAN

  1. Menganalisis tingkat profitabilitas berdasarkan lini produk (Product Line: Beans dan Leaves) pada Coffee Chain tahun 2012–2013.
  2. Menganalisis tingkat profitabilitas berdasarkan jenis produk (Product Type: Coffee, Tea, Espresso, Herbal Tea) pada Coffee Chain tahun 2012–2013. Mengidentifikasi produk-produk yang menjadi penggerak utama profit (vital few) menggunakan pendekatan Analisis Pareto.
  3. Memberikan rekomendasi strategis terkait pengelolaan portofolio produk berdasarkan hasil analisis profitabilitas dan Pareto

METODE PENELITIAN Penelitian ini mengevaluasi performa bisnis melalui dataset Coffee Chain 2012–2013 dengan mengintegrasikan tahap preprocessing data yang ketat di lingkungan R, mencakup pembersihan data, penanganan outlier melalui metode winsorizing, hingga rekayasa variabel untuk menghasilkan metrik finansial seperti Profit Margin dan ROI. Melalui pendekatan statistik deskriptif yang komprehensif, analisis ini membedah profitabilitas secara berjenjang dan menerapkan Prinsip Pareto untuk mengidentifikasi produk unggulan (vital few) yang menjadi penggerak utama keuntungan perusahaan. Seluruh temuan yang disajikan melalui Pareto Chart dan diagram kuadran ini memberikan navigasi strategis bagi manajemen dalam menentukan prioritas alokasi sumber daya serta kebijakan inventori yang lebih efisien di masa depan.

ANALISIS

Sebelum ke analisis, terlebih dahulu untuk load library dan deploy dataset Coffe Chain Dataset ke dalam R, dengan library dan sintaks load data sebagai berikut;

# =============================================================================
# ANALISIS COFFEE CHAIN - SIM 2025B
# Analisis: Profitabilitas, Pareto, Tren, Varians Budget vs Aktual
# Dataset: Coffee Chain (2012-2013)
# =============================================================================
 
# ── 0. INSTALASI & LOAD LIBRARY ──────────────────────────────────────────────
packages <- c("readxl", "dplyr", "tidyr", "ggplot2", "scales", "ggrepel",
              "gridExtra", "lubridate", "knitr", "kableExtra", "RColorBrewer",
              "ggthemes", "patchwork", "stringr", "moments")
library(readxl)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tidyr)
library(ggplot2)
library(scales)
library(ggrepel)
library(gridExtra)
## 
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
library(lubridate)
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
library(knitr)
library(kableExtra)
## 
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
## 
##     group_rows
library(RColorBrewer)
library(ggthemes)
library(patchwork)
library(stringr)
library(moments)

names(df_raw), menggantikan variabel ber-spasi dengan underscore agar lebih mudah di inputkan dalam fungsi-fungsi analisis dan preprocessing.

# ── 1. LOAD DATA ─────────────────────────────────────────────────────────────
path_file <- "D:/Tugas_SIM_2025B.xlsx"   # sesuaikan path
 
df_raw <- read_excel(path_file, sheet = "data")
deskripsi <- read_excel(path_file, sheet = "deskripsi")
# Bersihkan nama kolom (spasi → underscore)
names(df_raw) <- gsub(" ", "_", names(df_raw))
 
cat("=== INFO DATASET ===\n")
## === INFO DATASET ===
cat("Jumlah baris :", nrow(df_raw), "\n")
## Jumlah baris : 4248
cat("Jumlah kolom :", ncol(df_raw), "\n")
## Jumlah kolom : 20
cat("Rentang tanggal:", format(min(df_raw$Date), "%d-%b-%Y"),
    "s/d", format(max(df_raw$Date), "%d-%b-%Y"), "\n\n")
## Rentang tanggal: 01-Jan-2012 s/d 01-Dec-2013
glimpse(df_raw)
## 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-0…
## $ Market         <chr> "Central", "Central", "Central", "Central", "Central", …
## $ Market_Size    <chr> "Major Market", "Major Market", "Major Market", "Major …
## $ Product        <chr> "Amaretto", "Colombian", "Decaf Irish Cream", "Green Te…
## $ Product_Line   <chr> "Beans", "Beans", "Beans", "Leaves", "Beans", "Beans", …
## $ Product_Type   <chr> "Coffee", "Coffee", "Coffee", "Tea", "Espresso", "Espre…
## $ State          <chr> "Colorado", "Colorado", "Colorado", "Colorado", "Colora…
## $ Type           <chr> "Regular", "Regular", "Decaf", "Regular", "Regular", "D…
## $ Budget_COGS    <dbl> 90, 80, 100, 30, 60, 80, 140, 50, 50, 40, 50, 150, 100,…
## $ Budget_Margin  <dbl> 130, 110, 140, 50, 90, 130, 160, 80, 70, 70, 70, 210, 1…
## $ Budget_Profit  <dbl> 100, 80, 110, 30, 70, 80, 110, 20, 40, 20, 40, 130, 100…
## $ Budget_Sales   <dbl> 220, 190, 240, 80, 150, 210, 300, 130, 120, 110, 120, 3…
## $ COGS           <dbl> 89, 83, 95, 44, 54, 72, 170, 63, 60, 58, 64, 144, 95, 2…
## $ Inventory      <dbl> 777, 623, 821, 623, 456, 558, 1091, 435, 336, 338, 965,…
## $ Margin         <dbl> 130, 107, 139, 56, 80, 108, 171, 87, 80, 72, 76, 201, 1…
## $ Marketing      <dbl> 24, 27, 26, 14, 15, 23, 47, 57, 19, 22, 19, 47, 30, 77,…
## $ Profit         <dbl> 94, 68, 101, 30, 54, 53, 99, 0, 33, 17, 36, 111, 87, 20…
## $ 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, 109…

Terdapat 4248 baris dan 20 kolom.

PREPROCESSING DATA

Tahap preprocessing data merupakan langkah krusial yang berfungsi untuk memastikan integritas dan kualitas data melalui prinsip Data Cleaning dan Data Transformation sebelum proses analisis statistik lebih lanjut dilakukan. Dengan melakukan pembersihan terhadap nilai yang hilang, standardisasi variabel, serta penanganan outlier menggunakan metode seperti winsorizing, peneliti dapat meminimalisir risiko bias dan distorsi informasi yang sering kali muncul akibat adanya data anomali atau kesalahan input. Selain itu, proses ini memungkinkan pembentukan variabel turunan yang lebih informatif bagi pengambilan keputusan strategis, sehingga hasil analisis yang diperoleh—seperti tingkat profitabilitas maupun pemetaan Pareto—memiliki akurasi yang tinggi, memenuhi asumsi metodologis yang dipersyaratkan, serta dapat dipertanggungjawabkan secara saintifik.

## 2.1 Cek Missing Values (cek data yang hilang)
cat("\n=== CEK MISSING VALUES ===\n")
## 
## === CEK MISSING VALUES ===
missing_summary <- df_raw %>%
  summarise(across(everything(), ~ sum(is.na(.)))) %>%
  pivot_longer(everything(), names_to = "Variabel", values_to = "Jumlah_NA") %>%
  mutate(Persen_NA = round(Jumlah_NA / nrow(df_raw) * 100, 2)) %>%
  arrange(desc(Jumlah_NA))
print(missing_summary)
## # A tibble: 20 × 3
##    Variabel       Jumlah_NA Persen_NA
##    <chr>              <int>     <dbl>
##  1 Area_Code              0         0
##  2 Date                   0         0
##  3 Market                 0         0
##  4 Market_Size            0         0
##  5 Product                0         0
##  6 Product_Line           0         0
##  7 Product_Type           0         0
##  8 State                  0         0
##  9 Type                   0         0
## 10 Budget_COGS            0         0
## 11 Budget_Margin          0         0
## 12 Budget_Profit          0         0
## 13 Budget_Sales           0         0
## 14 COGS                   0         0
## 15 Inventory              0         0
## 16 Margin                 0         0
## 17 Marketing              0         0
## 18 Profit                 0         0
## 19 Sales                  0         0
## 20 Total_Expenses         0         0
## 2.2 Cek Duplikasi
cat("\n=== CEK DUPLIKASI ===\n")
## 
## === CEK DUPLIKASI ===
cat("Jumlah baris duplikat:", sum(duplicated(df_raw)), "\n")
## Jumlah baris duplikat: 0
## 2.3 Transformasi Tipe Data
df <- df_raw %>%
  mutate(
    Date        = as.Date(Date),
    Year        = year(Date),
    Month       = month(Date, label = TRUE, abbr = TRUE),
    Quarter     = paste0("Q", quarter(Date)),
    YearMonth   = format(Date, "%Y-%m"),
    # Variabel turunan
    Profit_Margin_Pct   = round(Profit / Sales * 100, 2),
    Gross_Margin_Pct    = round(Margin / Sales * 100, 2),
    Expense_Ratio       = round(Total_Expenses / Sales * 100, 2),
    Budget_Achievement  = round(Sales / Budget_Sales * 100, 2),
    Profit_vs_Budget    = Profit - Budget_Profit,
    Sales_vs_Budget     = Sales  - Budget_Sales
  )
## 2.4 Deteksi & Treatment Outlier (metode IQR)
numeric_cols <- c("Sales", "Profit", "COGS", "Margin", "Marketing",
                  "Total_Expenses", "Inventory")
 
outlier_summary <- lapply(numeric_cols, function(col) {
  x   <- df[[col]]
  Q1  <- quantile(x, 0.25)
  Q3  <- quantile(x, 0.75)
  IQR <- Q3 - Q1
  low <- Q1 - 1.5 * IQR
  up  <- Q3 + 1.5 * IQR
  n_out <- sum(x < low | x > up)
  data.frame(
    Variabel     = col,
    Q1           = Q1,
    Q3           = Q3,
    IQR          = IQR,
    Batas_Bawah  = round(low, 2),
    Batas_Atas   = round(up,  2),
    Jumlah_Outlier = n_out,
    Persen_Outlier = round(n_out / nrow(df) * 100, 2)
  )
}) %>% bind_rows()
 
cat("\n=== RINGKASAN OUTLIER (METODE IQR) ===\n")
## 
## === RINGKASAN OUTLIER (METODE IQR) ===
print(outlier_summary)
##               Variabel     Q1    Q3    IQR Batas_Bawah Batas_Atas
## 25%...1          Sales 100.00 230.0 130.00      -95.00     425.00
## 25%...2         Profit  17.00  92.0  75.00      -95.50     204.50
## 25%...3           COGS  43.00 100.0  57.00      -42.50     185.50
## 25%...4         Margin  52.75 132.0  79.25      -66.12     250.88
## 25%...5      Marketing  13.00  39.0  26.00      -26.00      78.00
## 25%...6 Total_Expenses  33.00  65.0  32.00      -15.00     113.00
## 25%...7      Inventory 432.00 910.5 478.50     -285.75    1628.25
##         Jumlah_Outlier Persen_Outlier
## 25%...1            406           9.56
## 25%...2            405           9.53
## 25%...3            444          10.45
## 25%...4            384           9.04
## 25%...5            364           8.57
## 25%...6            328           7.72
## 25%...7            346           8.15
# Winsorizing outlier (cap pada batas IQR) untuk analisis statistik
winsorize <- function(x) {
  Q1 <- quantile(x, 0.25); Q3 <- quantile(x, 0.75); IQR <- Q3 - Q1
  pmax(pmin(x, Q3 + 1.5 * IQR), Q1 - 1.5 * IQR)
}
 
df_clean <- df %>%
  mutate(across(all_of(numeric_cols), winsorize, .names = "{.col}_w"))
 
cat("\nData setelah winsorizing tersimpan dengan suffix '_w'.\n")
## 
## Data setelah winsorizing tersimpan dengan suffix '_w'.
cat("Total observasi bersih:", nrow(df_clean), "\n\n")
## Total observasi bersih: 4248
## 2.5 Statistik Deskriptif
cat("=== STATISTIK DESKRIPTIF ===\n")
## === STATISTIK DESKRIPTIF ===
desc_stats <- df %>%
  select(all_of(numeric_cols), Profit_Margin_Pct, Gross_Margin_Pct) %>%
  summary()
print(desc_stats)
##      Sales         Profit            COGS            Margin       
##  Min.   : 17   Min.   :-638.0   Min.   :  0.00   Min.   :-302.00  
##  1st Qu.:100   1st Qu.:  17.0   1st Qu.: 43.00   1st Qu.:  52.75  
##  Median :138   Median :  40.0   Median : 60.00   Median :  76.00  
##  Mean   :193   Mean   :  61.1   Mean   : 84.43   Mean   : 104.29  
##  3rd Qu.:230   3rd Qu.:  92.0   3rd Qu.:100.00   3rd Qu.: 132.00  
##  Max.   :912   Max.   : 778.0   Max.   :364.00   Max.   : 613.00  
##    Marketing      Total_Expenses     Inventory       Profit_Margin_Pct 
##  Min.   :  0.00   Min.   : 10.00   Min.   :-3534.0   Min.   :-3190.00  
##  1st Qu.: 13.00   1st Qu.: 33.00   1st Qu.:  432.0   1st Qu.:   16.10  
##  Median : 22.00   Median : 46.00   Median :  619.0   Median :   32.00  
##  Mean   : 31.19   Mean   : 54.06   Mean   :  749.4   Mean   :   14.72  
##  3rd Qu.: 39.00   3rd Qu.: 65.00   3rd Qu.:  910.5   3rd Qu.:   42.78  
##  Max.   :156.00   Max.   :190.00   Max.   : 8252.0   Max.   :  118.09  
##  Gross_Margin_Pct  
##  Min.   :-1589.47  
##  1st Qu.:   54.29  
##  Median :   56.42  
##  Mean   :   47.95  
##  3rd Qu.:   59.18  
##  Max.   :  100.00
## 2.6 Skewness & Kurtosis
cat("\n=== SKEWNESS & KURTOSIS ===\n")
## 
## === SKEWNESS & KURTOSIS ===
sk_kurt <- data.frame(
  Variabel  = numeric_cols,
  Skewness  = sapply(numeric_cols, function(c) round(skewness(df[[c]]), 3)),
  Kurtosis  = sapply(numeric_cols, function(c) round(kurtosis(df[[c]]), 3))
)
print(sk_kurt)
##                      Variabel Skewness Kurtosis
## Sales                   Sales    1.881    6.488
## Profit                 Profit    0.445   12.780
## COGS                     COGS    1.672    5.268
## Margin                 Margin    1.425    8.331
## Marketing           Marketing    1.645    5.412
## Total_Expenses Total_Expenses    1.319    4.586
## Inventory           Inventory    2.894   31.511

ANALISIS PROFITABILITAS (product line and type)

Analisis profitabilitas adalah proses evaluasi untuk menilai kemampuan suatu perusahaan dalam menghasilkan keuntungan (profit) relatif terhadap penjualan, aset, atau modal pada periode waktu tertentu, mengukur efisiensi operasional, dan menentukan prioritas produk yang akan diedarkan.

Yang pertama adalah analisis produk tipe mana dan produk apa yang memiliki keuntungan tertinggi.

## 3.1 Profitabilitas per Produk
profit_produk <- df %>%
  group_by(Product, Product_Type, Product_Line) %>%
  summarise(
    Total_Sales        = sum(Sales),
    Total_Profit       = sum(Profit),
    Total_COGS         = sum(COGS),
    Total_Margin       = sum(Margin),
    Total_Expenses = sum(Total_Expenses),
    Profit_Margin_Pct  = round(sum(Profit) / sum(Sales) * 100, 2),
    Gross_Margin_Pct   = round(sum(Margin) / sum(Sales) * 100, 2),
    ROI                = round(sum(Profit) / sum(COGS) * 100, 2),
    N_Transaksi        = n(),
    .groups = "drop"
  ) %>%
  arrange(desc(Total_Profit))
print(profit_produk)
## # A tibble: 13 × 12
##    Product         Product_Type Product_Line Total_Sales Total_Profit Total_COGS
##    <chr>           <chr>        <chr>              <dbl>        <dbl>      <dbl>
##  1 Colombian       Coffee       Beans             128311        55804      48396
##  2 Lemon           Herbal Tea   Leaves             95926        29869      41494
##  3 Decaf Espresso  Espresso     Beans              78162        29502      33318
##  4 Darjeeling      Tea          Leaves             73151        29053      30534
##  5 Chamomile       Herbal Tea   Leaves             75578        27231      31386
##  6 Earl Grey       Tea          Leaves             66772        24164      28554
##  7 Caffe Mocha     Espresso     Beans              84904        17678      37990
##  8 Decaf Irish Cr… Coffee       Beans              62248        13989      29568
##  9 Caffe Latte     Espresso     Beans              35899        11375      15294
## 10 Regular Espres… Espresso     Beans              24031        10065      10398
## 11 Mint            Herbal Tea   Leaves             35710         6154      19930
## 12 Amaretto        Coffee       Beans              26269         4890      12732
## 13 Green Tea       Tea          Leaves             32850         -231      19078
## # ℹ 6 more variables: Total_Margin <dbl>, Total_Expenses <dbl>,
## #   Profit_Margin_Pct <dbl>, Gross_Margin_Pct <dbl>, ROI <dbl>,
## #   N_Transaksi <int>
## 3.4 Profitabilitas per Product Type
profit_type <- df %>%
  group_by(`Product_Type`) %>%
  summarise(
    Total_Sales       = sum(Sales),
    Total_Profit      = sum(Profit),
    Profit_Margin_Pct = round(sum(Profit) / sum(Sales) * 100, 2),
    Gross_Margin_Pct  = round(sum(Margin) / sum(Sales) * 100, 2),
    .groups = "drop"
  ) %>%
  arrange(desc(Total_Profit))
 
cat("\n=== PROFITABILITAS PER PRODUCT TYPE ===\n")
## 
## === PROFITABILITAS PER PRODUCT TYPE ===
print(profit_type)
## # A tibble: 4 × 5
##   Product_Type Total_Sales Total_Profit Profit_Margin_Pct Gross_Margin_Pct
##   <chr>              <dbl>        <dbl>             <dbl>            <dbl>
## 1 Coffee            216828        74683              34.4             56.1
## 2 Espresso          222996        68620              30.8             54.3
## 3 Herbal Tea        207214        63254              30.5             53.1
## 4 Tea               172773        52986              30.7             52.3

Kedua, yaitu plot untuk keuntungan per produk dan tipe produk.

# Visualisasi Gabungan: Profit per Produk yang dikelompokkan berdasarkan Type
ggplot(profit_type, aes(x = reorder(`Product_Type`, Total_Profit), y = Total_Profit)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  # Menambahkan label angka
  geom_text(aes(label = comma(Total_Profit)), 
            vjust = -0.5, # Posisi sedikit di atas bar
            size = 3.5, 
            fontface = "bold") +
  theme_minimal() +
  labs(title = "Total Profit berdasarkan Kategori Produk",
       x = "Kategori Produk",
       y = "Total Profit ($)") +
  # Memberikan ruang di atas agar teks tidak terpotong
  expand_limits(y = max(profit_type$Total_Profit) * 1.1)

ggplot(profit_produk, aes(x = reorder(Product, Total_Profit), y = Total_Profit, fill = Product_Type)) +
  geom_bar(stat = "identity") +
  # Menambahkan label angka di samping bar
  geom_text(aes(label = comma(Total_Profit)), 
            hjust = -0.1, # Geser sedikit ke kanan dari ujung bar
            size = 3) +
  coord_flip() + 
  facet_wrap(~Product_Type, scales = "free_y") + 
  theme_minimal() +
  labs(title = "Detail Profitabilitas per Produk dalam Kategori",
       x = "Nama Produk",
       y = "Total Profit ($)") +
  # Memberikan ruang di kanan agar teks tidak terpotong
  expand_limits(y = max(profit_produk$Total_Profit) * 1.2) +
  theme(legend.position = "none") # Sembunyikan legenda karena sudah ada facet

ANALISIS PARETO

Analisis Pareto, atau yang sering dikenal sebagai Aturan 80/20, adalah teknik pengambilan keputusan yang didasarkan pada prinsip bahwa sekitar 80% hasil biasanya berasal dari 20% penyebab utama.

# ── 4. ANALISIS PARETO ───────────────────────────────────────────────────────
 
## Fungsi helper Pareto
make_pareto <- function(data, group_col, value_col, label = "Item") {
  data %>%
    group_by(across(all_of(group_col))) %>%
    summarise(Total = sum(.data[[value_col]]), .groups = "drop") %>%
    arrange(desc(Total)) %>%
    mutate(
      Kumulatif      = cumsum(Total),
      Persen         = round(Total / sum(Total) * 100, 2),
      Persen_Kumulatif = round(Kumulatif / sum(Total) * 100, 2),
      Rank           = row_number(),
      Label          = label
    )
}
 
## 4.1 Pareto – Produk vs Profit
pareto_produk_profit <- make_pareto(df, "Product", "Profit", "Produk")
cat("\n=== PARETO: PRODUK vs PROFIT ===\n")
## 
## === PARETO: PRODUK vs PROFIT ===
print(pareto_produk_profit)
## # A tibble: 13 × 7
##    Product           Total Kumulatif Persen Persen_Kumulatif  Rank Label 
##    <chr>             <dbl>     <dbl>  <dbl>            <dbl> <int> <chr> 
##  1 Colombian         55804     55804  21.5              21.5     1 Produk
##  2 Lemon             29869     85673  11.5              33.0     2 Produk
##  3 Decaf Espresso    29502    115175  11.4              44.4     3 Produk
##  4 Darjeeling        29053    144228  11.2              55.6     4 Produk
##  5 Chamomile         27231    171459  10.5              66.1     5 Produk
##  6 Earl Grey         24164    195623   9.31             75.4     6 Produk
##  7 Caffe Mocha       17678    213301   6.81             82.2     7 Produk
##  8 Decaf Irish Cream 13989    227290   5.39             87.6     8 Produk
##  9 Caffe Latte       11375    238665   4.38             92.0     9 Produk
## 10 Regular Espresso  10065    248730   3.88             95.8    10 Produk
## 11 Mint               6154    254884   2.37             98.2    11 Produk
## 12 Amaretto           4890    259774   1.88            100.     12 Produk
## 13 Green Tea          -231    259543  -0.09            100      13 Produk

INTERPRETASI ANALISIS 1. Analisis Profitabilitas Kategori Produk

Ditinjau dari aspek profitabilitas, kategori Coffee mencatatkan efisiensi tertinggi dengan margin 34,4% dan laba sebesar $ 74.683, membuktikan manajemen biaya yang jauh lebih sehat dibandingkan Espresso yang meski mendominasi omzet senilai $ 222.996, margin labanya justru tertahan di angka 30,8%. Sementara itu, kategori Herbal Tea dan Tea menunjukkan kinerja stabil dengan margin di kisaran 30%, mempertegas bahwa struktur biaya perusahaan cenderung seragam di seluruh lini. Mengingat tipisnya selisih margin antar kategori, strategi peningkatan profitabilitas ke depan harus difokuskan pada penguatan volume penjualan bagi produk-produk dengan margin tebal guna mengoptimalkan kontribusi laba secara keseluruhan.

  1. Analisis Sebaran Profitabilitas Produk

Penelusuran pada level produk mengungkap ketimpangan performa yang signifikan, di mana Colombian mendominasi kategori kopi dengan kontribusi laba sebesar $55.804 (74%), sementara kategori Espresso dan Herbal Tea menunjukkan sebaran laba yang lebih kompetitif melalui produk unggulan seperti Decaf Espresso, Lemon, dan Chamomile. Di sisi lain, ditemukan anomali kritis pada Green Tea yang mencatat profit negatif sebesar -$231, yang mengindikasikan bahwa biaya operasionalnya telah melampaui pendapatan dan membebani profitabilitas kategori teh secara keseluruhan. Temuan ini mempertegas relevansi Prinsip Pareto, di mana kesehatan finansial perusahaan sangat bergantung pada segelintir produk kunci (vital few), sehingga manajemen perlu segera mengevaluasi produk yang merugi dan memprioritaskan alokasi sumber daya pada produk-produk penggerak laba utama.

  1. Analisis Pareto (80/20)

Hasil analisis Pareto menunjukkan temuan yang sangat signifikan: dari 13 produk yang ada, hanya 6 produk yang secara kumulatif menyumbang 75,4% total profit, dan 7 produk menyumbang 82,2% total profit. Ini sangat selaras dengan prinsip Pareto 80/20, di mana sebagian kecil produk mendominasi sebagian besar keuntungan bisnis.

KESIMPULAN

Berdasarkan pembedahan data Coffee Chain 2012–2013, kategori Coffee terbukti menjadi primadona bisnis dengan efisiensi tertinggi melalui margin laba 34,4%, yang sangat didorong oleh performa dominan produk Colombian sebagai penyumbang 21,5% dari total keuntungan perusahaan. Penerapan Prinsip Pareto mengonfirmasi bahwa kesehatan finansial perusahaan sangat bergantung pada kelompok “vital few”, di mana hanya 7 dari 13 produk mampu menyumbang 82,2% total laba, sehingga manajemen perlu memprioritaskan alokasi sumber daya pada produk-produk kunci tersebut. Di sisi lain, temuan kritis pada Green Tea yang mencatat profit negatif sebesar -$231 menjadi alarm bagi manajemen untuk segera mengevaluasi kembali struktur biaya dan harga agar tidak terus menggerus profitabilitas keseluruhan.

Sources

V. Puntoni, G. M. P. Masselli, and S. Silvestri, “An adaptation of Pareto’s parametric distribution as a support tool for the analysis of maintenance costs of biomedical equipment,” pp. 32–36, June 2021, doi: 10.1109/METROIND4.0IOT51437.2021.9488514.