PDP report

target no2_concentration · 7 features · 4 plotted

data 400 × 77 continuousmodel output 3.69 ± 0.585 in [2.03, 4.86]0.656 on this subsample
method pdptop_k 5coverage 0.8000heter_threshold 0.1577min_r2_gain 0.0100finder bestnof_instances 2000random_state 21

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%.

explained-variance ledger

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 triage
#featureimportanceheterogeneity#regionsregional analysis
1cars_per_hour0.74130.19997split found — rejected by the decision sequence →
2temperature_at_2m0.25470.14721below the search threshold →
3wind_speed0.24430.09777split into 4 regions →
4temperature_diff_2m_25m0.20760.11667split into 4 regions →
5hour_of_day0.16940.0940·not plotted (below the coverage cut)
6wind_direction0.07290.1659·not plotted (below the coverage cut)
7day0.05080.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.

stepregionsheterogeneityexplained variance
global effects (GAM)··89.3%
+ split wind_speed (on cars_per_hour, wind_direction)40.193 → 0.098+4.0% → 93.3%
+ split temperature_diff_2m_25m (on cars_per_hour, wind_direction, wind_speed)40.158 → 0.117+2.2% → 95.5%
rejected · cars_per_hour (on hour_of_day, temperature_at_2m, temperature_diff_2m_25m)40.200 → 0.143-0.8% — redundant (variance already explained)
rejected · wind_direction (on cars_per_hour, temperature_diff_2m_25m, wind_speed)40.166 → 0.108-1.3% — redundant (variance already explained)
Bar view — importance and heterogeneityimportance 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

importance 0.7413heterogeneity 0.1999regions 1

Global effect

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

importance 0.2547heterogeneity 0.1472regions 1

Global effect

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

importance 0.2443heterogeneity 0.0977regions 4

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%)


wind_speed where (wind_direction < 127.60) and (cars_per_hour < 7.54)
heterogeneity 0.1050 · −46% vs global · n=124
wind_speed where (wind_direction < 127.60) and (cars_per_hour ≥ 7.54)
heterogeneity 0.0797 · −59% vs global · n=86
wind_speed where (wind_direction ≥ 127.60) and (cars_per_hour < 6.74)
heterogeneity 0.1299 · −33% vs global · n=57
wind_speed where (wind_direction ≥ 127.60) and (cars_per_hour ≥ 6.74)
heterogeneity 0.0887 · −54% vs global · n=133

2.4 · temperature_diff_2m_25m

importance 0.2076heterogeneity 0.1166regions 4

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%)


temperature_diff_2m_25m where (cars_per_hour < 7.34) and (wind_speed < 3.09)
heterogeneity 0.1336 · −15% vs global · n=113
temperature_diff_2m_25m where (cars_per_hour < 7.34) and (wind_speed ≥ 3.09)
heterogeneity 0.1363 · −14% vs global · n=80
temperature_diff_2m_25m where (cars_per_hour ≥ 7.34) and (wind_direction < 163.20)
heterogeneity 0.0910 · −42% vs global · n=104
temperature_diff_2m_25m where (cars_per_hour ≥ 7.34) and (wind_direction ≥ 163.20)
heterogeneity 0.1084 · −31% vs global · n=103

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.

wind_speed

global importance 0.2594global heterogeneity 0.1934
wind_speed global effect (baseline)

temperature_diff_2m_25m

global importance 0.2453global heterogeneity 0.1577
temperature_diff_2m_25m global effect (baseline)