PDP report
target no2_concentration · 7 features · 4 plotted
1 · Overview — where to look
An additive surrogate read off the global curves reproduces 89.3% of the model's predicted variance; adding the regional plots kept by the decision sequence, 95.5%.
Each point is a feature: importance (x) against heterogeneity (y). Bottom-left is ignorable; bottom-right is important and fully described by its mean effect; the top-right corner — important and heterogeneous — is where the mean hides something. An arrow marks each split the decision sequence accepted: from the feature's global point to its weighted-mean point across the subregions.
| # | feature | importance | heterogeneity | #regions | regional analysis |
|---|---|---|---|---|---|
| 1 | cars_per_hour | 0.7413 | 0.1999 | 7 | split found — rejected by the decision sequence → |
| 2 | temperature_at_2m | 0.2547 | 0.1472 | 1 | below the search threshold → |
| 3 | wind_speed | 0.2443 | 0.0977 | 7 | split into 4 regions → |
| 4 | temperature_diff_2m_25m | 0.2076 | 0.1166 | 7 | split into 4 regions → |
| 5 | hour_of_day | 0.1694 | 0.0940 | · | not plotted (below the coverage cut) |
| 6 | wind_direction | 0.0729 | 0.1659 | · | not plotted (below the coverage cut) |
| 7 | day | 0.0508 | 0.0993 | · | not plotted (below the coverage cut) |
The plotted features carry 83% of the total importance mass (target 80%, ceiling top_k = 5).
The decision sequence. Starting from the global curves, each round applies the split with the largest explained-variance gain, measured on top of the splits above it, and stops when no remaining split adds at least 1.0%. A real split (its heterogeneity does drop) can still add nothing — or even hurt, by double-counting — when its variance is already explained by an earlier split.
| step | regions | heterogeneity | explained variance |
|---|---|---|---|
| global effects (GAM) | · | · | 89.3% |
| + split wind_speed (on cars_per_hour, wind_direction) | 4 | 0.193 → 0.098 | +4.0% → 93.3% |
| + split temperature_diff_2m_25m (on cars_per_hour, wind_direction, wind_speed) | 4 | 0.158 → 0.117 | +2.2% → 95.5% |
| rejected · cars_per_hour (on hour_of_day, temperature_at_2m, temperature_diff_2m_25m) | 4 | 0.200 → 0.143 | -0.8% — redundant (variance already explained) |
| rejected · wind_direction (on cars_per_hour, temperature_diff_2m_25m, wind_speed) | 4 | 0.166 → 0.108 | -1.3% — redundant (variance already explained) |
Bar view — importance and heterogeneity
2 · Regional analysis — the final CALM
The selected snapshot: global effects everywhere except the accepted splits. Features in descending importance — a split feature enters as one group at the instance-weighted mean of its subregions. The split features' global counterparts are in the baseline section at the end.
2.1 · cars_per_hour
Global effect
Regional effects
A split on hour_of_day, temperature_at_2m, temperature_diff_2m_25m into 4 regions was found (heterogeneity 0.200 → 0.143), but the decision sequence skips it: it adds no explained variance beyond the splits kept there — the same variance is already read elsewhere. The regional plots are omitted; reproduce them with find_regions.
2.2 · temperature_at_2m
Global effect
Regional effects
Heterogeneity below the threshold — the mean effect tells the whole story; find_regions was skipped.
2.3 · wind_speed
Split on cars_per_hour, wind_direction into 4 regions — worth +4.0% of explained variance on top of the splits above it; importance and heterogeneity here are the instance-weighted means over the subregions. The global counterpart is in the baseline.
Partition tree
Feature 2 - Full partition tree:
🌳 Full Tree Structure:
───────────────────────
wind_speed 🔹 [id: 0 | heter: 0.19 | inst: 400 | w: 1.00]
wind_direction < 127.60 🔹 [id: 1 | heter: 0.12 | inst: 210 | w: 0.53]
cars_per_hour < 7.54 🔹 [id: 2 | heter: 0.11 | inst: 124 | w: 0.31]
cars_per_hour ≥ 7.54 🔹 [id: 3 | heter: 0.08 | inst: 86 | w: 0.21]
wind_direction ≥ 127.60 🔹 [id: 4 | heter: 0.13 | inst: 190 | w: 0.47]
cars_per_hour < 6.74 🔹 [id: 5 | heter: 0.13 | inst: 57 | w: 0.14]
cars_per_hour ≥ 6.74 🔹 [id: 6 | heter: 0.09 | inst: 133 | w: 0.33]
--------------------------------------------------
Feature 2 - Statistics per tree level:
🌳 Tree Summary:
─────────────────
Level 0🔹heter: 0.19
Level 1🔹heter: 0.12 | 🔻0.07 (36.06%)
Level 2🔹heter: 0.10 | 🔻0.03 (20.99%)
2.4 · temperature_diff_2m_25m
Split on cars_per_hour, wind_direction, wind_speed into 4 regions — worth +2.2% of explained variance on top of the splits above it; importance and heterogeneity here are the instance-weighted means over the subregions. The global counterpart is in the baseline.
Partition tree
Feature 3 - Full partition tree:
🌳 Full Tree Structure:
───────────────────────
temperature_diff_2m_25m 🔹 [id: 0 | heter: 0.16 | inst: 400 | w: 1.00]
cars_per_hour < 7.34 🔹 [id: 1 | heter: 0.15 | inst: 193 | w: 0.48]
wind_speed < 3.09 🔹 [id: 2 | heter: 0.13 | inst: 113 | w: 0.28]
wind_speed ≥ 3.09 🔹 [id: 3 | heter: 0.14 | inst: 80 | w: 0.20]
cars_per_hour ≥ 7.34 🔹 [id: 4 | heter: 0.12 | inst: 207 | w: 0.52]
wind_direction < 163.20 🔹 [id: 5 | heter: 0.09 | inst: 104 | w: 0.26]
wind_direction ≥ 163.20 🔹 [id: 6 | heter: 0.11 | inst: 103 | w: 0.26]
--------------------------------------------------
Feature 3 - Statistics per tree level:
🌳 Tree Summary:
─────────────────
Level 0🔹heter: 0.16
Level 1🔹heter: 0.13 | 🔻0.03 (16.24%)
Level 2🔹heter: 0.12 | 🔻0.02 (11.72%)
3 · Global baseline — without regions
What you would believe about the split features without the regional analysis: their global mean effects, with the heterogeneity the accepted splits just explained still hiding inside the band. Compare with their subregions in the regional analysis above.