Lewati ke konten utama

K-Nearest Neighbors (KNN) Classification dengan scikit-learn

Artikel ini membahas cara dan kapan menggunakan klasifikasi k-nearest neighbors dengan scikit-learn. Berfokus pada konsep, alur kerja, dan contoh. Kami juga membahas metrik jarak dan cara memilih nilai k terbaik menggunakan cross-validation.
Diperbarui 5 Jun 2026  · 14 mnt baca

Tutorial ini akan membahas konsep, alur kerja, dan contoh dari algoritma k-nearest neighbors (kNN). Ini adalah model supervised yang populer untuk klasifikasi maupun regresi dan berguna untuk memahami fungsi jarak, sistem voting, serta optimasi hiperparameter.

Untuk mendapatkan hasil maksimal dari tutorial ini, Anda sebaiknya memiliki pengetahuan dasar Python dan pengalaman bekerja dengan DataFrame. Akan lebih baik lagi jika Anda sudah sedikit familiar dengan sintaks scikit-learn. kNN sering disalahartikan sebagai metode unsupervised, k-Means Clustering. Jika Anda tertarik dengan itu, lihat k-Means Clustering di Python dengan scikit-learn. Anda juga bisa langsung mulai dengan mendaftar kursus machine learning in python kami, yang membahas kNN lebih mendalam. 

Latihan (KNN) Classification dengan latihan praktis ini.

Meskipun kNN dapat digunakan untuk klasifikasi dan regresi, artikel ini akan berfokus pada membangun model klasifikasi. Klasifikasi dalam machine learning adalah tugas supervised learning yang melibatkan prediksi label kategorikal untuk suatu titik data masukan. Algoritma dilatih pada dataset berlabel dan menggunakan fitur masukan untuk mempelajari pemetaan antara input dan label kelas yang sesuai. Kita dapat menggunakan model terlatih untuk memprediksi data baru yang belum pernah dilihat. Anda juga dapat menjalankan kode untuk tutorial ini dengan membuka buku kerja DataLab ini. 

Gambaran Umum K-Nearest Neighbors

Algoritma kNN dapat dianggap sebagai sistem voting, di mana label kelas mayoritas menentukan label kelas dari titik data baru di antara ‘k’ tetangga terdekatnya (k adalah bilangan bulat) di ruang fitur. Bayangkan sebuah desa kecil dengan beberapa ratus penduduk, dan Anda harus memutuskan partai politik mana yang akan Anda pilih. Untuk itu, Anda mungkin mendatangi tetangga terdekat dan menanyakan partai politik yang mereka dukung. Jika mayoritas dari ‘k’ tetangga terdekat Anda mendukung partai A, maka kemungkinan besar Anda juga akan memilih partai A. Ini mirip dengan cara kerja kNN, di mana label kelas mayoritas menentukan label kelas titik data baru di antara k tetangga terdekatnya.

Mari kita dalami dengan contoh lain. Bayangkan Anda memiliki data tentang buah, khususnya anggur dan pir. Anda memiliki skor seberapa bulat buah tersebut dan diameternya. Anda memutuskan untuk memplot ini pada sebuah grafik. Jika seseorang memberikan buah baru, Anda bisa memplotnya juga, lalu mengukur jarak ke k (sebuah angka) titik terdekat untuk menentukan itu buah apa. Pada contoh di bawah, jika kita memilih mengukur tiga titik, kita dapat mengatakan tiga titik terdekat adalah pir, jadi saya 100% yakin ini adalah pir. Jika kita memilih mengukur empat titik terdekat, tiga adalah pir sementara satu anggur, sehingga kita akan mengatakan kita 75% yakin ini adalah pir. Kita akan membahas cara menemukan nilai k terbaik dan berbagai cara mengukur jarak nanti di artikel ini.image2.png

Dataset

