Luthfi Hanan Tamimi

12 May 2025

🌞
🌙
🌸
☁️

Pendahuluan

Pendahuluan

Dataset ini menganalisis kinerja produk minuman (kopi dan teh) di pasar Amerika Serikat, mencakup Major Market dan Small Market di berbagai state di Amerika Serikat. Produk dikategorikan berdasarkan jenis produk (Amaretto, Colombian, Decaf Irish Cream, dan lain-lain), bentuk (biji/daun), dan tipe penyajian. Data mencakup metrik finansial seperti Sales, Profit, Margin, COGS, serta perbandingan aktual vs. anggaran dan manajemen inventori. Terdapat variasi kinerja yang signifikan antar produk dan lokasi, dengan pasar besar menunjukkan volume penjualan lebih tinggi dibandingkan pasar kecil.

Dataset ini sangat berharga untuk analisis lebih lanjut guna mengidentifikasi produk-produk paling menguntungkan, mengevaluasi kesenjangan antara perencanaan anggaran dan realisasi penjualan, serta memahami pengaruh faktor geografis terhadap kinerja produk.

Penelitian ini bertujuan untuk mengevaluasi dampak variabel Jenis Produk (Product Type) dan Lokasi Negara Bagian (State) terhadap tingkat profitabilitas dengan memanfaatkan dataset Coffee Chain yang merepresentasikan data operasional dan penjualan sebuah jaringan kedai kopi simulasi. Melalui penerapan metode statistik dan teknik visualisasi data, kajian ini diharapkan mampu menghasilkan rekomendasi strategis yang berbasis bukti empiris (evidence-based) untuk mendukung proses pengambilan keputusan manajerial.


Packages

#Memuat Packages yang Kita Butuhkan
library(readxl)
library(dplyr)
library(ggplot2)
library(scales)
library(DT)
library(zoo)
library(car)
library(stats)
library(knitr)
library(tidyr)
library(shiny)
library(dunn.test)
library(FSA)

Landasan Teori

Uji Normalitas (Shapiro-Wilk)

Uji Shapiro-Wilk digunakan untuk menilai apakah suatu sampel berasal dari populasi yang berdistribusi normal. Cocok untuk ukuran sampel kecil hingga sedang.

Rumus dari uji Shapiro-Wilk adalah:

\[ W = \frac{ \left( \sum_{i=1}^{n} a_i x_{(i)} \right)^2 }{ \sum_{i=1}^{n} (x_i - \bar{x})^2 } \]

