Sistem Rekomendasi Jurusan SMK dengan KNN dan NLP

Aplikasi web berbasis Flask yang membantu siswa SMK menentukan jurusan yang sesuai berdasarkan deskripsi bakat dan minat menggunakan algoritma K-Nearest Neighbors (KNN) dan NLP Bahasa Indonesia. Sistem melakukan preprocessing teks (stemming, stopwords removal), vektorisasi TF-IDF, dan klasifikasi KNN untuk menghasilkan rekomendasi 5 jurusan teratas beserta skor kepercayaan.

Python 3.10Flask 3.1SQLAlchemy 2.0MySQL (PyMySQL)scikit-learn 1.6K-Nearest Neighbor (KNN)Pandas 2.2NumPy 2.2NLTK 3.9Sastrawi 1.0TF-IDF VectorizerFlask-JWT-ExtendedFlask-BcryptFlask-Migrate (Alembic)Bootstrap 5.3jQueryDataTablesApexChartsjsPDFjsPDF AutoTable
GitHub

Source Code

Sistem Rekomendasi Jurusan SMK dengan KNN dan NLP

Pendahuluan

Proyek ini adalah sistem rekomendasi jurusan untuk SMK Senopati yang dikembangkan menggunakan Python Flask di sisi backend dan Bootstrap 5 di sisi frontend. Siswa cukup menuliskan deskripsi bebas tentang bakat dan minat mereka dalam Bahasa Indonesia, kemudian sistem akan memproses teks tersebut melalui pipeline NLP (case folding, tokenisasi, stemming dengan Sastrawi, dan stopwords removal), mengonversinya menjadi vektor numerik menggunakan TF-IDF, dan mengklasifikasikannya dengan algoritma K-Nearest Neighbors (k=5). Hasil akhir berupa 5 rekomendasi jurusan teratas dari 5 pilihan jurusan yang tersedia (TKJ, RPL, Manajemen, TKR, TSM) lengkap dengan persentase skor kepercayaan, yang dapat diunduh dalam format PDF.

Fitur

Autentikasi Multi-Role*

ogin dan register dengan dua peran: admin (guru) dan siswa, menggunakan JWT token yang expires dalam 1 jam

Input Data Siswa

Form pendaftaran data pribadi siswa (nama, NISN, jenis kelamin, alamat sekolah) dengan validasi NISN unik

Deskripsi Bakat Bahasa Indonesi

Siswa menuliskan minat dan bakat dalam teks bebas Bahasa Indonesia yang diproses dengan NLP

ekomendasi Jurusan ML

Pipeline machine learning lengkap: preprocessing teks (stemming Sastrawi + stopwords NLTK), vektorisasi TF-IDF, dan klasifikasi KNN (k=5)

Top 5 Hasil dengan Skor*

Menampilkan 5 rekomendasi jurusan teratas (TKJ, RPL, Manajemen, TKR, TSM) dengan persentase kepercayaan

Deteksi Deskripsi Tidak Jelas

Jika skor kepercayaan di bawah threshold 20%, sistem meminta siswa mendeskripsikan bakat dengan lebih jelas

Riwayat Prediksi

Siswa dapat melihat seluruh riwayat hasil rekomendasi yang pernah dibuat

Download PDF

Hasil rekomendasi dapat diunduh dalam format PDF menggunakan jsPDF dengan tabel skor

Manajemen Data oleh Admin

Admin (guru) dapat melihat seluruh data siswa beserta rekomendasi jurusan, mengedit, dan menghapus data

Dataset 2000 Data Training

Model dilatih dengan 2000 sampel data narasi dan jurusan yang disimpan dalam file Excel - **Dashboard Visual** — Tampilan dashboard dengan DataTables untuk tabel interaktif dan ApexCharts untuk visualisasi data

How to Start this project

1. Clone using git

git clone https://github.com/username/knn-nlp.git

2. Install dependencies

python -m venv venv source venv/bin/activate  # Linux/Mac venv\Scripts\activate     # Windows  pip install -r requirements.txt  # Setup database MySQL cp .env.example .env # Isi DATABASE_URL dan JWT_SECRET_KEY di .env  # Jalankan migrasi database flask db upgrade

3. Run development server

python app.py # atau flask run --debug