Untuk mengilustrasikan algoritma kNN lebih lanjut, mari kita kerjakan studi kasus yang mungkin Anda temui saat bekerja sebagai data scientist. Misalkan Anda adalah data scientist di sebuah peritel online, dan Anda ditugaskan mendeteksi transaksi penipuan. Satu-satunya fitur yang Anda miliki saat ini adalah:

  • dist_from_home: Jarak antara lokasi rumah pengguna dan tempat transaksi dilakukan.
  • purchase_price_ratio: rasio antara harga barang yang dibeli pada transaksi ini terhadap median harga pembelian pengguna tersebut.

Data memiliki 39 observasi yang merupakan transaksi individual. Dalam tutorial ini, kita diberikan dataset pada variabel df, tampilannya seperti ini:

 
0
2.1
6.4
1
1
3.8
2.2
1
2
15.7
4.4
1
3
26.7
4.6
1
4
10.7
4.9
1

Alur Kerja k-Nearest Neighbors

Untuk menyesuaikan dan melatih model ini, kita akan mengikuti infografik The Machine Learning Workflow

Infographic.png

Unduh infografik alur kerja machine learning 

Namun, karena data kita cukup bersih, kita tidak akan menjalankan setiap langkah. Kita akan melakukan hal-hal berikut:

  • Rekayasa fitur
  • Membagi data
  • Melatih model
  • Tuning hiperparameter
  • Menilai kinerja model

Memvisualisasikan Data

Mari mulai dengan memvisualisasikan data menggunakan Matplotlib; kita dapat memplot dua fitur kita dalam scatterplot.

sns.scatterplot(x=df['dist_from_home'],y=df['purchase_price_ratio'], hue=df['fraud'])

Seperti yang terlihat, ada perbedaan yang jelas di antara transaksi ini, dengan transaksi penipuan bernilai jauh lebih tinggi dibandingkan median pesanan pelanggan. Pola terkait jarak dari rumah agak sulit ditafsirkan, dengan transaksi non-penipuan umumnya lebih dekat ke rumah namun memiliki beberapa outlier. 

image4.png

Menormalisasi & Membagi Data

Saat melatih model machine learning apa pun, penting untuk membagi data menjadi data latih dan data uji. Data latih digunakan untuk menyesuaikan model. Algoritma menggunakan data latih untuk mempelajari hubungan antara fitur dan target. Ia mencoba menemukan pola dalam data latih yang dapat digunakan untuk membuat prediksi pada data baru yang belum pernah dilihat. Data uji digunakan untuk mengevaluasi kinerja model. Model diuji pada data uji dengan menggunakannya untuk membuat prediksi dan membandingkan prediksi ini dengan nilai target aktual. 

Saat melatih classifier kNN, sangat penting untuk menormalisasi fitur. Ini karena kNN mengukur jarak antar titik. Default-nya adalah menggunakan Jarak Euclidean, yaitu akar kuadrat dari jumlah selisih kuadrat antara dua titik. Dalam kasus kita, purchase_price_ratio berada antara 0 dan 8 sementara dist_from_home jauh lebih besar. Jika kita tidak menormalisasi ini, perhitungan kita akan sangat dipengaruhi oleh dist_from_home karena angkanya lebih besar.

Kita sebaiknya menormalisasi data setelah membaginya menjadi set latih dan uji. Ini untuk mencegah ‘data leakage’ karena normalisasi akan memberikan informasi tambahan tentang set uji jika kita menormalisasi semua data sekaligus.

Kode berikut membagi data menjadi train/test split, lalu menormalisasi menggunakan standard scaler dari scikit-learn. Kita terlebih dahulu memanggil .fit_transform() pada data latih, yang menyesuaikan scaler kita ke mean dan standar deviasi data latih. Kita kemudian menerapkannya ke data uji dengan memanggil .transform(), yang menggunakan nilai yang telah dipelajari sebelumnya.

# Split the data into features (X) and target (y)
X = df.drop('fraud', axis=1)
y = df['fraud']

# Split the data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# Scale the features using StandardScaler
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

