Analisis Pengaruh Jenis Produk dan Wilayah terhadap Profit pada Coffee Chain Dataset

                                      Deskripsi Insight

Analisis ini bertujuan untuk mengetahui apakah profit dipengaruhi oleh jenis produk dan wilayah penjualan pada Coffee Chain Dataset. Insight ini penting karena setiap jenis produk memiliki karakteristik penjualan yang berbeda, begitu pula dengan wilayah yang dapat memengaruhi daya beli dan preferensi konsumen.

Dengan mengetahui hubungan ini, perusahaan dapat menentukan strategi penjualan yang lebih optimal, seperti fokus pada produk tertentu di wilayah dengan profit tertinggi.

install.packages("readxl", repos = "https://cloud.r-project.org")
## Installing package into 'C:/Users/LENOVO/AppData/Local/R/win-library/4.5'
## (as 'lib' is unspecified)
## package 'readxl' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'readxl'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problem copying
## C:\Users\LENOVO\AppData\Local\R\win-library\4.5\00LOCK\readxl\libs\x64\readxl.dll
## to C:\Users\LENOVO\AppData\Local\R\win-library\4.5\readxl\libs\x64\readxl.dll:
## Permission denied
## Warning: restored 'readxl'
## 
## The downloaded binary packages are in
##  C:\Users\LENOVO\AppData\Local\Temp\Rtmp2BBhfu\downloaded_packages
library(readxl)
## Warning: package 'readxl' was built under R version 4.5.3
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.5.2
## 
## 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(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.5.2
data <- read_excel("~/1. Tugas SIM 2025B - Coffee Chain Datasets.xlsx")
head(data)
## # A tibble: 6 × 20
##   `Area Code` Date                Market  `Market Size` Product   `Product Line`
##         <dbl> <dttm>              <chr>   <chr>         <chr>     <chr>         
## 1         719 2012-01-01 00:00:00 Central Major Market  Amaretto  Beans         
## 2         970 2012-01-01 00:00:00 Central Major Market  Colombian Beans         
## 3         970 2012-01-01 00:00:00 Central Major Market  Decaf Ir… Beans         
## 4         303 2012-01-01 00:00:00 Central Major Market  Green Tea Leaves        
## 5         303 2012-01-01 00:00:00 Central Major Market  Caffe Mo… Beans         
## 6         720 2012-01-01 00:00:00 Central Major Market  Decaf Es… Beans         
## # ℹ 14 more variables: `Product Type` <chr>, State <chr>, Type <chr>,
## #   `Budget COGS` <dbl>, `Budget Margin` <dbl>, `Budget Profit` <dbl>,
## #   `Budget Sales` <dbl>, COGS <dbl>, Inventory <dbl>, Margin <dbl>,
## #   Marketing <dbl>, Profit <dbl>, Sales <dbl>, `Total Expenses` <dbl>
str(data)
## tibble [4,248 × 20] (S3: tbl_df/tbl/data.frame)
##  $ Area Code     : num [1:4248] 719 970 970 303 303 720 970 719 970 719 ...
##  $ Date          : POSIXct[1:4248], format: "2012-01-01" "2012-01-01" ...
##  $ Market        : chr [1:4248] "Central" "Central" "Central" "Central" ...
##  $ Market Size   : chr [1:4248] "Major Market" "Major Market" "Major Market" "Major Market" ...
##  $ Product       : chr [1:4248] "Amaretto" "Colombian" "Decaf Irish Cream" "Green Tea" ...
##  $ Product Line  : chr [1:4248] "Beans" "Beans" "Beans" "Leaves" ...
##  $ Product Type  : chr [1:4248] "Coffee" "Coffee" "Coffee" "Tea" ...
##  $ State         : chr [1:4248] "Colorado" "Colorado" "Colorado" "Colorado" ...
##  $ Type          : chr [1:4248] "Regular" "Regular" "Decaf" "Regular" ...
##  $ Budget COGS   : num [1:4248] 90 80 100 30 60 80 140 50 50 40 ...
##  $ Budget Margin : num [1:4248] 130 110 140 50 90 130 160 80 70 70 ...
##  $ Budget Profit : num [1:4248] 100 80 110 30 70 80 110 20 40 20 ...
##  $ Budget Sales  : num [1:4248] 220 190 240 80 150 210 300 130 120 110 ...
##  $ COGS          : num [1:4248] 89 83 95 44 54 72 170 63 60 58 ...
##  $ Inventory     : num [1:4248] 777 623 821 623 456 ...
##  $ Margin        : num [1:4248] 130 107 139 56 80 108 171 87 80 72 ...
##  $ Marketing     : num [1:4248] 24 27 26 14 15 23 47 57 19 22 ...
##  $ Profit        : num [1:4248] 94 68 101 30 54 53 99 0 33 17 ...
##  $ Sales         : num [1:4248] 219 190 234 100 134 180 341 150 140 130 ...
##  $ Total Expenses: num [1:4248] 36 39 38 26 26 55 72 87 47 55 ...
summary(data)
##    Area Code          Date                        Market         
##  Min.   :203.0   Min.   :2012-01-01 00:00:00   Length:4248       
##  1st Qu.:417.0   1st Qu.:2012-06-23 12:00:00   Class :character  
##  Median :573.0   Median :2012-12-16 12:00:00   Mode  :character  
##  Mean   :582.3   Mean   :2012-12-15 22:00:00                     
##  3rd Qu.:772.0   3rd Qu.:2013-06-08 12:00:00                     
##  Max.   :985.0   Max.   :2013-12-01 00:00:00                     
##  Market Size          Product          Product Line       Product Type      
##  Length:4248        Length:4248        Length:4248        Length:4248       
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##     State               Type            Budget COGS     Budget Margin   
##  Length:4248        Length:4248        Min.   :  0.00   Min.   :-210.0  
##  Class :character   Class :character   1st Qu.: 30.00   1st Qu.:  50.0  
##  Mode  :character   Mode  :character   Median : 50.00   Median :  70.0  
##                                        Mean   : 74.83   Mean   : 100.8  
##                                        3rd Qu.: 90.00   3rd Qu.: 130.0  
##                                        Max.   :450.00   Max.   : 690.0  
##  Budget Profit      Budget Sales         COGS          Inventory      
##  Min.   :-320.00   Min.   :   0.0   Min.   :  0.00   Min.   :-3534.0  
##  1st Qu.:  20.00   1st Qu.:  80.0   1st Qu.: 43.00   1st Qu.:  432.0  
##  Median :  40.00   Median : 130.0   Median : 60.00   Median :  619.0  
##  Mean   :  60.91   Mean   : 175.6   Mean   : 84.43   Mean   :  749.4  
##  3rd Qu.:  80.00   3rd Qu.: 210.0   3rd Qu.:100.00   3rd Qu.:  910.5  
##  Max.   : 560.00   Max.   :1140.0   Max.   :364.00   Max.   : 8252.0  
##      Margin          Marketing          Profit           Sales    
##  Min.   :-302.00   Min.   :  0.00   Min.   :-638.0   Min.   : 17  
##  1st Qu.:  52.75   1st Qu.: 13.00   1st Qu.:  17.0   1st Qu.:100  
##  Median :  76.00   Median : 22.00   Median :  40.0   Median :138  
##  Mean   : 104.29   Mean   : 31.19   Mean   :  61.1   Mean   :193  
##  3rd Qu.: 132.00   3rd Qu.: 39.00   3rd Qu.:  92.0   3rd Qu.:230  
##  Max.   : 613.00   Max.   :156.00   Max.   : 778.0   Max.   :912  
##  Total Expenses  
##  Min.   : 10.00  
##  1st Qu.: 33.00  
##  Median : 46.00  
##  Mean   : 54.06  
##  3rd Qu.: 65.00  
##  Max.   :190.00
library(dplyr)

