# WP21 — Light extraction protocol for ML / AVM predictive studies (AI synthesis, Section 9) Input: dumps or PDFs of records coded ELIGIBLE_ML_PREDICTIVE_ONLY (and ELIGIBLE_HEDONIC with ai_ml_flag = 1). Output: one row per study in `data/extracted/ai/.json`: ```json {"record_id": "", "short_ref": "Author (year)", "country": "", "city": "", "property_type": "", "price_type": "", "n_obs": 0, "sample_period": "", "data_source": "", "methods_compared": ["OLS hedonic", "random forest", "XGBoost", "CNN", ...], "best_method": "", "metric": "R2|RMSE|MAPE|MAE|RMSLE|other", "best_value": 0.0, "hedonic_value": null, "test_set": "holdout|k-fold|spatial CV|none|unknown", "features_ai": "text sentiment|street-view CNN|satellite|listing text embeddings|none", "incremental_ai_gain": null, "incremental_ai_metric": "", "marginal_effects": "none|SHAP|PDP|coefficients", "notes": "", "confidence": "high|medium|low"} ``` Rules: record the metric exactly as printed on the SAME test set for the best ML model and for the hedonic/OLS benchmark if one is reported (`hedonic_value`); `incremental_ai_gain` = improvement of the metric when AI-derived features (text, images) are added to a conventional feature set, only if the paper reports that comparison; never compare across papers; `marginal_effects` records whether interpretable effects are reported (SHAP, partial dependence, coefficients). Leave fields null when not printed.