SKRIPSI
Diajukan Untuk Memenuhi Salah Satu Syarat
Guna Memperoleh Gelar Sarjana Komputer
Pada Progam Studi Teknik Informatika
Oleh :
Imam Dwicahya
14 5314 111
THESIS
Present as Partial Fulfillment of Requirement
To Obtain the Sarjana Komputer Degree
In Informatics Engineering Study Program
By :
Imam Dwicahya
14 5314 111
iii
HALAMAN PERSETUJUAN
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
iv
HALAMAN PENGESAHAN
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
HALAMAN PERSEMBAHAN
vi
Saya menyatakan dengan sesungguhnya bahwa skripsi yang saya tulis ini tidak
memuat karya atau bagian orang lain, kecuali yang telah disebutkan dalam kutipan
daftar pustaka sebagaimana layaknya karya ilmiah.
Penulis,
Imam Dwicahya
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
vii
Yang bertanda tangan di bawah ini, saya mahasiswa Universitas Sanata Dharma :
Beserta perangkat yang diperlukan (bila ada). Dengan demikian saya memberikan
kepada Perpustakaan Universitas Sanata Dharma hak untuk menyimpan,
mengalihkan dalam bentuk media lain untuk kepentingan akademis tanpa perlu
meminta ijin dari saya maupun memberikan royalti kepada saya selama tetap
mencantumkan nama saya sebagai penulis.
Dibuat di Yogyakarta
Yang menyatakan,
Imam Dwicahya
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
viii
ABSTRAK
ix
ABSTRACT
KATA PENGANTAR
Ucapan terima kasih yang besar dan penghargaan yang tinggi penulis
sampaikan kepada yang terhormat Ibu P. H. Prima Rosa, S.Si., M.Sc. selaku
pembimbing pertama dan Bapak Robertus Adi Nugroho, S.T., M.Eng. selaku
pembimbing kedua, yang dengan penuh perhatian, dan kesabaran selalu
meluangkan waktu, memberikan pengarahan serta semangat dalam pengerjaan
tugas akhir ini.
Penulis sadar, adapun dalam proses pengerjaan tugas akhir ini sampai
dengan selesai, tidak terlepas dari dukungan, bantuan, dan doa dari berbagai pihak.
Oleh karena itu, pada kesempatan ini penulis ingin mengucapkan terima kasih yang
tulus kepada :
1. Kedua orang tua penulis, Ayah dan Ibu yang sangat memberikan
dukungan penuh dan doa restu, juga motivasi yang begitu dibutuhkan
oleh penulis.
2. Bapak Sudi Mungkasi, S. Si., M.Mat., Ph.D. selaku Dekan Fakultas
Sains dan Teknologi Universitas Sanata Dharma.
3. Ibu Dr. Anastasia Rita Widiarti, S.Si., M.Kom. selaku Ketua Program
Studi Teknik Informatika Universitas Sanata Dharma.
4. Bapak Henricus Agung Hernawan, S.T., M.Kom. selaku Dosen
Pembimbing Akademik.
5. Seluruh dosen Teknik Informatika Universitas Sanata Dharma yang
telah memberikan ilmu, mengajarkan pengetahuan dan pengalaman
berharga selama proses perkuliahan.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
xi
Penulis berharap penelitian ini dapat berguna dan membantu bagi pembaca.
Penulis menyadari bahwa tugas akhir ini tidak sepenuhnya sempurna, oleh karena
itu penulis mengharapkan kritik dan saran agar penelitian ini dapat berkembang dan
menjadi penelitian yang lebih baik untuk ke depan.
Penulis,
Imam Dwicahya
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
xii
DAFTAR ISI
ABSTRACT ........................................................................................................... ix
xiii
xiv
xv
xvi
DAFTAR GAMBAR
Gambar 2.2 Matriks preferensi rating dari pengguna kepada item (McDonald,
2015) ........................................................................................................................8
Gambar 2.5 Alur penerapan Collaborative Filtering (Richi and Saphira, 2011) ..10
Gambar 4.4 Model logikal dari rancangan basis data pada sistem ........................24
xvii
Gambar 5.9 Ilustrasi data testing tidak memiliki neighbor pada metode user-based
CF...........................................................................................................................97
Gambar 5.10 Ilustrasi data testing tidak memiliki neighbor pada metode item-based
CF...........................................................................................................................97
xviii
xix
Gambar 5.46 Hasil pencarian nilai similaritas 1 pengguna dengan pengguna lainnya
..............................................................................................................................121
Gambar 5.49 Pop-up untuk konfirmasi perhitungan similaritas antar semua film
..............................................................................................................................124
Gambar 5.51 Hasil pencarian nilai similaritas pengguna dengan user_id tertentu
dengan pengguna lainnya .....................................................................................124
Gambar 5.52 Hasil pencarian nilai similaritas antara 2 pengguna secara spesifik
..............................................................................................................................125
Gambar 5.65 Format layout halaman yang menampilkan data rating .................132
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
xx
Gambar 5.66 Grafik garis hasil MAE terhadap jumlah maksimal neighbor pada
metode user-based CF .........................................................................................134
Gambar 5.67 Source code pada method main() di kelas Prediction.java yang sudah
dimodifikasi pada hasil prediksi metode user-based CF .....................................135
Gambar 5.68 Data testing nilai MAE di atas 2, maksimal neighbor = 10...........136
Gambar 5.69 Data testing nilai MAE di atas 2, maksimal neighbor = 70...........136
Gambar 5.70 Grafik garis hasil MAE terhadap jumlah maksimal neighbor pada
metode item-based CF .........................................................................................137
Gambar 5.71 Source code pada method main() di kelas Prediction.java yang sudah
dimodifikasi pada hasil prediksi metode item-based CF .....................................138
Gambar 5.72 Data testing nilai MAE di atas 2, maksimal neighbor = 10...........139
Gambar 5.73 Data testing nilai MAE di atas 2, maksimal neighbor = 70...........139
Gambar 5.74 Grafik garis hasil MAE terhadap jumlah maksimal neighbor pada
kedua metode .......................................................................................................139
Gambar 5.75 Grafik garis lama waktu running terhadap jumlah maksimal neighbor
pada kedua metode ...............................................................................................140
Gambar 5.76 Menampilkan data testing yang memiliki nilai MAE lebih dari 2 .141
Gambar 5.78 Menampilkan interseksi rating antara pengguna 166 dan pengguna
456 ........................................................................................................................144
Gambar 5.79 Hasil eksekusi query rata-rata rating pengguna 1 (kiri) dan penguna
2 (kanan)...............................................................................................................158
Gambar 5.80 Eksekusi query mencari interseksi rating pengguna 1 dan 2 .........158
Gambar 5.81 Skenario pencarian nilai similaritas antara pengguna 1 dan 2 .......161
xxi
Gambar 5.86 Hasil eksekusi query rata-rata rating film 1 (kiri) dan film 6 (kanan)
..............................................................................................................................166
Gambar 5.87 Eksekusi query mencari interseksi rating pengguna 1 dan 2 .........167
Gambar 5.88 Skenario pencarian nilai similaritas antara film 1 dan 6 ................170
xxii
DAFTAR TABLE
Table 3.2 Record yang terdapat di basis data yang memuat informasi tentang data
set matrix user-item. ...............................................................................................18
Table 4.1 Rancangan implementasi blok proses pada kelas .java .........................28
Table 4.2 Sampel data rating untuk contoh perhitungan metode user-based CF..58
Table 4.4 Matrix user similarity dari hasil perhitungan similaritas antar pengguna.
................................................................................................................................60
Table 4.6 Sampel data rating untuk contoh perhitungan metode item-based CF..63
Table 4.7 Interseksi rating antara The Matrix dan Forrest Gump .........................63
Table 4.8 Matrix movie similarity dari hasil perhitungan similaritas antar film. ...64
Table 5.2 Hasil MAE dari skenario mengubah batas jumlah maksimal neighbor
metode user-based CF .........................................................................................133
Table 5.3 Hasil MAE dari skenario mengubah batas jumlah maksimal neighbor
metode item-based CF .........................................................................................136
xxiii
DAFTAR RUMUS
xxiv
DAFTAR QUERY
Query 5.9 Menampilkan interseksi rating pengguna 166 dan 456 ......................143
BAB I PENDAHULUAN
1
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
1. BAB I : PENDAHULUAN
Bab ini berisi latar belakang, rumusan masalah, batasan masalah, tujuan
penelitian, manfaat penelitian dan sistematika penulisan.
2. BAB II : LANDASAN TEORI
Bab ini akan menjelaskan mengenai teori yang berkaitan dengan judul
atau masalah pada tugas akhir.
3. BAB III : METODOLOGI PENELITIAN
Bab ini berisi mengenai data, spesifikasi alat dan tahapan penelitian.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
Pada bab ini akan dipaparkan teori serta informasi-informasi yang telah
diperoleh penulis untuk menyokong pengerjaan tugas akhir dan juga akan
dijelaskan mengenai pengertian dan metode yang akan digunakan oleh penulis.
6
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
1. Cold-start problem
Pendekatan Collaborative Filtering melakukan prediksi berdasarkan
rating yang diberikan pengguna pada item, akan menjadi masalah
ketika suatu item baru masuk ke dalam sistem dan belum di-rating
sama sekali oleh pengguna. Akibatnya item tersebut tidak akan pernah
direkomendasikan kepada pengguna.
2. Sparsity
Untuk ukuran data yang besar, banyak item yang baru sedikit di-rating
oleh pengguna, akibatnya item tersebut memiliki nilai prediksi yang
relatif tidak akurat dan menghasilkan rekomendasi yang buruk.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
10
11
……………..(2.1)
Dimana :
o adalah nilai kemiripan (similarity) antara pengguna u dan
pengguna v dengan perhitungan Pearson Correlation
o dan adalah rating pengguna u dan v pada item i
o dan adalah rata-rata rating pengguna u dan v
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
12
Sementara untuk mengetahui nilai kemiripan item yang telah di-rating oleh
pengguna, rumus Pearson Correlation-nya seperti dalam rumus berikut
(2.2)
……………..(2.2)
Dimana :
o PC(i,j) adalah nilai kemiripan (similarity) antara item i dan item j
dengan perhitungan Pearson Correlation
o dan adalah rating pengguna u pada item i dan item j
o dan adalah rata-rata rating pada item i dan j
Nilai kemiripan memiliki rentang antara 1 sampai dengan -1. Jika nilai
kemiripan bernilai 0 maka kedua objek tidak memiliki relasi sama sekali.
Jika nilai di atas 0 dapat diartikan kedua objek memiliki penambahan nilai
yang sejajar atau ada kecenderungan mirip. Beda halnya ketika nilai di
bawah 0, hal ini terjadi akibat adanya objek yang mengalami penambahan
nilai namun objek lainnya mengalami penurunan nilai, dalam arti keduanya
saling bertolak belakang dan disimpulkan bahwa kedua objek benar-benar
lebih ke arah tidak mirip sama sekali. Nilai similaritas dari 0 – 1
merepresentasikan bahwa similaritas tersebut memiliki kemiripan paling
kuat berdasarkan korelasinya dan mampu memberikan prediksi yang lebih
terpercaya (Ricci dan Saphira, 2011).
13
satu metode perhitungan prediksi rating ialah metode weighted sum baik
untuk prediksi pada metode user-based CF maupun item-based CF (Ricci
dan Saphira, 2011).
Rumus weighted sum untuk menghitung prediksi pada metode user-based
CF adalah seperti rumus (2.3) berikut :
∑𝑛
𝑖=1 𝑅𝑣,𝑖 × 𝑠𝑖𝑚(𝑢,𝑣)
𝑃(𝑢,𝑖) = ∑𝑛
…………….. (2.3)
𝑖=1 | 𝑠𝑖𝑚 (𝑢,𝑣 ) |
Dimana :
o 𝑃(𝑢,𝑖) adalah prediksi rating pada item i untuk user u
o n adalah jumlah neighbor (tetangga)
o 𝑅𝑣,𝑖 adalah rating yang diberikan user v kepada item i
o 𝑠𝑖𝑚(𝑢, 𝑣) adalah nilai similarity antara user u dengan user v
∑𝑛
𝑖=1 𝑅𝑢,𝑗 × 𝑠𝑖𝑚(𝑖,𝑗)
𝑃(𝑢,𝑖) = ∑𝑛
……………..(2.4)
𝑖=1 | 𝑠𝑖𝑚 (𝑖,𝑗 ) |
Dimana :
o 𝑃(𝑢,𝑖) adalah prediksi rating pada item i untuk user u
o n adalah jumlah neighbor (tetangga)
o 𝑅𝑢,𝑗 adalah rating yang diberikan user u kepada item j
o 𝑠𝑖𝑚(𝑖, 𝑗) adalah nilai similarity antara item i dengan item j
14
MAE diperoleh dengan menghitung error absolut dari N pasang rating asli
dan prediksi, kemudian menghitung rata-rata, seperti pada rumus (2.5).
……………….(2.5)
Dimana :
o MAE adalah nilai besarnya error dari hasil prediksi rating.
o adalah rating yang diprediksi.
o adalah rating yang sebenarnya.
o N adalah banyak pasang rating asli dan prediksi.
2.6. MovieLens
Movielens adalah situs rekomendasi film personal yang disusun
berdasarkan rating yang diberikan pengguna terhadap sebuah film.
MovieLens dijalankan oleh GroupLens, sebuah laboratorium penelitian di
University of Minnesota (https://movielens.org/). Dengan menggunakan
MovieLens, pengguna turut membantu GroupLens mengembangkan alat
dan eksperimental baru untuk eksplorasi data dan rekomendasi. MovieLens
tidak komersial, dan bebas dari laba. Movielens menerbitkan data set-nya
secara cuma-cuma untuk pengembangan dan penelitian bildang sistem
rekomendasi. Penelitian terpublikasi yang terdeksi menggunakan data set
dari Movielens diindex dan dijadikan referensi bagi grup riset grouplens
dan masyarakat yang tertarik pada pengembangan dan penelitian sistem
rekomendasi (https://movielens.org/).
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
15
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
16
17
yaitu riwayat transaksi rental film online. Data ini terdiri dari 943
user, 1682 item (film), 100.000 rating, serta info konten item
berupa genre. Nilai rating yang terdapat pada data set adalah 1,
2, 3, 4, dan 5. Dari 100.000 rating. Untuk mempermudah proses
komputasi, Tiap user memiliki minimal 20 rating item yang
dapat digunakan sebagai data history untuk menghitung prediksi
dan menghasilkan rekomendasi. Sebagian besar pola user
memberi rating tersebar dari 1 hingga 5 sehingga
menggambarkan preferensi user terhadap item.
Data set yang diambil adalah berupa matrix user-item yang
terbentuk dari aktivitas user yang telah memberikan rating
terhadap film. Aktivitas itulah yang disimpan dan dikelola oleh
MovieLens seperti pada table 3.1.
18
Data set berupa 100.000 rating film akan dibagi menjadi data
training dan data testing untuk melakukan penelitian.
19
20
3.3.2. Hardware
Terdapat 2 perangkat keras yang digunakan penulis dalam
melakukan penelitian, berikut spesifikasinya :
1. Processor yang di gunakan yaitu :
a. Intel® 𝐶𝑜𝑟𝑒 𝑇𝑀 i7–6700HQ CPU @ 3,40GHz (8 CPUs),
~3,4 GHz.
b. Intel® 𝐶𝑜𝑟𝑒 𝑇𝑀 i7–6700HQ CPU @ 2,60GHz (8 CPUs),
~2,6 GHz.
2. Memori (RAM) pada kedua perangkat keras yang di
gunakan yaitu 8.00 GB.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
21
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
22
23
Pada gambar 4.2 memperlihatkan contoh data set yang penulis gunakan
untuk penelitain. Gambar 4.2 adalah record yang tersimpan dalam table
ratings.
Data set tersebut nantinya akan disimpan dalam basis data pada aplikasi
MySQL dimana perancangan basis data-nya akan disesuaikan dengan
kebutuhan perangkat lunak yang akan dibangun. Berikut perancangan
basis data pada penelitian ini :
24
25
26
27
28
29
Rating.java
- ratingId : string
- movieId: string
- movieTitle : string
- userId : string
- rating : Double
- rateAt : string
- conn : Connection
+ Rating() <<konstruktor>>
+ Rating(Connection) <<konstruktor>>
+ getKoneksi() : static Rating
+ getRatingId() : String
+ setRatingId(String) : void
+ getMovieId() : String
+ setMovieId(String) : void
+ getMovieTitle() : String
+ setMovieTitle(String) : void
+ getUserId() : String
+ setUserId(String) : void
+ getRating() : Double
+ setRating(Double) : void
+ getRateAt() : String
+ setRateAt(String) : void
+ getTotalUserRated() : int
+ getUserById(int) : List<Rating>
+ inputDataRatingTesting(Rating) : void
+ pilihDataTesting() : void
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
30
UserBased.java
- userSimilarityId : string
- userID_1: string
- userID_2 : string
- similarityValue : Double
- conn : Connection
+ UserBased() <<konstruktor>>
+ UserBased(Connection) <<konstruktor>>
+ getKoneksi() : static UserBased
+ getUserSimilarityId() : String
+ setUserSimilarityId(String) : void
+ getUserID_1() : String
+ setUserID_1(String) : void
+ getUserID_2() : String
+ setUserID_2(String) : void
+ getSimilarityValue() : Double
+ setSimilarityValue(Double) : void
+ getUserRating(String) : List<Rating>
+ getAvg(String) : Double
+ getBagianAtas(List<Rating>, List<Rating>, Double, Double) : Double
+ getBagianBawah(List<Rating>, List<Rating>, Double, Double) :
Double
+ similaritasPearsonCorrelation(Sting, String) : Double
+ inputUserSimilarity(UserBase) : void
ItemBased.java
- movieSimilarityId : string
- movieID_1: string
- movieID_2 : string
- similarityValue : Double
- conn : Connection
+ ItemBased() <<konstruktor>>
+ ItemBased(Connection) <<konstruktor>>
+ getKoneksi() : static ItemBased
+ getMovieSimilarityId() : String
+ setMovieSimilarityId(String) : void
+ getMovieID_1() : String
+ setMovieID_1(String) : void
+ getMovieID_2() : String
+ setMovieID_2(String) : void
+ getSimilarityValue() : Double
+ setSimilarityValue(Double) : void
+ getItemRating(String) : List<Rating>
+ getAvg(String) : Double
+ getBagianAtas(List<Rating>, List<Rating>, Double, Double) : Double
+ getBagianBawah(List<Rating>, List<Rating>, Double, Double) :
Double
+ similaritasPearsonCorrelation(Sting, String) : Double
+ inputMovieSimilarity(ItemBased) : void
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
31
Prediction.java
- predictionID : string
- ratingId: string
- topN : int
- predictionValue : Double
- methodType : String
- objek1 : String
- objek2 : String
- rating : double
- similarityValue : double
- conn : Connection
+ Prediction() <<konstruktor>>
+ Prediction(Connection) <<konstruktor>>
+ getKoneksi() : static Prediction
+ getPredictionID() : String
+ setPredictionID (String) : void
+ getRatingId() : String
+ setRatingId(String) : void
+ getTopN() : int
+ setTopN(String) : void
+ getPredictionValue() : Double
+ setPredictionValue(Double) : void
+ getMethodType() : String
+ setMethodType(String) : void
+ getObjek1() : String
+ setObjek1(String) : void
+ getObjek2() : String
+ setObjek2(String) : void
+ getSimilarityValue() : Double
+ setSimilarityValue(Double) : void
+ getRatingTesting() : List<Rating>
+ getRatingAndUserSimilaritySort(String, String) : List<Prediction>
+ hasilPrediksiUserBased(Rating, int) : double
+ getRatingAndMovieSimilaritySort (String, String) : List<Prediction>
+ hasilPrediksiItemBased(Rating, int) : double
+ inputPrediction(Prediction) : void
MAE.java
- MAE : Double
- listPrediksi : List<Prediction>
- conn : Connection
+ MAE() <<konstruktor>>
+ MAE(Connection) <<konstruktor>>
+ getKoneksi() : static MAE
+ getMAE() : double
+ setMAE(double) : void
+ getListPrediksi() : List<Prediction>
+ setListPrediksi(List<Prediction>) : void
+ showPrediction(String, Stirng) : MAE
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
32
➢ Method getTotalUserRated()
Digunakan untuk mengetahui total pengguna yang telah
melakukan pemberian rating.
1. Bangun koneksi ke basis data MySQL.
2. Deklarasi query untuk melakukan perintah
select total jumlah rating oleh masing-masing
pengguna dengan fungsi GROUP BY
pengguna pada table rating.
3. Eksekusi query.
4. Deklarasi variable integer bernama
totalUser.
5. Lakukan perulangan selama result dari
eksekusi query masih ada :
a. Hitung total baris pada result dengan
mendeklarasi totalUser++.
6. Tutup koneksi dari basis data.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
33
➢ Method getUserById(int)
Digunakan untuk menampung semua riwayat rating
yang pernah diberikan oleh pengguna.
1. Membaca parameter int pada method sebagai
user_id.
2. Bangun koneksi ke basis data MySQL.
3. Deklarasi query untuk melakukan perintah
select semua data riwayat rating yang pernah
diberikan oleh pengguna dengan user_id
sesuai parameter dari table rating.
4. Eksekusi query.
5. Deklarasi objek ArrayList rating dari kelas
model Rating dengan nama listRatingusers.
6. Lakukan perulangan selama result dari
eksekusi query masih ada :
a. Deklarasi objek dari kelas Rating.
b. Simpan semua data result query pada
objek tersebut.
c. Tambahkan objek dari kelas Rating
tersebut ke dalam objek ArrayList
rating.
7. Tutup koneksi dari basis data.
8. Kembalikan objek ArrayList listRatingusers
sebagai nilai return method.
➢ Method inputDataRatingTesting(Rating)
Digunakan untuk menginputkan data rating training ke
dalam table rating testing.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
34
➢ Method pilihDataTesting()
Digunakan untuk menjalankan proses pemilihan dan
penginputan data rating training ke rating testing secara
keseluruhan.
1. Panggil method getTotalUserRated() lalu
tampung nilai return ke dalam variable
integer totalUserRated.
2. Lakukan perulangan sebanyak
totalUserRated :
a. Panggil method getUserByID(int) lalu
tampung nilai return ke dalam objek
ArrayList dari kelas Rating.
b. Lakukan perulangan sebanyak 5 kali :
i. Panggil method
inputDataRatingTesting(Rating) dan
isikan parameter method tersebut
dengan objek Rating dari ArrayList
kelas Rating.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
35
2. Menghitung Similarity
Perhitungan similaritas memiliki langkah yang berbeda
pada masing-masing metodenya, terutama untuk istilah
neighbor. Pada metode user-based CF, istilah neighbor
merujuk kepada pengguna dengan pengguna lainnya.
Sedangkan pada metode item-based CF adalah film
dengan film lainnya. Blok proses ini diterapkan pada
kelas UserBased.java dan ItemBased.java. Terdapat 6
method yang dijalankan untuk menerapkan blok proses
pada masing-masing kelasnya. Berikut adalah
penjabaran algoritma dari 6 method dari kedua kelas
tersebut :
36
➢ Method getAvg(String)
Digunakan untuk mendapatkan nilai rata-rata dari
semua rating yang telah diberikan oleh pengguna.
1. Membaca parameter String pada method
sebagai user_id.
2. Bangun koneksi ke basis data MySQL.
3. Deklarasi query untuk melakukan perintah
select nilai rata-rata dari keseluruhan rating
berdasarkan pengguna user_id dari table
rating.
4. Eksekusi query.
5. Deklarasi variable double dengan nama avg.
6. Lakukan perulangan selama result dari
eksekusi query masih ada :
a. Tampung nilai rata-rata dalam
variable avg.
7. Tutup koneksi dari basis data.
8. Kembalikan variable avg sebagai nilai return
method.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
37
➢ Method getBagianAtas(List<Rating>,
List<Rating>, Double, Double)
Pada rumus 2.1 adalah rumus yang membagi pembilang
dengan penyebut dengan rumus yang tertera. Penulis
memisahkan perhitungan pembilang dan perhitungan
penyebut dalam dua method pada kelas UserBased.java.
Method ini digunakan untuk menghitung bagian
pembilang.
1. Membaca parameter 2 objek ArrayList dari
kelas Rating yang masing-masing
menampung data rating dari pengguna
tertentu terhadap film tertentu, dan juga
membaca 2 parameter Double yang masing-
masing merupakan nilai rata-rata dari
himpunan nilai rating oleh 2 pengguna pada
method.
2. Deklarasi variable bertipe double bernama
perkalianUser dan totalPerkalianUser.
3. Lakukan perulangan sebanyak jumlah index
ArrayList nilai rating pengguna 1 :
a. Lakukan perulangan sebanyak jumlah
index ArrayList nilai rating pengguna
2:
i. Cek interseksi rating antara 2
pengguna. Jika kedua pengguna
me-rating film yang sama :
• Lakukan pengurangan antara
nilai rating dengan rata-rata
nilai rating untuk masing-
masing kedua pengguna.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
38
➢ Method getBagianBawah(List<Rating>,
List<Rating>, Double, Double)
Method ini digunakan untuk menghitung bagian
penyebut dari rumus 2.1.
1. Membaca parameter 2 objek ArrayList dari
kelas Rating yang masing-masing
menampung data rating dari pengguna
tertentu terhadap film tertentu, dan juga
membaca 2 parameter Double yang masing-
masing merupakan nilai rata-rata dari
himpunan nilai rating oleh 2 pengguna pada
method.
2. Deklarasi variable bertipe double bernama :
a. ratingMinAvg1
b. totalRatingMinAvg1
c. ratingMinAvg2
d. totalRatingMinAvg2
e. perkalianPangkat
f. akarPerkalianJumlahRatingMinA
vg
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
39
40
➢ Method similaritasPearsonCorrelation(String,
String)
Digunakan untuk menghitung nilai similaritas antara 2
pengguna dengan menggunakan rumus 2.1.
1. Membaca parameter pada method, yaitu 2
String yang masing-masing merupakan
user_id dari 2 pengguna yang berbeda.
2. Deklarasi variable bertipe double bernama
hasilSimilaritas, avg1 dan avg2.
3. Cek apakah parameter String user_id 1 sama
dengan user_id 2.
a. Jika sama : isikan variable
hasilSimilaritas = 1.
b. Jika tidak sama :
i. Deklarasi objek ArrayList dari
kelas Rating bernama user1
untuk menampung himpunan
riwayat rating user_id 1
(pengguna 1). Panggil method
getUserRating(String) dan
tampung nilai return-nya
dalam objek user1.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
41
42
➢ Method inputUserSimilarity(UserBased)
Digunakan untuk menginputkan nilai kemiripan
(similaritas) antara 2 pengguna ke dalam table
user_similarity.
1. Membaca parameter objek kelas UserBased
pada method.
2. Bangun koneksi ke basis data MySQL.
3. Deklarasi query untuk input data ke table
user_similarity sesuai dengan isi variable
yang dibawa dari objek UserBased.
4. Eksekusi query.
5. Tutup koneksi dari basis data.
43
➢ Method getAvg(String)
Digunakan untuk mendapatkan nilai rata-rata dari
semua nilai rating yang dimiliki film.
1. Membaca parameter String pada method
sebagai movie_id.
2. Bangun koneksi ke basis data MySQL.
3. Deklarasi query untuk melakukan perintah
select nilai rata-rata dari keseluruhan rating
berdasarkan pengguna movie_id dari table
rating.
4. Eksekusi query.
5. Deklarasi variable double dengan nama avg.
6. Lakukan perulangan selama result dari
eksekusi query masih ada :
a. Tampung nilai rata-rata dalam
variable avg.
7. Tutup koneksi dari basis data.
8. Kembalikan variable avg sebagai nilai return
method.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
44
➢ Method getBagianAtas(List<Rating>,
List<Rating>, Double, Double)
Method ini digunakan untuk menghitung bagian
pembilang pada rumus perhitungan similaritas Pearson
Correlation.
1. Membaca parameter 2 objek ArrayList dari
kelas Rating yang masing-masing
menampung data rating yang dimiliki oleh
film tertentu dari semua pengguna yang telah
me-rating nya, dan juga membaca 2
parameter Double yang masing-masing
merupakan nilai rata-rata dari himpunan nilai
rating 2 film pada method.
2. Deklarasi variable bertipe double bernama
perkalianItem dan totalPerkalianItem.
3. Lakukan perulangan sebanyak jumlah index
ArrayList nilai rating film 1 :
a. Lakukan perulangan sebanyak jumlah
index ArrayList nilai rating film 2 :
i. Cek interseksi rating antara 2
film. Jika kedua pengguna film di-
rating oleh pengguna yang sama :
• Lakukan pengurangan antara
nilai rating dengan rata-rata
nilai rating untuk masing-
masing kedua film.
• Lakukan perkalian antara 2
hasil pengurangan tersebut.
Hasil perkalian disimpan
dalam variable
perkalianItem.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
45
• totalPerkalianItem=
totalPerkalianItem+
perkalianItem;
4. Kembalikan variable totalPerkalianItem
sebagai nilai return method.
➢ Method getBagianBawah(List<Rating>,
List<Rating>, Double, Double)
Method ini digunakan untuk menghitung bagian
penyebut dari rumus 2.1.
1. Membaca parameter 2 objek ArrayList dari
kelas Rating yang masing-masing
menampung data rating yang dimiliki oleh
film tertentu dari semua pengguna yang telah
me-rating nya, dan juga membaca 2
parameter Double yang masing-masing
merupakan nilai rata-rata dari himpunan nilai
rating 2 film pada method.
2. Deklarasi variable bertipe double bernama :
a. ratingMinAvg1
b. totalRatingMinAvg1
c. ratingMinAvg2
d. totalRatingMinAvg2
e. perkalianPangkat
f. akarPerkalianJumlahRatingMinA
vg
7. Lakukan perulangan sebanyak jumlah index
ArrayList nilai rating film 1 :
a. Lakukan perulangan sebanyak jumlah
index ArrayList nilai rating film 2 :
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
46
47
➢ Method similaritasPearsonCorrelation(String,
String)
Digunakan untuk menghitung nilai similaritas antara 2
film dengan menggunakan rumus 2.1.
1. Membaca parameter pada method, yaitu 2
String yang masing-masing merupakan
movie_id dari 2 film yang berbeda.
2. Deklarasi variable bertipe double bernama
hasilSimilaritas, avg1 dan avg2.
3. Cek apakah parameter String movie_id 1
sama dengan movie_id 2.
a. Jika sama : isikan variable
hasilSimilaritas = 1.
b. Jika tidak sama :
i. Deklarasi objek ArrayList dari
kelas Rating bernama movie1
untuk menampung himpunan
rating yang dimiliki oleh
movie_id 1 (film 1). Panggil
method getItemRating(String)
dan tampung nilai return-nya
dalam objek movie1.
ii. Deklarasi objek ArrayList dari
kelas Rating bernama movie2
untuk menampung himpunan
riwayat rating yang dimiliki
oleh movie_id 2 (film 2).
Panggil method
getItemRating(String) dan
tampung nilai return-nya
dalam objek movie2.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
48
➢ Method inputMovieSimilarity(ItemBased)
Digunakan untuk menginputkan nilai kemiripan
(similaritas) antara 2 film ke dalam table
movie_similarity.
1. Membaca parameter objek kelas ItemBased
pada method.
2. Bangun koneksi ke basis data MySQL.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
49
3. Memprediksi Rating
Sama halnya pada perhitungan similaritas, perhitungan
prediksi juga memiliki langkah yang berbeda pada
masing-masing metodenya. Metode user-based CF
menggunakan rating dari pengguna lain dan nilai
similaritas antar pengguna dalam memprediksi sebuah
rating dari data testing. Sedangkan item-based CF
menggunakan rating pada film lain dan nilai similaritas
antar film dalam memprediksi sebuah rating. Blok
proses ini diterapkan pada kelas Prediction.java.
Terdapat 6 method yang dijalankan untuk menerapkan
blok proses ini. Berikut adalah penjabaran algoritma
dari 6 method tersebut :
➢ Method getRatingTesting()
Digunakan untuk mengambil semua data rating testing
yang akan diprediksi.
1. Bangun koneksi ke basis data MySQL.
2. Deklarasi query untuk melakukan perintah
select all data dari table rating_testing
3. Eksekusi query.
4. Deklarasi objek ArrayList dari kelas Rating.
5. Lakukan perulangan selama data result query
masih ada :
a. Deklarasi objek kelas Rating
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
50
Method inputPrediction(Prediction)
Digunakan untuk menginputkan nilai prediksi terhadap
rating real pada data testing ke dalam table prediction.
1. Membaca parameter objek kelas Prediction
pada method.
2. Bangun koneksi ke basis data MySQL.
3. Deklarasi query untuk input data ke table
prediction sesuai dengan isi variable yang
dibawa dari objek Prediction.
4. Eksekusi query.
5. Tutup koneksi dari basis data.
➢ Method getRatingAndUserSimilaritySort(String,
String)
Digunakan untuk menampung semua data rating dari
pengguna lain yang ber-interseksi dengan pengguna 1
dan nilai similaritas antara pengguna 1 dengan
pengguna 2.
1. Baca 2 parameter String sebagai user_id dan
movie_id.
2. Bangun koneksi ke basis data MySQL.
3. Deklarasi query untuk melakukan perintah
select nilai similaritas pengguna lain yang
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
51
52
53
➢ Method getRatingAndMovieSimilaritySort
(String, String)
Digunakan untuk menampung semua data rating yang
dimiliki oleh film lain yang ber-interseksi dengan film
1 dan nilai similaritas antara film 1 dengan film 2.
1. Baca 2 parameter String sebagai user_id dan
movie_id.
2. Bangun koneksi ke basis data MySQL.
3. Deklarasi query untuk melakukan perintah
select nilai similaritas film lain yang bernilai
di atas 0, terhadap film dengan movie_id
tertentu dan film tersebut telah di-rating oleh
pengguna dengan user_id tertentu yang akan
diprediksi nilai rating-nya.
4. Eksekusi query.
5. Deklarasi objek ArrayList dari kelas
Prediction bernama otherMovieRatingSort.
6. Lakukan perulangan selama data result query
masih ada :
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
54
55
getRatingAndMovieSimilaritySort(String,
String).
3. Terapkan rumus 2.5 dalam perhitungan
prediksi. Deklarasikan variable double
berikut ini :
a. RatingXMovieSimilarityValue
b. totalRatingXMoveSimilarityValue
c. totalMovieSimilarityValue
d. prediction
4. Lakukan perulangan sebanyak parameter
integer top-N :
a. Lakukan perkalian antara nilai rating
dengan nilai similaritas pengguna
pada data testing dengan pengguna
lainnya. Simpan hasil perkalian ke
dalam variable
RatingXMovieSimilarityValue.
b. totalRatingXMoveSimilarityValue
= totalRatingXMoveSimilarityValue
+ RatingXMovieSimilarityValue;
c. totalMovieSimilarityValue =
totalMovieSimilarityValue +
similarityValue;
5. Isikan variable prediction =
totalRatingXMovieSimilarityValue /
totalMovieSimilarityValue;
6. Deklarasi objek kelas Prediction dengan
nama p. Simpan data ID_testing, jumlah
maksimal neighbor (top-N), nilai hasil
prediksi, dan jenis metode ke dalam objek.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
56
4. Menghitung MAE
Blok proses ini diterapkan pada kelas MAE.java.
Terdapat 1 method yang dijalankan untuk menerapkan
blok proses. Berikut adalah penjabaran algoritmanya :
57
58
59
PC(John, Lucy) =
(5 − 2.5)(1 − 3.6) + (1 − 2.5)(5 − 3.6) + (2 − 2.5)(5 − 3.6) + (2 − 2.5)(5 − 3.6)
√(5 − 2.5)2 + (1 − 2.5)2 + (2 − 2.5)2 + (2 − 2.5)2 √(1 − 3.6)2 + (5 − 3.6)2 + (5 − 3.6)2 + (5 − 3.6)2
−10
PC(John, Lucy) =
10.66583
PC(John, Lucy) = -0.93757
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
60
Table 4.4 Matrix user similarity dari hasil perhitungan similaritas antar pengguna.
?
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
61
62
63
64
Table 4.8 Matrix movie similarity dari hasil perhitungan similaritas antar film.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
65
66
67
| 3−2 |
MAE untuk prediksi metode user-based CF = 1
=1
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
68
| 3−3 |
MAE untuk prediksi metode item-based CF = 1
=0
69
70
Beranda.jsp Hasil_prediksi_item_base.jsp
- - topN : selectbox
- method_type : hidden
+ - cari : button
+ get PredictionControl
User_base.jsp
- userID : text
- cari : button Pencarian.jsp
- user1 : text - title : text
- user2 : text - tampil : button
- cari : button - genreID : selectbox
- hitungSimilaritas : button - tampil : button
+ get UserBasedControl + get MovieControl
Item_base.jsp Daftar_rating.jsp
- movieID : text - userID : number
- cari : button - jenisRating : radiobutton
- movie1 : text - tampil : button
- movie2 : text - movieID : number
- cari : button - jenisRating : radiobutton
- hitungSimilaritas : button - tampil : button
+ get ItemBasedControl + get RatingControl
Hasil_prediksi_user_base.jsp
- topN : selectbox
- method_type : hidden
- cari : button
+ get PredictionControl
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
71
UserBasedControl.java
-
ItemBasedControl.java
-
PredictionControl.java
-
MovieControl.java
-
RatingControl.java
-
72
Koneksi.java
- url : string
- user : string
- pass : string
- conn : Connection
+ Koneksi() <<konstruktor>>
+ getKoneksiDB() : static Connection
+ close() : void
Genre.java
- genreId : string
- genreName : string
- conn : Connection
+ Genre() <<konstruktor>>
+ Genre(Connection) <<konstruktor>>
+ getKoneksi() : static Genre
+ getGenreId() : String
+ setGenreId(String) : void
+ getGenreName() : String
+ setGenreName(String) : void
+ getAllGenre() : List<Genre>
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
73
Movie.java
- movieId : string
- movieTitle : string
- movieGenre : List<String>
- releaseDate : string
- conn : Connection
+ Movie() <<konstruktor>>
+ Movie(Connection) <<konstruktor>>
+ getKoneksi() : static Movie
+ getMovieId() : String
+ setMovieId(String) : void
+ getMovieTitle() : String
+ setMovieTitle(String) : void
+ getMovieGenre() : List<String>
+ setMovieGenre(List<String>) : void
+ getReleaseDate() : String
+ setReleaseDate(String) : void
+ getAllMovie () : List<Movie>
+ getMovieByGenre(String) : List<Movie>
+ getMovieByTitle (String) : List<Movie>
+ getGenre (String) : List<String>
User.java
- userId : string
- age : string
- gender : string
- occupation : string
- zipcode : string
- conn : Connection
+ User() <<konstruktor>>
+ User(Connection) <<konstruktor>>
+ getKoneksi() : static User
+ getUserId() : String
+ setUserId(String) : void
+ getAge() : String
+ setAge(String) : void
+ getGender() : String
+ setGender(String) : void
+ getOccupation() : String
+ setOccupation(String) : void
+ getZipCode() : String
+ setZipCode(String) : void
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
74
ItemBased.java
- movieSimilarityId : string
- movieID_1: string
- movieID_2 : string
- similarityValue : Double
- conn : Connection
+ ItemBased() <<konstruktor>>
+ ItemBased(Connection) <<konstruktor>>
+ getKoneksi() : static ItemBased
+ getMovieSimilarityId() : String
+ setMovieSimilarityId(String) : void
+ getMovieID_1() : String
+ setMovieID_1(String) : void
+ getMovieID_2() : String
+ setMovieID_2(String) : void
+ getSimilarityValue() : Double
+ setSimilarityValue(Double) : void
+ getItemRating(String) : List<Rating>
+ getAvg(String) : Double
+ getBagianAtas(List<Rating>, List<Rating>, Double, Double) : Double
+ getBagianBawah(List<Rating>, List<Rating>, Double, Double) : Double
+ similaritasPearsonCorrelation(Sting, String) : Double
+ inputMovieSimilarity(ItemBased) : void
+ getMovieSimilarityOneMovie(String) : List<ItemBased>
+ getMovieSimilarityTwoMovies(String, String) : List<ItemBased>
UserBased.java
- userSimilarityId : string
- userID_1: string
- userID_2 : string
- similarityValue : Double
- conn : Connection
+ UserBased() <<konstruktor>>
+ UserBased(Connection) <<konstruktor>>
+ getKoneksi() : static UserBased
+ getUserSimilarityId() : String
+ setUserSimilarityId(String) : void
+ getUserID_1() : String
+ setUserID_1(String) : void
+ getUserID_2() : String
+ setUserID_2(String) : void
+ getSimilarityValue() : Double
+ setSimilarityValue(Double) : void
+ getUserRating(String) : List<Rating>
+ getAvg(String) : Double
+ getBagianAtas(List<Rating>, List<Rating>, Double, Double) : Double
+ getBagianBawah(List<Rating>, List<Rating>, Double, Double) :
Double
+ similaritasPearsonCorrelation(Sting, String) : Double
+ inputUserSimilarity(UserBase) : void
+ getMovieSimilarityOneUser(String) : List<ItemBased>
+ getMovieSimilarityTwoUsers(String, String) : List<ItemBased>
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
75
Prediction.java
- predictionID : string
- ratingId: string
- topN : int
- predictionValue : Double
- methodType : String
- objek1 : String
- objek2 : String
- rating : double
- similarityValue : double
- conn : Connection
+ Prediction() <<konstruktor>>
+ Prediction(Connection) <<konstruktor>>
+ getKoneksi() : static Prediction
+ getPredictionID() : String
+ setPredictionID (String) : void
+ getRatingId() : String
+ setRatingId(String) : void
+ getTopN() : int
+ setTopN(String) : void
+ getPredictionValue() : Double
+ setPredictionValue(Double) : void
+ getMethodType() : String
+ setMethodType(String) : void
+ getObjek1() : String
+ setObjek1(String) : void
+ getObjek2() : String
+ setObjek2(String) : void
+ getSimilarityValue() : Double
+ setSimilarityValue(Double) : void
+ getRatingTesting() : List<Rating>
+ getRatingAndUserSimilaritySort(String, String) : List<Prediction>
+ hasilPrediksiUserBased(Rating, int) : double
+ getRatingAndMovieSimilaritySort (String, String) : List<Prediction>
+ hasilPrediksiItemBased(Rating, int) : double
+ inputPrediction(Prediction) : void
MAE.java
- MAE : Double
- listPrediksi : List<Prediction>
- conn : Connection
+ MAE() <<konstruktor>>
+ MAE(Connection) <<konstruktor>>
+ getKoneksi() : static MAE
+ getMAE() : double
+ setMAE(double) : void
+ getListPrediksi() : List<Prediction>
+ setListPrediksi(List<Prediction>) : void
+ showPrediction(String, Stirng) : MAE
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
76
Rating.java
- ratingId : string
- movieId: string
- movieTitle : string
- userId : string
- rating : Double
- rateAt : string
- conn : Connection
+ Rating() <<konstruktor>>
+ Rating(Connection) <<konstruktor>>
+ getKoneksi() : static Rating
+ getRatingId() : String
+ setRatingId(String) : void
+ getMovieId() : String
+ setMovieId(String) : void
+ getMovieTitle() : String
+ setMovieTitle(String) : void
+ getUserId() : String
+ setUserId(String) : void
+ getRating() : Double
+ setRating(Double) : void
+ getRateAt() : String
+ setRateAt(String) : void
+ getAllRating() : List<Rating>
+ getRatingByUser(String) : List<Rating>
+ getRatingByMovie(String) : List<Rating>
+ getTotalUserRated() : int
+ getUserById(int) : List<Rating>
+ inputDataRatingTesting(Rating) : void
+ pilihDataTesting() : void
77
78
79
80
81
82
83
84
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
2. Menghitung similarity
Penulis akan membagi implementasi dari blok proses
“Menghitung similarity” dalam 2 bagian. Bagian
pertama adalah penerapan perhitungan similaritas di
kelas Userbased.java dan bagian kedua adalah pada kelas
ItemBased.java.
➢ Metode user-based CF
101
102
103
104
105
➢ Metode item-based CF
106
107
108
109
110
3. Memprediksi rating
Berikut adalah source code yang ada pada kelas
Prediction.java untuk implementasi blok proses
“Memprediksi rating”.
Implementasi koding untuk mengambil semua data
testing dapat dilihat pada gambar 5.30. sedangakan
gambar 5.31 adalah implementasi koding untuk
menyimpan hasil perhitungan prediksi ke table
prediction.
111
112
113
114
115
116
117
118
4. Menghitung MAE
Berikut adalah source code yang ada pada kelas
MAE.java untuk implementasi blok proses “Menghitung
MAE” pada gambar 5.41.
119
120
121
122
123
124
125
Gambar 5.52 Hasil pencarian nilai similaritas antara 2 pengguna secara spesifik
126
127
128
129
130
131
132
133
Table 5.2 Hasil MAE dari skenario mengubah batas jumlah maksimal
neighbor metode user-based CF
Jumlah Maksimal
MAE Lama Waktu Running
Neighbor (Top-N)
10 0.826020531 1.922 detik (Gambar 5.35)
30 0.804927121 1.938 detik (Gambar 5.35)
50 0.802093284 1.978 detik (Gambar 5.35)
70 0.800633522 1.941 detik (Gambar 5.35)
100 0.801171485 2.017 detik (Gambar 5.35)
943
(all neighbor with 0.802709142 2.815 detik (Gambar 5.35)
condition)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
134
0.8
0.79
0.78
10 30 50 70 100 All
Neighbor
Jumlah Maksimal Neighbor
User-based CF
Gambar 5.66 Grafik garis hasil MAE terhadap jumlah maksimal neighbor
pada metode user-based CF
135
= 70, terdapat 224 dari 4.701 data testing yang nilai MAE-
nya di atas 2 (gambar 5.69). Selisih data testing antar kedua
jumlah maksimal neighbor yang MAE-nya di atas 2 adalah
sebanyak 38 data.
136
Table 5.3 Hasil MAE dari skenario mengubah batas jumlah maksimal neighbor
metode item-based CF
1682
0.794503596 1.586 detik (Gambar 5.39)
(all neighbor with condition)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
137
0.8
0.78
0.76
10 30 50 70 100 All
Neighbor
Jumlah Maksimal Neighbor
Item-based CF
Gambar 5.70 Grafik garis hasil MAE terhadap jumlah maksimal neighbor
pada metode item-based CF
138
139
0.81
0.805
0.8
0.795
0.79
10 30 50 70 100 All
Neighbor
Jumlah Maksimal Neighbor
User-based CF Item-based CF
Gambar 5.74 Grafik garis hasil MAE terhadap jumlah maksimal neighbor
pada kedua metode
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
140
2500
2000
1500
1000
500
0
10 30 50 70 100 All
Neighbor
Jumlah Maksimal Neighbor
User-based CF Item-based CF
Gambar 5.75 Grafik garis lama waktu running terhadap jumlah maksimal
neighbor pada kedua metode
141
142
143
144
BAB VI PENUTUP
6.1. Kesimpulan
Berdasarkan penelitian yang sudah dikerjakan yaitu
penelitian tentang membandingkan metode user-based CF dan
metode item-based CF dalam memberikan rekomendasi yang lebih
baik pada data set yang berupa objek film. Penulis mendapatkan hasil
penelitian yang menghasilkan kesimpulan sebagai berikut :
1. Metode user-based CF dan metode item-based CF dapat
dipergunakan untuk memprediksi rating pengguna terhadap
film.
2. Metode user-based CF dan item-based CF berpotensi untuk
diterapkan pada sebuah website sistem rekomendasi film.
3. Metode item-based CF memiliki keakuratan yang lebih baik
dalam memberikan nilai prediksi. Hal itu dibuktikan dengan
pengujian nilai kesalahan prediksi terhadap rating real yaitu
pengujian nilai MAE. Dari 6 skenario pengujian, 5 diantaranya
menunjukkan bahwa metode item-based CF memiliki nilai
MAE yang lebih kecil dibanding metode user-based CF.
4. Dengan rentang nilai rating dari 1 sampai dengan 5, selisih nilai
MAE antara kedua metode tidak terlalu signifikan, yaitu hanya
sebesar 0,01 pada masing-masing prediksi terbaiknya. Metode
item-based CF memberikan prediksi paling baik pada jumlah
maksimal neighbor 100 dengan nilai MAE sebesar
0,793895061. Metode user-based CF memberikan prediksi
paling baik pada jumlah maksimal neighbor 70 dengan nilai
MAE sebesar 0,800633522. Pada jumlah maksimal neighbor 10,
kedua metode menghasilkan nilai MAE paling besar yaitu
0,826020531 untuk metode user-based CF, dan 0,833880016
untuk metode item-based CF.
145
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
146
6.2. Saran
Berdasarkan analisis pada penelitian yang sudah dikerjakan,
penulis menemukan sebuah hal yang dapat dikembangkan untuk
penelitian selanjutnya, yaitu dengan menambahkan kondisi
penyeleksian jumlah interseksi pada blok proses “memprediksi rating”
untuk memberikan nilai prediksi rating yang lebih baik.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
147
DAFTAR PUSTAKA
148
149
LAMPIRAN
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
150
Alternative : -
151
Primary
Administrator
Business Actor
:
Use case ini mendeskripsikan administrator yang ingin melihat
Description : daftar nilai similaritas antar user yang sudah dihitung dengan
metode perhitungan similaritas Peason Correlation pada user-
based CF.
152
153
Alternative : -
154
Precondition : -
155
Precondition : -
156
157
158
Hasil eksekusi query dapat dilihat pada gambar 5.80 di bawah ini
159
Diketahui dari gambar 5.80 bahwa terdapat 16 film yang telah di-
rating oleh keduanya. Rating terhadap ke-16 film tersebutlah yang
menjadi interseksi untuk selanjutnya dilakukan perhitungan
similaritas.
Berikut adalah table 5.4 yang menampilkan interseksi tersebut :
160
(4 − 3.6067)(4 − 3.6552) + (5 − 3.6067)(5 − 3.6552) + (5 − 3.6067)(4 − 3.6552) + (5 − 3.6067)(5 − 3.6552) + (2 − 3.6067)(4 − 3.6552)
√+(5 − 3.6067)2 + (2 − 3.6067)2 + (4 − 3.6067)2 + (5 − 3.6067)2 + (5 − 3.6067)2 + (3 − 3.6067)2 × √(4 − 3.6552)2 + (2 − 3.6552)2 + (4 − 3.6552)2
5.548957440000001
Nilai similaritas / PC(1, 2) ➔ ➔ 0.31775824766587973
17.462827419147544
Perhitungan manual yang dilakukan untuk menghitung nilai similaritas antara pengguna 1 dan 2 adalah sebesar
0.31775824766587973, kemudian penulis akan mencocokkan hasil tersebut dengan hasil perhitungan yang dilakukan oleh sistem
website.
Skenario pencocokkan adalah dengan melakukan pencarian nilai similaritas di halaman User-based pada sistem (gambar 5.45)
untuk pengguna 1 dan 2. Penggambaran skenario dapat dilihat pada gambar 5.81 :
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
161
162
163
telah me-rating film 86. Berikut adalah query tersebut pada query
5.12 :
164
+ (2∗0.4445662744442587) 21.04410188405518
➔ ➔
+ |0.4445662744442587| 5.164011819221328
4.075145956429741
Dari perhitungan manual yang dilakukan, diketahui hasil prediksi
untuk data testing dengan 10 adalah 4.075145956429741
dibulatkan menjadi 4.08.
165
3. Perhitungan MAE
Pada uji coba perhitungan prediksi metode user-based CF, didapatkan
hasil prediksi untuk data testing ID = 10 adalah 4.075145956429741
sementara rating real adalah 3.
Nilai MAE sesuai rumus 2.5 dari sampel tersebut adalah :
| 4.075145956429741−3 |
= 1.075145956429741 (dibulatkan menjadi 1.08)
1
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
166
Dari hasil eksekusi query didapatkan nilai rata-rata rating film 1 dan
6 sebesar 3.8804 dan 3.56 termuat dalam gambar 5.86 berikut :
Gambar 5.86 Hasil eksekusi query rata-rata rating film 1 (kiri) dan
film 6 (kanan)
➢ Dari kedua data rating yang dimiliki oleh film 1 dan 6, ditemukanlah
interseksi rating berupa himpunan data rating keduanya. Hal itu
diketahui dengan cara eksekusi query. Berikut adalah query tersebut
pada query 5.14 :
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
167
Hasil eksekusi query dapat dilihat pada gambar 5.87 di bawah ini
168
169
+(4 − 3.8804)(4 − 3.56) + (2 − 3.8804)(2 − 3.56) + (2 − 3.8804)(4 − 3.56) + (3 − 3.8804)(3 − 3.56) + (4 − 3.8804)(2 − 3.56) + (5 − 3.8804)(4 − 3.56)
√+(5 − 3.8804)2 + (5 − 3.8804)2 + (4 − 3.8804)2 × √(5 − 3.56)2 + (5 − 3.56)2 + (3 − 3.56)2 + (4 − 3.56)2 + (1 − 3.56)2 + (2 − 3.56)2 + (4 − 3.56)2 + (2 − 3.56)2
8.967311999999998
Nilai similaritas / PC(1, 6) ➔ ➔ 0.5319997848589287
16.855856440577085
Perhitungan manual yang dilakukan untuk menghitung nilai similaritas antara film 1 dan 6 adalah sebesar 0.5319997848589287,
kemudian penulis akan mencocokkan hasil tersebut dengan hasil perhitungan yang dilakukan oleh sistem website.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
170
171
172
+ (4 ∗ 0.5216086389400081) 21.94153422269458
➔ ➔
+ |0.5216086389400081| 6.265195378828497
3.5021308827558606
Dari perhitungan manual yang dilakukan, diketahui hasil prediksi
untuk data testing dengan 10 adalah 3.5021308827558606
dibulatkan menjadi 3.5.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
173
3. Perhitungan MAE
Pada uji coba perhitungan prediksi metode item-based CF, didapatkan
hasil prediksi untuk data testing ID = 10 adalah 3.5021308827558606
sementara rating real adalah 3.
Nilai MAE sesuai rumus 2.5 dari sampel tersebut adalah :
| 3.5021308827558606−3 |
= 0.5021308827558606 (dibulatkan menjadi
1
0.5)