#Cek nama kolom
colnames(data)
##  [1] "Area Code"      "Date"           "Market"         "Market Size"   
##  [5] "Product"        "Product Line"   "Product Type"   "State"         
##  [9] "Type"           "Budget COGS"    "Budget Margin"  "Budget Profit" 
## [13] "Budget Sales"   "COGS"           "Inventory"      "Margin"        
## [17] "Marketing"      "Profit"         "Sales"          "Total Expenses"
#ambil data
data_clean <- data %>%
  select(`Product Type`, Market, Profit) %>%
  filter(!is.na(Profit))
library(dplyr)

avg_product <- data_clean %>%
  group_by(`Product Type`) %>%
  summarise(avg_profit = mean(Profit))

avg_product
## # A tibble: 4 × 2
##   `Product Type` avg_profit
##   <chr>               <dbl>
## 1 Coffee               70.7
## 2 Espresso             58.4
## 3 Herbal Tea           59.9
## 4 Tea                  55.2
#Visualisasi Data
#Rata-rata Profit Produk

library(dplyr)
library(ggplot2)

# Hitung rata-rata profit
avg_product <- data_clean %>%
  group_by(`Product Type`) %>%
  summarise(avg_profit = mean(Profit)) %>%
  arrange(avg_profit)

# Visualisasi
ggplot(avg_product, aes(x = reorder(`Product Type`, avg_profit), 
                        y = avg_profit, 
                        fill = avg_profit)) +
  geom_col(width = 0.7) +
  geom_text(aes(label = round(avg_profit, 1)),
            hjust = -0.2,
            size = 3.5) +
  coord_flip() +
  labs(title = "💰 Rata-rata Profit per Jenis Produk",
       subtitle = "Perbandingan profit rata-rata antar produk",
       x = "Jenis Produk",
       y = "Rata-rata Profit",
       fill = "Profit") +
  scale_fill_gradient(low = "#A8DADC", high = "#1D3557") +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", size = 14),
    plot.subtitle = element_text(size = 11),
    axis.text = element_text(size = 10)
  )

