5 Results
5.1 Segmentation comparison
Tightening the LSMS parameters from the coarse to the fine setting roughly quintupled the segment count and had a large positive effect on accuracy:
| Metric | Coarse (60k segs) | Fine (316k segs) | Change |
|---|---|---|---|
| px / segment | 485 | 93 | −5× |
| Training rows | 373 | 762 | +104% |
| Holdout OA | 0.852 | 0.873 | +2.1pp |
| Holdout kappa | 0.825 | 0.851 | +2.6pp |
| CV OA | 0.810 ± 0.049 | 0.887 ± 0.017 | +7.7pp, stdev ÷3 |
| CV kappa | 0.775 ± 0.059 | 0.867 ± 0.020 | +9.2pp |
| Top-20 CV OA | 0.748 ± 0.046 | 0.887 ± 0.020 | +13.9pp |
Two effects compound: finer segments align better with real-world boundaries (a single coarse segment no longer spans both forest and clearing), and more sample points land in unique segments rather than being collapsed by majority vote — effectively doubling the training set.
The CV standard deviation dropping from ±4.9pp to ±1.7pp is especially meaningful: the fine model is far more stable across folds.
5.2 L1 accuracy (8-class legacy scheme, 2026-05-02)
{
"n_segments": 316209,
"n_training_rows": 762,
"n_features_total": 591,
"all_features": {
"holdout_accuracy": 0.873,
"holdout_kappa": 0.851,
"cv_accuracy_mean": 0.887,
"cv_accuracy_std": 0.017,
"cv_kappa_mean": 0.867
},
"top_20": {
"holdout_accuracy": 0.873,
"holdout_kappa": 0.852,
"cv_accuracy_mean": 0.887,
"cv_kappa_mean": 0.867
}
}Top-20 matches full-feature performance — consistent with model saturation once segments are homogeneous.
5.3 L1 accuracy (7-class hierarchical scheme, 2026-05-03)
Dropping Bareland raised all metrics:
| Metric | 8-class | 7-class | Change |
|---|---|---|---|
| Holdout OA | 0.873 | 0.895 | +2.2pp |
| Holdout kappa | 0.851 | 0.875 | +0.024 |
| CV OA | 0.887 ± 0.017 | 0.920 ± 0.016 | +3.3pp |
| CV kappa | 0.867 ± 0.020 | 0.905 ± 0.019 | +0.038 |
| Top-20 holdout | 0.873 | 0.928 | +5.5pp |
5.3.1 Per-class F1 (228 validation segments)
| Class | F1 | Notes |
|---|---|---|
| Waterbody | 0.93 | |
| Paddy | 0.89 | |
| Built-up | 0.90 | |
| Others | 0.97 | |
| Dense Vegetation | 0.83 | Split into subtypes at L2 |
| Sparse Vegetation | 0.82 | +0.25 vs 8-class coarse |
| Crops | 0.91 | +0.24 vs 8-class coarse |
Every class reached F1 ≥ 0.82. Sparse Vegetation and Crops — the previously confused classes — improved substantially with finer segments.
5.4 Top-15 features by RF importance
Gini importance summed across all 591 features = 1:
| Rank | Feature | Importance | Group |
|---|---|---|---|
| 1 | tree_height_mean__mean |
0.0192 | Tree_Height |
| 2 | ampNDBI__mean |
0.0133 | Temporal_MinMaxStd |
| 3 | tree_height_std__mean |
0.0128 | Tree_Height |
| 4 | ampNDVI__mean |
0.0124 | Temporal_MinMaxStd |
| 5 | PALSAR_HV_db__mean |
0.0121 | SAR_PALSAR |
| 6 | sept_NDBI__mean |
0.0121 | NDBI_Indices |
| 7 | sept_NDWI__mean |
0.0113 | NDWI_Indices |
| 8 | march_VARI__mean |
0.0109 | VARI_Indices |
| 9 | sept_NDRE__mean |
0.0100 | NDRE_Indices |
| 10 | harmOffsetNDVI__mean |
0.0100 | Temporal_Harmonic |
| 11 | sept_OSAVI__mean |
0.0099 | OSAVI_Indices |
| 12 | harmOffsetGNDVI__mean |
0.0096 | Temporal_Harmonic |
| 13 | p50NDVI__mean |
0.0093 | Temporal_Percentiles |
| 14 | sept_BSI__mean |
0.0090 | BSI_Indices |
| 15 | jan25_VARI__mean |
0.0089 | VARI_Indices |
Canopy height dominates (#1 and #3). PALSAR_HV ranks #5 — L-band penetrates dense canopy and carries biomass information unavailable in optical data. September is the most informative single date (dry season; maximum contrast between bare soil, senescent crops, and evergreen forest).
5.5 Meta v2 canopy-height impact
Adding Meta v2 canopy statistics (8 features) on top of the ETH legacy features:
| Model | Holdout OA | Change |
|---|---|---|
| Without Meta v2 | 0.895 | — |
| With Meta v2 | 0.899 | +0.4pp |
The L1 gain is modest (near saturation). The L2 gain is larger:
| L2 metric | Without | With | Change |
|---|---|---|---|
| Holdout OA | 0.575 | 0.625 | +5.0pp |
| Holdout kappa | 0.324 | 0.399 | +7.5pp |
| Natural F1 | 0.59 | 0.67 | +0.08 |
| Production F1 | 0.50 | 0.58 | +0.08 |
| Agroforest F1 | 0.62 | 0.62 | 0 |
Meta v2 features meta_canopy_p95__mean and meta_canopy_avg__mean are the #1 and #2 most important single features in the full 599-feature stack when Meta v2 is included — beating every spectral, temporal, and SAR feature.
5.6 L2 forest-subtype results (2026-05-03, 137 samples)
| Metric | Value |
|---|---|
| Training rows (after imputation) | 137 |
| Train / val | 97 / 40 |
| Holdout OA | 0.575 |
| Holdout kappa | 0.324 |
| CV OA | 0.649 ± 0.076 |
| CV kappa | 0.432 ± 0.122 |
5.6.1 Confusion matrix (validation set, 40 segments)
| Predicted Natural | Predicted Production | Predicted Agroforest | |
|---|---|---|---|
| True Natural (n=18) | 11 | 5 | 2 |
| True Production (n=14) | 7 | 7 | 0 |
| True Agroforest (n=8) | 1 | 2 | 5 |
Per-class F1: Natural 0.59, Production 0.50, Agroforest 0.67.
The dominant failure mode is Production classified as Natural (7/14). Both subtypes have tall, dense canopy; the structural features that should separate them (tree_height_std, S1_VV_stdDev, PALSAR_HV_db) are present in the model but 48 Production training rows is too thin to learn the management-cycle pattern reliably. Adding 30–50 more clearly identifiable Production stands (planting rows visible in Wayback) is the primary recommended action.
5.7 Why Bareland was dropped
Bareland was the weakest L1 class by far (F1 = 0.00 coarse, 0.36 fine). The cause is structural: Cisokan has very little permanently exposed soil. “Bareland” labels in this AOI capture transient states — harvested paddy, dry-season fallow, edge artefacts — not stable land cover. Forcing the classifier to learn a coherent Bareland concept injected noise into adjacent classes (Sparse Vegetation and Crops).
Recommended reassignment of existing class-8 sample points:
| Pixel context | Reassign to |
|---|---|
| Fallow / harvested cropland | 9 Crops |
| Bare riverbank, eroded slope, sparse scrub | 8 Sparse Vegetation |
| Road, building, anthropogenic bare | 3 Built-up |
| Cloud shadow, edge artefact, ambiguous | 4 Others |
Quick triage: if NDVI is low across all 10 epochs → Sparse Veg or Built-up. If NDVI swings high–low → Crops.
5.8 Final pixel distribution (2026-05-03)
| Class | % of AOI |
|---|---|
| Waterbody | 0.3% |
| Paddy | 14.3% |
| Built-up | 7.7% |
| Others | 1.2% |
| Natural Forest | 15.1% |
| Production Forest | 7.2% |
| Agroforest | 3.0% |
| Sparse Vegetation | 45.9% |
| Crops | 5.3% |
Sparse Vegetation at 46% warrants a sanity-check overlay in QGIS. Some of those patches may be Agroforest fringe. If so, the fix is more Agroforest training samples (currently the lowest at 30 L2 samples).