Anda di halaman 1dari 17

PERBANDINGAN METODE CONTENT-BASED FILTERING

DAN COLLABORATIVE FILTERING DENGAN ALGORITMA


NAÏVE BAYES DALAM PEMBUATAN SISTEM
REKOMENDASI EKSTRAKURIKULER SISWA SMA

MODUL PRAKTIKUM

Oleh
Diyo Sukma Pradana
PERBEDAAN CONTENT & ALGORITMA NAÏVE
COLLABORATIVE BAYES
𝑃 𝑥 𝑐 𝑃(𝑐)
𝑃 𝑐𝑥 =
𝑃(𝑥)

1. Gaussian Naïve Bayes

2. Multinomial Naïve Bayes

3. Bernoulli Naïve Bayes


Ilustrasi Content-Based Ilustrasi Collaborative
Filtering Filtering
KASUS PERMASALAHAN

Banyak Siswa/i Sekolah Menengah Atas (SMA) yang kebingungan dalam memilih kegiatan
ekstrakurikuler yang cocok dan sesuai dengan minat juga bakat mereka. Juga belum diketahui
metode terbaik dalam membuat sistem rekomendasi seputar kasus ini, maka ada 2 identifikasi
masalah:

1. Belum adanya suatu sistem rekomendasi untuk pemilihan ekstrakurikuler bagi siswa SMA
2. Belum diketahui metode terbaik antara metode Content-based Filtering dan Collaborative
Filtering dalam membuat sistem rekomendasi ekstrakurikuler siswa SMA
LANGKAH
PENYELESAIAN
KASUS
PEMBAHASAN

01. Pengumpulan Data dan Tahapan awal penelitian yaitu


Pembuatan Dataset mengumpulkan data berupa responden
kuesioner.

02. Data Understanding dan Memahami data lebih lanjut, apa saja atribut
Univariate Exploratory Data didalamnya dan berfungsi sebagai apa
Analysis

03. Data Preprocessing Memproses data apa saja yang akan


