-
feat(02-01): feature matrix assembly + calibrated LightGBM classifier
- model/features.py: load_split, load_anomaly_features, CLASSES (10), CLASSIFIER_FEATURES (20), ANOMALY_FEATURES (9), CATEGORICAL_FEATURES (8)
- bssid + timestamp excluded from features (Pitfall 2 leakage guard)
- model/train_classifier.py: LGBM_PARAMS (D-PUB-07 fixed defaults + Pitfall 1 determinism trio); train_calibrated_classifier (single-wrap CalibratedClassifierCV(method='isotonic', cv=5) per OQ-2 / D-CAL-02); train_raw_classifier for D-CAL-06 dual reliability grid
- 9/9 tests passing (5 features + 4 calibrated classifier on 1k-row smoke subset)
- mypy + ruff clean