5.3 KiB
5.3 KiB
🤖 Machine Learning Model
Deskripsi
Model Machine Learning untuk clustering alumni berdasarkan kompetensi menggunakan Text Mining (TF-IDF) dan K-Means Clustering.
Struktur Folder
Model/
├── __init__.py
├── main.py # Pipeline utama
├── preprocessing/
│ └── text_preprocessing.py # Text preprocessing
├── feature_engineering/
│ └── tfidf.py # TF-IDF extraction
├── clustering/
│ └── kmeans.py # K-Means clustering
├── utils/
├── data/
│ ├── raw/ # Data mentah
│ ├── processed/ # Data sudah diproses
│ └── result/ # Hasil clustering
└── README.md
Instalasi Dependencies
pip install pandas scikit-learn nltk sastrawi
Penggunaan Dasar
1. Import Pipeline
import pandas as pd
from Model.main import AlumniClusteringPipeline
# Siapkan data
data = pd.DataFrame({
'nama': ['Ali', 'Budi', 'Citra'],
'perusahaan': ['Google', 'Tokopedia', 'Gojek'],
'jabatan': ['Engineer', 'Analyst', 'Manager']
})
# Jalankan pipeline
pipeline = AlumniClusteringPipeline(n_clusters=3)
result = pipeline.fit_transform(data)
print(result)
2. Auto-Detect K Optimal
pipeline = AlumniClusteringPipeline(n_clusters=3, auto_k=True)
result = pipeline.fit_transform(data)
3. Simpan Hasil
# Simpan ke CSV
result.to_csv('hasil_clustering.csv', index=False)
# Lihat distribusi cluster
print(result['cluster_label'].value_counts())
# Lihat ringkasan
summary = pipeline.get_cluster_summary(result)
print(summary)
Input Model
Model menerima DataFrame dengan kolom:
| Kolom | Deskripsi |
|---|---|
nama |
Nama lengkap alumni |
perusahaan |
Nama perusahaan/instansi |
jabatan |
Jabatan/posisi |
Output Model
DataFrame dengan kolom tambahan:
| Kolom | Deskripsi |
|---|---|
cluster |
Nomor cluster (0, 1, 2, ...) |
cluster_label |
Label cluster ("Cluster_0", "Cluster_1", ...) |
CLI Usage
cd Model
python main.py [input.csv] [n_clusters] [output.csv]
Contoh:
python main.py ../data/raw/alumni.csv 3 ../data/result/hasil.csv
Integrasi dengan Backend
Model sudah diintegrasikan dengan Backend FastAPI melalui ml_service.py.
Endpoint untuk clustering tersedia di /api/v1/clustering.
Lihat Backend/app/services/ml_service.py untuk detail.
Update Progress (2026-08-28)
Pipeline ML Selesai (6 Tahap)
| Tahap | Script | Fungsi |
|---|---|---|
| 1 | column_mapping.json |
Mapping kolom 2019-2025 |
| 2 | merge_data.py |
Merge data multi-file CSV |
| 3 | text_preprocessing.py |
Text preprocessing + Sastrawi |
| 4 | clustering.py |
TF-IDF + K-Means K=4 |
| 5 | interpretasi.py |
Interpretasi C0-C3 |
| 6 | dashboard.py |
Generate visualisasi |
Cara Menjalankan Pipeline
cd Model/preprocessing
python merge_data.py # Tahap 1-2
python text_preprocessing.py # Tahap 3
python clustering.py # Tahap 4
python interpretasi.py # Tahap 5
python dashboard.py # Tahap 6
Data Sources
| Tahun | File CSV | Records |
|---|---|---|
| 2019 | Data_2019_Tracer_study.csv | 30 |
| 2020 | Data_2020_Tracer_study.csv | 31 |
| 2021 | Data_2021_Tracer_study.csv | 237 |
| 2022 | Data_2022_Tracer_study.csv | 211 |
| 2023 | Data_2023_Tracer_study.csv | 268 |
| 2024 | Data_2024_Tracer_study.csv | 361 |
| 2025 | Data_2025_Tracer_study_*.csv (5 file) | 458 |
| Total | 1596 |
Hasil
- Total Alumni: 1596
- Data untuk Clustering: 1114
- K-Means K: 4 (sesuai PRD)
- Silhouette Score: 0.1034
- TF-IDF Features: 500
Distribusi Cluster
| Cluster | Jumlah | % | Top Terms |
|---|---|---|---|
| 0 | 587 | 52.7% | perintah, bumn, bnpp, jember, staff |
| 1 | 146 | 13.1% | freelance, kerja lepas |
| 2 | 183 | 16.4% | wiraswasta, usaha sendiri |
| 3 | 198 | 17.8% | swasta, usaha swasta, indonesia |
Distribusi Kategori C0-C3
| Kategori | Deskripsi | Jumlah | % |
|---|---|---|---|
| C0 | Sesuai Profil Lulusan | 223 | 13.97% |
| C1 | Bidang Diketahui (BUMN, pemerintah, dll) | 385 | 24.12% |
| C2 | Bidang Tidak Jelas | 506 | 31.70% |
| C3 | Belum/Tidak Bekerja | 482 | 30.20% |
Catatan Hasil
- C0 (14%): Alumni bekerja di bidang sesuai prodi (IT, jaringan, dll)
- C1 (24%): Bekerja di bidang non-teknis (BUMN, pemerintah, dll)
- C2 (32%): Bidang pekerjaan tidak teridentifikasi jelas
- C3 (30%): Alumni belum/tidak bekerja saat tracer study
Distribusi per Prodi
| Prodi | Kode | C0 | C1 | C2 | C3 |
|---|---|---|---|---|---|
| TIF | 55301 | 13 | 135 | 365 | 169 |
| MIF | 57401 | 10 | 66 | 226 | 136 |
| TKK | 56401 | 13 | 48 | 217 | 122 |
Output Files
Model/data/
├── standardized/
│ └── unified_dataset.csv # Data setelah merge
├── processed/
│ ├── dataset_untuk_clustering.csv
│ ├── clustering_results.csv
│ ├── model_info.json
│ └── dashboard/
│ └── dashboard.html # Dashboard interaktif
└── result/
└── interpretasi_results.csv # Hasil C0-C3