## Penggunaan Metode Analisis Data Untuk Rekomendasi Menu Makanan Berdasarkan Persediaan Bahan dan Preferensi Pengguna
Yan Watequlis Syaifudin *, Nabilah Argyanti Ardyningrum ** * Politeknik Negeri Malang ** Politeknik Negeri Malang *nargyanti@gmail.com, ** qulis@polinema.ac.id

## ABSTRACT
Cooking represents a significant and enjoyable activity, enabling individuals to create delectable dishes. However,  the  challenge  of  discovering  recipes  that  align  with  available  ingredients  and  personal preferences persists. To tackle this issue, a recommendation system is introduced, employing a content- based  filtering  approach  that  utilizes  Jaccard  similarity  to  harness  users'  ingredient  ownership. Additionally,  an  item-based  collaborative  filtering  approach  employing  cosine  similarity  is  utilized  to propose  recipes  based  on  user  preferences  and  those  of  fellow  users.  This  comprehensive  approach delivers precise and pertinent recipe recommendations, optimizing ingredient utilization and elevating the  cooking  experience.  Furthermore,  the  assessment  of  recommendations  based  on  user  preferences reveals varying outcomes.
Keyword: Content-Based  Filtering,  Cosine  Similarity,  Item-Based  Collaborative  Filtering, Jaccard Similarity, Recommender System

## 1. Pendahuluan
Memasak  adalah  aktivitas  yang  tidak  dapat  dihindari  dalam  kehidupan  sehari-hari  manusia.  Setiap harinya, orang-orang memasak untuk memenuhi kebutuhan nutrisi dan menciptakan hidangan yang enak serta bergizi. Memasak juga diperlukan untuk mengolah makanan mentah menjadi makanan yang lebih mudah dan aman  untuk  dikonsumsi.  Proses  memasak  membantu  menghilangkan  bakteri  dan  patogen  potensial  dalam makanan, sehingga meningkatkan kualitas makanan yang dikonsumsi manusia [1].
Saat proses memasak, berbagai bahan makanan diolah menggunakan alat dan teknik memasak yang berbeda, menciptakan beragam rasa dan tampilan hidangan. Alat masak seperti wajan, panci, oven, blender, dan  lainnya  berperan  penting  dalam  mengolah  bahan  makanan  menjadi  hidangan  yang  lezat  dan  bergizi. Penggunaan  teknik  memasak  yang  tepat,  seperti  menggoreng,  merebus,  mengukus,  atau  memanggang, menghasilkan efek yang berbeda pada bahan makanan. Pada proses ini, manusia memiliki kesempatan untuk berkreasi  dan  mengeksplorasi  cita  rasa,  yang  pada  akhirnya  berkontribusi  pada  tingkat  selera  makan  dan kepuasan mereka terhadap makanan yang telah mereka sajikan [2].
Setiap  individu  memiliki  selera  makan  yang  unik,  dipengaruhi  oleh  berbagai  faktor,  termasuk perubahan  lingkungan  sekitar,  kebutuhan  fisik,  gaya  hidup,  serta  pengalaman  pribadi  [3].  Beberapa  orang cenderung  menyukai  makanan  dengan  cita  rasa  tertentu,  seperti  kecenderungan  terhadap  hidangan  pedas, manis, asam, atau gurih [4]. Menariknya, preferensi makanan ini sering kali juga serupa dengan individu lain yang tinggal di lingkungan yang sama atau memiliki preferensi rasa yang mirip [3].
Ketika seseorang hendak mengonsumsi makanan, biasanya mereka berupaya menemukan hidangan yang  cocok  dengan  ketersediaan  bahan  makanan,  perlengkapan  dapur  yang  ada,  dan  preferensi  makanan mereka.  Selain  itu,  pertimbangan  tentang  daya  tahan  bahan  makanan  menjadi  penting  untuk  menghindari kerusakan.  Pengetahuan,  kemampuan,  dan  perilaku  yang  kurang  akurat  terkait  perencanaan  makanan  dapat meningkatkan timbunan sampah makanan [5]. Dalam mencari menu yang sesuai, berbagai metode digunakan, termasuk  pencarian  resep  masakan  yang  memenuhi  kriteria-kriteria  tersebut.  Seseorang  sering  kali  harus melakukan evaluasi untuk menilai apakah pilihan makanan cocok dengan situasi dan preferensi mereka. Selain itu, tingkat kompleksitas dalam memilih makanan yang cocok juga diperumit oleh kenyataan bahwa banyak hidangan memiliki bahan yang serupa. Nafsu makan individu, lingkungan sekitar, serta pengaruh dari orang lain  juga  memengaruhi  pilihan,  yang  akhirnya  menciptakan  keraguan  dalam  mengambil  keputusan.  Semua fenomena  ini  mengakibatkan  proses  pencarian  makanan  yang  sesuai  menjadi  kurang  efisien  dan  lebih membingungkan.
Untuk mengatasi permasalahan tersebut, beberapa peneliti telah mengembangkan sistem rekomendasi resep  untuk  membantu  individu  dalam  menentukan  resep  yang  cocok  untuk  dimasak.  Chaudari  et  al.  telah
mengembangkan Ingredient/Recipe Algorithm using Web Mining and Web Scraping for Smart Chef . Melalui sistem ini, rekomendasi resep masakan dapat diberikan berdasarkan bahan-bahan yang dimasukkan ke dalam kolom pencarian. Meskipun demikian, dalam pelaksanaannya, penelitian ini menuntut pengguna untuk secara berulang-ulang  memasukkan  bahan-bahan  tersebut  saat  mencari  resep  yang  cocok,  yang  pada  akhirnya memakan waktu yang signifikan [6]. Adaji et al. mengembangkan Personality Based Recipe Recommendation Using  Recipe  Network  Graphs .  Dalam  penelitian  tersebut,  dibangun network  graph resep  berdasarkan kepribadian  pengguna.  Mereka  juga  menguji  hubungan  antara  tipe  makanan  dengan  lima  tipe  kepribadian. Hasil eksperimen menunjukkan bahwa kepribadian individu tidak selalu memiliki dampak yang nyata pada preferensi  makanan  [7].  Nilesh,  Madhu  Kumari,  Pritom  Hazarika,  dan  Vishal  Raman  mengembangkan Recommendation  of  Indian  Cuisine  Recipes  Based  on  Ingredients ,  sebuah  sistem  rekomendasi  resep menggunakan web scraping dan content-based filtering yang dapat memberikan rekomendasi untuk hidangan India [8].
Dalam  konteks  permasalahan  yang  telah  diidentifikasi  dan  berdasarkan  hasil  studi  penelitian sebelumnya,  sistem  rekomendasi  resep  dikembangkan.  Sistem  ini  akan  membantu  pengguna  dalam mendapatkan resep yang sesuai dengan ketersediaan bahan makanan yang dimiliki serta merekomendasikan resep  lain  yang  sejalan  dengan  preferensi  atau  selera  pengguna,  dengan  mempertimbangkan  preferensi makanan  dari  pengguna  lain.  Pendekatan  yang  diusulkan  dalam  pengembangan  sistem  ini  melibatkan penerapan metode content-based filtering menggunakan Jaccard similarity untuk membandingkan bahan yang dimiliki oleh pengguna dengan bahan dalam resep. Selanjutnya, sistem ini mengadopsi pendekatan item-based collaborative  filtering dengan  menggunakan  metode cosine  similarity ,  di  mana  perhitungannya  digunakan untuk membandingkan preferensi atau selera resep pengguna  dengan resep yang disukai oleh semua orang. Hasil akhir dari perhitungan cosine similarity akan berupa rekomendasi-rekomendasi resep yang disesuaikan dengan tingkat kesukaan pengguna, yang didasarkan pada preferensi seluruh pengguna.
Dengan mengadopsi pendekatan content-based filtering dan item-based collaborative filtering , sistem rekomendasi  ini  diharapkan  mampu  memberikan  rekomendasi  resep  masakan  yang  relevan  dengan  bahan masakan yang dimiliki dan sesuai dengan selera makan pengguna, sehingga proses memasak menjadi lebih efisien dan menyenangkan. Sistem rekomendasi ini juga diharapkan menjadi solusi praktis bagi pengguna yang bingung dalam memilih menu makanan yang sesuai dengan keadaan dan selera, sehingga mereka dapat dengan mudah menemukan inspirasi untuk mencoba masakan baru yang cocok dengan preferensi pribadi mereka.