Interpretasi Visualisasi Rata-rata profit per Jenis Produk

Berdasarkan visualisasi rata-rata profit per jenis produk, terlihat bahwa terdapat perbedaan profit antar produk. Produk Coffee memiliki rata-rata profit tertinggi dibandingkan produk lainnya, yang mengindikasikan bahwa produk tersebut memiliki performa penjualan atau margin yang lebih baik. Sebaliknya, produk Tea memiliki rata-rata profit terendah, yang dapat mengindikasikan kontribusi profit yang kurang optimal.

Sementara itu, produk Espresso dan Herbal Tea berada pada tingkat profit menengah, menunjukkan performa yang cukup stabil namun tidak sebaik Coffee. Perbedaan ini menunjukkan bahwa jenis produk berpotensi memengaruhi besar kecilnya profit yang dihasilkan.

#Visualisasi Data 2 (Distribusi Profit)

ggplot(data_clean, aes(x = Profit)) +
  geom_histogram(bins = 30, fill = "pink", color = "white", alpha = 0.9) +
  geom_vline(aes(xintercept = mean(Profit)), 
             color = "red", linetype = "dashed", linewidth = 1) +
  labs(title = "📊 Distribusi Profit",
       subtitle = "Garis merah menunjukkan rata-rata profit",
       x = "Profit",
       y = "Frekuensi") +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold"),
    plot.subtitle = element_text(size = 11)
  )

Interpretasi Visualisasi Distribusi Profit

Berdasarkan histogram distribusi profit, terlihat bahwa nilai profit memiliki penyebaran yang cukup luas. Sebagian besar data terkonsentrasi pada nilai profit yang relatif rendah hingga menengah, sementara terdapat beberapa nilai profit yang sangat tinggi yang membentuk ekor distribusi di sisi kanan.

