Algoritma merupakan langkah sistematis untuk menyelesaikan masalah. Di kasus ini, algoritma dipakai untuk mengolah data menu hingga mendapatkan keputusan dari angka keuntungan dan penjualan.
Objek dipakai untuk menyimpan nilai, sedangkan vektor (fungsi c()) menampung kumpulan data seperti nama menu, harga, biaya, jumlah penjualan, dan rating.
Tipe data memengaruhi cara olah data. Fungsi as.numeric() digunakan untuk mengubah data ke bentuk angka supaya dapat dihitung.
Struktur seperti data.frame dipakai untuk menyusun data penjualan serta merapikan informasi menu.
Nilai yang hilang ditandai dengan NA, sementara hasil perhitungan yang tidak terdefinisi ditandai dengan NaN.
Menggunakan ifelse() untuk mengelompokkan data berdasarkan syarat tertentu misalnya dari kategori dan rating pelanggan.
Membuat program mengambil keputusan berdasarkan kondisi tertentu menggunakan case_when().
Kedai kopi “Kopi Senja” memiliki 5 menu. Pemilik ingin mengetahui menu mana yang perlu dipertahankan, dipromosikan, atau dihentikan berdasarkan data penjualan dan rating pelanggan. Data dari kasir tidak rapi dengan jumlah terjual tercatat sebagai teks (ada yang berisi “-”), dan rating menu yang belum punya ulasan bernilai 0/0. Data yang digunakan adalah data sintesis, dengan harga dan biaya dalam ribu rupiah.
| Menu | Harga | Biaya | Terjual | Rating |
|---|---|---|---|---|
| Americano | 20 | 5 | 180 | 4.6 |
| Matcha Latte | 30 | 15 | 120 | 4.5 |
| Mocha | 30 | 15 | 70 | 3.9 |
| Teh Tarik | 20 | 10 | - | 4.0 |
| Roti Bakar | 20 | 10 | 30 | NaN |
Persentase keuntungan = (harga-biaya)/harga x 100
Aturan kategori (kondisi dievaluasi berurutan):
| kategori | Kondisi |
|---|---|
| Laris Untung Tinggi | Persentase keuntungan >=60 & terjual >=100 |
| Sepi Untung Tinggi | Persentase keuntungan >=60 & terjual <100 |
| Laris Untung Rendah | Persentase keuntungan <60 & terjual >=100 |
| Sepi Untung Rendah | Selain kondisi di atas |
Menentukan persentase keuntungan diperoleh dengan mengurangi Harga dengan Biaya kemudian dibagi Harga lalu dikali 100%. Pada persentase keuntungan, hasil yang ditampilkan sudah dalam persen.
Persentase_Keuntungan <- c(((Harga - Biaya) / Harga) * 100)
Persentase_Keuntungan
## [1] 75 50 50 50 50
library(dplyr)
Kategori <- ifelse(as.numeric(Terjual) >= 100 & Persentase_Keuntungan >= 60, "Laris Untung Tinggi",
ifelse(as.numeric(Terjual) >= 100 & Persentase_Keuntungan < 60,"Laris Untung Rendah",
ifelse(as.numeric(Terjual) < 100 & Persentase_Keuntungan >= 60, "Sepi Untung Tinggi",
"Sepi Untung Rendah")))
Kategori
## [1] "Laris Untung Tinggi" "Laris Untung Rendah" "Sepi Untung Rendah"
## [4] NA "Sepi Untung Rendah"
Pada Teh Tarik, as.numeric(“-”) menghasilkan NA dan memunculkan warning “NAs introduced by coercion”. Karena kondisi jumlah terjualnya tidak bisa dinilai, ifelse() mengembalikan NA untuk kategorinya.
Case_when() dari paket dplyr dipilih karena melibatkan beberapa variabel (Kategori, Rating, dan Terjual), digunakan untuk menentukan keputusan menu yang akan dilakukan oleh cafe.
Keputusan <- case_when(
Terjual == "-" | is.na(Rating) ~ "Perlu verifikasi data",
Kategori == "Laris Untung Tinggi" ~ "Restock penuh",
Kategori == "Laris Untung Rendah" & Rating >= 4.5 ~ "Naikkan harga",
Kategori == "Sepi Untung Tinggi" ~ "Beri promo",
Kategori == "Sepi Untung Rendah" & as.numeric(Terjual) < 30 & Rating < 3.5 ~ "Hentikan",
Kategori == "Laris Untung Rendah" ~ "Harga tetap",
TRUE ~ "Uji coba"
)
Keputusan
## [1] "Restock penuh" "Naikkan harga" "Uji coba"
## [4] "Perlu verifikasi data" "Perlu verifikasi data"
Hanya satu menu yang layak langsung untuk diprioritaskan yaitu Americano, satu menu dapat dioptimalkan melalui harga yaitu Matcha Latte, dan dua menu belum bisa diputuskan karena datanya belum lengkap. Hasil akhir digabung dalam Data_Hasil:
| Menu | Harga | Biaya | Terjual | Rating | Kategori | Keputusan |
|---|---|---|---|---|---|---|
| Americano | 20 | 5 | 180 | 4.6 | Laris Untung Tinggi | Restock penuh |
| Matcha Latte | 30 | 15 | 120 | 4.5 | Laris Untung Rendah | Naikkan harga |
| Mocha | 30 | 15 | 70 | 3.9 | Sepi Untung Rendah | Uji coba |
| Teh Tarik | 20 | 10 | - | 4.0 | NA | Perlu verifikasi data |
| Roti Bakar | 20 | 10 | 30 | NaN | Sepi Untung Rendah | Perlu verifikasi data |
Menu Americano layak untuk di-restock penuh karena laris dan keuntungannya tinggi, menu Matcha Latte bisa dinaikkan harganya, menu Mocha perlu diuji coba, sedangkan menu Teh Tarik dan menu Roti Bakar harus diverifikasi datanya karena belum lengkap. Kombinasi ifelse() bertingkat dan case_when() efektif untuk mengubah data penjualan menjadi keputusan otomatis, dengan syarat urutan aturannya tepat dan data kosong (NA/NaN) ditangani sejak awal.