## 2. Metodologi Penelitian
2.1. Gambaran Umum Proses Memasak dengan Resep
2.1.1. Memasak dengan Resep
Memasak  dari  resep  melibatkan  langkah-langkah  untuk  menciptakan  hidangan  yang  lezat  dan memuaskan.  Memasak  dengan  resep,  yang  diilustrasikan  pada  Gambar  1,  dimulai  dengan  mengumpulkan berbagai elemen, seperti bahan, peralatan, dan preferensi. Selanjutnya, resep dapat dicari sesuai dengan bahan, peralatan,  dan  preferensi.  Setelah  dipilih,  resep  bisa  diterapkan  dengan  menggunakan  bahan-bahan  dan peralatan yang tercantum pada resep. Setelah memasak selesai, makanan siap untuk dinikmati [9].

## Gambar 1. Langkah-langkah memasak dengan resep
Proses mencari resep memerlukan banyak waktu. Adanya resep yang mirip mengharuskan individu mempertimbangkan  berbagai  faktor  untuk  menemukan  yang  cocok.  Beberapa  individu  cenderung mempertimbangkan  bahan-bahan  yang  tersedia  sebelum  mencari  resep,  sementara  yang  lain  lebih mengutamakan  preferensi  pribadi  mereka,  seperti  yang  diilustrasikan  pada  Gambar  2.  Hal  ini  menyoroti kompleksitas dalam mencari resep yang sesuai dengan kebutuhan dan selera masing-masing individu [10].

## Gambar 2. Pertimbangan kecocokan resep

## 2.1.2. Struktur Resep
Struktur sebuah resep sangat penting dalam dunia kuliner, karena menjadi panduan bagi para pembuat makanan  selama  proses  memasak.  Secara  umum,  sebuah  resep  terdiri  dari  beberapa  komponen.  Pertama, terdapat judul yang menggambarkan hidangan yang akan disiapkan. Selanjutnya, bagian bahan menyediakan daftar komponen yang diperlukan dengan ukuran yang tepat. Instruksi membentuk inti dari resep, memberikan panduan langkah demi langkah mulai dari persiapan hingga  penyajian, termasuk teknik memasak dan saran penyajian [9].

