1. Deskripsi

Dalam manajemen operasional, salah satu fungsi penting pada Sistem Informasi Manajemen adalah mendukung pengambilan keputusan terkait alokasi sumber daya. Laporan berfokus pada Marketing Return on Investment.

Laporan ini dibuat untuk menganalisis apakah biaya pemasaran yang dikeluarkan di setiap wilayah (Central, East, South, dan West) berbanding lurus dengan hasil penjualan. Dengan insight ini, manajemen dapat mengidentifikasi wilayah yang marketingnya tinggi tetapi penjualan rendah dan melakukan realokasi anggaran ke wilayah yang lebih responsif terhadap iklan.

2. Menyiapkan Data

2.1 Memanggil Library yang Akan Digunakan

library(readxl)
## Warning: package 'readxl' was built under R version 4.5.2
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.5.3
## Warning: package 'ggplot2' was built under R version 4.5.2
## Warning: package 'tidyr' was built under R version 4.5.3
## Warning: package 'readr' was built under R version 4.5.3
## Warning: package 'purrr' was built under R version 4.5.3
## Warning: package 'dplyr' was built under R version 4.5.2
## Warning: package 'stringr' was built under R version 4.5.2
## Warning: package 'forcats' was built under R version 4.5.2
## Warning: package 'lubridate' was built under R version 4.5.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.2.0
## ✔ forcats   1.0.1     ✔ stringr   1.6.0
## ✔ ggplot2   4.0.2     ✔ tibble    3.3.0
## ✔ lubridate 1.9.5     ✔ tidyr     1.3.2
## ✔ purrr     1.2.2     
## ── 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(janitor)
## Warning: package 'janitor' was built under R version 4.5.3
## 
## Attaching package: 'janitor'
## 
## The following objects are masked from 'package:stats':
## 
##     chisq.test, fisher.test
library(scales)
## Warning: package 'scales' was built under R version 4.5.2
## 
## Attaching package: 'scales'
## 
## The following object is masked from 'package:purrr':
## 
##     discard
## 
## The following object is masked from 'package:readr':
## 
##     col_factor

2.2 Mengimport Data yang Digunakan

X1_Tugas_SIM_2025B_Coffee_Chain_Datasets <- read_excel("D:/KULIAH/KELAS/SEMESTER 2/Sistem Informasi Manajemen/1. Tugas SIM 2025B - Coffee Chain Datasets.xlsx")
View(X1_Tugas_SIM_2025B_Coffee_Chain_Datasets)
data_coffe <- X1_Tugas_SIM_2025B_Coffee_Chain_Datasets
data_coffe
## # A tibble: 4,248 × 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  Colombi… Beans         
##  3         970 2012-01-01 00:00:00 Central Major Market  Decaf I… Beans         
##  4         303 2012-01-01 00:00:00 Central Major Market  Green T… Leaves        
##  5         303 2012-01-01 00:00:00 Central Major Market  Caffe M… Beans         
##  6         720 2012-01-01 00:00:00 Central Major Market  Decaf E… Beans         
##  7         970 2012-01-01 00:00:00 Central Major Market  Chamomi… Leaves        
##  8         719 2012-01-01 00:00:00 Central Major Market  Lemon    Leaves        
##  9         970 2012-01-01 00:00:00 Central Major Market  Mint     Leaves        
## 10         719 2012-01-01 00:00:00 Central Major Market  Darjeel… Leaves        
## # ℹ 4,238 more rows
## # ℹ 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>
View(data_coffe)

2.3 Membersihkan Data yang Digunakan

data_coffe <- data_coffe %>%
  clean_names()%>%
  mutate(across(where(is.numeric), as.numeric))
names(data_coffe)
##  [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"

2.4 Mengetahui Struktur Data

str(data_coffe)
## 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 ...
head(data_coffe)
## # 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 Irish C… 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 Mocha    Beans       
## 6       720 2012-01-01 00:00:00 Central Major Market Decaf Espresso 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>
tail(data_coffe)
## # A tibble: 6 × 20
##   area_code date                market market_size  product         product_line
##       <dbl> <dttm>              <chr>  <chr>        <chr>           <chr>       
## 1       425 2013-12-01 00:00:00 West   Small Market Lemon           Leaves      
## 2       206 2013-12-01 00:00:00 West   Small Market Caffe Latte     Beans       
## 3       509 2013-12-01 00:00:00 West   Small Market Caffe Mocha     Beans       
## 4       360 2013-12-01 00:00:00 West   Small Market Decaf Espresso  Beans       
## 5       360 2013-12-01 00:00:00 West   Small Market Colombian       Beans       
## 6       206 2013-12-01 00:00:00 West   Small Market Decaf Irish Cr… 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>
colnames(data_coffe)
##  [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"

