Contoh yang salah, terkait:
Coba cari mana yang salah????
Tidak ada kata "gagal" yang ada adalah "sukses" atau "belajar lagi"
SEMANGAT !!!!!
Dalam proyek ini, kami membangun sistem rekomendasi medis menggunakan pendekatan Content-Based Filtering dan Collaborative Filtering untuk membantu pengguna, seperti pasien, dokter dan apoteker, dalam memberikan rekomendasi obat berdasarkan fitur karakteristik obat yang relevan serta riwayat data pengguna. Sistem ini bertujuan untuk memberikan saran pengobatan yang lebih akurat dengan memperhitungkan data medis pasien dan preferensi obat.
-
Content-Based Filtering menggunakan dataset "Events" yang berisi informasi tentang efek samping dan kejadian medis yang terkait dengan obat-obatan. untuk memberikan rekomendasi berbasis karakteristik obat. Metode ini memberikan rekomendasi berbasis karakteristik obat yang sesuai dengan data pasien. Misalnya, sistem dapat menganalisis gejala pasien, durasi penyakit, dan parameter medis lainnya untuk menyarankan obat yang paling relevan [1]. Keunggulan metode ini adalah kemampuan memberikan rekomendasi yang dipersonalisasi sesuai dengan profil individu pasien, sehingga meningkatkan relevansi saran pengobatan.
-
Collaborative Filtering menggunakan dataset "Drug Rating" yang berisi penilaian obat oleh pengguna (pasien). Metode ini memberikan rekomendasi berdasarkan pola preferensi pengguna lain yang memiliki kondisi medis serupa. Sebagai contoh, jika pasien dengan gejala serupa telah berhasil menggunakan obat tertentu, sistem akan merekomendasikan obat tersebut kepada pasien baru yang memiliki profil serupa [2]. Namun, Collaborative Filtering dapat menghadapi tantangan seperti kelangkaan data (data sparsity) dan masalah item baru (new item problem), sehingga memerlukan pengoptimalan untuk meningkatkan akurasi [2].
Problem Statements
Pengguna sering menghadapi tantangan dalam memilih obat yang tepat karena banyaknya pilihan obat yang tersedia. Pemilihan obat yang tidak sesuai dengan kondisi medis pengguna—termasuk riwayat medis mereka—dapat menyebabkan efek samping yang berbahaya dan menurunkan efektivitas pengobatan. Oleh karena itu, diperlukan sistem rekomendasi yang mampu membantu pengguna memilih obat yang relevan, aman, dan efektif [3].
Goals
- Mengembangkan sistem rekomendasi medis yang dapat memberikan saran obat yang lebih tepat berdasarkan data medis pasien dan pengalaman pengguna lain.
- Membantu dokter dan pasien dalam memilih obat yang lebih efektif dan aman dengan memanfaatkan pendekatan algoritma Content-Based Filtering dan Collaborative Filtering.
Solution Approach
- Content-Based Filtering digunakan untuk memberikan rekomendasi berdasarkan karakteristik obat, seperti efek samping dan kejadian medis yang telah tercatat [6].
- Collaborative Filtering digunakan untuk memberikan rekomendasi berdasarkan preferensi pengguna lain yang memiliki riwayat medis serupa [8].
Exploratory Data Analysis (EDA) & Data Visualization
Sebelum membangun model, kami melakukan eksplorasi data untuk memahami struktur dataset dan kualitasnya. Berikut adalah beberapa langkah EDA yang dilakukan:
- Deskriptif statistik: Melihat ringkasan statistik untuk data numerik (misalnya, rating obat, umur pasien).
- Distribusi data: Menilai distribusi rating obat dan efek samping untuk memahami pola umum.
- Visualisasi hubungan antar fitur: Melihat korelasi antara fitur (misalnya, rating obat dan efek samping).
Dalam proyek ini, kami menggunakan 2 dataset yang berasal dari database drugs.com dan druglib.com yang dapat di akses pada link ini.
A. Dataset Events
1. Struktur dataset
Dataset "Events" terdiri dari 5 kolom dengan 2486 baris. Mayoritas kolom bertipe object kecuali kolom Age bertipe int64. Berikut detail variabel fitur dataset ini:
DrugName: Nama obat yang digunakan (misalnya "Abilify").Age: Usia individu yang melaporkan reaksi tersebut.Genius: Jenis kelamin individu (misalnya "male" atau "female").Reactions: Reaksi medis yang terkait dengan obat (misalnya "Drug Level Increased").Advent Event: Kejadian medis tambahan yang terkait dengan reaksi tersebut (misalnya "death", "hospitalization").
RangeIndex: 2486 entries, 0 to 2485
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 DrugName 2486 non-null object
1 Age 2486 non-null int64
2 Genius 2486 non-null object
3 Reactions 2486 non-null object
4 Advent Event 1483 non-null object
dtypes: int64(1), object(4) <br>
2. Statistik Deskriptif (untuk kolom Age):
Kolom yang dapat diproses menggunakan fungsi describe() adalah kolom Age, karena bertipe data int64. Berdasarkan output diatas, rentang usia pengguna, dari usia termuda (min) adalah 1 tahun hingga usia tertua (max) 97 tahun, dengan rata-rata usia (mean) adalah 55 tahun.
Age
count 2486.000000
mean 55.482301
std 18.657139
min 1.000000
25% 45.000000
50% 58.000000
75% 68.000000
max 97.000000
3. Data Kosong (Missing Values):
Kolom Advent Event memiliki nilai yang hilang (1003 nilai kosong, dari total 2486 entri), yang bisa jadi mempengaruhi analisis lebih lanjut tentang kejadian atau peristiwa terkait.
| Kolom | Missing Values |
|---|---|
| DrugName | 0 |
| Age | 0 |
| Genius | 0 |
| Reactions | 0 |
| Advent Event | 1003 |
Berikut adalah output beberapa baris pertama dataset Events dengan fungsi head setelah kolom "Genius" dirubah menjadi "Gender" untuk memudahkan proses selanjutnaya.
| Index | DrugName | Age | Gender | Reactions | Advent Event |
|---|---|---|---|---|---|
| 0 | Abilify | 63 | male | Drug Level Increased | NaN |
| 1 | Abilify | 55 | male | Thyroid Cancer | NaN |
| 2 | Abilify | 63 | male | Completed Suicide; Suicide Attempt; Coma | death; hospitalization |
| 3 | Abilify | 31 | male | Eosinophilic Pneumonia; Pulmonary Alveolar Ha... | death |
| 4 | Abilify | 75 | female | Lymphopenia; Anaemia; Neutropenia | hospitalization |
4. Visualisasi dataset
Dataset Events: analisis dilakukan untuk mengetahui obat mana yang paling sering dikaitkan dengan reaksi buruk, atau reaksi mana yang paling sering dilaporkan. Analisis juga bisa mencakup hubungan antara jenis obat, usia, dan tingkat keparahan reaksi.
a. Distribusi Usia
Sebagian besar individu dalam dataset ini berusia antara 45 hingga 85 tahun, dengan puncak frekuensi di sekitar usia 68 tahun. Ini menunjukkan bahwa data lebih banyak berasal dari individu dewasa hingga lanjut usia.

