Spaces:
Sleeping
Sleeping
| 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 | |
| 1. **Pilih Tahun dan Semester**: Tentukan periode akademik yang akan diprediksi | |
| 2. **Generate Predictions**: AI menganalisis pola enrollment historis | |
| 3. **Lihat Rekomendasi Kelas**: Berapa kelas yang perlu dibuka untuk setiap mata kuliah | |
| 4. **Review Utilization**: Cek tingkat utilisasi kapasitas kelas | |
| ### Multi-Year Forecasting | |
| 1. **Tentukan Periode Awal**: Tahun dan semester mulai proyeksi | |
| 2. **Pilih Horizon Forecast**: Berapa tahun ke depan (1-5 tahun) | |
| 3. **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) | |
| ```python | |
| @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 | |
| ```python | |
| @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 | |
| ```bash | |
| # 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 | | |