Dataset Coffee Chain merupakan data transaksi penjualan dari sebuah kedai kopi yang beroperasi di wilayah Amerika Serikat selama periode Januari 2012 sampai Desember 2013. Data yang saya impor dalam R adalah data yang berformat excel (.xlsx). Dataset terdiri dari 20 variabel yang berisi tentang informasi geografis (Area Code, State, Market, Market Size), informasi produk (Product, Product Line, Product Type, Type), serta variabel finansial seperti Sales, Profit, COGS, Marketing, Margin, Inventory, dan nilai Budget-nya masing-masing.
Insight yang ingin diambil dari laporan ini adalah tentang “Bagaimana tren profit bulanan Coffe Chain dari waktu ke waktu dan variabel apa yang paling berpengaruh terhadap profit?”
library(readxl)
library(dplyr)
library(ggplot2)
library(lubridate)
library(scales)
library(kableExtra)
cat("Package berhasil dimuat\n")
## Package berhasil dimuat
data <- read_excel("D:/Kuliah/Semester 4/SIM/1. Tugas SIM 2025B - Coffee Chain Datasets.xlsx")
data
## # 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>
data <- data %>%
mutate(YearMonth = floor_date(Date, "month"))
glimpse(data)
## Rows: 4,248
## Columns: 21
## $ `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…
## $ Market <chr> "Central", "Central", "Central", "Central", "Central"…
## $ `Market Size` <chr> "Major Market", "Major Market", "Major Market", "Majo…
## $ Product <chr> "Amaretto", "Colombian", "Decaf Irish Cream", "Green …
## $ `Product Line` <chr> "Beans", "Beans", "Beans", "Leaves", "Beans", "Beans"…
## $ `Product Type` <chr> "Coffee", "Coffee", "Coffee", "Tea", "Espresso", "Esp…
## $ State <chr> "Colorado", "Colorado", "Colorado", "Colorado", "Colo…
## $ Type <chr> "Regular", "Regular", "Decaf", "Regular", "Regular", …
## $ `Budget COGS` <dbl> 90, 80, 100, 30, 60, 80, 140, 50, 50, 40, 50, 150, 10…
## $ `Budget Margin` <dbl> 130, 110, 140, 50, 90, 130, 160, 80, 70, 70, 70, 210,…
## $ `Budget Profit` <dbl> 100, 80, 110, 30, 70, 80, 110, 20, 40, 20, 40, 130, 1…
## $ `Budget Sales` <dbl> 220, 190, 240, 80, 150, 210, 300, 130, 120, 110, 120,…
## $ COGS <dbl> 89, 83, 95, 44, 54, 72, 170, 63, 60, 58, 64, 144, 95,…
## $ Inventory <dbl> 777, 623, 821, 623, 456, 558, 1091, 435, 336, 338, 96…
## $ Margin <dbl> 130, 107, 139, 56, 80, 108, 171, 87, 80, 72, 76, 201,…
## $ Marketing <dbl> 24, 27, 26, 14, 15, 23, 47, 57, 19, 22, 19, 47, 30, 7…
## $ Profit <dbl> 94, 68, 101, 30, 54, 53, 99, 0, 33, 17, 36, 111, 87, …
## $ 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, 1…
## $ YearMonth <dttm> 2012-01-01, 2012-01-01, 2012-01-01, 2012-01-01, 2012…
missing <- colSums(is.na(data))
missing_df <- data.frame(
Variabel = names(missing),
Jumlah_Missing = missing
)
knitr::kable(missing_df)
| Variabel | Jumlah_Missing | |
|---|---|---|
| Area Code | Area Code | 0 |
| Date | Date | 0 |
| Market | Market | 0 |
| Market Size | Market Size | 0 |
| Product | Product | 0 |
| Product Line | Product Line | 0 |
| Product Type | Product Type | 0 |
| State | State | 0 |
| Type | Type | 0 |
| Budget COGS | Budget COGS | 0 |
| Budget Margin | Budget Margin | 0 |
| Budget Profit | Budget Profit | 0 |
| Budget Sales | Budget Sales | 0 |
| COGS | COGS | 0 |
| Inventory | Inventory | 0 |
| Margin | Margin | 0 |
| Marketing | Marketing | 0 |
| Profit | Profit | 0 |
| Sales | Sales | 0 |
| Total Expenses | Total Expenses | 0 |
| YearMonth | YearMonth | 0 |
cat("Jumlah baris :", nrow(data), "\n")
## Jumlah baris : 4248
cat("Jumlah kolom :", ncol(data), "\n")
## Jumlah kolom : 21
cat("Rentang tanggal:", format(min(data$Date), "%B %Y"),
"–", format(max(data$Date), "%B %Y"), "\n")
## Rentang tanggal: January 2012 – December 2013
cat("Jumlah produk :", n_distinct(data$Product), "\n")
## Jumlah produk : 13
cat("Jumlah state :", n_distinct(data$State), "\n")
## Jumlah state : 20
tren <- data %>%
group_by(YearMonth) %>%
summarise(
Profit_Aktual = sum(Profit, na.rm = TRUE),
Budget_Profit = sum(`Budget Profit`, na.rm = TRUE),
.groups = "drop"
) %>%
tidyr::pivot_longer(cols = c(Profit_Aktual, Budget_Profit),
names_to = "Kategori", values_to = "Nilai")
ggplot(tren, aes(x = YearMonth, y = Nilai,
color = Kategori, group = Kategori)) +
geom_line(linewidth = 1.2) +
geom_point(size = 2) +
scale_x_date(date_breaks = "3 months", date_labels = "%b %Y") +
scale_y_continuous(labels = comma) +
scale_color_manual(values = c("Profit_Aktual" = "#6B4226",
"Budget_Profit" = "#C4956A"),
labels = c("Budget Profit", "Profit Aktual")) +
labs(
title = "Tren Profit Aktual vs Budget Profit Bulanan (2012–2013)",
x = "Bulan",
y = "Total Profit",
color = "Keterangan",
caption = "Sumber: Coffee Chain Dataset"
) +
theme_minimal(base_size = 12) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Berdasarkan hasil visualisasi tren profit bulanan periode Januari 2012 hingga Desember 2013 terlihat bahwa profit aktual secara umum mengikuti pola yang serupa dengan budget profit yang telah ditetapkan. Hal ini menunjukkan bahwa perencanaan keuangan perusahaan relatif mampu menggambarkan kondisi aktual yang terjadi. Selain itu, terdapat pola musiman yang cukup jelas, dimana profit cenderung meningkat pada pertengahan tahun dan mengalami penurunan ketika menjelang akhir tahun. Hal ini mengindikasikan adanya pengaruh faktor musiman terhadap kinerja perusahaan, seperti pola permintaan konsumen yang lebih tinggi pada musim panas dibandingkan musim dingin di wilayah Amerika Serikat. Pada beberapa periode, profit aktual berhasil melampaui budget profit, yang menunjukkan bahwa kinerja perusahaan mampu melebihi target yang telah direncanakan. Namun terdapat fluktuasi yang cukup tajam yang terlihat pada pertengahan tahun 2012, di mana profit aktual sempat turun drastis sebelum kemudian naik kembali. Fluktuasi ini dapat mencerminkan adanya faktor eksternal maupun internal yang memengaruhi kinerja perusahaan secara sementara. Secara keseluruhan, tren profit menunjukkan arah yang positif dari 2012 ke 2013, yang dapat diartikan pertumbuhan bisnis ini cukup konsisten selama periode Januari 2012 hingga Desember 2013.
cor_vars <- data %>%
select(Profit, Sales, COGS, Marketing, Inventory, Margin,
`Budget Profit`, `Budget Sales`, `Budget COGS`, `Budget Margin`,
`Total Expenses`) %>%
na.omit()
cor(cor_vars)[, "Profit"]
## Profit Sales COGS Marketing Inventory
## 1.00000000 0.79733091 0.46483822 0.22546504 -0.09154483
## Margin Budget Profit Budget Sales Budget COGS Budget Margin
## 0.92060413 0.93760617 0.75882978 0.47986182 0.87684422
## Total Expenses
## 0.19997615
model <- lm(Profit ~ Sales + COGS + Marketing , data = data)
summary(model)
##
## Call:
## lm(formula = Profit ~ Sales + COGS + Marketing, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -123.137 -11.828 -0.518 9.241 101.270
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -22.801081 0.521941 -43.69 <2e-16 ***
## Sales 1.193813 0.004503 265.12 <2e-16 ***
## COGS -1.195341 0.012388 -96.49 <2e-16 ***
## Marketing -1.461141 0.020260 -72.12 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 20.48 on 4244 degrees of freedom
## Multiple R-squared: 0.9595, Adjusted R-squared: 0.9595
## F-statistic: 3.351e+04 on 3 and 4244 DF, p-value: < 2.2e-16
coef_data <- as.data.frame(summary(model)$coefficients)
coef_data$Variabel <- rownames(coef_data)
coef_data <- coef_data[-1, ]
coef_data$Signifikan <- ifelse(coef_data[["Pr(>|t|)"]] < 0.05,
"Signifikan (p<0.05)", "Tidak Signifikan")
ggplot(coef_data, aes(x = reorder(Variabel, Estimate),
y = Estimate, fill = Signifikan)) +
geom_col() +
geom_errorbar(aes(ymin = Estimate - 1.96 * `Std. Error`,
ymax = Estimate + 1.96 * `Std. Error`),
width = 0.3) +
coord_flip() +
scale_fill_manual(values = c("Signifikan (p<0.05)" = "#6B4226",
"Tidak Signifikan" = "#C4956A")) +
labs(
title = "Variabel yang Berpengaruh terhadap Profit",
x = "Variabel",
y = "Koefisien",
fill = "Keterangan",
caption = "Sumber: Coffee Chain Dataset"
) +
theme_minimal(base_size = 12)
Pemilihan variabel yang paling berpengaruh terhadap profit dipilih berdasarkan hasil korelasi. Meskipun terdapat banyak variabel yang memiliki korelasi cukup tinggi, tetapi terdapat beberapa variabel yang tidak digunakan untuk pemodelan regresi. Hal ini dikarenakan terdapat autokorelasi di anatar variabel, seperti Sales dan Budget Sales. Kemudian variabel Margin memiliki korelasi yang cukup besar tetapi tidak digunakan pada model, karena variabel Margin diperoleh dari variabel Profit/variabel Sales sehingga memiliki potensi multikolinearitas yang cukup tinggi. Variabel yang masuk ke dalam model regresi adalah variabel Sales, COGS, dan Marketing. Dari hasil regresi diperoleh bahwa variabel Sales memiliki pengaruh positif terhadap Profit yang menunjukkan bahwa setiap peningkatan penjualan, dengan asumsi variabel lain konstan, akan meningkatkan keuntungan. Hal ini sesuai dengan konsep dasar bisnis, di mana apenjualan merupakan sumber utama pendapatan sebuah perusahaan. Selanjutnya variabel COGS yang memiliki nilai korelasi positif menjadi memiliki pengaruh negatif terhadap profit. Kenaikan COGS seing terjadi bersamaan dengan kenaikan Sales, tetapi jika Sales dianggap tetap maka kenaikan COGS akan menurunkan profit. Yang terakhir, variabel Marketing. Secara umum, peningkatan marketing mungkin berkaitan dengan peningkatan penjualan. Tetapi jika dalam kondisi variabel lain tetap, maka peningkatan biaya marketing justru akan menambah pengeluaran dan menekan profit. Sehingga pada model regresi ini variabel Marketing juga memiliki pengaruh negatif.
Berdasarkan analisis tren, profit perusahaan menunjukkan pola musiman dengan kecenderungan meningkat pada pertengahan tahun dan menurun di akhir tahun. Selain itu, secara umum terdapat tren peningkatan profit dari tahun 2012 ke 2013 yang mengindikasikan adanya pertumbuhan kinerja perusahaan. Sejalan dengan hasil tersebut, analsis regresi menunjukkan bahwa variabel Sales merupakan faktor utama yang meningkatkan profit, sedangkan variabel COGS dan Marketing berperan sebagai komponen biaya yang dalam kondisi tertentu dapat menurunkan profit. Perbedaan hasil antara analisis korelasi dan regresi menunjukkan pentingnya penggunaan analisis multivariat untuk memperoleh pemahaman yang lebih komprehensif.