Implementasi KNN Menggunakan Scikit-Learn: Memprediksi Arah Saham Berdasarkan “Tetangga Terdekat”

Dalam artikel sebelumnya, kita telah mengupas tuntas teori dasar algoritma K-Nearest Neighbors (KNN). Sekarang, mari kita bawa konsep proksimitas ini langsung ke ranah praktis! Kita akan membangun dan menguji kode Python menggunakan pustaka scikit-learn (sklearn) untuk menganalisis performa algoritma KNN dalam memprediksi keputusan pergerakan saham.

Algoritma KNN sangat populer untuk pemodelan sederhana karena sifatnya yang adaptif dan hanya membutuhkan sedikit parameter. Namun, untuk data pasar saham yang dinamis, ada beberapa trik khusus—seperti standardisasi data—yang wajib dilakukan agar model berbasis jarak ini tidak memberikan hasil yang bias.

Berikut adalah panduan lengkap implementasi dan uji performa KNN menggunakan Python.

Persiapan Data & Tantangan Jarak Geometris

Sebelum masuk ke kode, kita perlu mengingat kembali bahwa KNN bekerja dengan mengukur jarak geometris (umumnya Euclidean Distance atau metrik Minkowski dengan p=2) antara data kueri baru dan data historis yang tersimpan.

Dalam data saham, kita sering kali menganalisis indikator dengan skala yang sangat timpang. Misalnya:

  • Return 5 Hari Terakhir: Berfluktuasi antara -10% hingga +10%.
  • Volume Transaksi Harian: Bisa mencapai jutaan lembar saham.

Jika kita langsung memasukkan angka mentah ini ke dalam KNN, volume transaksi yang bernilai jutaan akan mendominasi perhitungan jarak sepenuhnya, membuat persentase return saham menjadi tidak relevan. Oleh karena itu, langkah Standardisasi Fitur menggunakan StandardScaler sangatlah krusial untuk menyeimbangkan bobot setiap fitur.

Langkah Praktis Menulis Kode Python KNN

Saya telah menerbitkan file program lengkap knn_saham_classifier.py yang dapat langsung Anda temukan dan unduh di panel Studio sebelah kanan Anda. Kode ini menggunakan pustaka standar industri seperti scikit-learn, pandas, dan numpy.

Berikut adalah penjelasan per bagian dari alur pembuatan kodenya:

1. Impor Modul scikit-learn yang Dibutuhkan

Untuk membangun pengklasifikasi ini, kita memerlukan beberapa kelas utama dari scikit-learn:

from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import classification_report, confusion_matrix

2. Standardisasi Data Latih & Data Uji

Setelah membagi data menjadi set pelatihan dan pengujian, kita wajib menskalakan fiturnya agar distribusi data memiliki rata-rata (mean) 0 dan standar deviasi 1:

scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

3. Inisialisasi dan Pelatihan Model KNN

Berdasarkan dokumentasi teknis, pengklasifikasi KNN diinisialisasi menggunakan KNeighborsClassifier. Kita menetapkan nilai default K=5 dengan metrik Minkowski dan parameter p=2 yang setara dengan formula jarak garis lurus Euclidean:

# Membangun model KNN Classifier
knn = KNeighborsClassifier(n_neighbors=5, metric='minkowski', p=2)

# Model dilatih (menyimpan dataset ke memori)
knn.fit(X_train_scaled, y_train)

# Melakukan prediksi pada test set
y_pred = knn.predict(X_test_scaled)

Catatan Penting: Karena KNN merupakan lazy learner, perintah knn.fit() di atas sebenarnya tidak melakukan perhitungan matematika yang rumit, melainkan hanya menyimpan data latih ke dalam memori untuk dibandingkan nanti saat proses prediksi (predict) dijalankan.

Menganalisis Hasil Uji Performa Model

Ketika kita menjalankan simulasi model ini pada dataset yang terdiri dari 1.000 sampel pergerakan saham acak (di mana target keputusan BELI dan JUAL disebar secara non-linear), kita memperoleh metrik evaluasi yang sangat menarik:

  • Akurasi Keseluruhan (Accuracy): 90.00%
  • Confusion Matrix:
    • True Negative (Benar Jual): 191
    • False Positive (Salah Beli): 7
    • False Negative (Salah Jual): 18
    • True Positive (Benar Beli): 34

Cara Membaca Hasil Ini:

  1. Akurasi Tinggi: Model berhasil memetakan kedekatan indikator saham dengan sangat baik (mencapai akurasi 90%) karena data non-linear tersebut memiliki batas keputusan (decision boundary) berbasis klaster spasial yang kuat.
  2. Presisi vs Sensitivitas (Recall): Model memiliki presisi keputusan “BELI” yang cukup tinggi (sekitar 83%). Artinya, dari semua rekomendasi beli yang dikeluarkan model, sebagian besar memang tepat sasaran. Ini sangat penting di pasar keuangan untuk meminimalkan salah langkah investasi.

Batasan Penting KNN pada Data Saham Riil

Meskipun model ini menghasilkan tingkat akurasi yang tinggi pada uji coba simulasi, Anda harus tetap waspada terhadap karakteristik asli KNN di pasar nyata:

  • Curse of Dimensionality: Di dunia nyata, Anda mungkin tergoda untuk memasukkan puluhan indikator teknikal (RSI, MACD, Stochastic, Moving Averages, dll.). Menambah terlalu banyak dimensi/fitur justru akan membuat akurasi KNN menurun drastis karena jarak geometris antardata menjadi seragam dan tidak lagi mencerminkan kemiripan yang asli.
  • Beban Penyimpanan Memori: Karena KNN mempertahankan seluruh data historis di dalam memori aktif, model ini akan melambat seiring bertambahnya data transaksi harian baru dari waktu ke waktu.

Kesimpulan

Algoritma KNN dengan pustaka scikit-learn adalah alat bantu visualisasi dan prediksi berbasis kemiripan data yang sangat andal dan mudah dideploy. Selama Anda melakukan prapemrosesan data dengan tepat (menggunakan standardisasi), algoritma tetangga terdekat ini bisa menjadi tolok ukur (baseline) yang solid sebelum Anda mencoba model AI yang lebih rumit.

0 0 votes
Article Rating
0 0 votes
Article Rating
guest
0 Comments
Oldest
Newest Most Voted
Scroll to Top
0
Would love your thoughts, please comment.x
()
x