classquota / README.md
muhalwan's picture
Revised version
6a0a429

A newer version of the Gradio SDK is available: 6.2.0

Upgrade
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

  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)

@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