Spaces:
Sleeping
Sleeping
A newer version of the Gradio SDK is available:
6.2.0
metadata
title: SKS Course Enrollment Predictor
emoji: 📊
colorFrom: blue
colorTo: green
sdk: gradio
sdk_version: 4.36.1
app_file: app.py
pinned: false
SKS Course Enrollment & Class Capacity Prediction System
Sistem prediksi jumlah kelas yang perlu dibuka berdasarkan forecasting enrollment dengan mempertimbangkan kapasitas maksimum per kelas menggunakan Prophet time series forecasting.
How It Works
Single Semester Prediction
- Pilih Tahun dan Semester: Tentukan periode akademik yang akan diprediksi
- Generate Predictions: AI menganalisis pola enrollment historis
- Lihat Rekomendasi Kelas: Berapa kelas yang perlu dibuka untuk setiap mata kuliah
- Review Utilization: Cek tingkat utilisasi kapasitas kelas
Multi-Year Forecasting
- Tentukan Periode Awal: Tahun dan semester mulai proyeksi
- Pilih Horizon Forecast: Berapa tahun ke depan (1-5 tahun)
- Lihat Tren: Bagaimana kebutuhan kelas berevolusi dari waktu ke waktu
Class Capacity Logic
Contoh skenario:
- PDST Course: 10-15 mahasiswa (2023) → 40 mahasiswa (2024) → Proyeksi terus naik
- Kapasitas Max: 50 mahasiswa per kelas
- Rekomendasi: 1 kelas (jika ≤50), 2 kelas (jika 51-100), dst.
Calculation Formula
Jumlah Kelas = ⌈Prediksi Enrollment / Kapasitas per Kelas⌉
Prediction Strategy
Sistem menggunakan beberapa strategi forecasting:
- Prophet Logistic Growth: Untuk mata kuliah dengan data historis cukup, menggunakan kapasitas sebagai upper bound (cap)
- Trend-Based Fallback: Untuk prediksi Prophet yang tidak realistis
- Mean Fallback: Untuk mata kuliah dengan data terbatas
- Cold Start: Untuk mata kuliah baru tanpa data historis
Technical Stack
- Framework: Gradio untuk UI
- ML Model: Facebook Prophet dengan logistic growth
- Data Processing: Pandas, NumPy
- Visualization: Matplotlib, Seaborn
- Deployment: Hugging Face Spaces
Configuration
Class Capacity Settings (config.py)
@dataclass
class ClassCapacityConfig:
DEFAULT_CLASS_CAPACITY: int = 50 # Max students per class
MIN_STUDENTS_TO_OPEN_CLASS: int = 10 # Minimum to open a class
CAPACITY_WARNING_THRESHOLD: float = 0.8 # 80% utilization warning
ENABLE_CAPACITY_CONSTRAINTS: bool = True
Multi-Year Forecast Settings
@dataclass
class MultiYearForecastConfig:
FORECAST_YEARS_AHEAD: int = 3 # Years to forecast
MAX_YEARLY_GROWTH_RATE: float = 0.5 # 50% max growth/year
MIN_YEARLY_GROWTH_RATE: float = -0.3 # 30% max decline/year
Model Performance
Model divalidasi melalui backtesting pada data historis:
Enrollment Prediction
- Mean Absolute Error (MAE): ~31 students
- Root Mean Squared Error (RMSE): ~49 students
Class Count Prediction
- Class MAE: ~0.5 classes
- Exact Class Match: ~70%
- Within ±1 Class: ~95%
🔧 Usage
Local Development
# Install dependencies
pip install -r requirements.txt
# Run the app
python app.py
Environment Variables
HF_TOKEN: Hugging Face token untuk akses private dataset
📝 Output Columns
Prediksi Semester
| Column | Description |
|---|---|
| Kode MK | Kode mata kuliah |
| Nama MK | Nama mata kuliah |
| Prediksi | Prediksi jumlah mahasiswa |
| Jumlah Kelas | Rekomendasi jumlah kelas dibuka |
| Kapasitas/Kelas | Kapasitas maksimum per kelas |
| Total Kuota | Total kapasitas (Jumlah Kelas × Kapasitas) |
| Utilization % | Persentase utilisasi kapasitas |
| Status | BUKA/TUTUP |
| Confidence | high/medium/low |
| Strategy | Metode prediksi yang digunakan |
Proyeksi Multi-Tahun
| Column | Description |
|---|---|
| Tahun | Tahun prediksi |
| Kode MK | Kode mata kuliah |
| Nama MK | Nama mata kuliah |
| Prediksi | Prediksi enrollment |
| Kelas | Jumlah kelas dibutuhkan |
| Kapasitas | Total kapasitas tersedia |