Pipeline complet de procesare Big Data pentru predicția promovabilității studenților, comparând machine learning centralizat cu Federated Learning (FL) pentru protecția datelor.
Întrebarea de cercetare: Poate Federated Learning atinge o performanță comparabilă cu modelele centralizate, menținând confidențialitatea completă a datelor studenților?
| Dataset | Studenti | AUC Centralizat | AUC Federat | Diferenta |
|---|---|---|---|---|
| OULAD | 28.174 | 0.8055 (GBT) | 0.7934 (FL) | -1.50% |
| xAPI | 480 | 0.9766 (LR) | 0.9537 (FL) | -2.29% |
| UCI | 649 | 0.9647 (LR) | N/A* | - |
*UCI nu a generat suficienți clienți cu min. 30 samples pentru simularea FL.
data/raw/ ← CSV brute (OULAD 443MB + UCI + xAPI)
↓ ingest.py (Spark)
data/interim/ ← Parquet (30.5MB, compresie 93%)
↓ clean.py (Spark)
data/processed/ ← Date curatate + client_id FL
↓ o2_build_analysis_dataset.py (Spark SQL)
data/processed/analysis_dataset/ ← 28.174 profiluri, 9 features
↓ o3_ml.py + o3_flower_federated.py
reports/ ← Rapoarte finale
↓ setup_gcs.py
gs://edu-federated-mihaela ← Google Cloud Storage Data Lake
Reducere date: 8.459.320 înregistrări → 28.174 profiluri unice (reducere 99.67%)
| Feature | Tip | Descriere |
|---|---|---|
| total_clicks | Comportamental | Suma interacțiunilor pe VLE |
| days_active | Comportamental | Zile distincte de activitate |
| avg_score | Comportamental | Media notelor la evaluări |
| clicks_per_day | Derivat | Intensitate medie zilnică |
| engagement | Derivat | total_clicks × days_active |
| num_prev_attempts | Demografic | Încercări anterioare |
| studied_credits | Demografic | Credite înscrise |
| imd_band_num | Demografic | Status socio-economic (0-9) |
| edu_level | Demografic | Nivel educație (0-4) |
Server (agregator)
│
├─► trimite modelul global
│
Client 1 (AAA_2013J) Client 2 (BBB_2013J) ... Client 22
│ antrenează local │ antrenează local
│ datele NU parasesc! │
└── trimite coeficienți ──┘
│
FedAvg (medie ponderată)
│
model global îmbunătățit
5 runde de comunicare, convergență după runda 1 (variație AUC < 0.0001 în rundele 2-5).
.
├── src/
│ ├── ingest.py # O1: CSV → Parquet
│ ├── clean.py # O1: Curățare + feature engineering
│ ├── validate.py # O1: Validare calitate date
│ ├── o2_build_analysis_dataset.py # O2: JOIN + agregare SQL (9 features)
│ ├── o3_eda.py # O3: Analiză exploratorie (3 datasets)
│ ├── o3_ml.py # O3: ML centralizat (LR, RF, GBT)
│ ├── o3_federated_sim.py # O3: FL simulat cu PySpark
│ ├── o3_flower_federated.py # O3: FL real cu Flower + FedAvg
│ ├── flower_client.py # Client Flower (NumPyClient)
│ ├── generate_final_report.py # Generare raport consolidat
│ ├── run_pipeline.py # Orchestrator complet
│ └── utils.py # SparkSession + helpers
├── configs/
│ └── config.yaml # Căi și parametri
├── setup_gcs.py # Upload Google Cloud Storage
├── reset_and_download.py # Download date (OULAD + UCI + xAPI)
├── requirements.txt
└── README.md
- Python 3.8+
- Java 8, 11 sau 17 (pentru Apache Spark)
- Windows / Linux / macOS
git clone https://github.com/Miha200101/BigData_FederatedLearning.git
cd BigData_FederatedLearning
python -m venv .venv
.venv\Scripts\activate # Windows
# source .venv/bin/activate # Linux/macOS
pip install -r requirements.txt
pip install openpyxlpython reset_and_download.pyDescarcă automat OULAD (~443MB), UCI Student Performance și xAPI-Edu-Data de pe Kaggle. Dacă nu există cont Kaggle, se generează date sintetice pentru testare.
python src/run_pipeline.pyOpțiuni disponibile:
python src/run_pipeline.py --skip-download # datele există deja
python src/run_pipeline.py --skip-upload # fără upload GCS
python src/run_pipeline.py --only-flower # doar Flower FL + raportTimp estimat: ~10 minute pe o mașină locală (i7, 16GB RAM)
reports/Raport_Final.txt ← raport complet
reports/O3_ml_report.txt ← ML centralizat + matrice confuzie
reports/O3_flower_report.txt ← Flower FL comparativ
reports/flower_results.json ← date brute JSON
reports/O3_eda_report.txt ← analiză exploratorie
python setup_gcs.py --upload # upload toate datele
python setup_gcs.py --verify # verifică bucket-ulBucket: gs://edu-federated-mihaela (regiune: europe-west1)
| Tehnologie | Versiune | Rol |
|---|---|---|
| Apache Spark (PySpark) | 3.4.4 | ETL, ML centralizat |
| Flower (flwr) | 1.26.1 | Federated Learning |
| Ray | 2.51.1 | Backend simulare Flower |
| scikit-learn | 1.8.0 | ML pentru UCI și xAPI |
| PyArrow | 23.0.1 | Citire/scriere Parquet |
| Google Cloud Storage | - | Data Lake |
- OULAD – Open University Learning Analytics Dataset
- UCI Student Performance – Kaggle
- xAPI-Edu-Data – Kaggle