classquota / README.md
muhalwan's picture
Revised version
6a0a429
---
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 |