## 2.2. Pengumpulan Data
2.2.1. Web Scraping Web  scraping adalah  teknik  pengambilan  informasi  dari  halaman  web  secara  otomatis  yang memungkinkan pengumpulan data dari berbagai sumber, di mana data tersebut diekstrak ke dalam file atau database untuk akses dan analisis lebih lanjut [11]. Web scraping umumnya digunakan untuk analisis statistik, sistem  prediksi,  dan data  training pada machine  learning ,  terutama  dalam  kasus  di  mana  situs  web  hanya menampilkan informasi yang tidak dapat diunduh secara langsung [12].
Saat menjalankan web scraping , yang diilustrasikan pada Gambar 3, sebuah request akan dikirimkan ke server dan server akan mengirimkan response berupa data yang diperlukan. Data pada response tersebut kemudian  di- parse dan  diekstrak  sesuai  dengan  data  yang  dibutuhkan.  Teknik parsing ini  memungkinkan sistem untuk mengenali dan mengambil bagian-bagian penting dari halaman web, seperti teks, tabel, gambar, dan lainnya [13].
Gambar 3. Proses Web Scraping
Pada  tahap  ini,  dilakukan  ekstraksi  informasi  yang  spesifik  mengenai  setiap  resep.  Informasi  ini digunakan untuk menyajikan detail lengkap mengenai setiap resep, di mana informasi ini didapat dari website masakapahariini. Data-data yang diekstrak antara lain:
1. Title : judul resep.
2. Source URL : sumber tempat resep diperoleh.
3. Image URL : tautan berupa gambar hidangan.
4. Servings : jumlah porsi yang dihasilkan dari resep.
5. Time : waktu yang dibutuhkan dalam memasak.
6. Difficulty : tingkat kesulitan dalam memasak.
7. Ingredients : daftar bahan yang diperlukan dalam memasak.
8. Instructions : langkah-langkah yang harus diikuti dalam memasak.
Untuk melakukan web scraping , langkah-langkah yang harus diikuti adalah sebagai berikut. Pertama, halaman  detail  resep  diakses  melalui  URL  detail  resep.  Konten  halaman  kemudian  di- parsing untuk mengidentifikasi  elemen-elemen  penting  yang  ingin  diambil.  Selanjutnya,  variabel  didefinisikan  untuk menyimpan data yang akan diambil dari halaman tersebut. Misalnya, variabel " title " dibuat untuk menyimpan judul  resep,  " ingredients "  untuk  menyimpan  daftar  bahan-bahan,  dan  " instructions "  untuk  menyimpan langkah-langkah instruksi memasak. Terakhir, data yang berhasil diesktrak akan disimpan dalam format yang sesuai dengan kebutuhan.
Contoh data resep yang masih berbentuk HTML dapat dilihat pada Gambar 1. Hasil data resep yang telah  berhasil  diambil  menggunakan web  scraping ditampilkan  dalam  Tabel  1.  Dari  proses scraping ini, beberapa  komponen  telah  didefinisikan,  seperti title , source  URL , image  URL , servings , time , difficulty , ingredients , dan instructions yang berhasil diambil.
<div class="d-flex"> <div class="part fw-bold me-3" data-value="1.17" data-base-measurement-unit="" data-base- quantity="7">7</div> <div class="item"> siung bawang putih </div> </div> <div class="d-flex"> <div class="part fw-bold me-3" data-value="1.17" data-base-measurement-unit="" data-base- quantity="11">11</div> <div class="item"> butir bawang merah </div> </div>
Gambar 4. Contoh data bahan pada website masakapahariini dalam bentuk HTML
Tabel 1. Contoh data setelah dilakukan web scraping
title source_url  image_url time  serving  difficulty  ingredients instructions Resep Rendang Ayam https://ww w.masakap ahariini.co m/resep/res ep-ayam- rendang/ https://www. masakapahar iini.com/wp- content/uplo ads/2018/10/ ayam- rendang- MAHI-4- 500x300.jpg 2jam 6 Cukup Rumit ['2 sdm minyak sayur', '7 siung bawang putih', '11 butir  bawang merah', '3 cm jahe',  '5  buah cabai merah'] ['Tumis bumbu halus hingga harum. Tambahkan air dan santan. Masukkan  potongan  ayam.  Masak hingga hingga air menyusut setengah.', 'Masukkan kacang merah. Masak  kembali  dengan  api  kecil hingga  mengental.',  'Angkat  dan hidangkan di piring saji.']

## 2.2.2. Text Filtering dan Tokenization pada Text Preprocessing
Text filtering dan tokenization adalah langkah penting dalam text preprocessing . Langkah-langkah ini membantu mengubah data mentah menjadi format yang lebih terstruktur dan mudah dikelola untuk analisis [14].
Text filtering berfokus pada penghapusan data yang tidak relevan, termasuk menghilangkan karakter khusus,  tanda  baca,  atau  nilai  yang  hilang.  Langkah  ini  memastikan  bahwa  data  yang  digunakan  untuk pemodelan atau analisis akurat dan konsisten [15].
Tokenization melibatkan  pemecahan  teks  menjadi  unit-unit  yang  lebih  kecil,  seperti  kata-kata  atau frasa, yang disebut sebagai token. Proses ini sangat berguna dalam analisis teks, natural language processing , dan  tugas-tugas  berbasis  teks  lainnya.  Dengan  mengalikan  teks,  menjadi  lebih  mudah  untuk  mengekstrak informasi yang bermakna dan melakukan berbagai operasi terkait teks [15].
A. Text Filtering untuk Data Resep Text filtering untuk data resep bertujuan untuk membuat data lebih mudah dipahami, terstruktur, dan ringkas. Proses ini dilakukan dengan memahami pola kalimat di setiap kolom data, yang dilanjutkan dengan membersihkan teks menggunakan ekspresi reguler ( regex ), dan mengekstrak teks yang relevan. Hasilnya yaitu berupa data resep yang lebih mudah untuk dikelola lebih lanjut, yang diilustrasikan pada Tabel 2.
Tabel 2. Contoh data sebelum dan setelah dilakukan web scraping Teks Kalori Waktu Sebelum Resep Ayam Sambal Geprek, Pedasnya Menggugah Selera 400 Kkal 30 mnt Cara Membuat Ketupat, Sajian Wajib Saat Lebaran 700 Kkal 1 jam 30 mnt Sesudah Ayam Sambal Geprek 400 Kkal 30 mnt Ketupat 700 Kkal 90 mnt