dan Data Preparation digunakan untuk proses modelling
DATA UNDERSTANDING
import pandas as pd
df_cbeskul = pd.read_excel('CLEAN_Content_dataset.xlsx'

Import dahulu library pandas, lalu upload dataset berextensi excel/xlsx pada google colab,
panggil dengan kode pd.read.excel.
Univariate Exploratory Data Analysis
df_cbeskul.info()

print('Banyak data: ', len(df_cbeskul.Nama.unique()))


print('Jenis Bidang Esktrakurikuler: ', df_cbeskul['Bidang Ekstrakuriku
ler'].unique())
print('Agama: ', df_cbeskul['Agama'].unique())
print('Jurusan: ', df_cbeskul['Jurusan'].unique())

Tahapan ini berfokus pada merapihkan dataset yang akan digunakan, mengeksplorasi data
untuk melihat korelasi setiap variabel/atribut dan juga visualisasi data.
Univariate Exploratory Data Analysis
Untuk visualisasi data kita bisa menggunakan library matplotlib
import matplotlib.pyplot as plt

value_count_bidang = df_cbeskul['Bidang Ekstrakurikuler'].value_counts()

fig, ax = plt.subplots()
ax.pie([value_count_bidang['Akademik & Kebahasaan'],
value_count_bidang['Olahraga'],
value_count_bidang['IT'],
value_count_bidang['Kesenian'],
value_count_bidang['Bela Negara'],
value_count_bidang['Lingkungan Hidup']],
labels=['Akademik & Kebahasan', 'Olahraga', 'IT', 'Kesenian', 'Bela Negara',
'Lingkungan Hidup'],
autopct='%1.1f%%', startangle=45, radius=2)
ax.set_title("Bidang Ekstrakurikuler", pad=100)
plt.show()
DATA PREPROCESSING
Dari 16 kolom yang tersedia kita hanya mengambil 8 kolom yaitu: Nama, Bidang
Ekstrakurikuler, Gender, Jurusan, Teman Berpengaruh, Lama Pertemuan, Banyak Pertemuan
dan Minat Bakat.

df_cbeskul = df_cbeskul[['Nama', 'Bidang Ekstrakurikuler', 'Gender', '


Jurusan', 'Teman Berpengaruh', 'Lama Pertemuan', 'Banyak Pertemuan', '
Minat Bakat']]

df_cbeskul.head()
DATA PREPARATION
Pada tahapan ini, kita mengecek keseluruhan dataset yang sudah jadi apakah ada isian
yang kosong/null/Missing Value.

df_cbeskul.isnull().sum()
MODEL DEVELOPMENT : CONTENT
BASED FILTERING
Install Library yang akan dipakai:
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.feature_extraction.text import CountVectorizer  NLTK: rake_nltk, berfungsi
untuk ektraksi kata kunci
!pip install rake-nltk  Sastrawi, berfungsi untuk
from rake_nltk import Rake
menghapus kata hubung
import nltk
nltk.download('stopwords') seperti dan, yang, jika, dan
import nltk
sebagainya
nltk.download('punkt')
from nltk.corpus import stopwords  Scikit-Learn, diantaranya

pip install Sastrawi library: Countvectorizer dan


cosine similarity
df_cbeskul.set_index('Nama', inplace = True)
df_cbeskul.head()
MODEL DEVELOPMENT : CONTENT
BASED FILTERING
Tahap selanjutnya yaitu mencari kata kunci dari kolom minat bakat dengan kode:

df_cbeskul['Key_words'] = ""

for index, row in df_cbeskul.iterrows():


plot = row['Minat Bakat']

r = Rake()
r.extract_keywords_from_text(plot)

key_words_dict_scores = r.get_word_degrees()

row['Key_words'] = list(key_words_dict_scores.keys())

# dropping the Plot column


df_cbeskul.drop(columns = ['Minat Bakat'], inplace = True)
df_cbeskul.head()
MODEL DEVELOPMENT : CONTENT
BASED FILTERING
Lalu menghapus kata penghubung Indonesia dari kata kunci tersebut agar hasil lebih
maksimal

list_stopwords = set(stopwords.words('indonesian'))
def stopwords_removal(words):
return [word for word in words if word not in list_stopwords]

df_cbeskul['Key_words'] = df_cbeskul['Key_words'].apply(stopwords_removal)

df_cbeskul
MODEL DEVELOPMENT : CONTENT
BASED FILTERING
Selanjutnya menggabungkan 6 kolom kata-kata tersebut dalam kolom baru bernama
bag_of_words
df_cbeskul['bag_of_words'] = ''
columns = df_cbeskul.columns
for index, row in df_cbeskul.iterrows():
words = ''
for col in columns:
if col == 'Key_words':
words = words + ' '.join(row[col])+ ' '
else:
words = words + row[col]+ ' '
row['bag_of_words'] = words

df_cbeskul.drop(columns = [col for col in df_cbeskul.columns if col!= 'bag_of_words'], inplac


e = True)

df_cbeskul.head()
MODEL DEVELOPMENT : CONTENT
BASED FILTERING
Tahap selanjutnya merubah representasi teks menjadi vektor dengan library countvectorizer :

count = CountVectorizer()
count_matrix = count.fit_transform(df_cbeskul['bag_of_words'])

Untuk melihat kata kuncinya bisa menggunakan kode:

count.get_feature_names()
MODEL DEVELOPMENT : CONTENT
BASED FILTERING
Untuk melihat hasil refresentasi vektor, bisa dengan kode:

cv_count = pd.DataFrame(count_matrix.toarray())

cv_count

Selanjutnya untuk melihat kemiripan antara dokumen, kita menggunakan cosine similarity:

cosine_sim = cosine_similarity(count_matrix)
cosine_sim

Semakin besar nilai maka semakin besar pula tingkat kemiripan.


MODEL DEVELOPMENT : CONTENT
BASED FILTERING
Selanjutnya kita uji apakah model bekerja dengan baik dan benar.
indices = pd.Series(df_cbeskul.index)

def recommendations(nama, cosine_sim = cosine_sim):

recommended = []

idx = indices[indices == nama].index[0]

score_series = pd.Series(cosine_sim[idx]).sort_values(ascending = False)

top_indexes = list(score_series.iloc[1:2].index)

for i in top_indexes:
recommended.append(list(df_cbeskul['bag_of_words'])[i])

return recommended

x = recommendations('Siswa01')
for i in x:
print(i.split()[0])

Anda mungkin juga menyukai