2.5 Mengetahui Statistika Deskriptif dari Data yang Digunakan

summary(data_coffe)
##    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

3. Melakukan Uji Asumsi: Normalitas Data

Melakukan uji asumsi dengan menggunakan Shapiro-Wilk untuk melihat apakah data yang digunakan berdistribusi normal atau tidak. Data yang normal menunjukkan stabilitas operasional, sedangkan data yang tidak normal mengindikasikan adanya anomali atau fluktuasi yang ekstrem.

cat("--- Hasil Uji Normalitas ---\n")
## --- Hasil Uji Normalitas ---
shapiro.test(data_coffe$sales)
## 
##  Shapiro-Wilk normality test
## 
## data:  data_coffe$sales
## W = 0.78969, p-value < 2.2e-16
shapiro.test(data_coffe$marketing)
## 
##  Shapiro-Wilk normality test
## 
## data:  data_coffe$marketing
## W = 0.81776, p-value < 2.2e-16

Interpretasi:

Jika nilai p-value > 0.05, maka data berdistribusi normal. Sedangkan jika nilai p-value < 0.05, maka data tidak normal. Nilai p-value dari sales dan marketing < 0.05, maka data dinyatakan tidak normal.

4. Metode Statistika yang digunakan

Untuk mendapatkan hasil yang akurat, digunakan dua pendekatan statistika sebagai berikut:

4.1 Rasio Efisiensi

Menghitung beberapa persen biaya pemasaran dibandingkan total penjualan. Semakin rendah rasionya, maka semakin efisien wilayah tersebut dalam menghasilkan pendapatan. Dapat dilakukan dengan rumus: Rasio marketing = (Total marketing/Total sales) * 100%

analisis_market <- data_coffe %>%
  group_by(market) %>%  
  summarise(
    total_penjualan = sum(sales, na.rm = TRUE),
    total_marketing = sum(marketing, na.rm = TRUE),
    rasio_marketing = (total_marketing / total_penjualan)*100
  )  
print(analisis_market)
## # A tibble: 4 × 4
##   market  total_penjualan total_marketing rasio_marketing
##   <chr>             <dbl>           <dbl>           <dbl>
## 1 Central          265045           39412            14.9
## 2 East             178576           29442            16.5
## 3 South            103926           16562            15.9
## 4 West             272264           47058            17.3

Interpretasi:

Semakin rendah rasio marketingnya, maka semakin efisien wilayah tersebut dalam menghasilkan pendapatan. Hasil menunjukkan bahwa rasio marketing pada wilayah Central lebih kecil dibandingkan dengan wilayah lainnya, yaitu sebanyak 14.86%. Sehingga dapat disimpulkan bahwa wilayah Central lebih efisien dalam menghasilkan pendapatan.

4.2 Korelasi Spearman

Korelasi spearman digunakan untuk memberikan gambaran objektif mengenai konsistensi hubungan antara input biaya (marketing) dan output pendapatan (sales). Dengan mengandalkan peringkat data, analisis ini mampu mengeliminasi bias yang disebabkan oleh data ekstrem, sehingga dapat mengidentifikasi wilayah mana yang memiliki respon pasar yang paling stabil terhadap kampanye perusahaan.

korelasi_spearman = cor(data_coffe$marketing, data_coffe$sales, method = "spearman", use = "complete.obs")
print(korelasi_spearman)
## [1] 0.8071508

Interpretasi:

Hasil korelasi spearmannya adalah 0.80 maka terdapat hubungan yang sangat kuat. Strategi pemasaran yang dilakukan sangat konsisten. Setiap kenaikan budget marketing hampir selalu diikuti kenaikan peringkat penjualan.

5. Visualisasi Perbandingan Sales dengan Marketing

5.1 Transformasi Data

datalengkap <- analisis_market %>%
  select(market, total_penjualan, total_marketing) %>%
  pivot_longer(cols = c(total_penjualan, total_marketing),
               names_to = "Metric", values_to = "Amount")
datalengkap
## # A tibble: 8 × 3
##   market  Metric          Amount
##   <chr>   <chr>            <dbl>
## 1 Central total_penjualan 265045
## 2 Central total_marketing  39412
## 3 East    total_penjualan 178576
## 4 East    total_marketing  29442
## 5 South   total_penjualan 103926
## 6 South   total_marketing  16562
## 7 West    total_penjualan 272264
## 8 West    total_marketing  47058

Interpretasi:

Transformasi data dengan fungsi pivot_longer digunakan untuk menyelaraskan struktur data dengan kebutuhan visualisasi grouped bar chart. Dengan mengonversi format wide menjadi long, variabel “sales” dan “marketing” dapat dikategorikan ke dalam satu dimensi metrik, sehingga memungkinkan perbandingan visual yang presisi antar wilayah dalam satu grafik.

5.2 Visualisasi Barchart Berdampingan

ggplot(datalengkap, aes(x = market, y = Amount, fill = Metric)) +
  geom_bar(stat = "identity", position = "dodge") +
  scale_y_continuous(labels = scales::comma) +
  scale_fill_manual(values = c("total_marketing" = "lightblue", "total_penjualan" = "darkblue" )) +
  labs(tittle = "Perbandingan Sales dengan Marketing per Wilayah",
       x = "Wilayah (Market)", y = "Nilai (USD)",
       fill = "Keterangan") + 
  theme_minimal()
## Ignoring unknown labels:
## • tittle : "Perbandingan Sales dengan Marketing per Wilayah"

  theme(axis.text.x = element_text(angle = 45, hjust = 1))
## <theme> List of 1
##  $ axis.text.x: <ggplot2::element_text>
##   ..@ family       : NULL
##   ..@ face         : NULL
##   ..@ italic       : chr NA
##   ..@ fontweight   : num NA
##   ..@ fontwidth    : num NA
##   ..@ colour       : NULL
##   ..@ size         : NULL
##   ..@ hjust        : num 1
##   ..@ vjust        : NULL
##   ..@ angle        : num 45
##   ..@ lineheight   : NULL
##   ..@ margin       : NULL
##   ..@ debug        : NULL
##   ..@ inherit.blank: logi FALSE
##  @ complete: logi FALSE
##  @ validate: logi TRUE

Interpretasi:

Hasil bar chart menunjukkan bahwa wilayah West dan Central berkontribusi besar terhadap pendapatan bagi perusahaan. Yang mana kedua wilayah tersebut memiliki total penjualan di atas 200.000 USD. Wilayah South memiliki total marketing yang paling sedikit dibanding wilayah lainnya. Maknanya, wilayah South mengeluarkan uang paling sedikit untuk iklan. Wilayah East memiliki total marketing lebih sedikit dibandingkan dengan Central dan West, tetapi wilayah ini mampu menghasilkan volume penjualan yang lebih besar.

5.3 Visualisai Efisiensi Marketing

ggplot(analisis_market, aes(x = reorder(market, rasio_marketing), y = rasio_marketing)) +
  geom_col(fill = "blue") +
    coord_flip() +
    labs(title = "Rasio Biaya Marketing terhadap Penjualan (%)",
         subtitle = "Semakin kecil persentase, semakin efisien penggunaan budget",
         x = "Wilayah", y = "Persentase Marketing/Sales") +
    theme_light()

### Interpretasi Hasil menunjukkan bahwa persentase wilayah Central lebih kecil dibanding wilayah lainnya. Hal ini menunjukkan bahwa wilayah Central lah yang menggunakan budget dengan efisien.

6. Kesimpulan

6.1 Validitas dan Karakteristik Data

Melakukan uji normalitas dengan menggunakan uji normalitas Shapiro-Wilk untuk mengetahui fluktutasi data_coffe pada kolom ‘sales’ dan ‘marketing’ berada dalam batas yang wajar atau memiliki banyak anomali. Data menunjukkan bahwa terdapat variasi antar wilayah yang mengakibatkan data dikatakan tidak berdistribusi normal.

6.2 Performa Penjualan dan Biaya Pemasaran

Wilayah West dan Central berkontribusi besar dalam pendapatan sebuah perusahaan karena kedua wilayah tersebut menghasilkan total penjualan lebih dari 200.000 USD. Perusahaan memiliki kebijakan dimana manajemen pusat mematok biaya iklan berdasarkan persentase target penjualan. Hal ini dapat dibuktikan dengan rasio pemasaran di setiap wilayah yang cenderung stabil di angka sekitar 16%.

6.3 Efektivitas Strategi dengan Korelasi Pearson

Nilai korelasi pearson membuktikan dengan kuat mengenai efisiensi operasional. Wilayah dengan nilai korelasi yang tinggi (rho mendekati 1) menunjukkan bahwa sistem informasi pemasaran bekerja dengan sangat baik karena setiap kenaikan biaya iklam terbukti mampu mendorong kenaikan penjualan secara konsisten. Berbeda dengan wilayah yang memiliki korelasi yang rendah. Wilayah dengan korelasi yang rendah membuktikan bahwa penjualan lebih dipengaruhi oleh faktor eksternal seperti lokasi atau selera pasar lokal daripada intensitas iklan.