## B. Tokenization untuk Data Bahan
Sebelum data bahan digunakan sebagai data awal untuk menentukan rekomendasi makanan, langkah awal yang dilakukan adalah memisahkan data bahan menjadi empat bagian utama, yaitu nama bahan, kuantitas, satuan, dan state , menggunakan metode tokenization . Proses pemisahan ini dilakukan dengan menggunakan regular expression ( regex ) sehingga data dapat diorganisir dengan struktur yang sesuai dan sesuai dengan pola yang diinginkan, yang diilustrasikan pada Gambar 5.
Gambar 5. Contoh data sebelum dan sesudah dilakukan tokenization
2.3. Metode Pencocokan Melalui Rekomendasi Resep
2.3.1. Content-based Filtering dengan Jaccard Similarity
Content-based filtering merupakan metode rekomendasi yang memanfaatkan konten dari item yang sudah diketahui untuk merekomendasikan item-item serupa. Metode ini melibatkan informasi seperti deskripsi, tag, atau atribut lain yang relevan dengan item-item tersebut [16].
Jaccard similarity adalah salah satu metode yang digunakan dalam content-based filtering . Metode ini mengukur kesamaan antara dua item dengan menghitung sejauh mana elemen-elemen tersebut serupa atau tumpang tindih.
𝐽(𝐴, 𝐵) = |𝐴 ∩ 𝐵| |𝐴 ∪ 𝐵|
Di mana:
• |𝐴 ∩ 𝐵| adalah jumlah elemen yang ada di kedua himpunan (intersection).
• |𝐴 ∪ 𝐵| adalah jumlah elemen yang ada di salah satu atau kedua himpunan (union). Dengan  menggunakan Jaccard  similarity ,  item-item  yang  memiliki  tingkat  kemiripan  yang  tinggi dapat direkomendasikan kepada pengguna [17].
2.3.2. Item-based Collaborative Filtering dengan Cosine Similarity
Item-based  Collaborative  Filtering adalah  metode  dalam  sistem  rekomendasi  yang  berfokus  pada kesamaan antara item dalam kumpulan data. Metode ini mencari item yang mirip dengan item yang disukai oleh  pengguna.  Dengan  menggunakan Item-based  Collaborative  Filtering ,  sistem  dapat  memberikan rekomendasi item berdasarkan preferensi pengguna lain yang memiliki selera yang mirip. Metode ini berguna dalam merekomendasikan item seperti produk, film, buku, atau resep kepada pengguna [18].
Dalam sistem rekomendasi, metode ini mengukur tingkat kesamaan antara item-item dalam kumpulan data. Semakin tinggi nilai cosine similarity antara dua item, semakin mirip keduanya.
𝑐𝑜𝑠(𝜃) =
𝐴 ∙ 𝐵 ∥ 𝐴 ∥∥ 𝐵 ∥ = ∑ 𝐴 𝑖 𝐵 𝑖 𝑛 𝑖=1 √∑ 𝐴 𝑖 2 𝑛 𝑖=1 √∑ 𝐵 𝑖 2 𝑛 𝑖=1
Di mana:
• A ∙ B adalah hasil dari dot product antara vektor A dan B
• ∥ A ∥∥ B ∥ adalah panjang ( magnitude ) masing-masing vektor A dan B
Dengan  menggunakan  metode  ini,  sistem  rekomendasi  dapat  menemukan  item  yang  memiliki kemiripan  yang  tinggi  dengan  preferensi  pengguna,  sehingga  memberikan  rekomendasi  yang  relevan. Pengguna dapat menemukan item-item baru dan menarik berdasarkan kesamaannya dengan item yang disukai oleh pengguna lain yang memiliki preferensi serupa [19].

## 2.4. Proses Rekomendasi Resep
2.4.1. Rekomendasi berdasarkan Ketersediaan Bahan
Langkah-langkah proses rekomendasi resep menggunakan content-based filtering diilustrasikan pada Gambar 6, yang diawali dengan  mengidentifikasi bahan-bahan yang dimiliki pengguna. Selanjutnya, sistem membandingkan  kumpulan  bahan-bahan  yang  dimiliki  oleh  pengguna  dengan  kumpulan  bahan-bahan  dari setiap resep menggunakan Jaccard similarity . Jaccard similarity mengukur tingkat kemiripan bahan pengguna dengan bahan resep. Setelah perbandingan dilakukan, sistem mengidentifikasi dan merekomendasikan resep yang disortir berdasarkan nilai Jaccard similarity tertinggi, di mana resep dengan peringkat teratas merupakan resep dengan bahan yang paling banyak dimiliki oleh pengguna.
Gambar 6. Proses content-based filtering untuk rekomendasi resep berdasarkan ketersediaan bahan
2.4.2. Rekomendasi Berdasarkan Resep yang Disukai Pengguna
Pada metode collaborative filtering , diperlukan masukan dari  pengguna berupa resep yang disukai oleh  semua  pengguna,  serta  data  resep  beserta  bahan.  Data-data  ini  digunakan  untuk  membangun  profil preferensi  pengguna  dalam  bentuk  vektor.  Selanjutnya,  ketika  pengguna  ingin  mendapatkan  rekomendasi, sistem membandingkan resep yang disukai oleh pengguna yang bersangkutan dengan resep yang disukai oleh pengguna  lain  dengan cosine  similarity .  Semakin  besar  nilai similarity -nya,  maka  nilai  rekomendasi  akan semakin  tinggi.  Setelah  perbandingan  dilakukan,  sistem  merekomendasikan  resep-resep  yang  memiliki kemungkinan  cukup  besar  sesuai  dengan  selera  pengguna  yang  sedang  mengakses  sistem  tersebut.  Semua langkah-langkah ini diilustrasikan pada Gambar 7.
Gambar 7. Proses collaborative filtering untuk rekomendasi resep berdasarkan resep yang disukai pengguna
3. Hasil dan Analisis
3.1. Gambaran Umum
Proses  rekomendasi  resep  yang  diilustrasikan  pada  Gambar  8  melibatkan  data  resep  dan  bahan makanan, ketersediaan bahan makanan, serta resep yang disukai dari masukan pengguna. Data-data tersebut dijadikan  acuan  untuk  algoritma  rekomendasi  guna  menghasilkan  saran  resep  bagi  pengguna.  Dengan menerapkan pendekatan ini, sistem dapat menawarkan rekomendasi resep yang sesuai dengan preferensi dan kebutuhan pengguna.

## Gambar 8.Gambaran alur logika sistem rekomendasi resep
3.2. Implementasi Sistem

## 3.2.1. Arsitektur Website
Sistem  rekomendasi  resep  ini  dikembangkan  dengan  menggunakan  Django  Rest  Framework  sebagai backend untuk  berkomunikasi  dengan client dan database .  Pada  sisi frontend ,  Vue.js  digunakan  untuk menyajikan antarmuka pengguna yang responsif dan interaktif.
Gambar 9. Arsitektur website
Pertukaran data yang diilustrasikan pada Gambar 8 dimulai melalui permintaan HTTP menggunakan library Axios. Django Rest Framework memproses permintaan dari Vue.js, kemudian mengelola data yang diperlukan. Response yang dihasilkan dari pengelolaan data tersebut kemudian dikirim kembali ke Vue.js untuk menampilkan data yang telah diproses kepada pengguna.