Keterangan:
  • \(x_{(i)}\): Data ke-i yang telah diurutkan
  • \(\bar{x}\): Rata-rata data
  • \(a_i\): Konstanta yang diturunkan dari matriks kovarian dari distribusi normal
  • \(n\): Ukuran sampel

    Jika nilai p-value < 0.05, maka data tidak berdistribusi normal.



  • Uji Kruskal-Wallis

    Uji Kruskal-Wallis digunakan untuk menguji perbedaan median dari tiga atau lebih kelompok yang independen. Uji ini berbasis peringkat.

    Rumus statistik uji Kruskal-Wallis:

    \[ H = \frac{12}{N(N+1)} \sum_{i=1}^{k} n_i (\bar{R}_i - \bar{R})^2 \]

    atau bentuk lainnya:

    \[ H = \frac{12}{N(N+1)} \sum_{i=1}^{k} \frac{R_i^2}{n_i} - 3(N+1) \]

    Keterangan:
  • \(k\): Jumlah kelompok
  • \(N\): Total banyak data
  • \(n_i\): Jumlah data pada kelompok ke-i
  • \(R_i\): Jumlah peringkat pada kelompok ke-i
  • \(\bar{R}_i\): Rata-rata peringkat kelompok ke-i
  • \(\bar{R}\): Rata-rata total peringkat \(= \frac{N+1}{2}\)

    Statistik \(H\) mengikuti distribusi chi-square dengan derajat kebebasan \(df = k - 1\).



  • Uji Dunn

    Uji Dunn digunakan sebagai uji lanjutan (post hoc) setelah Kruskal-Wallis untuk membandingkan dua kelompok secara berpasangan.

    Rumus statistik Z untuk uji Dunn:

    \[ Z_{ij} = \frac{ \bar{R}_i - \bar{R}_j }{ \sqrt{ \frac{N(N+1)}{12} \left( \frac{1}{n_i} + \frac{1}{n_j} \right) } } \]

    Keterangan:
  • \(\bar{R}_i, \bar{R}_j\): Rata-rata peringkat masing-masing kelompok
  • \(n_i, n_j\): Jumlah sampel di masing-masing kelompok
  • \(N\): Total jumlah sampel


  • Deskripsi Data

    Dataset ini menganalisis kinerja produk minuman di pasar Amerika Serikat, mencakup Major Market dan Small Market di berbagai state di Amerika Serikat. Produk dikategorikan berdasarkan jenis produk, bentuk, dan tipe penyajian. Data mencakup metrik finansial seperti Sales, Profit, Margin, COGS, serta perbandingan aktual vs. anggaran dan manajemen inventori. Terdapat variasi kinerja yang signifikan antar produk dan lokasi, dengan pasar besar menunjukkan volume penjualan lebih tinggi dibandingkan pasar kecil. Namun, untuk tujuan analisis ini, kita hanya akan menggunakan beberapa variabel yang relevan dengan keterangan berikut ini.
    • State adalah variabel kategorik yang menunjukkan negara bagian tempat transaksi bisnis terjadi, seperti Colorado, Illinois, California, dan lainnya, mencakup 20 negara bagian yang berbeda.
    • Profit adalah variabel numerik yang mencerminkan keuntungan finansial (dalam satuan moneter, kemungkinan dolar) yang dihasilkan dari penjualan produk kopi di masing-masing negara bagian tersebut.
    • Product Type adalah salah satu variabel kategorik yang mencerminkan jenis produk minuman yang dipilih oleh pelanggan di berbagai cabang.
    # Import data dengan path yang benar
    Kopi <- read_excel("~/KULIAH SERIUS/markdown/3. CM1 - Coffee Chain Datasets.xlsx", sheet = "data")
    #Buat Data Frame
    DataKopi <- data.frame (
      ProductType = Kopi$`Product Type`,
      State = Kopi$State,
      Profit = Kopi$Profit
    )
    DT::datatable(DataKopi)

    Statistik Deskriptif

    Statistik deskriptif adalah cabang statistik yang berfokus pada pengumpulan, penyajian, dan ringkasan data untuk memberikan gambaran yang jelas dan informatif tentang karakteristik suatu dataset tanpa membuat inferensi atau generalisasi terhadap populasi. Teknik ini mencakup pengukuran tendensi pusat seperti rata-rata (mean), median, dan modus, serta pengukuran dispersi seperti rentang, varians, dan standar deviasi, yang membantu memahami distribusi dan variabilitas data.

    summary(DataKopi)
    ##  ProductType           State               Profit      
    ##  Length:4248        Length:4248        Min.   :-638.0  
    ##  Class :character   Class :character   1st Qu.:  17.0  
    ##  Mode  :character   Mode  :character   Median :  40.0  
    ##                                        Mean   :  61.1  
    ##                                        3rd Qu.:  92.0  
    ##                                        Max.   : 778.0

    Pada dataset Coffee Chain, dilakukan analisis deskriptif terhadap beberapa variabel yang dipilih, yaitu Product Type, State, dan Profit. Berdasarkan ringkasan data, variabel Product Type dan State tergolong sebagai data kategorik dengan total observasi sebanyak 4.248. Variabel ini mencerminkan jenis produk yang dipilih oleh konsumen serta wilayah negara bagian tempat transaksi bisnis dilakukan. Mengingat sifatnya yang berupa karakter, pendekatan deskriptif yang paling sesuai untuk kedua variabel ini adalah melalui tabel frekuensi atau representasi visual berbasis kategori.

    Variabel Profit menjadi perhatian utama karena merupakan indikator langsung terhadap keberhasilan finansial setiap cabang. Rata-rata profit tercatat sebesar 61,1, sementara mediannya mencapai 40, yang menunjukkan bahwa mayoritas cabang memiliki keuntungan di bawah rata-rata, mengisyaratkan distribusi data yang condong ke arah kanan. Nilai profit minimum sebesar -638 mengindikasikan adanya cabang yang mengalami kerugian signifikan, sedangkan nilai maksimum sebesar 778 menunjukkan keberadaan cabang dengan kinerja sangat menguntungkan. Rentang nilai yang luas ini mencerminkan variasi kinerja yang cukup besar di antara cabang-cabang tersebut.

    Berdasarkan statistik deskriptif ini, diperoleh wawasan awal yang berharga mengenai struktur dan sifat data yang digunakan dalam penelitian. Temuan ini juga menjadi fondasi penting untuk melanjutkan ke tahap analisis lebih lanjut, seperti eksplorasi hubungan antar variabel atau pengembangan model prediktif.


    Analisis Product Type

    Plot

    Plot yang ditampilkan adalah diagram batang horizontal yang menggambarkan total keuntungan (Total Profit) per jenis produk (Product Type) dalam dataset Coffee Chain, dengan sumbu y menunjukkan empat kategori produk (Coffee, Espresso, Herbal Tea, dan Tea), sedangkan sumbu x menunjukkan nilai profit dalam dolar (USD) dengan skala hingga 80.000.

    ggplot(ProfitProduct, aes(y = reorder(`Product Type`, Total_Profit), x = Total_Profit, fill = Total_Profit)) +
      geom_bar(stat = "identity", width = 0.7) +
      geom_text(aes(label = comma(Total_Profit)), hjust = 1.2, size = 5, fontface = "bold", color = "#878787") +
      labs(title = "Total Profit per Product Type",
           x = "Total Profit",
           y = "Product Type") +
      scale_fill_gradient2(low = "white", mid = "#EFDDCF", high = "yellow") +  # warna gradasi
      theme_minimal(base_size = 15) +
      theme(
        plot.title = element_text(hjust = 0.7, face = "bold"),
        axis.text.x = element_text(angle = 0, hjust = 1),
        legend.position = "none"  # Sembunyikan legenda jika tidak perlu
      )

    Uji Normalitas

    Sebelum menentukan uji apa yang ingin kita gunakan, kita akan mengecek apakah data yang kita gunakan adalah data normal atau tidak.

    ProfitPerType <- split(Kopi$Profit, Kopi$'Product Type')
    
    sapply(ProfitPerType, length)
    ##     Coffee   Espresso Herbal Tea        Tea 
    ##       1056       1176       1056        960
    NormalType <- data.frame(
      `Product Type` = names(ProfitPerType),
      P_Value = sapply(ProfitPerType, function(x) shapiro.test(x)$p.value)
    )
    
    print(NormalType)
    ##            Product.Type      P_Value
    ## Coffee           Coffee 2.986464e-36
    ## Espresso       Espresso 8.433837e-35
    ## Herbal Tea   Herbal Tea 6.263336e-29
    ## Tea                 Tea 1.202835e-36

    Melihat plot normal data.

    par(mfrow=c(2,2)) 
    # Q-Q Plot untuk Coffee
    qqnorm(ProfitPerType$Coffee, main = "Q-Q Plot: Coffee");
    qqline(ProfitPerType$Coffee, col = "red")
    # Q-Q Plot untuk Espresso
    qqnorm(ProfitPerType$Espresso, main = "Q-Q Plot: Espresso");
    qqline(ProfitPerType$Espresso, col = "red")
    
    # Q-Q Plot untuk Tea
    qqnorm(ProfitPerType$Tea, main = "Q-Q Plot: Tea");
    qqline(ProfitPerType$Tea, col = "red")
    
    # Q-Q Plot untuk Herbal Tea
    qqnorm(ProfitPerType$`Herbal Tea`, main = "Q-Q Plot: Herbal Tea");
    qqline(ProfitPerType$`Herbal Tea`, col = "red")

    Dari hasil diatas, kita dapat mendapatkan hasil bahwa data profit yang dibagi ke Product Type didapatkan bahwa data tidak normal. Oleh karena itu, kita akan melanjutkan ujinya menggunakan uji Kruskal-Wallis.

    Uji Kruskal

    #Membuat data frame tapi karna jumlahnya tidak sama maka menggunakan stack
    ProfitPerTypeLong <- stack(ProfitPerType) 
    colnames(ProfitPerTypeLong) <- c("Profit", "Product_Type")
    
    kruskal.test(Profit ~ Product_Type, data = ProfitPerTypeLong)
    ## 
    ##  Kruskal-Wallis rank sum test
    ## 
    ## data:  Profit by Product_Type
    ## Kruskal-Wallis chi-squared = 2.4137, df = 3, p-value = 0.4911
    Didapatkan hasil p-value = 0.4911, yang berarti lebih besar dari alpha, hal itu menunjukkan bahwa tidak terdapat perbedaan yang signifikan dari keempat Product Type.

    Analisis State

    Plot

    Plot yang ditampilkan adalah diagram batang horizontal yang menggambarkan total keuntungan (Total Profit) per daerah (state) dalam dataset Coffee Chain, dengan sumbu y menunjukkan 20 kategori state, sedangkan sumbu x menunjukkan nilai profit dalam dolar (USD) dengan skala hingga 30.000.

    ggplot(ProfitState, aes(y = reorder(State, Total_Profit), x = Total_Profit, fill = Total_Profit)) +
      geom_bar(stat = "identity", width = 0.7) +
      geom_text(aes(label = comma(Total_Profit)), hjust = 1, size = 3, fontface = "bold", color = "#878787") +
      labs(title = "Total Profit per State",
           x = "Total Profit",
           y = "State") +
      scale_fill_gradient2(low = "white", mid = "#EFDDCF", high = "yellow") +  # warna gradasi
      theme_minimal(base_size = 12) +
      theme(
        plot.title = element_text(hjust = 0.5, face = "bold"),
        axis.text.x = element_text(angle = 0, hjust = 1),
        legend.position = "none"  # Sembunyikan legenda jika tidak perlu
      )

    Uji Normal

    Sebelum menentukan uji apa yang ingin kita gunakan, kita akan mengecek apakah data yang kita gunakan adalah data normal atau tidak.

    ProfitPerState <- split(Kopi$Profit, Kopi$State)
    
    sapply(ProfitPerState, length)
    ##    California      Colorado   Connecticut       Florida      Illinois 
    ##           288           264           168           216           216 
    ##          Iowa     Louisiana Massachusetts      Missouri        Nevada 
    ##           216           168           144           216           264 
    ## New Hampshire    New Mexico      New York          Ohio      Oklahoma 
    ##           168           168           192           216           168 
    ##        Oregon         Texas          Utah    Washington     Wisconsin 
    ##           264           168           288           240           216
    NormalState <- data.frame(
      `Product State` = names(ProfitPerState),
      P_Value = sapply(ProfitPerState, function(x) shapiro.test(x)$p.value)
    )
    DT::datatable(NormalState)
    Dari hasil diatas, dapat mendapatkan hasil bahwa data profit yang dibagi ke State didapatkan bahwa terdapat data yang tidak normal. Oleh karena itu, kita akan melanjutkan ujinya menggunakan uji Kruskal-Wallis.

    Uji Kruskal

    #Membuat data frame tapi karna jumlahnya tidak sama maka menggunakan stack
    ProfitPerStateLong <- stack(ProfitPerState) 
    colnames(ProfitPerStateLong) <- c("Profit", "State")
    
    kruskal.test(Profit ~ State, data = ProfitPerStateLong)
    ## 
    ##  Kruskal-Wallis rank sum test
    ## 
    ## data:  Profit by State
    ## Kruskal-Wallis chi-squared = 950.82, df = 19, p-value < 2.2e-16
    Didapatkan hasil p-value = 2.2e-16, yang berarti lebih kecil dari alpha, hal itu menunjukkan bahwa terdapat perbedaan yang signifikan dari 20 state.

    Uji Lanjut

    #Uji Lanjut
    DunnState <- dunnTest(Profit ~ State, data = ProfitPerStateLong, method = "bonferroni")
    DT::datatable(DunnState$res)
    # Simpan hasil ke dalam data frame
    DunnStateDF <- as.data.frame(DunnState$res)
    
    # Filter misalnya p-value unadjusted < 0.05
    Berbeda <- subset(DunnStateDF, P.unadj < 0.05)
    DT::datatable(Berbeda)
    Dari hasil di atas, dapat kita ketahui dari 190 perbandingan, terdapat 145 yang signifikan. Berarti dapat kita simpulkan secara kasar bahwa mayoritas perbandingan daerah (state) berbeda secara signifikan.

    Kesimpulan

    Berdasarkan analisis terhadap dataset Coffee Chain, diperoleh beberapa temuan penting. Pertama, diagram batang horizontal yang menggambarkan total keuntungan (Total Profit) per jenis produk (Product Type), dapat diketahui bahwa Coffee memberikan profit terbanyak dan teh memberikan profit paling kecil. Walau seperti itu, uji kruskal wallis menunjukkan bahwa tidak terdapat perbedaan yang signifikan antar keempat kategori produk (Coffee, Espresso, Herbal Tea, dan Tea), dengan nilai p-value sebesar 0.4911 (lebih besar dari α = 0.05). Hal ini mengindikasikan bahwa jenis produk tidak memberikan pengaruh yang signifikan terhadap profit.

    Selanjutnya, dari diagram batang horizontal kedua yang menggambarkan total keuntungan (Total Profit) per daerah (State) dapat diketahui bahwa California memberikan keuntungan yang paling besar dan New Mexico memberikan profit paling sedikit. Uji dunn menunjukkan bahwa terdapat perbedaan yang signifikan antar ke-20 kategori state. Dari 190 kemungkinan perbandingan antar state, ditemukan bahwa 145 perbandingan menunjukkan hasil yang signifikan. Dengan demikian, dapat disimpulkan bahwa mayoritas wilayah memiliki perbedaan profit yang signifikan satu sama lain.