Profit merupakan indikator penting dalam menilai kinerja perusahaan karena menunjukkan keuntungan yang didapat dari seluruh operasional perusahaan. Pada Coffee Chain, profit dipengaruhi oleh beberapa faktor seperti sales, total expenses, market size, dan product type. Namun, diperlukan analisis dan uji lebih lanjut untuk menentukan seberapa besar pengaruh dari faktor-faktor tersebut terhadap profit.
Penelitian ini menggunakan analisis statistik multivariat dengan variabel profit sebagai variabel dependen, kemudian sales, expenses, market type, dan product type sebagai variabel independen. Analisis dilakukan melalui eksplorasi data, visualisasi, serta uji analisis untuk memperoleh kesimpulan yang lebih menyeluruh dan detail.
kemudian membuat connection di R ke dataset Coffee Chain
library(DBI)
library(odbc)
odbcListDrivers()
## name attribute
## 1 SQL Server APILevel
## 2 SQL Server ConnectFunctions
## 3 SQL Server CPTimeout
## 4 SQL Server DriverODBCVer
## 5 SQL Server FileUsage
## 6 SQL Server SQLLevel
## 7 SQL Server UsageCount
## 8 Microsoft Access Driver (*.mdb, *.accdb) UsageCount
## 9 Microsoft Access Driver (*.mdb, *.accdb) APILevel
## 10 Microsoft Access Driver (*.mdb, *.accdb) ConnectFunctions
## 11 Microsoft Access Driver (*.mdb, *.accdb) DriverODBCVer
## 12 Microsoft Access Driver (*.mdb, *.accdb) FileUsage
## 13 Microsoft Access Driver (*.mdb, *.accdb) FileExtns
## 14 Microsoft Access Driver (*.mdb, *.accdb) SQLLevel
## 15 Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb) UsageCount
## 16 Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb) APILevel
## 17 Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb) ConnectFunctions
## 18 Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb) DriverODBCVer
## 19 Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb) FileUsage
## 20 Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb) FileExtns
## 21 Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb) SQLLevel
## 22 Microsoft Access Text Driver (*.txt, *.csv) UsageCount
## 23 Microsoft Access Text Driver (*.txt, *.csv) APILevel
## 24 Microsoft Access Text Driver (*.txt, *.csv) ConnectFunctions
## 25 Microsoft Access Text Driver (*.txt, *.csv) DriverODBCVer
## 26 Microsoft Access Text Driver (*.txt, *.csv) FileUsage
## 27 Microsoft Access Text Driver (*.txt, *.csv) FileExtns
## 28 Microsoft Access Text Driver (*.txt, *.csv) SQLLevel
## 29 MySQL ODBC 8.0 ANSI Driver UsageCount
## 30 MySQL ODBC 8.0 Unicode Driver UsageCount
## value
## 1 2
## 2 YYY
## 3 60
## 4 03.50
## 5 0
## 6 1
## 7 1
## 8 3
## 9 1
## 10 YYN
## 11 02.50
## 12 2
## 13 *.mdb,*.accdb
## 14 0
## 15 3
## 16 1
## 17 YYN
## 18 02.50
## 19 2
## 20 *.xls,*.xlsx, *.xlsb
## 21 0
## 22 3
## 23 1
## 24 YYN
## 25 02.50
## 26 2
## 27 *.txt, *.csv
## 28 0
## 29 1
## 30 1
dbConnect(odbc(),
Driver = "MySQL ODBC 8.0 ANSI Driver",
Server = "127.0.0.1",
UID = "root",
PWD = "Arin/2006",
Port = 3306)
## <OdbcConnection> root@127.0.0.1 via TCP/IP
## Database: null
## MySQL Version: 8.0.44
CoffeeChain = dbConnect(odbc(),
Driver = "MySQL ODBC 8.0 ANSI Driver",
Server = "127.0.0.1",
UID = "root",
PWD = "Arin/2006",
Port = 3306,
Database = "CoffeeChain")
dbListTables(CoffeeChain)
## [1] "facttable" "location" "product"
head(dbGetQuery(CoffeeChain, "select * FROM facttable"))
## Profit Margin Sales COGS Total Expenses Marketing Inventory Budget Profit
## 1 94 130 219 89 36 24 777 100
## 2 68 107 190 83 39 27 623 80
## 3 101 139 234 95 38 26 821 110
## 4 30 56 100 44 26 14 623 30
## 5 54 80 134 54 26 15 456 70
## 6 53 108 180 72 55 23 558 80
## Budget COGS Budget Margin Budget Sales Area Code ProductId
## 1 90 130 220 719 1
## 2 80 110 190 970 2
## 3 100 140 240 970 3
## 4 30 50 80 303 13
## 5 60 90 150 303 5
## 6 80 130 210 720 6
## Date
## 1 2012-01-01 00:00:00
## 2 2012-01-01 00:00:00
## 3 2012-01-01 00:00:00
## 4 2012-01-01 00:00:00
## 5 2012-01-01 00:00:00
## 6 2012-01-01 00:00:00
head(dbGetQuery(CoffeeChain, "select * FROM location"))
## Area Code State Market Market Size
## 1 203 Connecticut East Small Market
## 2 206 Washington West Small Market
## 3 209 California West Major Market
## 4 210 Texas South Major Market
## 5 212 New York East Major Market
## 6 213 California West Major Market
head(dbGetQuery(CoffeeChain, "select * FROM product"))
## Product Line Product Type Product ProductId Type
## 1 Beans Coffee Amaretto 1 Regular
## 2 Beans Coffee Colombian 2 Regular
## 3 Beans Coffee Decaf Irish Cream 3 Decaf
## 4 Beans Espresso Caffe Latte 4 Regular
## 5 Beans Espresso Caffe Mocha 5 Regular
## 6 Beans Espresso Decaf Espresso 6 Decaf
Analisis dilakukan dengan metode multivariat, dengan tujuan untuk mengetahui apa saja yang mempengaruhi Profit. Sehingga variabel yang akan digunakan adalah:
Profit
Sales
Total Expenses
Market Size
Product Type
Dalam analisis ini, dilakukan eksplorasi data untuk memaha,i karakteristik masing-masing variabel. melihat hubungan antar variabel, serta mengidentifikasi faktor yang paling berpengaruh terhadap profit. Hubungan-hubungan yang akan dianalisis yaitu:
Secara umum, sales memiliki hubungan positif dengan profit sebagai faktor utama. Produk dengan penjualan tinggi cenderung menghasilkan utama profit. Namun, tidak semua produk dengan sales tinggi menghasilkan profit yang optimal.
Diketahui Expenses memiliki hubungan negatif terhadap profit. biaya yang besar akan menekan profit. Apabila biaya dapat diminimalisir, keuntungan dapat meningkat dengan signifikan.
Profit berbeda untuk setiap ukuran pasar. Namun, market yang besar belum tentu menghasilkan profit yang paling besar juga. Sehingga Market Size memengaruhi profit tetapi tidak selalu linear.
Dengan analisis profit berdasarkan product type, kita dapat melihat variasi profit antar jenis produk.
factTable <- dbGetQuery(CoffeeChain, "select ProductId, Profit, Sales, `Total Expenses`,
`Area Code` FROM facttable")
head(factTable)
## ProductId Profit Sales Total Expenses Area Code
## 1 1 94 219 36 719
## 2 2 68 190 39 970
## 3 3 101 234 38 970
## 4 13 30 100 26 303
## 5 5 54 134 26 303
## 6 6 53 180 55 720
product <- dbGetQuery(CoffeeChain, "select ProductId, Product, `Product Type`
FROM product")
head(product)
## ProductId Product Product Type
## 1 1 Amaretto Coffee
## 2 2 Colombian Coffee
## 3 3 Decaf Irish Cream Coffee
## 4 4 Caffe Latte Espresso
## 5 5 Caffe Mocha Espresso
## 6 6 Decaf Espresso Espresso
location <- dbGetQuery(CoffeeChain, "Select `Area Code`, `Market Size` FROM location")
head(location)
## Area Code Market Size
## 1 203 Small Market
## 2 206 Small Market
## 3 209 Major Market
## 4 210 Major Market
## 5 212 Major Market
## 6 213 Major Market
Mengganti nama variabel yang terdapat spasi untuk mempermudah proses analisis data
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
factTable <- factTable %>%
rename(Area_Code = `Area Code`,
Expenses = `Total Expenses`)
location <- location %>%
rename(Area_Code = `Area Code`,
Market_Size = `Market Size`)
product <- product %>%
rename(Product_Type = `Product Type`)
Membuat tabel berisi variabel-variabel yang akan digunakan.
library(dplyr)
gabungan <- factTable %>%
select(ProductId, Profit, Sales, Expenses, Area_Code) %>%
left_join(
location %>% select(Area_Code, Market_Size),
by = "Area_Code"
) %>%
left_join(
product %>% select(ProductId, Product_Type),
by = "ProductId"
)
head(gabungan)
## ProductId Profit Sales Expenses Area_Code Market_Size Product_Type
## 1 1 94 219 36 719 Major Market Coffee
## 2 2 68 190 39 970 Major Market Coffee
## 3 3 101 234 38 970 Major Market Coffee
## 4 13 30 100 26 303 Major Market Tea
## 5 5 54 134 26 303 Major Market Espresso
## 6 6 53 180 55 720 Major Market Espresso
str(gabungan)
## 'data.frame': 4248 obs. of 7 variables:
## $ ProductId : int 1 2 3 13 5 6 8 9 10 11 ...
## $ Profit : int 94 68 101 30 54 53 99 0 33 17 ...
## $ Sales : int 219 190 234 100 134 180 341 150 140 130 ...
## $ Expenses : int 36 39 38 26 26 55 72 87 47 55 ...
## $ Area_Code : int 719 970 970 303 303 720 970 719 970 719 ...
## $ Market_Size : chr "Major Market" "Major Market" "Major Market" "Major Market" ...
## $ Product_Type: chr "Coffee" "Coffee" "Coffee" "Tea" ...
Interpretasi:
Dataset terdiri dari 4248 observasi dan 7 variabel. Variabel numerik meliputi Profit, Sales, dan Expenses. Sedangkan variabel kategorik meliputi Market Size dan Product Type.
Summary <- data.frame(
Statistik = names(summary(gabungan$Profit)),
profit = as.numeric(summary(gabungan$Profit)),
sales = as.numeric(summary(gabungan$Sales)),
expenses = as.numeric(summary(gabungan$Expenses))
)
Summary
## Statistik profit sales expenses
## 1 Min. -638.00000 17.0000 10.00000
## 2 1st Qu. 17.00000 100.0000 33.00000
## 3 Median 40.00000 138.0000 46.00000
## 4 Mean 61.09769 192.9875 54.06356
## 5 3rd Qu. 92.00000 230.0000 65.00000
## 6 Max. 778.00000 912.0000 190.00000
Interpretasi:
Rata-rata profit sebesar 61.1 menunjukkan tingkat keuntungan rata-rata produk yang cenderung positif. Profit berkisar dari -638 hingga 778, menunjukkan variasi yang cukup besar antar produk dan kemungkinan adanya outlier dalam data. Terdapat kerugian ekstrim dari produk tertentu, ditunjukkan dengan profit minimum sebesar -628. Selain itu, terdapat perbedaan cukup jauh antara mean dan median dengan mean > median sehingga distribusi condong ke kanan.
Variabel Sales juga menunjukkan variasi yang tinggi, dengan beberapa produk memiliki penjualan yang sangat besar dibandingkan yang lain. Sementara itu, Expenses relatif lebih stabil, namun tetap berpotensi memengaruhi profit.
gabungan %>%
group_by(Market_Size) %>%
summarise(mean_profit = mean(Profit))
## # A tibble: 2 × 2
## Market_Size mean_profit
## <chr> <dbl>
## 1 Major Market 91.4
## 2 Small Market 40.8
gabungan %>%
group_by(Product_Type) %>%
summarise(mean_profit = mean(Profit))
## # A tibble: 4 × 2
## Product_Type mean_profit
## <chr> <dbl>
## 1 Coffee 70.7
## 2 Espresso 58.4
## 3 Herbal Tea 59.9
## 4 Tea 55.2
Interpretasi pada market size, major market menunjukkan rata-rata profit sebanyak 91.39 yang lebih tinggi daripada small market sebanyak 40.80. Sedangkan pada product type menunjukkan coffee menjadi produk yang memberikan profit terbesar sebanyak 70.72 kemudian disusul herbal tea sebanyak 59.90 dan Espresso sebanyak 58.35. Kemudian tea menjadi penghasil profit paling sedikit sebanyak 55.19.
library(ggplot2)
ggplot(gabungan, aes(x = Sales, y = Profit)) +
geom_point(alpha= 0.5, color = "blue") +
geom_smooth(method = "lm", se = FALSE, color = "red") +
labs(title = "Sales vs Profit",
x = "Sales",
y = "Profit")
## `geom_smooth()` using formula = 'y ~ x'
Interpretasi:
Dari visualisasi, ditemukan hubungan positif yang kuat antara sales dan profit yaitu semakin tinggi sales, maka profit juga semakin tinggi. Garis regresi juga menunjukkan adanya hubungan linear yang cukup jelas. Namun, ada beberapa titik dengan profit negatif meskipun terdapat sales. Menunjukkan tidak semua penjualan menghasilkan keuntungan. ini menunjukkan adanya pengaruh dari variabel selain sales. Dapat disimpulkan bahwa sales berpengaruh terhadap profit, tetapi tidak menjamin akan selalu untung.
ggplot(gabungan, aes(x = Expenses, y = Profit)) +
geom_point(alpha = 0.5, color = "blue") +
geom_smooth(method = "lm", se = FALSE, color = "red") +
labs (title = "Total Expenses vs Profit",
x = "Total Expenses",
y = "Profit")
## `geom_smooth()` using formula = 'y ~ x'
Interpretasi:
Dari grafik yang dihasilkan, titik terlihat menyebar luas. Ini menunjukkan hubungan lemah/tidak konsisten antara total expenses dengan profit. Meskipun terdapat pola yang sedikit meningkat, tapi sangat kecil dibandingkan dengan keseluruhan observasi. Banyak data dengan expenses tinggi justru menghasilkan profit rendah bahkan negatif. Dapat disimpulkan bahwa pengeluaran tidak selalu meningkatkan profit, justru bisa menurunkannya jika tidak dilakukan dengan efisien.
ggplot(gabungan, aes(x = Market_Size, y = Profit)) +
geom_boxplot(fill = "lightblue") +
labs(title = "Profit by Market Size",
x = "Market Size",
y = "Profit")
Interpretasi: Major market punya median profit yang lebih tinggi dibandingkan dengan small market. Namun, variasi/sebaran profit di major market lebih besar yang berarti terdapat risiko rugi yang besar. Sementara itu, small market cenderung lebih stabil namun profit lebih kecil.
ggplot(gabungan, aes(x = Product_Type, y = Profit)) +
geom_boxplot(fill = "lightblue") +
labs(title = "Profit by Product Type",
x = "Product Type",
y = "Profit")
Interpretasi: Didapat perbedaan median profit antar produk tidak terlalu jauh. Namun, Tea memiliki banyak nilai negatif dibandingkan dengan coffee dan espresso yang menghasilkan profit lebih tinggi. Selain itu, terdapat banyak outlier sehingga ada kondisi tertentu yang sangat menguntungkan ataupun merugikan. Jadi berdasarkan visualisasi, jenis produk memengaruhi profit dengan coffee yang paling konsisten menghasilkan keuntungan. Namun perbedaan ini perlu diuji secara lanjut sebelum menarik kesimpulan.
gabungan %>%
group_by(Product_Type) %>%
summarise(Total_Profit = sum(Profit)) %>%
ggplot(aes(x = Product_Type, y = Total_Profit)) +
geom_col() +
labs(title = "Total Profit per Product Type",
x = "Product Type",
y = "Total Profit")
Interpretasi: Visualisasi menunjukkan perbedaan total kontribusi profit tiap product type. Coffee menghasilkan total profit tertinggi, disusul dengan espresso dan herbal tea. sedangkan herbal tea menghasilkan profit paling sedikit dibandingkan ketiga tipe lainnya. Dari pengamatan ini, diketahui coffee adalah kontributor utama profit perusahaan. Namun korelasi perlu diuji secara lanjut sebelum menarik kesimpulan.
ggplot(gabungan, aes(x= Sales, y = Profit, size = Expenses, color = Expenses)) +
geom_point(alpha = 0.6) +
scale_color_gradient2(low = "blue", mid = "yellow", high = "red", midpoint = median(gabungan$Expenses)) +
labs(title = "Sales vs Profit (bubble = Total Expenses)",
x = "Sales",
y = "Profit",
color = "expenses")
Interpretasi: Dari kombinasi ketiga variabel, pola tetap menunjukkan hubungan positif antara sales dan profit. sedangkan bubble besar (expenses tinggi) tidak selalu berada di profit tertinggi. beberapa titik dengan expenses besar justru menghasilkan profit kecil/negatif
cor(gabungan %>% select(Sales, Profit, Expenses))
## Sales Profit Expenses
## Sales 1.0000000 0.7973309 0.6893500
## Profit 0.7973309 1.0000000 0.1999761
## Expenses 0.6893500 0.1999761 1.0000000
Interpretasi: Korelasi sales dengan profit yaitu sekitar 0.80 yang berarti kuat positif. sedangkan hubungan expenses dengan profit yaitu 0.20 yang berarti sangat lemah. Justru hubungan expenses cukup kuat dengan sales yaitu sebesar 0.69.
shapiro.test(gabungan$Profit)
##
## Shapiro-Wilk normality test
##
## data: gabungan$Profit
## W = 0.79969, p-value < 2.2e-16
p-value(<2.2e-16) < 0.05 sehingga menolak H0. Artinya, data profit tidak berdistribusi normal. Selain itu, nilai W (0.79969) yang cukup jauh dari 1 memperkuat bahwa distribusi menyimpang dari normal.
shapiro.test(gabungan$Sales)
##
## Shapiro-Wilk normality test
##
## data: gabungan$Sales
## W = 0.78969, p-value < 2.2e-16
p-value(<2.2e-16) < 0.05 sehingga menolak H0. Artinya, profit tidak berdistribusi normal. Distribusi sales kemungkinan miring(skewed) atau terdapat banyak outlier.
shapiro.test(gabungan$Expenses)
##
## Shapiro-Wilk normality test
##
## data: gabungan$Expenses
## W = 0.88605, p-value < 2.2e-16
p-value(<2.2e-16) < 0.05 sehingga menolak H0. Artinya, profit tidak berdistribusi normal. meskipun nilai W (0.88605) lebih dekat ke 1 dibandingkan dengan variabel lain, tetapi tetap tidak memenuhi asumsi normalitas.
Kesimpulan uji normalitas
Ketiga variabel numerik tidak berdistribusi normal. Oleh karena itu, digunakan metode non-parametrik yaitu Spearman dan Kruskal-Wallis.
cor.test(gabungan$Sales, gabungan$Profit, method = "spearman")
## Warning in cor.test.default(gabungan$Sales, gabungan$Profit, method =
## "spearman"): Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: gabungan$Sales and gabungan$Profit
## S = 2909365515, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.7722827
Interpretasi: Nilai rho = 0.77 yang berarti nilai korelasi positif kuat. Maka semakin tinggi sales, semakin tinggi juga profit yang dihasilkan. Selain itu, p-value menunjukkan nilai < 0.05 sehingga hubungan signifikan secara statistik.
cor.test(gabungan$Expenses, gabungan$Profit, method = "spearman")
## Warning in cor.test.default(gabungan$Expenses, gabungan$Profit, method =
## "spearman"): Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: gabungan$Expenses and gabungan$Profit
## S = 1.0678e+10, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.1641984
Interpretasi: Nilai rho = 0.16 artinya korelasi positif dan sangat lemah. Maka ketika expenses meningkat, profit cenderung naik, tetapi hubungannya sangat kecil. Sehingga dapat disimpulkan Expenses bukan faktor utama penentu profit.
kruskal.test(Profit ~ Market_Size, data = gabungan)
##
## Kruskal-Wallis rank sum test
##
## data: Profit by Market_Size
## Kruskal-Wallis chi-squared = 424.94, df = 1, p-value < 2.2e-16
*Interpretasi: p-value < 0.05 yang menolak H0, sehingga ada perbedaan profit yang signifikan antara kategori market size. Dapat disimpulkan market size merupakan faktor yang signifikan dalam menentukan profit.
kruskal.test(Profit ~ Product_Type, data = gabungan)
##
## Kruskal-Wallis rank sum test
##
## data: Profit by Product_Type
## Kruskal-Wallis chi-squared = 2.4137, df = 3, p-value = 0.4911
Interpretasi: p-value > 0.05 sehingga gagal menolak H0. Artinya tidak ada perbedaan yang signifikan dalam profit antar jenis produk, Sehingga dapat disimpulkan jenis produk tidak memberikan perbedaan signifikan terhadap profit.
lm(Profit ~ Sales + Expenses + Market_Size + Product_Type, data = gabungan)
##
## Call:
## lm(formula = Profit ~ Sales + Expenses + Market_Size + Product_Type,
## data = gabungan)
##
## Coefficients:
## (Intercept) Sales Expenses
## 10.4595 0.8556 -2.1161
## Market_SizeSmall Market Product_TypeEspresso Product_TypeHerbal Tea
## 7.9312 -3.1203 -7.1035
## Product_TypeTea
## -9.7238
Interpretasi
artinya jika semua variabel = 0, maka profit = 10.4595
Untuk setiap kenaikan 1 unit sales, maka profit naik sebesar 0.8556. Sehingga hubungan keduanya poditif dan cukup besar. Menjadikan sales sebagai faktor paling kuat meningkatkan profit.
Untuk setiap kenaikan 1 unit expenses, profit turun sebanyak 2.1161. Sehingga diketahui expenses justru menurunkan profit.
Small market memiliki profit lebih tinggi dibandingkan major market. Namun, hasil ini dapat dipengaruhi oleh perbedaan referensi kategori ataupun efek dari variabel lain.
Semua dibandingkan dengan coffee, menghasilkan: Espresso = -3.1203 Herbal Tea = -7.1035 Tea = -9.7238 Sehingga semua produk lebih rendah daripada coffee. Maka coffee adalah produk yang paling menguntungkan.
Berdasarkan hasil analisis yang sudah dilakukan, dapat disimpulkan bahwa sales merupakan faktor utama yang paling berpengaruh dalam meningkatkan profit. karena memiliki hubungan positif yang cukup kuat. Sebaliknya, expenses memiliki pengaruh negatif terhadap profit, yang menunjukkan bahwa peningkatan biaya tanpa pengelolaan yang efisien justru dapat menurunkan keuntungan.
Selain itu, terdapat perbedaan profit berdasarkan kategori, di mana product type menunjukkan bahwa Coffee merupakan produk yang paling menguntungkan dibandingkan jenis lainnya. Sementara itu, variabel market size juga memengaruhi profit, meskipun interpretasinya perlu diperhatikan karena dapat dipengaruhi oleh kategori referensi dan interaksi dengan variabel lain dalam model.
Secara keseluruhan, dapat disimpulkan bahwa profit lebih dipengaruhi oleh tingginya penjualan dan efisiensi dalam pengelolaan biaya dibandingkan faktor kategorikal seperti jenis produk atau ukuran pasar. Oleh karena itu, strategi yang berfokus pada peningkatan sales serta pengendalian expenses menjadi kunci utama dalam meningkatkan profit.