b. Frekuensi Obat:
Visualisasi menunjukkan daftar 10 obat yang paling sering dilaporkan dalam dataset ini. Obat yang lebih umum seperti "Seroqu" memiliki jumlah laporan yang lebih tinggi dibandingkan obat lainnya.
c. Frekuensi Reaksi:
Di antara reaksi yang paling sering dilaporkan, "Death" menduduki posisi teratas, diikuti dengan reaksi seperti "Drug Ineffective" dan "Drug Ineffective; Atonic Seizures". Reaksi ini memberikan wawasan penting tentang potensi dampak serius dari obat-obatan tersebut.
5. Analisis Korelasi Dataset Events
Untuk mengidentifikasi hubungan antar kolom dan menguji apakah ada pola yang menarik antara fitur-fitur yang ada.

a. Frekuensi Reaksi Berdasarkan Usia:
Grafik ini menunjukkan bahwa frekuensi reaksi buruk yang dilaporkan meningkat seiring bertambahnya usia. Hal ini mungkin mencerminkan bahwa individu yang lebih tua lebih cenderung melaporkan reaksi terhadap obat-obatan, atau obat-obatan yang mereka gunakan cenderung menyebabkan lebih banyak efek samping pada kelompok usia ini.
b. Frekuensi Kejadian Berdasarkan Usia:
Grafik kedua menunjukkan bahwa kejadian-kejadian buruk atau serius (seperti kematian atau rawat inap) juga lebih sering dilaporkan pada usia yang lebih tua. Ini mungkin menunjukkan hubungan antara peningkatan usia dan peningkatan risiko efek samping atau kejadian negatif lainnya.
6. Kesimpulan & insight dataset Events
- Deskripsi: Dataset ini berisi informasi tentang efek samping yang terkait dengan obat dan kejadian medis terkait dengan penggunaan obat (misalnya, kematian, rawat inap, reaksi obat).
- Tujuan: Dataset ini berfokus pada efek samping obat dan kejadian medis terkait dengan penggunaan obat tertentu.
- Poin penting: Dataset ini lebih banyak menyertakan informasi tentang kejadian medis yang terjadi setelah penggunaan obat, serta hubungan obat dengan reaksi tubuh pasien.
- Relevansi: Dataset ini cocok untuk Content-Based Filtering, karena kita dapat memberikan rekomendasi obat berdasarkan deskripsi efek samping dan kejadian medis yang terkait. Misalnya, jika pasien memiliki riwayat tertentu, kita dapat merekomendasikan obat yang tidak memiliki efek samping yang serupa.
B. Dataset Drug Rating
1. Struktur dataset
Dataset "Drug Rating" terdiri dari 15 kolom dengan 3293 baris. Semua kolom bertipe object (string), yang menunjukkan bahwa semua informasi bersifat kategorikal. Berikut detail variabel fitur dataset ini:
Kolom 3351, 2, 3, ... 13, 14, sampai kolom 15
RangeIndex: 3293 entries, 0 to 3292
Data columns (total 15 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 3351 3293 non-null object
1 2 3293 non-null object
2 3 3293 non-null object
3 4 3291 non-null object
4 5 2778 non-null object
5 6 2831 non-null object
6 7 3293 non-null object
7 8 3293 non-null object
8 9 3293 non-null object
9 10 3293 non-null object
10 11 3293 non-null object
11 12 3293 non-null object
12 13 3272 non-null object
13 14 3215 non-null object
14 15 3271 non-null object
dtypes: object(15)
Pada dataset ini, nama kolom tidak lazim, penjelasan detailnya akan dijelaskan dengan menampilkan beberapa baris pertama setiap kumpulan data untuk memahami strukturnya, memakai drug_rating_df.head()
| 3351 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | F1 | F2 | F3 | F4 | F5 | F6 | F1 | NaN | ||||||
| 1 | Level | Age | Genus | Condition Reason | Other Condition | Other Drug | DrugName | Category | OverallRating | Effectiveness | SideEffect | Dosage | Benefit | SideEffect |
| 2 | patient | 22 | male | Depression | Sleeplessness | Nil | Mirtazapine | Adrenergic-Alpha-Antagonists Histamine-H1-Ant... | 1 | Ineffective | Severe Side Effects | 15mg taken once daily for the period of 2 Months | Nil | now taking temazepam to help with sleeping and... |
| 3 | patient | 38 | male | Clinical Depression | NaN | NaN | Mirtazapine | Adrenergic-Alpha-Antagonists Histamine-H1-Ant... | 2 | Ineffective | Moderate Side Effects | 30mg taken daily (evening) for the period of ... | Did improve my appetite; which was suffering a... | Mild weight gain. Period of tiredness for two ... |
| 4 | patient | 30 | female | Chronic insomnia | Anxiety; panic attacks | Epilium | Mirtazapine | Adrenergic-Alpha-Antagonists Histamine-H1-Ant... | 9 | Highly Effective | Moderate Side Effects | 30 mg taken take one hour before bed for the ... | -night time sleep (at least 5-6 hours per nigh... | Constant feeling of hunger( feeling of empty s... |
Berdasarkan output diatas, baris pertama & kedua dataset Drug Rating tidak relevan, karena informasi nama kolom ada di baris ketiga. Untuk itu perlu dihilangkan kedua baris tersebut, sehingga memudahkan proses selanjutnya.
| ID | Level | Age | Gender | Condition | Reason | Other Condition | Other Drug | DrugName | Category | OverallRating | Effectiveness | SideEffect | Dosage | Benefit | SideEffect | Comment Review |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | patient | 22 | male | Depression | Sleeplessness | Nil | Nil | Mirtazapine | Adrenergic-Alpha-Antagonists Histamine-H1-Anta... | 1 | Ineffective | Severe Side Effects | 15mg taken once daily for the period of 2 Months | Nil | now taking temazepam to help with sleeping and... | - |
| 1 | patient | 38 | male | Clinical Depression | NaN | NaN | NaN | Mirtazapine | Adrenergic-Alpha-Antagonists Histamine-H1-Anta... | 2 | Ineffective | Moderate Side Effects | 30mg taken daily (evening) for the period of ... | Did improve my appetite; which was suffering a... | Mild weight gain. Period of tiredness for two ... | Was prescribed as an alternative to Citalopram... |
| 2 | patient | 30 | female | Chronic insomnia | Anxiety; panic attacks | Epilium | NaN | Mirtazapine | Adrenergic-Alpha-Antagonists Histamine-H1-Anta... | 9 | Highly Effective | Moderate Side Effects | 30 mg taken take one hour before bed for the ... | -night time sleep (at least 5-6 hours per nigh... | Constant feeling of hunger (feeling of empty s... | Hour before bed: 30 mg mirtazapine( avanza) an... |
| 3 | patient | 19 | female | Depression; Anxiety; OCD; Nausea | CFS; IBS; insomnia | Lansoprazole; Loestrin 30 | NaN | Mirtazapine | Adrenergic-Alpha-Antagonists Histamine-H1-Anta... | 2 | Ineffective | Mild Side Effects | 30mg taken once a day for the period of 7 months | Helped me easily get a good sleep. Possible re... | Too tired to get up in morning; irritability; ... | Did little if anything for depression and anxi... |
| 4 | - | - | - | Anxiety/insomnia | /na | Oxazepam 30 | NaN | Mirtazapine | Adrenergic-Alpha-Antagonists Histamine-H1-Anta... | 6 | Ineffective | Moderate Side Effects | 30mg taken 1 at night for the period of 1 month | 6hrs sleep per night. Vivid dreams. No other s... | Morning anxiety ++ | 30mg daily oxazepam 30 prn x3 max |
-
Output hasil dataset Drug Rating yang telah relevan nama kolomnya, yang terdiri dari:
Level: Peran pengguna (pasien/ dokter).Age: Umur pasien.Genus: Jenis kelamin pasien.Condition Reason: Pertimbangan penggunaan obat.Other Condition: Pertimbangan penggunaan obat yang lain.Other Drag: Obat penyerta.DrugName: Nama obat.Category: Kategori obat.OverallRating: Rating.Effectiveness: Keefektifan obat.SideEffect: Tingkatan efek samping.Dosage: Dosis obat.Benefit: Keuntungan penggunaan obat.SideEffect: Efek samping yang tampak.Comment Review: Ulasan pengguna obat.
-
Bila melihat penamaan kolom, ada beberapa nama yang harus disesuaikan, untuk memudahkan proses selanjutnya. Diantaranya, nama kolom "Genus" yang tidak sesuai dengan isi kolomnya terkait jenis kelamin; Ada kolom yang mempunyai nama sama yaitu "SideEffect" dengan isi berbeda; Serta ada kolom dengan dua kata yang memakai spasi dan tidak.
-
Analisis dapat dilakukan dengan melihat seberapa efektif obat-obatan, mengelompokkan obat berdasarkan efek sampingnya, serta menilai pengaruh efek samping terhadap rating keseluruhan obat. Menganalisis hubungan antara "OverallRating" dan "Effectiveness" atau "SideEffect" juga bisa memberikan wawasan yang menarik.
-
Tujuan: Dataset ini berfokus pada evaluasi efek terapeutik dari obat berdasarkan pengalaman pengguna atau pasien.
2. Statistik Deskriptif:
- Kolom "Level" (berisi informasi jenis pasien): Sebagian besar entri adalah "patient" (3162 entri).
- Kolom "Age" (Usia): Terdapat variasi usia dengan nilai terbanyak adalah 45 tahun.
- Kolom "Genus" (Jenis kelamin): Kebanyakan adalah perempuan (2652 entri).
- Kolom "Condition Reason" (Kondisi yang dirawat): Yang paling umum adalah "depression" (183 entri).
- Kolom "Other Condition" hingga "Comment Review" memberikan informasi yang lebih rinci tentang efek samping, efektivitas, dosis, dan lainnya, dengan beberapa kolom seperti "SideEffect", "Other Condition", dan "Benefit" mengandung beberapa nilai kosong.
1 Level Age Genus Condition Reason Other Condition Other Drag \
count 3291 3291 3291 3289 2776 2829
unique 3 86 3 1638 1129 1321
top patient 45 female depression none none
freq 3162 117 2652 183 1101 1140
1 DrugName \
count 3291
unique 233
top Lexapro (Escitalopram)
freq 73
1 Category OverallRating \
count 3291 3291
unique 182 10
top topical-agents-skin-and-mucous-membranes topic... 10
freq 131 747
1 Effectiveness SideEffect \
count 3291 3291
unique 5 5
top Highly Effective Mild Side Effects
freq 1389 1083
1 Dosage Benefit SideEffect \
count 3291 3270 3213
unique 3210 3189 2984
top 300 mg initially increased to 450 mg/day take... none none
freq 5 24 106
1 Comment Review
count 3270
unique 3189
top -
freq 12
3. Data Kosong (Missing Values):
- Beberapa kolom memiliki data kosong, terutama pada kolom "Other Condition" (515 entri kosong) dan "Other Drag" (462 entri kosong).
- Kolom yang lain "SideEffect", "Benefit", Comment Review" dan "Condition Reason" juga memiliki data kosong, yang perlu diperhatikan dalam analisis selanjutnya.
| No. | Nama Kolom | Missing Values |
|---|---|---|
| 1 | Level | 0 |
| 2 | Age | 0 |
| 3 | Genus | 0 |
| 4 | Condition Reason | 2 |
| 5 | Other Condition | 515 |
| 6 | Other Drag | 462 |
| 7 | DrugName | 0 |
| 8 | Category | 0 |
| 9 | OverallRating | 0 |
| 10 | Effectiveness | 0 |
| 11 | SideEffect | 0 |
| 12 | Dosage | 0 |
| 13 | Benefit | 21 |
| 14 | SideEffect | 78 |
| 15 | Comment Review | 21 |
Sebelum dilakukan visualisasi, beberapa kolom disesuaikan penamaannya untuk memudahkan proses selanjutnya. Diantara kolom yang disesuaikan yaitu:
- "Genus" yang merupakn kolom berisi keterangan jenis kelamin, disesuaikan menjadi "Gender".
- Kolom "Age" & "OverallRating" dari kategorikal di rubah menjadi numerik.
Hasil penyesuaian seperti tampak pada output dibawah ini:
| # | Level | Age | Gender | Condition | Reason | Other Condition | Other Drug | DrugName | Category | OverallRating | Effectiveness | SideEffect | Dosage | Benefit | SideEffect | Comment Review |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | patient | 22.0 | male | Depression | Sleeplessness | Nil | Nil | Mirtazapine | Adrenergic-Alpha-Antagonists Histamine-H1-Antagonists | 1 | Ineffective | Severe Side Effects | 15mg taken once daily for 2 months | Nil | Now taking temazepam to help with sleeping and anxiety | - |
| 2 | patient | 38.0 | male | Clinical Depression | NaN | NaN | Nil | Mirtazapine | Adrenergic-Alpha-Antagonists Histamine-H1-Antagonists | 2 | Ineffective | Moderate Side Effects | 30mg taken daily (evening) for 3 months | Did improve appetite; which was suffering a lot | Mild weight gain; Period of tiredness for two weeks | Was prescribed as an alternative to Citalopram |
| 3 | patient | 30.0 | female | Chronic insomnia | Anxiety; panic attacks | Epilium | Nil | Mirtazapine | Adrenergic-Alpha-Antagonists Histamine-H1-Antagonists | 9 | Highly Effective | Moderate Side Effects | 30 mg taken one hour before bed for 2 months | Night-time sleep (5-6 hours per night) | Constant hunger (feeling of empty stomach) | Hour before bed: 30mg mirtazapine (Avanza) and Epilium |
| 4 | patient | 19.0 | female | Depression; Anxiety; OCD | CFS; IBS; insomnia | Lansoprazole; Loestrin 30 | Nil | Mirtazapine | Adrenergic-Alpha-Antagonists Histamine-H1-Antagonists | 2 | Ineffective | Mild Side Effects | 30mg taken once daily for 7 months | Helped me easily get a good sleep | Too tired to get up in morning; irritability | Did little for depression and anxiety |
| 5 | - | NaN | - | Anxiety/insomnia | /na | Oxazapam 30 | Nil | Mirtazapine | Adrenergic-Alpha-Antagonists Histamine-H1-Antagonists | 6 | Ineffective | Moderate Side Effects | 30mg taken once at night for 1 month | 6 hours sleep per night. Vivid dreams. No other issues | Morning anxiety ++ | 30mg daily oxazepam 30 prn x3 max |
4. Visualisasi dataset
a. Distribusi Usia:
Seperti yang terlihat pada grafik, sebagian besar data berasal dari pasien dengan usia 45 tahun. Ini mencerminkan distribusi usia yang terpusat di sekitar kelompok usia dewasa tengah hingga lanjut usia.
b. Rating Pengguna Teratas:
Dalam dataset ini, pengguna paling sering menilai dengan rating "10", diikuti dengan "8" dan "9", serta rating pengguna lainnya. Ini menunjukkan bahwa sebagian besar pengguna merasa puas karena ratingnya tinggi.
c. Efektivitas Obat:
Obat yang paling banyak dilaporkan memiliki rating "Highly Effective", menunjukkan bahwa banyak pasien merasakan manfaat yang baik dari obat yang mereka gunakan. Sebagian besar laporan juga menunjukkan bahwa obat tersebut memberikan hasil yang cukup baik.
5. Korelasi antara Usia dan Rating Pengguna atau Efektivitas di Dataset Drug Rating
a. Frekuensi Rating Pengguna Berdasarkan Usia:
Grafik pertama menunjukkan bahwa frekuensi rating pengguna relatif meningkat pada usia rentang 10 sampai 54 tahun dan turun setelahnya. Hal ini konsisten dengan temuan sebelumnya di dataset Events, di mana individu yang lebih tua lebih cenderung merasakan obat-obatan yang mereka gunakan, menyebabkan lebih banyak efek samping, sehingga kurang puas terhadap penggunaan obat atau mungkin tidak menilai secara rinci.
b. Frekuensi Efektivitas Obat Berdasarkan Usia:
Grafik kedua menunjukkan bahwa efektivitas obat lebih sering dilaporkan oleh individu yang lebih muda. Ini menunjukkan bahwa pengobatan cenderung lebih efektif pada kelompok usia yang lebih muda, atau mungkin orang yang lebih muda lebih cenderung melaporkan respons positif terhadap pengobatan.
Untuk memudahkan proses dan analisis berikutnya, maka diperlukan pembersihan data pada kolom "Gender" di kedua dataset, yaitu baris data dengan nilai '-' atau NaN. Output dibawah ini, merupakan kolom "Gender" yang masih terdapat baris data dengan nilai '-'.
(Gender
female 1516
male 950
(3; 2) 4
(1; 2) 3
(0; 2) 3
(12; 2) 2
(10; 2) 1
(21; 2) 1
(6; 2) 1
(4; 2) 1
(5; 2) 1
(13; 2) 1
(14; 2) 1
(2; 2) 1
Name: count, dtype: int64,
Gender
female 2652
male 611
Name: count, dtype: int64)
Output kolom "Gender" pada kedua dataset yang sudah dibersihkan dari baris data dengan nilai '-'.
(Gender
female 1516
male 950
Name: count, dtype: int64,
Gender
female 2652
male 611
Name: count, dtype: int64)
6. Korelasi Jenis Kelamin terhadap Rating Pengguna dan Efektivitas di Dataset Drug Rating
a. Rating Pengguna Berdasarkan Jenis Kelamin:
Grafik pertama menunjukkan bahwa wanita lebih cenderung memberikan rating obat dibandingkan pria, dengan frekuensi rating pengguna yang lebih tinggi di kelompok wanita. Ini bisa menunjukkan bahwa wanita mungkin lebih aktif memberikan nilai rating atau lebih cenderung merespon pengalaman penggunaan obat yang dialaminya.
b. Efektivitas Obat Berdasarkan Jenis Kelamin:
Grafik kedua menunjukkan bahwa wanita lebih sering melaporkan obat sebagai "Sangat Efektif", sementara pria cenderung melaporkan efek yang lebih rendah. Ini mungkin menunjukkan perbedaan persepsi atau respons fisiologis terhadap pengobatan antara pria dan wanita.
C. Kesimpulan Umum
-
Dataset Events:
- Mayoritas pasien yang melaporkan reaksi buruk adalah individu dewasa hingga lanjut usia.
- Beberapa obat seperti Seroqu cenderung memiliki frekuensi laporan yang lebih tinggi, yang mungkin menunjukkan prevalensi penggunaannya atau ketergantungan pada obat tersebut.
- Reaksi yang paling sering dilaporkan adalah "Death", yang bisa mengindikasikan masalah dosis atau pengelolaan obat.
- Pada Dataset Events menunjukkan bahwa usia berhubungan dengan meningkatnya frekuensi reaksi buruk dan kejadian serius akibat obat-obatan.
-
Dataset Drug Rating:
- Sebagian besar pasien yang dilaporkan dalam dataset ini adalah perempuan, dengan usia yang lebih banyak berada pada rentang dewasa menengah hingga lanjut usia.
- Pengguna paling sering menilai dengan rating "10", yang dapat mencerminkan bahwa sebagian besar pasien merasakan manfaat penggunaan obat.
- Obat-obat yang dilaporkan memiliki tingkat efektivitas yang cukup tinggi, dengan banyak pasien melaporkan bahwa obat tersebut sangat efektif.
- Pada data Dataset Drug Rating mengungkapkan bahwa jenis kelamin berpotensi mempengaruhi persepsi terhadap efektivitas penggunaan obat, dengan wanita melaporkan lebih banyak pengalaman penggunaanya dan menilai obat lebih efektif daripada pria.
- Usia juga menunjukkan korelasi dengan rating pengguna yang cenderung turun dan juga penurunan efektivitas obat pada individu yang lebih tua.
A. Detection and Removal Duplicates
Sebelum membangun model, kita akan memeriksa duplikasi dalam data dan menghapusnya untuk memastikan data yang digunakan tidak redundan.
0
Dari output hasil diatas, dipastikan tidak terdapat duplikasi.
B. Dropping Uneeded Column
Kita akan menghapus kolom yang tidak relevan untuk analisis lebih lanjut.
- Dataset Events
| # | DrugName | Age | Gender | Reactions | AdventEvent |
|---|---|---|---|---|---|
| 1 | Abilify | 63 | male | Drug Level Increased | NaN |
| 2 | Abilify | 55 | male | Thyroid Cancer | NaN |
| 3 | Abilify | 63 | male | Completed Suicide; Suicide Attempt; Coma | death; hospitalization |
| 4 | Abilify | 31 | male | Eosinophilic Pneumonia; Pulmonary Alveolar Haemorrhage | death |
| 5 | Abilify | 75 | female | Lymphopenia; Anaemia; Neutropenia | hospitalization |
Pada dataset Events kami memasukkan semua 5 variabel kolom, yaitu:
DrugNameAgeGenderReactionsAdventEvent
- Dataset Drug Rating
| # | DrugName | Age | Gender | Condition Reason | OverallRating | Effectiveness | SideEffect |
|---|---|---|---|---|---|---|---|
| 1 | Mirtazapine | 22 | male | Depression | 1 | Ineffective | Severe Side Effects |
| 2 | Mirtazapine | 38 | male | Clinical Depression | 2 | Ineffective | Moderate Side Effects |
| 3 | Mirtazapine | 30 | female | Chronic insomnia | 9 | Highly Effective | Moderate Side Effects |
Pada dataset Drug Rating kami hanya memasukkan 7 variabel kolom yang relevan untuk proses selanjutnya, yaitu:
DrugNameAgeGenderConditionReasonOveralRatingEffectivenessSideEffect
C. Handle Missing Value
Kita juga perlu menangani nilai yang hilang dalam data, baik dengan mengisi nilai yang hilang atau menghapus baris yang mengandung nilai yang hilang. Berikut hasil cek missing value pada kedua dataset:
(DrugName 0
Age 0
Gender 0
Reactions 0
AdventEvent 985
dtype: int64,
DrugName 0
Age 0
Gender 0
ConditionReason 2
OverallRating 0
Effectiveness 0
SideEffect 0
dtype: int64)
- Pada dataset Events, pada kolom
AdventEventterdapat 985 baris missing value. Kami akan menangani kolom ini, dengan memperhitungkan nilainya (seperti mean atau mode), pada baris yang nilainya hilang. - Untuk dataset Drug Rating, pada kolom
ConditionReasonterdapat 2 missing value. Kami akan menangani kolom ini, dengan menghapus baris tersebut jika perlu. Berikut hasilnya setelah penanganan missing value pada kedua dataset:
(DrugName 0
Age 0
Gender 0
Reactions 0
AdventEvent 0
dtype: int64,
DrugName 0
Age 0
Gender 0
ConditionReason 0
OverallRating 0
Effectiveness 0
SideEffect 0
dtype: int64)
- Dataset Events: Kolom
Advent Eventyang memiliki 985 nilai yang hilang, kami lakukan imputasi nilai yang hilang tersebut dengan nilai modus (nilai yang paling sering muncul), karena ini terkait dengan kejadian medis pengobatan, yang kemungkinan memiliki nilai yang lebih dominan. Berdasarkan output diatas pada dataset Events, saat ini tidak ada missing value. - Dataset Drug Rating: Kolom
ConditionReasonmemiliki 2 nilai hilang, kami menghapus baris yang memiliki nilai hilang tersebut, karena mungkin data ini tidak terlalu penting untuk analisis lebih lanjut. Berdasarkan output diatas pada dataset Drug Eating, saat ini tidak ada missing value.
D. Outliers Detection and Removal
Outliers dapat mempengaruhi kualitas model, oleh karena itu kami akan mendeteksi dan menghapus outliers dari dataset. Langkah ini akan di lakukan pada kolom yang mengandung data numerik yaitu Age dan OverallRating, apakah ada outliers yang signifikan dalam kedua kolom tersebut dan menghapusnya jika perlu.
Dari boxplot yang ditampilkan, kita dapat melihat beberapa hal:
- Distribusi Umur (Age): Terdapat beberapa nilai ekstrem (outliers) pada kolom
Ageyang bisa jadi tidak realistis atau relevan (misalnya, nilai yang sangat rendah atau sangat tinggi). Kami akan membatasi nilaiAgedalam rentang yang realistis (misalnya, 18 hingga 100 tahun) dan menghapus nilai yang berada di luar rentang tersebut. - Distribusi Rating (OverallRating): Ada beberapa outliers di kolom
OverallRating, meskipun tidak se-ekstrem pada kolomAge. Kami akan akan memeriksa apakah nilai rating yang lebih tinggi atau lebih rendah dari kisaran normal (misalnya, 1 hingga 10) dan menghapus atau mengganti nilai yang tidak sesuai.
( DrugName Age Gender Reactions \
0 Abilify 63 male Drug Level Increased
1 Abilify 55 male Thyroid Cancer
2 Abilify 63 male Completed Suicide; Suicide Attempt; Coma
3 Abilify 31 male Eosinophilic Pneumonia; Pulmonary Alveolar Ha...
4 Abilify 75 female Lymphopenia; Anaemia; Neutropenia
AdventEvent
0 hospitalization
1 hospitalization
2 death; hospitalization
3 death
4 hospitalization ,
DrugName Age Gender ConditionReason OverallRating \
2 Mirtazapine 22 male Depression 1.0
3 Mirtazapine 38 male Clinical Depression 2.0
4 Mirtazapine 30 female Chronic insomnia 9.0
5 Mirtazapine 19 female Depression; Anxiety; OCD; Nausea 2.0
6 Mirtazapine - - Anxiety/insomnia 6.0
Effectiveness SideEffect
2 Ineffective Severe Side Effects
3 Ineffective Moderate Side Effects
4 Highly Effective Moderate Side Effects
5 Ineffective Mild Side Effects
6 Ineffective Moderate Side Effects )
Berdasarkan output diatas, outliers telah berhasil dihapus dari kedua dataset:
- Dataset Events: Nilai
Ageyang berada di luar rentang 18-100 tahun telah dihapus. - Dataset Drug Rating: Nilai
OverallRatingyang berada di luar rentang 1-10 telah dihapus.
E. Encoding
Untuk menggunakan algoritma berbasis matriks, kita perlu mengonversi data kategorikal menjadi numerik.
# Mengonversi nama obat & gender menjadi angka untuk Collaborative Filtering
le = LabelEncoder()
drug_rating_clean['DrugName_encoded'] = le.fit_transform(drug_rating_clean['DrugName'])
drug_rating_clean['Gender_encoded'] = le.fit_transform(drug_rating_clean['Gender'])
# Mengonversi nama obat dan gender menjadi angka untuk Content-Based Filtering
events_clean['DrugName_encoded'] = le.fit_transform(events_clean['DrugName'])
events_clean['Gender_encoded'] = le.fit_transform(events_clean['Gender'])
Menangani encoding untuk kolom kategori Gender dan DrugName, dengan mengonversinya menjadi format numerik untuk digunakan dalam proses selanjutnya, yaitu membangun model sistem rekomendasi.
F. Train Test Split
Membagi data menjadi set pelatihan dan set pengujian untuk evaluasi model.
((2597, 9), (650, 9))
Pembagian dataset menjadi data pelatihan dan pengujian telah selesai untuk dataset Drug Rating:
- Data Pelatihan: 2597 sampel
- Data Pengujian: 650 sampel
G. Ringkasan Proses Data Preparation:
- Deteksi dan Penghapusan Duplikasi: Telah dilakukan pada kedua dataset.
- Pembuangan Kolom yang Tidak Diperlukan: Kolom yang tidak relevan telah dihapus dari kedua dataset.
- Penanganan Nilai Hilang: Nilai hilang diimputasi atau dihapus sesuai kebutuhan.
- Deteksi dan Penghapusan Outliers: Outliers pada kolom
Age(di dataset Events) danOverallRating(di dataset Drug Rating) telah dihapus. - Encoding: Kolom kategorikal seperti
GenderdanDrugNametelah di-encode menjadi format numerik. - Train-Test Split: Kedua dataset telah dibagi menjadi data pelatihan dan pengujian.
Data sudah siap untuk digunakan dalam membangun sistem rekomendasi berbasis content-based filtering dan collaborative filtering.
Sistem rekomendasi adalah alat penting dalam berbagai domain, termasuk layanan kesehatan, e-commerce, dan hiburan, untuk membantu pengguna menemukan informasi atau item yang relevan. Dua pendekatan utama yang digunakan dalam pengembangan sistem ini adalah Content-Based Filtering dan Collaborative Filtering. Setiap pendekatan memiliki mekanisme, keunggulan, dan tantangan yang unik, yang penting untuk dipertimbangkan dalam membangun sistem rekomendasi obat.
A. Content-Based Filtering
Content-Based Filtering merekomendasikan item dengan menganalisis atribut item itu sendiri dan mencocokkannya dengan preferensi atau interaksi pengguna sebelumnya.
- Mekanisme: Pendekatan ini bergantung pada fitur-fitur item dan profil pengguna. Dalam sistem rekomendasi obat, pendekatan ini dapat menggunakan sifat kimiawi obat dan riwayat medis pasien untuk menyarankan obat yang sesuai [4], [5].
- Keunggulan: Pendekatan ini mampu memberikan rekomendasi yang dipersonalisasi berdasarkan atribut spesifik item, yang sangat berguna dalam domain di mana preferensi pengguna terdefinisi dengan baik dan stabil [6].
- Tantangan: Content-Based Filtering sering menghadapi keterbatasan dalam analisis konten. Sistem ini cenderung hanya merekomendasikan item yang mirip dengan yang sudah diketahui pengguna, sehingga kurang mampu memberikan rekomendasi yang beragam [5], [7].
Pada project ini, kami menggunakan informasi efek samping seperti reaksi obat (Reactions) dan kejadian medis atau event (Advent Event) untuk mencari kemiripan antar obat, yaitu dengan cara:
- Vectorize teks dari kolom
ReactionsdanAdvent Eventmenggunakan TfidfVectorizer.- Menghitung kesamaan antar item (obat) menggunakan cosine similarity &.
- Merekomendasikan obat berdasarkan kemiripan dengan item tertentu.
Detail langkah-langkahnya sebagai berikut:
- Step 1: Menggabungkan kolom 'Reactions' dan 'Advent Event' sebagai fitur konten
events_clean['Content'] = events_clean['Reactions'] + " " + events_clean['AdventEvent'] - Step 2: Vectorize teks menggunakan TfidfVectorizer
tfidf_vectorizer = TfidfVectorizer(stop_words='english') tfidf_matrix = tfidf_vectorizer.fit_transform(events_clean['Content']) - Step 3: Menghitung cosine similarity antar item
cosine_sim = cosine_similarity(tfidf_matrix, tfidf_matrix) - Step 4: Membuat fungsi rekomendasi berdasarkan kesamaan
def recommend_content_based(drug_name, cosine_sim=cosine_sim, df=events_clean, top_n=5): # Cari indeks dari drug_name idx = df[df['DrugName_encoded'] == drug_name].index[0] # Mendapatkan skor kesamaan untuk semua obat dengan obat ini sim_scores = list(enumerate(cosine_sim[idx])) # Mengurutkan obat berdasarkan skor kesamaan (descending) sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True) # Mengambil top_n obat yang mirip (kecuali dirinya sendiri) sim_scores = sim_scores[1:top_n+1] # Mengambil indeks obat yang mirip drug_indices = [i[0] for i in sim_scores] # Return nama obat yang direkomendasikan return df.iloc[drug_indices][['DrugName', 'Reactions', 'AdventEvent']]
Contoh sistem rekomendasi content based untuk obat Abilify
recommendations = recommend_content_based(events_clean[events_clean['DrugName'] == "Abilify"]['DrugName_encoded'].iloc[0], top_n=5)
recommendations
| # | DrugName | Reactions | AdventEvent |
|---|---|---|---|
| 2468 | Zyprexa | Drug Level Increased | hospitalization |
| 688 | Dilantin | Accident; Drug Level Increased; Pain; Injury; | hospitalization |
| 927 | Keppra | Accident; Drug Level Increased; Pain; Injury; | hospitalization |
| 1187 | Morphin | Myoclonus; Drug Level Increased; Drug Interaction; | life threatening event; hospitalization |
| 662 | Diazepam | Drug Level Above Therapeutic; Psychotic Disorder; | hospitalization |
Sistem rekomendasi berbasis content-based filtering telah berhasil dibuat. Berdasarkan output diatas, hasil rekomendasi untuk obat Abilify, berdasarkan kesamaan pada reaksi obat dan event. Sistem berhasil memberikan rekomendasi obat yang memiliki kesamaan dalam reaksi yang dialami pasien dan event yang terjadi (hospitalization/ rawat inap).
B. Collaborative Filtering
Collaborative Filtering merekomendasikan item berdasarkan perilaku dan preferensi pengguna lain yang memiliki kesamaan.
- Mekanisme: Pendekatan ini menggunakan interaksi antara pengguna dan item, seperti penilaian atau riwayat pembelian, untuk menemukan pola dan menyarankan item yang disukai pengguna serupa. Pendekatan ini tidak memerlukan atribut item secara rinci, sehingga lebih fleksibel untuk berbagai domain [4], [5].
- Keunggulan: Collaborative Filtering dapat menemukan pola tersembunyi dan memberikan rekomendasi yang lebih beragam dengan memanfaatkan kecerdasan kolektif komunitas pengguna. Pendekatan ini sangat efektif dalam situasi di mana preferensi pengguna tidak didefinisikan secara eksplisit [6], [8].
- Tantangan: Pendekatan ini menghadapi masalah seperti kelangkaan data (data sparsity), di mana interaksi pengguna-item yang terbatas dapat menghasilkan rekomendasi yang kurang akurat. Selain itu, terdapat masalah cold start, di mana pengguna atau item baru kekurangan data yang cukup untuk menghasilkan rekomendasi yang baik [4], [7].
Pada project ini, kami menggunakan pendekatan user-based collaborative filtering berbasis Nearest Neighbors, yang fokus pada kesamaan antar pengguna untuk merekomendasikan item (DrugName).
Detail langkah-langkahnya sebagai berikut:
- Membuat pivot table dari data untuk collaborative filtering berbasis user-item interaction, yaitu dengan mengunakan kolom 'Gender' sebagai user_id dan 'DrugName' sebagai item_id
user_item_matrix = drug_rating_clean.pivot_table(
index='Gender', columns='DrugName_encoded', values='OverallRating', fill_value=0
)
Matriks ini merepresentasikan pengguna (Gender) pada baris dan item (DrugName) pada kolom dengan nilai (OverallRating) sebagai interaksinya.
- Menghitung kesamaan antar pengguna (user-based collaborative filtering)
user_similarity = cosine_similarity(user_item_matrix)
user_similarity_df = pd.DataFrame(user_similarity, index=user_item_matrix.index, columns=user_item_matrix.index)
Menggunakan cosine similarity (salah satu metode utama dalam algoritma nearest neighbors), tingkat kesamaan dihitung antar pengguna untuk membuat matriks kesamaan.
- Membuat fungsi untuk merekomendasikan obat berbasis collaborative filtering
def recommend_user_based(user_id, user_item_matrix, user_similarity_df, top_n=5):
# Mendapatkan skor kesamaan user
user_gender = 'female' if user_id == 0 else 'male'
similar_users = user_similarity_df[user_gender].sort_values(ascending=False)
# Mengambil pengguna yang paling mirip
similar_users = similar_users[1:] # Hindari kesamaan dengan diri sendiri
# Mendapatkan rekomendasi item berdasarkan pengguna yang mirip
recommendations = user_item_matrix.loc[similar_users.index].mean(axis=0)
recommendations = recommendations.sort_values(ascending=False)
# mengambil top_n rekomendasi item
top_recommendations = recommendations.head(top_n)
return top_recommendations
- Menyusun rekomendasi berdasarkan rata-rata preferensi dari pengguna yang mirip (similar_users).
- Mengabaikan pengguna itu sendiri dalam perhitungan (baris similar_users[1:]).
- Mengurutkan item berdasarkan skor rata-rata dan mengambil top_n rekomendasi.
Contoh rekomendasi berbasis collaborative filtering untuk user dengan ID 1
recommendations_user_based = recommend_user_based(user_id=1, user_item_matrix=user_item_matrix, user_similarity_df=user_similarity_df, top_n=5)
recommendations_user_based
| DrugName_encoded | Score |
|---|---|
| 162 | 8.842105 |
| 225 | 8.800000 |
| 1 | 8.727273 |
| 163 | 8.633333 |
| 151 | 8.558824 |
Sistem rekomendasi berbasis collaborative filtering telah berhasil dibuat. Berdasarkan output diatas, rekomendasi obat untuk pengguna dengan ID tertentu (dalam hal ini user 1) berdasarkan rata-rata rating dari pengguna lain yang mirip
Evaluasi sistem rekomendasi dilakukan untuk mengukur seberapa baik sistem memberikan rekomendasi yang relevan.
- Evaluasi Content-Based Filtering
Content-based filtering menghasilkan skor kesamaan untuk setiap item. Untuk mengevaluasinya, kami menggunakan metrik
Hit Rate, yaitu evaluasi dengan cara mengukur seberapa sering item yang relevan muncul dalam daftar rekomendasi teratas. Hit Rate adalah metrik evaluasi yang digunakan untuk mengukur seberapa sering sistem rekomendasi berhasil memasukkan item yang relevan (dalam hal ini obat) ke dalam daftar rekomendasi yang diberikan kepada pengguna. Dalam konteks Content-Based Filtering, Hit Rate menunjukkan persentase kasus di mana item yang diharapkan (ground truth) muncul di rekomendasi sistem.
Dimana:
- Jumlah Hit: Jumlah kasus di mana obat yang relevan (ground truth) ada di daftar rekomendasi.
- Total Kasus: Jumlah total evaluasi yang dilakukan (misalnya, jumlah pengguna atau item).
- Evaluasi Collaborative Filtering
Collaborative filtering sering dilakukan dengan menggunakan data pembagian train-test. Kami menggunakan
Root Mean Squared Error (RMSE), yaitu evaluasi dengan cara membandingkan prediksi rating dengan rating aktual dari dataset pengujian. RMSE adalah metrik evaluasi yang digunakan untuk mengukur seberapa baik prediksi model mendekati nilai sebenarnya. Dalam konteks sistem rekomendasi obat berbasis collaborative filtering, RMSE menunjukkan seberapa besar rata-rata kesalahan model dalam memprediksi peringkat (ratings) yang diberikan oleh pengguna terhadap obat tertentu. Semakin kecil nilai RMSE, semakin akurat model tersebut.
Formula RMSE:
Dimana:
-
-
-
A. Evaluasi Content-Based Filtering
# Evaluasi Content-Based Filtering
def evaluate_content_based(df, cosine_sim, ground_truth_col='AdventEvent', top_n=5):
"""
Evaluates content-based filtering using hit rate.
Parameters:
- df: DataFrame containing the original data.
- cosine_sim: Cosine similarity matrix.
- ground_truth_col: Column containing ground truth for evaluation.
- top_n: Number of top recommendations to consider.
Returns:
- Hit rate: Percentage of cases where ground truth is found in the top-N recommendations.
"""
hits = 0
for idx in range(len(df)):
# Generate recommendations untuk each item
sim_scores = list(enumerate(cosine_sim[idx]))
sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)
sim_scores = sim_scores[1:top_n+1] # Exclude self-similarity
recommended_indices = [i[0] for i in sim_scores]
# Cek jika ground truth exists pada recommendations
ground_truth = df.iloc[idx][ground_truth_col]
recommendations = df.iloc[recommended_indices][ground_truth_col].values
if ground_truth in recommendations:
hits += 1
hit_rate = hits / len(df)
return hit_rate
# Hit rate evaluation untuk content-based filtering
content_based_hit_rate = evaluate_content_based(events_clean, cosine_sim, ground_truth_col='AdventEvent', top_n=5)
B. Evaluasi Collaborative Filtering
# Evaluasi Collaborative Filtering
def evaluate_collaborative_filtering(predictions, test_data):
"""
Evaluates collaborative filtering using RMSE.
Parameters:
- predictions: Predicted ratings.
- test_data: Actual test data for validation.
Returns:
- RMSE: Root Mean Squared Error.
"""
mse = np.mean([(pred.est - pred.r_ui) ** 2 for pred in predictions])
rmse = np.sqrt(mse)
return rmse
# Adjust collaborative filtering evaluation menggunakan nearest neighbor-based prediction
# Ensure user similarity matrix aligns with user-item matrix
adjusted_user_similarity = user_similarity[:len(user_item_matrix), :len(user_item_matrix)]
# Predict ratings menggunakan similarity-weighted approach
predicted_ratings_matrix = adjusted_user_similarity.dot(user_item_matrix) / np.abs(adjusted_user_similarity).sum(axis=1).reshape(-1, 1)
# Flatten predictions & true ratings untuk RMSE calculation
actual_ratings_flat = user_item_matrix.values.flatten()
predicted_ratings_flat = predicted_ratings_matrix.flatten()
# Filter out zeros (unrated items)
mask = actual_ratings_flat > 0
actual_ratings_filtered = actual_ratings_flat[mask]
predicted_ratings_filtered = predicted_ratings_flat[mask]
# Kalkulasi RMSE
collaborative_rmse = np.sqrt(mean_squared_error(actual_ratings_filtered, predicted_ratings_filtered))
C. Hasil evaluasi kedua sistem rekomendasi:
(0.9250106518960375, 2.031441256960782)
-
Content-Based Filtering:
Hit Rate: 92.5 %
Sistem berhasil merekomendasikan item yang relevan dalam 92.5 % kasus. -
Collaborative Filtering:
RMSE: 2.03
Kesalahan rata-rata prediksi rating adalah sekitar 2.03 pada skala 1-10.
Interpretasi:
- Content-Based Filtering
- Hasil Hit Rate sebesar 92.5% menunjukkan bahwa sistem rekomendasi berhasil memasukkan obat yang relevan (ground truth) ke dalam daftar rekomendasi sebanyak 92.5% dari total evaluasi. Artinya, sistem berhasil memberikan rekomendasi yang tepat pada mayoritas kasus.
- Hasil ini, menunjukkan performa yang baik dengan hit rate yang tinggi, yaitu rekomendasi cukup akurat untuk item yang mirip.
- Collaborative Filtering
- Hasil RMSE sebesar 2.03 menunjukkan bahwa rata-rata kesalahan prediksi model adalah sekitar 2.03 unit pada skala peringkat 1-10. Maka model sering salah dalam memprediksi rating sebesar ±2 poin dari peringkat yang sebenarnya.
- Hasil RMSE yang cukup besar, menunjukkan ruang untuk perbaikan, misalnya dengan memperbaiki data sparsity atau menggunakan algoritma prediksi lain.
[1] Aditi, Sarode., Sarang, Dineshrao, Pojage., Kapil, Jajulwar., Snehlata, Dongre., Priya, Maidamwar. (2024). Design of Medicine Recommendation System (MRS) for Biomedical Application Using Machine Learning Techniques. https://doi10.1109/apcit62007.2024.10673613
[2] Qasem, Kharma., Qusai, Shambour., Abdelrahman, H., Hussein. (2023). A Hybrid Recommendation Model for Drug Selection. Studies in Informatics and Control - ICI Bucharest. https://doi10.24846/v32i3y202307
[3] Mariam, Zomorodi‐Moghadam., Ismail, Ghodsollahee., Jennifer, Martin., Nicholas, J., Talley., Vahid, Salari., Paweł, Pławiak., Kazem, Rahimi., U., Rajendra, Acharya. (2024). RECOMED: A comprehensive pharmaceutical recommendation system. Artificial Intelligence in Medicine. https://doi10.1016/j.artmed.2024.102981
[4] Sandeep, A., Thorat., Gavade, Ashwini., Maneesh, Verma, Seema. (2023). Survey on Collaborative and Content-based Recommendation Systems. https://doi10.1109/ICSSIT55814.2023.10061072
[5] Putta, S., Kulkarni, O. (2022). Analytical Study of Content-Based and Collaborative Filtering Methods for Recommender Systems. In: Singh, P.K., Wierzchoń, S.T., Chhabra, J.K., Tanwar, S. (eds) Futuristic Trends in Networks and Computing Technologies . Lecture Notes in Electrical Engineering, vol 936. Springer, Singapore. https://doi.org/10.1007/978-981-19-5037-7_44
[6] Parul, Aggarwal., Vishal, Tomar., Aditya, Kathuria. (2017). Comparing Content Based and Collaborative Filtering in Recommender Systems. 3(4):263309-. International Journal of New Technology and Research. Retrieved from https://research.ijcaonline.org/volume110/number4/pxc3900760.pdf
[7] Poonam, B., Thorat., R., M., Goudar., Sunita, Barve. (2015). Survey on Collaborative Filtering, Content-based Filtering and Hybrid Recommendation System. International Journal of Computer Applications. https://doi10.5120/19308-0760
[8] Wijaya, A., & Alfian, D. (2018). Sistem Rekomendasi Laptop menggunakan Collaborative Filtering dan Content-Based Filtering. Jurnal Computech & Bisnis (e-Journal), 12(1), 11–27. Retrieved from https://jurnal.stmik-mi.ac.id/index.php/jcb/article/view/124