Menyesuaikan dan Mengevaluasi Model

Sekarang kita siap melatih model. Untuk ini, kita akan menggunakan nilai tetap 3 untuk k, tetapi kita perlu mengoptimalkannya nanti. Pertama, kita membuat instance model kNN, lalu menyesuaikannya dengan data latih. Kita meneruskan baik fitur maupun variabel target agar model dapat belajar.

knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

Model sekarang telah dilatih! Kita dapat membuat prediksi pada dataset uji, yang nantinya dapat kita gunakan untuk memberi skor pada model.

y_pred = knn.predict(X_test)

Cara paling sederhana untuk mengevaluasi model ini adalah menggunakan akurasi. Kita memeriksa prediksi terhadap nilai aktual di set uji dan menghitung berapa banyak yang benar diprediksi model.

accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
Accuracy: 0.875

Ini skor yang cukup baik! Namun, kita mungkin bisa lebih baik dengan mengoptimalkan nilai k.

Menggunakan Cross Validation untuk Mendapatkan Nilai k Terbaik

Sayangnya, tidak ada cara ajaib untuk menemukan nilai k terbaik. Kita harus melakukan loop melalui banyak nilai yang berbeda, lalu menggunakan penilaian terbaik kita.

Pada kode di bawah, kita memilih rentang nilai untuk k dan membuat daftar kosong untuk menyimpan hasil. Kita menggunakan cross-validation untuk menemukan skor akurasi, yang berarti kita tidak perlu membuat train/test split, tetapi kita tetap perlu melakukan skala pada data kita. Lalu kita melakukan loop atas nilai-nilai tersebut dan menambahkan skor ke daftar.

Untuk menerapkan cross-validation, kita menggunakan cross_val_score dari scikit-learn. Kita meneruskan instance model kNN, bersama data dan jumlah split yang akan dibuat. Pada kode di bawah, kita menggunakan lima split yang berarti model akan membagi data menjadi lima kelompok berukuran sama dan menggunakan 4 untuk melatih serta 1 untuk menguji hasilnya. Ia akan melakukan loop melalui setiap kelompok dan memberikan skor akurasi, yang kita rata-rata untuk menemukan model terbaik.

k_values = [i for i in range (1,31)]
scores = []

scaler = StandardScaler()
X = scaler.fit_transform(X)

for k in k_values:
    knn = KNeighborsClassifier(n_neighbors=k)
    score = cross_val_score(knn, X, y, cv=5)
    scores.append(np.mean(score))

Kita dapat memplot hasilnya dengan kode berikut

sns.lineplot(x = k_values, y = scores, marker = 'o')
plt.xlabel("K Values")
plt.ylabel("Accuracy Score")

Dari grafik, terlihat bahwa k = 9, 10, 11, 12, dan 13 semuanya memiliki skor akurasi tepat di bawah 95%. Karena ini seri untuk skor terbaik, disarankan menggunakan nilai k yang lebih kecil. Alasannya, saat menggunakan nilai k yang lebih tinggi, model akan menggunakan lebih banyak titik data yang lebih jauh dari yang asli. Opsi lain adalah mengeksplorasi metrik evaluasi lainnya.

image3.png

Metrik Evaluasi Lainnya

Sekarang kita dapat melatih model menggunakan nilai k terbaik dengan kode di bawah.

best_index = np.argmax(scores)
best_k = k_values[best_index]

knn = KNeighborsClassifier(n_neighbors=best_k)
knn.fit(X_train, y_train)

kemudian evaluasi dengan akurasi, presisi, dan recall (perhatikan hasil Anda dapat berbeda karena pengacakan)

y_pred = knn.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)

print("Accuracy:", accuracy)
print("Precision:", precision)
print("Recall:", recall)
Accuracy: 0.875
Precision: 0.75
Recall: 1.0

Tingkatkan ke Level Berikutnya





Topik
Terkait

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat Lebih BanyakLihat Lebih Banyak