Menurut Sanjoyo (2010), sistem rekomendasi adalah sistem yang bertujuan untuk memperkirakan informasi yang menarik bagi pengguna dan juga membantu user dalam menentukan pilihannya. Sistem rekomendasi bisa menjadi sebuah solusi dalam peningkatan peluang khususnya dalam dunia bisnis. Menurut CNBC tahun 2016-2018 menyatakan peningkatan sepatu sneakers mencapai 50-70% dari peningkatan tersebut banyak konsumen bingung memilih jenis sneakers apa yang cocok baginya. Disinilah peran sistem rekomendasi sebagai sang "pelayan ajaib", dengan bantuan teknologi yang memumpuni konsumen dapat mudah mengetahui jenis sneakers yang baik baginya dan sang perusahaan dapat memberikan pelayanan serta peningkatan bisnis.
Sistem rekomendasi sangat berguna dalam kehidupan sehari-hari dan pada penelitian ini berusaha untuk memberikan rekomendasi nama planet berdasarkan namanya. Hal ini dasarkan membantu meningkatkan minat rakyat Indonesia terhadap dunia astronomi
Business Understanding
Pada pernyataan yang telah dijelaskan, sehingga masalah yang diangkat adalah
Bagaimana implemntasi sistem rekomendasi berbasis content based filtering?
Bagaimana kemampuan content based filtering dalam memberikan rekomendasi?
Tujuan dari masalah yang diangkat adalah
Mengetahui cara implementasi sistem rekomendasi berbasis content based filtering
Mengetahui kemampuan *content based filtering* dalam melakukan rekomendasi
Solusi Statements
Solusi yang dapat dilakukan
Menggunakan library seaborns sklearn
Menggunakan cosine similarity
Menggunakan pandas dan numpy
Menggunakan precision sebagai evaluasi
Data Understanding
Dataset yang digunakan pada penelitian ini adalah dataset astronomi tentang planet yang didapatkan dari [Kaggle](https://www.kaggle.com/datasets/amit1235813/gaia-astronomical-data). Adapun kolom-kolom pada dataset ini, antara lain:
type : tipe-tipe dari planet yang tersedia
name : nama dari planet-planet
glon : Foto pengguna
glat : Lamanya Session pengguna pada sistem yang tercatat
distance (parsecs) : Lamanya penggunaan aplikasi perusahaan oleh pengguna
x (parsecs)
y (parsecs)
z (parsecs)
radius (parsecs)
log10 age (years)
Arm (masers)
Source : Sumber perhitungan.
Note : parsecs adalah satuan jarak tertua dimana perhitungan tersebut memanfaatkan trigonometri dengan bumi sebagai titik awal sudutnya. Sehingga, x, y, z dan radius merupakan perhitungan trigono "mentahannya"
Pada kolom diatas, kolom yang digunakan adalah kolom 'type','name', 'distance (parsecs)' dengan name sebagai kolom yang sebagai yang akan direkomendasi dengan ukuran data 2557 baris dan 12 kolom
Tahapan yang dilakukan untuk memahami data adalah.
- Pemilihan kolom dan cek nilai null pada kolom yang dipilih dengan pandas
Data Preparation
![](https://static.wixstatic.com/media/67563d_070a937de1374b4b9d3cf9b17d3fff15~mv2.png/v1/fill/w_980,h_136,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/67563d_070a937de1374b4b9d3cf9b17d3fff15~mv2.png)
Data tidak memiliki data NaN dari 2557 data yang tersedia. Setelah mengubah data dari list (dengan setiap panjang data ialah 2557) akan dimasukkan kedalam dataframe dalam bentuk dictionary dengan variable astronom.
Tahapan selanjutnya melakukan TF-IDF untuk menghitung bobot dari setiap tipe menggunakan library sklearn. Membuat variable baru dengan nama data yang menyimpan dataframe sebelumnya dan variable tf sebagai fungsi TF-IDF Melakukan extract dan get feature dari tipe planet yang ada pada data ['association', 'cluster', 'hii', 'maser', 'ob', 'open', 'region']
Setelah melakukan get feature yang tersedia, maka ditransformasikan menjadi kolom dan apabila di shape akan mendapatkan menjadi 2557 baris dan 7 kolom.
![](https://static.wixstatic.com/media/67563d_e6480dabf5954aa9b4582411f4b9ae5a~mv2.png/v1/fill/w_980,h_409,al_c,q_90,usm_0.66_1.00_0.01,enc_avif,quality_auto/67563d_e6480dabf5954aa9b4582411f4b9ae5a~mv2.png)
Setelah melakukan extract fitur dan melakukan transform, selanjutnya akan dihitung cosine similarity nya. Nah ini lah tahapan bagaimana model akan menjadi "Pelayan Ajaib". Fungsi ini digunakan untuk menghitung kemiripan antar data, semakin mendekati 1 maka data tersebut semakin mirip dan sebaliknya.
Fungsi cosine similarity yang digunakan disini berasala dari sklearn dan hasil tersebut akan dibuatkan data frame dengan :
- kolom sebagai nama planet
- baris sebagai nama planet
Hal ini dikarenakan memetakan data untuk menghitung kemiripan antar nama planet
![](https://static.wixstatic.com/media/67563d_decca382a13b46d8a77a0fd6b5a2adb4~mv2.png/v1/fill/w_713,h_123,al_c,q_85,enc_avif,quality_auto/67563d_decca382a13b46d8a77a0fd6b5a2adb4~mv2.png)
![](https://static.wixstatic.com/media/67563d_01b724a72943487f8a0e9af4d354f20e~mv2.png/v1/fill/w_955,h_266,al_c,q_85,enc_avif,quality_auto/67563d_01b724a72943487f8a0e9af4d354f20e~mv2.png)
Hasil diatas dapat dilihat bahwa data memiliki tingkat kemiripan yang tinggi. Contoh UBC 119 memiliki tingkat kemiripan antara lain UPK_642, UBC 219, NGC_7218. Tetapi dengan G049.48-00.38 tingkat kemiripannya adalah 0 (nol)
Modeling and Results
def planet_recommendations(name, similarity_data=cosine_sim_df, items= data[['name', 'type', 'distance']], k=3):
index = similarity_data.loc[:,name].to_numpy().argpartition(
range(-1, -k, -1))
closest = similarity_data.columns[index[-1:-(k+2):-1]]
closest = closest.drop(name, errors='ignore')
return pd.DataFrame(closest).merge(items).tail(3)
Modelling diatas bekerja dengan memanfaatkan hasil perhitungan cosine similarity dengan pengambilan data terakhir hal tersebut dikarenakan dengan fungsi tail akan mengambil data terakhir dari hasil dataframe
Kurang lebih alur model tersebut sebagai berikut :
1. Membuat parameter name, similiratiy_data (berisi dataframe cosine_sim_df), items = dataframe tanpa cosine, dan k (sebagai pengambil 3 data) yang parameter-parameter ini dibalut dengan fungsi.
2. Cari similarity dengan kata kunci name yang diinputkan dengan bantuan fungsi argpartition dengan mengambil index data yang sama
3. Setelah didapatkan, akan diambil kolom-kolom tersebut
4. Untuk mencegah data yang kita cari tetap muncul, maka data dengan "name" (sebagai input) akan di drop
5. kembalikan data dalam bentuk dataframe
![](https://static.wixstatic.com/media/67563d_e5c03e57e6124303b48a5d3f74166f8f~mv2.png/v1/fill/w_273,h_394,al_c,q_85,enc_avif,quality_auto/67563d_e5c03e57e6124303b48a5d3f74166f8f~mv2.png)
Matrik evaluasi yang digunakan disini adalah presisi. Berdasarkan penelitian yang dilakukan oleh Nastiti, Putri [[3]](https://www.researchgate.net/publication/334320752_Penerapan_Metode_Content_Based_Filtering_Dalam_Implementasi_Sistem_Rekomendasi_Tanaman_Pangan/fulltext/5d248983458515c11c1f7ab8/Penerapan-Metode-Content-Based-Filtering-Dalam-Implementasi-Sistem-Rekomendasi-Tanaman-Pangan.pdf?origin=publication_detail) yang membahas sistem rekomendasi contetnt based filtering dalam tanaman pangan menyatakan hasil model yang dibuat akan dievaluasi dengan metrik presisi. Dengan penelitian yang sama, presisi adalah teknik perbandingan hasil rekomendasi dengan teknik sebenarnya. Presisi merupakan salah satu tahapan evaluasi dalam confusion matrix. Evaluasi pada confusion matrix yang sering digunakan adalah accuracy, precision, recall
![](https://static.wixstatic.com/media/67563d_eb8beffb8bad4aaab6adcc4f856064e6~mv2.png/v1/fill/w_446,h_333,al_c,q_85,enc_avif,quality_auto/67563d_eb8beffb8bad4aaab6adcc4f856064e6~mv2.png)
Pada hasil rekomendasi, tidak diketahui TP, TN, FP, FN. Nah disini saya membuat sebuah relevant yang bersumber dari [[4]](https://towardsdatascience.com/recommendation-systems-models-and-evaluation-84944a84fb8e) sehingga formula yang didapatkan ialah seperti berikut
![](https://static.wixstatic.com/media/67563d_06b0079b826b45968da3d3b563decf04~mv2.png/v1/fill/w_980,h_53,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/67563d_06b0079b826b45968da3d3b563decf04~mv2.png)
Hasil rekomendasi dapat dilihat bahwa tipe perhitungan dengan open cluster yang sama dengan UBC 119 adalah 10 data dari ke 10 data. Hal ini dapat dilakukan perhitungan bahwasanya hasil akurasi, precisi, rekal dan ialah 100%. Perhitungan dapat dilihat dibawah ini
![](https://static.wixstatic.com/media/67563d_c4cbb4c7b1334b958b1b4fa969b563dd~mv2.png/v1/fill/w_125,h_47,al_c,q_85,enc_avif,quality_auto/67563d_c4cbb4c7b1334b958b1b4fa969b563dd~mv2.png)
Jika dilakukan perhitungan manual, diilustrasikan seperti dibawah ini
![](https://static.wixstatic.com/media/67563d_e7c562fb1c7343cead5ad6e4d9b49195~mv2.png/v1/fill/w_487,h_97,al_c,q_85,enc_avif,quality_auto/67563d_e7c562fb1c7343cead5ad6e4d9b49195~mv2.png)
Note: Dikali 100% untuk mendapatkan hasil dalam bentuk % (persen)
Berikut Full File Codingannya
Comments