Garis vertikal menunjukkan rata-rata profit, yang berada di sekitar pusat distribusi, namun tidak sepenuhnya simetris. Hal ini mengindikasikan bahwa distribusi profit cenderung sedikit miring ke kanan (positively skewed), di mana terdapat beberapa transaksi dengan profit yang jauh lebih tinggi dibandingkan mayoritas data.

Kondisi ini menunjukkan bahwa meskipun sebagian besar penjualan menghasilkan profit dalam kisaran tertentu, terdapat beberapa kasus yang memberikan kontribusi profit yang sangat besar terhadap keseluruhan data.

#Visualisasi Data 3
#Boxplot Distribusi Profit per Wilayah

ggplot(data_clean, aes(x = Market, y = Profit, fill = Market)) +
  geom_boxplot(alpha = 0.85) +
  labs(title = "Distribusi Profit per Wilayah",
       subtitle = "Perbandingan profit antar wilayah",
       x = "Wilayah",
       y = "Profit") +
  scale_fill_brewer(palette = "Set3") +
  theme_minimal() +
  theme(
    legend.position = "none",
    plot.title = element_text(face = "bold")
  )

Interpretasi Visualisasi Profit per Wilayah

Berdasarkan boxplot distribusi profit per wilayah, terlihat bahwa terdapat perbedaan tingkat profit antar wilayah penjualan. Setiap wilayah memiliki median dan rentang profit yang berbeda, yang menunjukkan adanya variasi performa penjualan di masing-masing wilayah.

Wilayah dengan median profit yang lebih tinggi menunjukkan bahwa secara umum wilayah tersebut menghasilkan keuntungan yang lebih besar dibandingkan wilayah lainnya. Selain itu, terlihat juga adanya perbedaan dalam penyebaran data, di mana beberapa wilayah memiliki rentang (interquartile range) yang lebih lebar, yang mengindikasikan variasi profit yang lebih tinggi.

Boxplot juga menunjukkan adanya beberapa nilai ekstrem (outlier), yang menandakan terdapat transaksi dengan profit yang jauh lebih tinggi atau lebih rendah dibandingkan mayoritas data. Hal ini menunjukkan bahwa performa profit tidak hanya berbeda antar wilayah, tetapi juga memiliki variasi yang cukup besar di dalam masing-masing wilayah.

Secara keseluruhan, visualisasi ini mengindikasikan bahwa wilayah penjualan berpotensi memengaruhi besar kecilnya profit yang dihasilkan.

#Analisis Data (ANOVA)

anova_result <- aov(Profit ~ `Product Type` * Market, data = data_clean)
summary(anova_result)
##                         Df   Sum Sq Mean Sq F value   Pr(>F)    
## `Product Type`           3   141680   47227    5.02  0.00179 ** 
## Market                   3   317768  105923   11.26 2.35e-07 ***
## `Product Type`:Market    8  3651726  456466   48.52  < 2e-16 ***
## Residuals             4233 39822463    9408                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Interpretasi Metode Anova

Berdasarkan hasil uji Two-Way ANOVA, diperoleh bahwa variabel jenis produk memiliki pengaruh signifikan terhadap profit (p-value = 0.00179 < 0.05). Hal ini menunjukkan bahwa terdapat perbedaan rata-rata profit antar jenis produk.

Selain itu, variabel wilayah penjualan juga berpengaruh signifikan terhadap profit (p-value = 2.35e-07 < 0.05), yang mengindikasikan adanya perbedaan profit antar wilayah.

Hasil analisis juga menunjukkan adanya interaksi yang sangat signifikan antara jenis produk dan wilayah (p-value < 0.05). Hal ini berarti pengaruh jenis produk terhadap profit bergantung pada wilayah penjualannya.

Dengan demikian, suatu produk dapat menghasilkan profit yang tinggi di wilayah tertentu, namun tidak selalu memberikan hasil yang sama di wilayah lainnya.

Temuan ini menunjukkan bahwa strategi bisnis tidak dapat dilakukan secara seragam untuk semua wilayah. Perusahaan perlu menyesuaikan strategi penjualan dengan mempertimbangkan kombinasi antara jenis produk dan wilayah untuk memaksimalkan profit.

