--- 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 |