## 3.2.2. Implementasi Web Scraping
Proses web scraping dilakukan dengan bahasa pemrograman Python melalui module recipe_scrapers , yang  ditampilkan  pada  Gambar  10.  Modul  ini  dapat  mengekstraksi  yang  informasi  yang  diperlukan,  yaitu dengan cara membuat file .csv dengan header detail resep yang dilanjutkan dengan ekstrasi data tiap detail resep.
from recipe_scrapers import scrape_me import random import csv
def csv_store(linkList, csvfile): header = ["id", "title", "time", "servings", "ingredients", "instructions", "image_url", "source_url"] with open(csvfile, 'w', encoding='UTF8') as f: writer = csv.writer(f) writer.writerow(header) for link in linkList: scraper = scrape_me(link, wild_mode=True) id = random.randint(1000000,9999999) row = [id, scraper.title(), scraper.total_time(), scraper.yields(), scraper.ingredients(), scraper.instructions(), scraper.image(), scraper.links()] writer.writerow(row)
links = [ "https://www.masakapahariini.com/resep/resep-lontong-kari-sapi/", # Other URLs ] csv_store(links, "resep1.csv")
Gambar 10. Potongan kode web scraping
3.2.3. Text Preprocessing untuk Data Resep dan Data Bahan
Text  preprocessing dilakukan  pada  Python  menggunakan  module regular  expression (regex).  Hasil pembersihan data pada resep melalui text filtering dan pemisahan data bahan melalui tokenization disimpan ke dalam file .csv dan diimpor ke database MySQL.

## 3.2.4. Rekomendasi Resep
Algoritma content-based filtering didapatkan dengan menghitung Jaccard similarity tiap resep, dengan membandingkan bahan yang dimiliki pengguna dengan bahan pada resep. Algoritma ini ditulis dengan Python yang diletakkan pada framework Django, yang ditampilkan pada Gambar 11.
def jaccard_similarity(user_ingredients, recipe_ingredients): intersection = len(user_ingredients.intersection(recipe_ingredients)) union = len(user_ingredients.union(recipe_ingredients)) similarity_score = intersection / union return similarity_score def get_recommendation_by_ingredients(user): pantry = set(Pantry.objects.filter(user=user).values_list('raw_ingredient_id', flat=True)) # Get valid recipes recipe_ingredients = Ingredient.objects.filter( raw_ingredient__pantry__user=user ).values('recipe_id', 'raw_ingredient_id', 'id', user_id=F('raw_ingredient__pantry__user_id')) data = {} for ingredient in recipe_ingredients: user_id = ingredient['user_id'] recipe_id = ingredient['recipe_id'] raw_ingredient_id = ingredient['raw_ingredient_id'] if recipe_id in data: data[recipe_id]['raw_ingredient_ids'].add(raw_ingredient_id) else: data[recipe_id] = { 'user_id': user_id, 'recipe_id': recipe_id, 'raw_ingredient_ids': {raw_ingredient_id} } for recipe_id, recipe_data in data.items(): raw_ingredient_ids = set(Ingredient.objects.filter(recipe_id=recipe_id).values_list('raw_ingredient_id', flat=True)) owned_raw_ingredient = set(get_owned_recipe_ingredients(user, recipe_id)) similarity = jaccard_similarity( owned_raw_ingredient, pantry, raw_ingredient_ids) recipe_data['similarity'] = similarity * 100 sorted_recipes = sorted( data.values(), key=lambda x: x['similarity'], reverse=True) return sorted_recipes
Gambar 11. Cuplikan kode content-based filtering
Algoritma item-based collaborative filtering didapatkan dengan menghitung cosine similarity tiap resep, yang membandingkan resep favorit pengguna yang sedang masuk ke dalam sistem dengan resep yang disukai oleh semua pengguna. Algoritma ini juga ditulis dengan Python yang ditampilkan pada Gambar 12.
def calculate_cosine_similarity(): interaction_matrix = create_interaction_matrix() similarity_matrix = cosine_similarity(interaction_matrix.T) similarity_df = pd.DataFrame( similarity_matrix, index=interaction_matrix.columns, columns=interaction_matrix.columns) return similarity_df, interaction_matrix
def get_recommendations_for_user(user_id): similarity_matrix, interaction_matrix = calculate_cosine_similarity()
if user_id in interaction_matrix.index: scores = np.dot(interaction_matrix.values, similarity_matrix)
recommended_items = [interaction_matrix.columns[i] for i in np.argsort(scores[interaction_matrix.index == user_id, :])[0][::-1]]
recommendations = [] for item in recommended_items: score = scores[interaction_matrix.index == user_id, interaction_matrix.columns == item][0] similarity_score = scores[interaction_matrix.index == user_id, interaction_matrix.columns == item][0] if score > 0: recommendation = { 'recipe_id': item, 'similarity': round(similarity_score, 2), 'score': round(score, 2) } recommendations.append(recommendation) return recommendations else: return []
Gambar 12. Cuplikan kode item-based collaborative filtering
Hasil  dari  algoritma  ini  disajikan  dalam  daftar  resep  yang  telah  disortir  berdasarkan  rekomendasi tertinggi, yang ditampilkan kepada pengguna melalui website , yang diilustrasikan pada Gambar 13.
Gambar 13. Alur penggunaan sistem
Untuk menggunakan sistem ini, pengguna diminta untuk memasukkan bahan-bahan yang mereka miliki ke dalam website . Setelah sistem mengetahui daftar bahan yang dimiliki pengguna, sistem akan menyarankan resep-resep yang sesuai dengan bahan-bahan yang tersedia, seperti yang diilustrasikan pada Gambar 14. Hal ini  memudahkan  pengguna  untuk  menemukan  resep-resep  yang  dapat  mereka  masak  dengan  bahan  yang mereka miliki.
Gambar 14. Halaman My Pantry
Informasi mengenai bahan-bahan yang dimiliki oleh pengguna juga ditampilkan dalam detail resep, di mana bahan-bahan yang dimiliki ditandai dengan tanda centang, dan yang belum dimiliki dengan tanda silang, yang  diilustrasikan  pada  Gambar  15.  Dengan  cara  ini,  pengguna  dapat  mengidentifikasi  bahan-bahan  yang sudah mereka miliki dan yang perlu mereka peroleh untuk menyiapkan resep tertentu.
Gambar 15. Halaman detail resep
Selain itu, jika pengguna menyukai resep tertentu, halaman utama akan memberikan rekomendasi untuk resep-resep yang mirip dengan resep yang disukainya, seperti pada Gambar 16. Fitur rekomendasi personal ini bertujuan untuk memperkenalkan pengguna pada resep-resep baru yang sejalan dengan selera mereka.

## 3.3. Evaluasi
3.3.1. Evaluasi Web Scraping
Pada  bagian  ini,  pengimplementasian web  scraping dilakukan  menggunakan  perpustakaan recipe_scraper  dalam  bahasa  Python  untuk  mengumpulkan  data  resep  dari  masakapahariini.    Setelah  data terkumpul,  informasi  resep  dibersihkan  untuk  menghilangkan  rincian  yang  tidak  perlu.  Data  bahan  juga diproses, dengan memisahkan nama-nama bahan, satuan, kuantitas, dan statusnya.
Implementasi web  scraping ini  menghasilkan  1591  resep,  dengan  22606  bahan  yang  terkumpul  dari semua resep. Setelah dikelompokkan, sebanyak 913 bahan unik dengan nama dan karakteristik yang berbeda berhasil diidentifikasi.

## 3.3.2. Evaluasi Rekomendasi Resep Berdasarkan Ketersediaan Bahan
Sistem ini diujikan kepada 47 individu, di mana kemudian diambil 4 pengguna terpilih sebagai evaluasi. Pengguna-pengguna ini diminta untuk memasukkan bahan-bahan resep mereka ke dalam sistem. Tujuan utama dari pengujian ini adalah menganalisis rekomendasi resep yang dihasilkan dan mengidentifikasi faktor-faktor yang memengaruhi hasil rekomendasi.
Selama evaluasi, performa sistem dalam memberikan rekomendasi resep berdasarkan bahan-bahan yang dimasukkan oleh setiap pengguna diamati. Dua aspek penting yang khusus diperhatikan adalah kelengkapan bahan  dan  jumlah  rekomendasi  resep.  Kelengkapan  bahan  mengacu  pada  sejauh  mana  bahan-bahan  yang dimasukkan oleh pengguna cocok dengan bahan-bahan resep.
Tabel 3. Hasil evaluasi rekomendasi resep berdasarkan ketersediaan bahan pengguna
User 1 User 2 User 3 User 4 Jumlah bahan yang dimasukkan 16 8 6 6 Jumlah rekomendasi 969 1149 533 1171 Persentase kelengkapan bahan tertinggi 46.15 38.89 28.57 42.86 Bahan yang dimiliki pengguna pada resep tertinggi Udang, daun bawang, wortel, minyak wijen, telur, jamur shiitake Kentang, garam, ayam, mentega, bawang putih Ayam, cabai Ayam, telur, nasi Jumlah bahan pada resep tertinggi 13 16 7 7 Jumlah bahan dimiliki pada resep tertinggi 6 5 2 3
Berdasarkan  data  yang  diberikan  pada  tabel  3,  terdapat  beberapa  temuan  menarik  dalam  analisis rekomendasi resep untuk pengguna-pengguna tertentu.
Pertama,  User  1  memiliki  kelengkapan  bahan  tertinggi,  mencapai  46%,  diikuti  oleh  User  4  dengan 42,86%. Persentase kelengkapan bahan dipengaruhi oleh sejauh mana bahan-bahan pengguna cocok dengan bahan-bahan  dalam  resep.  Sebagai  contoh,  User  1  memiliki  6  bahan  yang cocok  dari  total  13  bahan  dalam resep, sehingga menghasilkan persentase kelengkapan sebesar 46,15%. Sementara itu, User 4 memiliki 3 bahan yang cocok dari total 7 bahan dalam resep, menghasilkan persentase kelengkapan sebesar 42,86%. Meskipun perbedaannya sedikit, keduanya memiliki bahan-bahan yang cocok dengan jumlah bahan dalam resep.
Kedua,  dapat  diamati  bahwa  jumlah  bahan  yang  dimasukkan  tidak  selalu  mempengaruhi  jumlah rekomendasi  resep.  Sebagai  contoh,  baik  User  3  maupun  User  4  memasukkan  6  bahan,  tetapi  jumlah rekomendasi  resep  untuk  keduanya  berbeda signifikan,  yaitu 533  dan  1171  resep.  Faktor  lain  seperti  bobot kemiripan dan kesesuaian bahan dengan resep juga memainkan peran dalam menentukan hasil rekomendasi.
Ketiga,  menarik  untuk  dicatat  bahwa  User  2  dan  User  1  hampir  dua  kali  lipat  jumlah  bahan  yang dimasukkan,  namun  User  2  menerima  lebih  banyak  rekomendasi  resep.  User  2  memasukkan  8  bahan  dan mendapatkan 1149 rekomendasi resep, sementara User 1, dengan 16 bahan, hanya menerima 969 rekomendasi resep. Hal ini menunjukkan bahwa jumlah bahan yang dimasukkan oleh pengguna tidak selalu menjadi faktor utama dalam menentukan jumlah rekomendasi resep.

## 3.3.3. Evaluasi Rekomendasi Resep Berdasarkan Resep yang Disukai Pengguna
Sistem ini diuji melibatkan empat pengguna sebagai pengujinya, terdiri dari dua ibu rumah tangga yang aktif memasak untuk keluarga mereka, dan dua individu yang tinggal sendiri. Setiap pengguna diminta untuk menyukai beberapa resep sebagai bagian dari proses pengujian. Setelah itu, sistem memberikan rekomendasi berdasarkan selera pengguna, dan pengguna diminta untuk memilih rekomendasi yang sesuai dengan selera mereka. Hasil evaluasi ini akan dianalisis dan dibandingkan untuk mengevaluasi seberapa baik sistem dapat memberikan rekomendasi resep yang akurat dan personal.
Tabel 4. Hasil evaluasi rekomendasi resep berdasarkan resep yang disukai pengguna User 1 User 2 User 3 User 4 Status pengguna Menikah Menikah Lajang Lajang Jumlah resep favorit pengguna 10 6 3 3 Jumlah rekomendasi yang muncul 8 11 11 8 Jumlah rekomendasi yang relevan 6 7 9 5
Berdasarkan  data  pengujian  yang  diberikan  pada  tabel  4,  terdapat  empat  pengguna  yang  terlibat, masing-masing dengan status perkawinan yang berbeda, yaitu dua pengguna yang sudah menikah (User 1 dan User 2) dan dua pengguna yang lajang (User 3 dan User 4).
Pertama,  dari  segi  jumlah  rekomendasi  yang  diberikan  oleh sistem,  terdapat  variasi  yang signifikan. User 2 dan User 3 menerima jumlah rekomendasi tertinggi, masing-masing mendapatkan 11 resep. Di sisi lain, User 1 dan User 4 menerima jumlah rekomendasi yang sedikit lebih rendah, masing-masing mendapatkan 8 resep. Hal ini mengindikasikan bahwa sistem memberikan jumlah rekomendasi yang berbeda kepada setiap pengguna, kemungkinan berdasarkan preferensi dan riwayat penilaian resep mereka.
Kedua,  jumlah  rekomendasi  yang  relevan  berdasarkan  preferensi  pengguna  juga  bervariasi.  User  3 memiliki  jumlah  rekomendasi  yang  relevan  tertinggi,  yaitu  9  resep,  sedangkan  User  4  memiliki  jumlah terendah,  hanya  5  resep.  Ini  menunjukkan  bahwa  sistem  dapat  memberikan  rekomendasi  yang  lebih  cocok untuk Pengguna 3 dibandingkan dengan Pengguna 4.
Ketiga, terdapat perbedaan yang mencolok dalam jumlah resep favorit yang disukai oleh masing-masing pengguna.  User  1  memiliki  resep  favorit  terbanyak,  yaitu  10  resep,  sementara  User  3  dan  User  4  hanya menyukai 3 resep. User 2 berada di tengah-tengah dengan 6 resep favorit. Hal ini menunjukkan variasi dalam preferensi kuliner dan minat di antara para pengguna.

## 3.4. Analisis Evaluasi
Hasil  evaluasi  mengungkapkan  beberapa  temuan  menarik  mengenai  rekomendasi  resep  berdasarkan bahan-bahan. Meskipun jumlah bahan yang dimasukkan oleh pengguna memainkan peran penting, faktor lain seperti kesesuaian bahan dengan resep juga mempengaruhi jumlah rekomendasi resep. Selain itu, jenis bahan yang  disediakan,  baik  bahan  dasar  seperti  air,  garam,  dan  bawang  merah,  atau  bahan-bahan  khusus  seperti wortel, cabai merah, dan jamur shiitake, juga memengaruhi jumlah rekomendasi resep yang diberikan kepada pengguna.
Selanjutnya,  dalam  evaluasi  rekomendasi  resep  berdasarkan  preferensi  pengguna,  ditemukan  bahwa setiap pengguna memiliki preferensi yang berbeda untuk resep-resep yang mereka sukai. Beberapa pengguna mungkin  menyukai  banyak  resep,  sementara  yang  lain  hanya  lebih  suka  beberapa  resep  saja.  Menariknya, jumlah  resep  favorit  yang  disukai  oleh  pengguna  tidak  mempengaruhi  jumlah  rekomendasi  yang  muncul. Sebagai  contoh,  User  1  menyukai  10  resep  tetapi  hanya  menerima  8  rekomendasi,  sementara  User  3,  yang hanya menyukai 3 resep, mendapatkan 11 rekomendasi. Selain itu, variasi jumlah rekomendasi yang relevan mengindikasikan  keragaman  preferensi  pengguna.  Beberapa  pengguna  memiliki  preferensi  yang  hampir identik  dengan  rekomendasi  yang  diberikan, sementara  yang  lain  memiliki  preferensi  yang  sedikit  berbeda. Secara  keseluruhan,  hasil  evaluasi  menunjukkan  bahwa sistem  rekomendasi  resep  ini  cukup  akurat,  dengan lebih dari 50% dari rekomendasi yang diberikan sesuai dengan preferensi pengguna.

## 4. Kesimpulan
Sistem  rekomendasi  resep  berdasarkan  bahan-bahan  dan  preferensi  pengguna  terbukti  relevan  dan efektif.  Sistem  diujikan  pada  47  individu  di  mana  kemudian  diambil  4  pengguna  terpilih  sebagai  evaluasi. Dalam mengevaluasi rekomendasi resep berdasarkan bahan-bahan, ditemukan bahwa jumlah dan jenis bahan yang dimasukkan oleh pengguna memengaruhi jumlah resep yang direkomendasikan, dan kesesuaian bahan dengan resep juga memengaruhi rekomendasi yang muncul. Di sisi lain, meskipun setiap pengguna memiliki preferensi  yang  berbeda  untuk  resep  yang  disukai,  hasil  evaluasi  rekomendasi  resep  berdasarkan  preferensi pengguna menunjukkan bahwa rekomendasi yang diberikan tetap relevan dengan preferensi pengguna. Secara keseluruhan, hasil evaluasi menunjukkan bahwa sistem rekomendasi resep ini cukup akurat, dengan lebih dari 50%  dari  rekomendasi  yang  diberikan  sesuai  dengan  preferensi  pengguna.  Hal  ini  mengindikasikan  bahwa sistem  rekomendasi  berhasil  menyajikan  resep-resep  yang  sesuai  dengan  keinginan  dan  selera  pengguna, menjadikannya sebagai alat bantu memasak yang sangat berguna.
Untuk  penelitian  selanjutnya,  ada  beberapa  saran  yang  dapat  dipertimbangkan.  Pertama, pengembangan sistem rekomendasi resep dapat diperluas dengan mengizinkan pengguna untuk menyatakan bahan-bahan yang perlu dihindari, seperti alergi atau pantangan makanan, untuk meningkatkan keamanan dan kenyamanan pengguna dalam menemukan resep yang sesuai. Kedua, perlu dipertimbangkan pengembangan lebih lanjut pada rekomendasi resep berdasarkan persediaan bahan dengan mempertimbangkan jumlah bahan
yang tidak dimiliki oleh pengguna, sehingga pengguna dapat lebih efisien dalam memilih resep yang sesuai dengan bahan yang mereka miliki. Terakhir, rekomendasi resep dapat ditingkatkan dengan mengintegrasikan perhitungan  dari  rekomendasi  berdasarkan  bahan  dengan  rekomendasi  berdasarkan  preferensi  pengguna, memberikan prioritas pada resep yang sesuai dengan persediaan bahan pengguna. Dengan demikian, penelitian selanjutnya dapat memperbaiki sistem rekomendasi resep berdasarkan kebutuhan dan preferensi pengguna.

## Daftar Pustaka
[1] M. P. Doyle and M. C. Erickson, “Summer meeting 2007 the problems with fresh produce: an overview,” Journal of Applied Microbiology , vol. 105, no. 2, pp. 317–330, Aug. 2008, doi: 10.1111/j.1365-2672.2008.03746.x.
[2] B. Zhou, H. Yamanaka-Okumura, S. Seki, H. Tatano, C. Adachi, and E. Takeda, “What influences appetite more: eating  approaches  or  cooking  methods?,” J.  Med.  Invest. ,  vol.  61,  no.  1.2,  pp.  118–125,  2014,  doi: 10.2152/jmi.61.118.
[3] M. Montanari, Food is culture . in Arts and traditions of the table. New York: Columbia University Press, 2006.
[4] S. Anzman-Frasca, A. K. Ventura, S. Ehrenberg, and K. P. Myers, “Promoting healthy food preferences from the start: a narrative review of food preference learning from the prenatal period through early childhood: Promoting healthy food preferences,” Obesity Reviews , vol. 19, no. 4, pp. 576–604, Apr. 2018, doi: 10.1111/obr.12658.
[5] P. van der Werf, J. A. Seabrook, and J. A. Gilliland, “Food for naught: Using the theory of planned behaviour to better understand household food wasting behaviour,” Canadian Geographies / Géographies canadiennes , vol. 63, no. 3, pp. 478–493, 2019, doi: https://doi.org/10.1111/cag.12519.
[6] S. Chaudhari, R. Aparna, V. G. Tekkur, G. L. Pavan, and S. R. Karki, “Ingredient/Recipe Algorithm using Web Mining and Web Scraping for Smart Chef,” in 2020 IEEE International Conference on Electronics, Computing and Communication  Technologies  (CONECCT) ,  Bangalore,  India:  IEEE,  Jul.  2020,  pp.  1–4.  doi: 10.1109/CONECCT50063.2020.9198450.
[7] I. Adaji, C. Sharmaine, S. Debrowney, K. Oyibo, and J. Vassileva, “Personality Based Recipe Recommendation Using Recipe Network Graphs,” in Social Computing and Social Media. Technologies and Analytics , vol. 10914, G. Meiselwitz, Ed., in Lecture Notes in Computer Science, vol. 10914. , Cham: Springer International Publishing, 2018, pp. 161–170. doi: 10.1007/978-3-319-91485-5_12.
[8] N.  Nilesh,  M.  Kumari,  P.  Hazarika,  and  V.  Raman,  “Recommendation  of  Indian  Cuisine  Recipes  Based  on Ingredients,”  in 2019  IEEE  35th  International  Conference  on  Data  Engineering  Workshops  (ICDEW) ,  Macao, Macao: IEEE, Apr. 2019, pp. 96–99. doi: 10.1109/ICDEW.2019.00-28.
[9] T. Kadowaki, Y. Yamakata, S. Mori, and K. Tanaka, “Recipe search for blog-type recipe articles based on a user’s situation,”  in Proceedings  of  the  2014  ACM  International  Joint  Conference  on  Pervasive  and  Ubiquitous Computing: Adjunct Publication , Seattle Washington: ACM, Sep. 2014, pp. 497–506. doi: 10.1145/2638728.2641327.
[10]  L.  Tobey,  C.  Mouzong,  J.  Angulo,  S.  Bowman, and  M.  Manore,  “How  Low-Income  Mothers  Select  and  Adapt Recipes and Implications for Promoting Healthy Recipes Online,” Nutrients , vol. 11, no. 2, p. 339, Feb. 2019, doi: 10.3390/nu11020339.
[11]  R. Lawson, Web scraping with Python: scrape data from any website with the power of Python . in Community experience distilled. Birmingham Mumbai: Packt Publishing, 2015.
[12]  J.  Hillen,  “Web  scraping  for  food  price  research,” BFJ ,  vol.  121,  no.  12,  pp.  3350–3361,  Nov.  2019,  doi: 10.1108/BFJ-02-2019-0081.
[13]  B. Zhao, “Web Scraping,” in Encyclopedia of Big Data , L. A. Schintler and C. L. McNeely, Eds., Cham: Springer International Publishing, 2017, pp. 1–3. doi: 10.1007/978-3-319-32001-4_483-1.
[14]  V.  Bhujade  and  N.  J.  Janwe,  “Knowledge  Discovery  in  Text  Mining  Technique  Using  Association  Rules Extraction,”  in 2011  International  Conference  on  Computational  Intelligence  and  Communication  Networks , Gwalior, India: IEEE, Oct. 2011, pp. 498–502. doi: 10.1109/CICN.2011.104.
[15]  C.  D.  Manning,  P.  Raghavan,  and  H.  Schütze, Introduction  to  information  retrieval .  New  York:  Cambridge University Press, 2008.
[16]  Y. L. Sukestiyarno, H. A. Sapolo, and H. Sofyan, “Application of Recommendation System on E-Learning Platform Using Content-Based Filtering with Jaccard Similarity and Cosine Similarity Algorithms,” Computer Science and Mathematics, preprint, Jun. 2023. doi: 10.20944/preprints202306.1672.v1.
[17]  A. Bhatia, Machine Learning in Java: Helpful Techniques to Design, Build, and Deploy Powerful Machine Learning Applications in Java, 2nd Edition , 2nd revised ed. Birmingham: Packt Publishing Ltd, 2018.
[18]  D. Jannach, Ed., Recommender systems: an introduction . New York: Cambridge University Press, 2011.
[19]  P. Dangeti, Statistics for machine learning: techniques for exploring supervised, unsupervised, and reinforcement learning models with Python and R . Birmingham, UK: Packt Publishing, 2017.