#Analisis Data (Regresi Linear) 
model <- lm(Profit ~ `Product Type` * Market, data = data_clean)
summary(model)
## 
## Call:
## lm(formula = Profit ~ `Product Type` * Market, data = data_clean)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -679.94  -42.93  -16.58   30.34  619.98 
## 
## Coefficients: (1 not defined because of singularities)
##                                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                            60.5833     4.9496  12.240  < 2e-16 ***
## `Product Type`Espresso                 21.0174     7.5607   2.780  0.00546 ** 
## `Product Type`Herbal Tea               13.0982     7.2455   1.808  0.07071 .  
## `Product Type`Tea                       5.8750     7.2455   0.811  0.41750    
## MarketEast                            123.8929     8.9720  13.809  < 2e-16 ***
## MarketSouth                             0.3646     8.5730   0.043  0.96608    
## MarketWest                            -32.6186     7.3927  -4.412 1.05e-05 ***
## `Product Type`Espresso:MarketEast    -179.4769    12.3434 -14.540  < 2e-16 ***
## `Product Type`Herbal Tea:MarketEast  -167.8383    12.3308 -13.611  < 2e-16 ***
## `Product Type`Tea:MarketEast         -131.4194    12.0054 -10.947  < 2e-16 ***
## `Product Type`Espresso:MarketSouth    -29.8646    11.7825  -2.535  0.01129 *  
## `Product Type`Herbal Tea:MarketSouth  -43.9888    12.2676  -3.586  0.00034 ***
## `Product Type`Tea:MarketSouth               NA         NA      NA       NA    
## `Product Type`Espresso:MarketWest      17.3235    10.6513   1.626  0.10393    
## `Product Type`Herbal Tea:MarketWest    43.2415    10.6209   4.071 4.76e-05 ***
## `Product Type`Tea:MarketWest            8.0991    10.4299   0.777  0.43748    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 96.99 on 4233 degrees of freedom
## Multiple R-squared:  0.09358,    Adjusted R-squared:  0.09058 
## F-statistic: 31.21 on 14 and 4233 DF,  p-value: < 2.2e-16

Interpretasi Regresi Linear

Berdasarkan hasil analisis regresi linear, dapat kita ketahui bahwa variabel jenis produk dan wilayah penjualan memiliki pengaruh terhadap profit, serta terdapat interaksi antara keduanya.

Wilayah East memiliki pengaruh positif yang sangat signifikan terhadap profit (p-value < 0.001), dengan peningkatan profit yang cukup besar dibandingkan wilayah acuan. Hal ini menunjukkan bahwa wilayah East merupakan pasar dengan performa profit tertinggi.

Sebaliknya, wilayah West memiliki pengaruh negatif yang signifikan terhadap profit (p-value < 0.001), yang mengindikasikan bahwa profit di wilayah tersebut cenderung lebih rendah. Sementara itu, wilayah South tidak menunjukkan pengaruh yang signifikan terhadap profit.

Dari sisi jenis produk, produk Espresso memiliki pengaruh positif yang signifikan terhadap profit (p-value < 0.01), sedangkan produk lainnya tidak menunjukkan pengaruh yang signifikan secara statistik.

Selain itu, terdapat interaksi yang signifikan antara beberapa jenis produk dan wilayah. Interaksi antara produk dengan wilayah East sebagian besar menunjukkan nilai negatif yang signifikan, yang mengindikasikan bahwa meskipun wilayah East memiliki profit tinggi secara umum, tidak semua jenis produk mampu mempertahankan performa tersebut di wilayah ini.

Dengan demikian, hasil regresi menunjukkan bahwa pengaruh jenis produk terhadap profit sangat bergantung pada wilayah penjualannya. Oleh karena itu, strategi penjualan perlu disesuaikan dengan karakteristik masing-masing wilayah untuk memperoleh profit yang optimal.