K-NN merupakan salah satu algoritma pembelajaran mesin sederhana. Hal ini hanya didasarkan pada gagasan bahwa suatu objek yang “dekat” satu sama lain juga akan memiliki karakteristik yang mirip. Ini berarti jika kita mengetahui ciri ciri dari salah satu objek, maka kita juga dapat memprediksi objek lain berdasarkan tetangga terdekatnya. K-NN adalah improvisasi lanjutan dari teknik klasifikasi Nearest Neighbor. Hal ini didasarkan pada gagasan bahwa setiap data baru dapat diklasifikasikan oleh suara mayoritas dari K tetangga, di mana K adalah bilangan bulat positif, dan biasanya dengan jumlah kecil (Khamis et. all., 2014). Nilai K biasanya ganjil, hal ini bertujuan agar tidak ada hasil seri pada voting tetangga terdekat.
Secara umum untuk mendefinisikan jarak antara dua objek a dan b, digunakan rumus jarak Euclidean pada persamaan 2.1 (Mustafa, 2014):
dengan:
Algoritma pengerjaan metode K-Nearest Neighbor adalah sebagai berikut:
- Tentukan parameter K (banyak tetangga terdekat)
- Hitung jarak data baru/data testing dengan semua data yang ada di data training menggunakan jarak Euclidean (persamaan 2.1)
- Urutkan jarak dan tentukan tetangga mana yang paling dekat berdasarkan jarak minimum ke-K
- Menentukan kategori dari tetangga terdekat
- Menggunakan kategori mayoritas yang sederhana dari tetangga terdekat sebagai nilai prediksi data baru.
Contoh Kasus
Data training:
No. | Status Pembayaran Premi | Usia (Tahun) | Lama Pembayaran Premi (Tahun) | Besar Pembayaran Premi (Juta Rupiah/bulan) |
1 | Lancar | 29 | 5 | 0,5 |
2 | Lancar | 36 | 5 | 1 |
3 | Lancar | 57 | 10 | 4 |
4 | Lancar | 45 | 9 | 4 |
5 | Lancar | 40 | 10 | 2,5 |
6 | Tidak Lancar | 60 | 9 | 0,5 |
7 | Tidak Lancar | 39 | 10 | 0,5 |
8 | Tidak Lancar | 41 | 9 | 5 |
9 | Tidak Lancar | 60 | 8 | 4 |
10 | Tidak Lancar | 52 | 8 | 5 |
Data testing:
No. | Status Pembayaran Premi | Usia (Tahun) | Lama Pembayaran Premi (Tahun) | Besar Pembayaran Premi (Juta Rupiah/bulan) |
1 | ? | 30 | 7 | 1 |
Sebuah perusahaan asuransi ingin mengetahui status pembayaran premi bulanan (lancar atau tidak lancar) seorang nasabah baru yang akan bergabung. Berdasarkan data di atas, hitung menggunakan algoritma K-NN.
Jawab
1. Menentukan parameter K yaitu 1, 3, 5, dan 7
2. Hitung jarak data baru/data testing dengan semua data yang ada di data training menggunakan jarak Euclidean (persamaan 2.1)
dengan:
Menghitung jarak antara data training pertama dengan data testing pertama
Menghitung jarak antara data training kedua dengan data testing pertama
Menghitung jarak antara data training ketiga dengan data testing pertama
Jarak Euclidean dihitung hingga data training kesepuluh dan data testing pertama
Sehingga didapatkan jarak Euclidean seperti tabel berikut ini
Status Pembayaran Premi | Jarak Euclidean |
Lancar | 2,29 |
Lancar | 6,32 |
Lancar | 27,33 |
Lancar | 15,42 |
Lancar | 10,54 |
Tidak Lancar | 30,07 |
Tidak Lancar | 9,5 |
Tidak Lancar | 11,87 |
Tidak Lancar | 30,16 |
Tidak Lancar | 22,38 |
3. Urutkan jarak dan tentukan tetangga mana yang paling dekat berdasarkan jarak minimum ke-K diikuti oleh kategori (Status Pembayaran Premi) dari tetangga terdekat
Jarak Euclidean yang sudah diurutkan:
Status Pembayaran Premi | Jarak Euclidean setelah diurutkan |
Lancar | 2,29 |
Lancar | 6,32 |
Tidak Lancar | 9,5 |
Lancar | 10,54 |
Tidak Lancar | 11,87 |
Lancar | 15,42 |
Tidak Lancar | 22,38 |
Lancar | 27,33 |
Tidak Lancar | 30,07 |
Tidak Lancar | 30,16 |
4. Menggunakan kategori mayoritas yang sederhana dari tetangga terdekat sebagai nilai prediksi data baru/data testing
- Untuk K=1
Status Pembayaran Premi | Jarak Euclidean setelah diurutkan |
Lancar | 2,29 |
Lancar | 6,32 |
Tidak Lancar | 9,5 |
Lancar | 10,54 |
Tidak Lancar | 11,87 |
Lancar | 15,42 |
Tidak Lancar | 22,38 |
Lancar | 27,33 |
Tidak Lancar | 30,07 |
Tidak Lancar | 30,16 |
Berdasarkan hasil voting 1 tetangga terdekat, maka data testing diprediksi memiliki status pembayaran premi LANCAR
- Untuk K=3
Status Pembayaran Premi | Jarak Euclidean setelah diurutkan |
Lancar | 2,29 |
Lancar | 6,32 |
Tidak Lancar | 9,5 |
Lancar | 10,54 |
Tidak Lancar | 11,87 |
Lancar | 15,42 |
Tidak Lancar | 22,38 |
Lancar | 27,33 |
Tidak Lancar | 30,07 |
Tidak Lancar | 30,16 |
Berdasarkan hasil voting 3 tetangga terdekat (2 Lancar dan 1 Tidak Lancar), maka data testing diprediksi memiliki status pembayaran premi LANCAR
- Untuk K=5
Status Pembayaran Premi | Jarak Euclidean setelah diurutkan |
Lancar | 2,29 |
Lancar | 6,32 |
Tidak Lancar | 9,5 |
Lancar | 10,54 |
Tidak Lancar | 11,87 |
Lancar | 15,42 |
Tidak Lancar | 22,38 |
Lancar | 27,33 |
Tidak Lancar | 30,07 |
Tidak Lancar | 30,16 |
Berdasarkan hasil voting 5 tetangga terdekat (3 Lancar dan 2 Tidak Lancar), maka data testing diprediksi memiliki status pembayaran premi LANCAR
- Untuk K=7
Status Pembayaran Premi | Jarak Euclidean setelah diurutkan |
Lancar | 2,29 |
Lancar | 6,32 |
Tidak Lancar | 9,5 |
Lancar | 10,54 |
Tidak Lancar | 11,87 |
Lancar | 15,42 |
Tidak Lancar | 22,38 |
Lancar | 27,33 |
Tidak Lancar | 30,07 |
Tidak Lancar | 30,16 |
Berdasarkan hasil voting 7 tetangga terdekat (4 Lancar dan 3 Tidak Lancar), maka data testing diprediksi memiliki status pembayaran premi LANCAR
KESIMPULAN
Berdasarkan perhitungan menggunakan algoritma K-NN dengan K=1,3,5, dan 7, nasabah baru yang akan bergabung diprediksi akan memiliki status pembayaran premi LANCAR pada setiap nilai K.
Sintaks K-NN pada software R
library(class) #saat menyimpan data, gunakan penamaan Y, X1, X2, dan X3 (Y untuk variabel kategorik) data=read.table(file.choose(),header=TRUE) data Usia<-c(data$X1) Lama<-c(data$X2) BesarPremi<-c(data$X3) Klasifikasi<-factor(data$Y) Klasifikasi datatraining<-data.frame(Usia,Lama,BesarPremi) datatraining datatesting<-c(30,7,1) #berdasarkan data baru yg akan diprediksi #K=1 (sesuai peneliti) Test1<-knn(datatraining,datatesting,Klasifikasi,k=1) Test1 #K=3 (sesuai peneliti) Test3<-knn(datatraining,datatesting,Klasifikasi,k=3) Test3 #K=5 (sesuai peneliti) T library(class) #saat menyimpan data, gunakan penamaan Y, X1, X2, dan X3 (Y untuk variabel kategorik) data=read.table(file.choose(),header=TRUE) data Usia<-c(data$X1) Lama<-c(data$X2) BesarPremi<-c(data$X3) Klasifikasi<-factor(data$Y) Klasifikasi datatraining<-data.frame(Usia,Lama,BesarPremi) datatraining datatesting<-c(30,7,1) #berdasarkan data baru yg akan diprediksi #K=1 (sesuai peneliti) Test1<-knn(datatraining,datatesting,Klasifikasi,k=1) Test1 #K=3 (sesuai peneliti) Test3<-knn(datatraining,datatesting,Klasifikasi,k=3) Test3 #K=5 (sesuai peneliti) Test5<-knn(datatraining,datatesting,Klasifikasi,k=5) Test5 #K=7 (sesuai peneliti) Test7<-knn(datatraining,datatesting,Klasifikasi,k=7) Test7 |