CoolFace
Datasetpublic

jq5522/aml_indo_fires

Indonesian Wildfire Panel Dataset (2012–2025) A spatiotemporal panel dataset covering fire activity across Sumatra and Kalimantan, Indonesia, at monthly resolution on a 0.25° grid, spanning January 2012 to December 2025. Built for machine learning research into tropical wildfire prediction and its relationship to land cover, peatlands, and climate. Dataset Summary Each observation corresponds to one grid cell × one calendar month. Fire detections from NASA FIRMS… See the full description on the dataset page: https://huggingface.co/datasets/jq5522/aml_indo_fires.

sourceHugging Facecc-by-4.0updated 5mo agoView on Hugging Face
0likes142downloads
Dataset Card

language:

  • en license: cc-by-4.0 task_categories:
  • tabular-classification
  • tabular-regression tags:
  • fire
  • wildfire
  • climate
  • geospatial
  • indonesia
  • sumatra
  • kalimantan
  • peatland
  • ERA5
  • FIRMS
  • VIIRS
  • panel-data prettyname: Indonesian Wildfire Panel Dataset (2012–2025) sizecategories:
  • 1M<n<10M ---

Indonesian Wildfire Panel Dataset (2012–2025)

A spatiotemporal panel dataset covering fire activity across Sumatra and Kalimantan, Indonesia, at monthly resolution on a 0.25° grid, spanning January 2012 to December 2025. Built for machine learning research into tropical wildfire prediction and its relationship to land cover, peatlands, and climate.


Dataset Summary

Each observation corresponds to one grid cell × one calendar month. Fire detections from NASA FIRMS VIIRS are aggregated to each cell-month, then joined with ERA5 meteorological reanalysis and static land-cover features. Two models are trained on this data — an Elastic Net logistic regression baseline and a LightGBM classifier — and their predictions are stored in outputs/tables/.

Five panel files are provided at increasing levels of processing:

FileStagePurpose
panel_core_2012_2025.parquetRawAggregated fire, climate, and land-cover features
panel_eda_enriched_2012_2025.parquetEnrichedAdds lags, drought proxies, interactions, spatial neighbours
static_cell_features_2012_2025.parquetStaticOne row per cell: land-cover attributes
modelling_data_linear_2012_2025.parquetModel-readyFeature set for Elastic Net (with 14 interaction terms; province/month dummies, drop_first=True)
modelling_data_nonlinear_2012_2025.parquetModel-readyFeature set for LightGBM (province/month as raw categoricals for native handling)

Geographic Scope

RegionBounding Box (W, S, E, N)
Sumatra94.0°E, 6.5°S, 106.5°E, 6.5°N
Kalimantan108.0°E, 5.0°S, 119.5°E, 8.5°N
Combined study area94.0°E, 6.5°S, 119.5°E, 8.5°N
  • Grid resolution: 0.25° × 0.25° (aligned to ERA5 grid)
  • Land cells retained: ~1,839 (ocean cells filtered using province assignment and land-cover overlap)
  • Temporal coverage: January 2012 – December 2025 (168 months)

Files

Panel data

FileDescription
panel_core_2012_2025.parquetCore cell × month panel: fire counts, ERA5 climate, static land-cover
panel_eda_enriched_2012_2025.parquetEnriched panel with lagged variables, drought proxies, interactions, and spatial neighbour features
static_cell_features_2012_2025.parquetStatic per-cell features (peat, concessions, roads, province)
modelling_data_linear_2012_2025.parquetModel-ready data for Elastic Net: curated features + 14 interaction terms + province/month dummies (drop_first=True)
modelling_data_nonlinear_2012_2025.parquetModel-ready data for LightGBM: province and month as raw categoricals (no dummy encoding)

Visualisation layers

FileDescription
visualisation/gadm1_clip.parquetGADM level-1 administrative boundaries (GeoParquet)
visualisation/indonesia_border.parquetDissolved study-area outline (GeoParquet)
visualisation/grid_025deg.parquet0.25° grid cell polygons (GeoParquet)
visualisation/fire_grid_totals_2012_2025.parquetGrid with total and log1p-transformed fire counts (GeoParquet)
visualisation/peat_clip.parquetPeatland polygons clipped to study area (GeoParquet)
visualisation/roads_clip.parquetRoad network clipped to study area (GeoParquet)
visualisation/concessions_oil_palm_clip.parquetOil palm concession polygons (GeoParquet)
visualisation/concessions_wood_fibre_clip.parquetWood fibre concession polygons (GeoParquet)

Model outputs

FileDescription
outputs/tables/enet_final_test.csvElastic Net test-set metrics (log-loss, PR-AUC, ROC-AUC, Brier) for 2024 and 2025
outputs/tables/enet_test_predictions.parquetElastic Net predicted probabilities for the final test year, with cell_id and actuals
outputs/tables/lgbm_final_test.csvLightGBM test-set metrics (log-loss, PR-AUC, ROC-AUC, Brier) for 2024 and 2025
outputs/tables/lgbm_test_predictions.parquetLightGBM predicted probabilities for the final test year, with cell_id and actuals

Schema — panel_core_2012_2025.parquet

Identifiers & Time

ColumnTypeDescription
cell_idintUnique grid cell identifier
yearintCalendar year
monthintCalendar month (1–12)
timedatetimeFirst day of the month (timestamp)
lon_centrefloatLongitude of cell centre (°E)
lat_centrefloatLatitude of cell centre (°N)

Fire Features (NASA FIRMS VIIRS SNPP)

ColumnTypeDescription
fire_count_lnhintTotal fire detections (low, nominal, high confidence)
fire_count_nhintFire detections at nominal or high confidence only
fire_any_lnhintBinary: any fire detected (all confidence levels)
fire_any_nhintBinary: any fire detected (nominal/high confidence only)
frp_sum_lnhfloatSum of Fire Radiative Power — all detections (MW)
frp_sum_nhfloatSum of Fire Radiative Power — nominal/high confidence only (MW)

ERA5 Climate Features (monthly reanalysis, nearest grid point)

ColumnTypeDescription
t2mfloat2 m air temperature (K)
tpfloatTotal precipitation (m)
u10float10 m U-component of wind (m/s, eastward)
v10float10 m V-component of wind (m/s, northward)
wind_speedfloat10 m wind speed: sqrt(u10² + v10²) (m/s)
era5_latitudefloatMatched ERA5 grid latitude
era5_longitudefloatMatched ERA5 grid longitude

Static Land-Cover Features

ColumnTypeDescription
cell_area_km2floatCell area in km² (EPSG:6933 equal-area projection)
peat_fractionfloatFraction of cell covered by peatland [0, 1]
oil_palm_fractionfloatFraction of cell within oil palm concessions [0, 1]
wood_fibre_fractionfloatFraction of cell within wood fibre concessions [0, 1]
road_length_kmfloatTotal road length within cell (km)
road_density_km_per_km2floatRoad density (km per km²)
provincestrIndonesian province name (GADM level 1); NaN for ocean/coastal cells

Schema — panel_eda_enriched_2012_2025.parquet

Contains all columns from panel_core_2012_2025.parquet, plus the engineered features below. All lagged variables are computed within each cell_id group to avoid cross-cell leakage.

Derived Climate Variable

ColumnTypeDescription
t2m_cfloat2 m air temperature in Celsius (t2m − 273.15)

Binary & Derived Land-Cover Indicators

ColumnTypeDescription
peat_binaryint1 if cell has any peatland coverage
oil_con_binaryint1 if cell has any oil palm concession coverage
wood_con_binaryint1 if cell has any wood fibre concession coverage
concession_fraction_totalfloatCombined oil palm + wood fibre concession share [0, 1]
high_road_densityint1 if cell road density exceeds the sample median

Lagged Fire Variables (lags: 1, 2, 3, 12 months)

Pattern: {var}_lag{n} for n in {1, 2, 3, 12}.

Base variableDescription
fire_count_nhNominal/high confidence fire count
fire_any_nhBinary fire indicator (nominal/high)
frp_sum_nhTotal FRP (nominal/high confidence, MW)
fire_count_lnhAll-confidence fire count
fire_any_lnhBinary fire indicator (all confidence)
frp_sum_lnhTotal FRP (all confidence, MW)

Lagged Climate Variables (lags: 1, 2, 3, 12 months)

Pattern: {var}_lag{n} for n in {1, 2, 3, 12}.

Base variableDescription
tpTotal precipitation
t2m2 m temperature (K)
t2m_c2 m temperature (°C)
wind_speedWind speed magnitude
u10U-component of wind (retained for downstream haze transport analysis)
v10V-component of wind (retained for downstream haze transport analysis)

Precipitation Anomaly & Drought Proxies

ColumnTypeDescription
tp_clim_edafloatCell-month climatological mean precipitation (m)
tp_anomalyfloatPrecipitation anomaly: tpclimeda minus tp; positive = drier than normal
tp_deficit_monthlyfloatDry-only monthly deficit: tp_anomaly clipped to >= 0
precip_deficit_3mfloat3-month cumulative net anomaly (shifted 1 month to use past months only)
precip_deficit_3m_dryonlyfloat3-month cumulative dry-only deficit (shifted 1 month)
tp_3m_sum_lag1floatTrailing 3-month total precipitation, lagged 1 month (m)

Wind Direction

ColumnTypeDescription
wind_dir_radfloatWind direction in radians: arctan2(v10, u10)

Climate x Land-Cover Interactions (EDA use)

ColumnTypeDescription
tp_x_peatfloattp x peat_fraction
t2m_c_x_peatfloatt2mc x peatfraction
wind_speed_x_peatfloatwindspeed x peatfraction
tp_x_oil_confloattp x oilpalmfraction
tp_x_wood_confloattp x woodfibrefraction
tp_x_road_densityfloattp x roaddensitykmperkm2

Spatial Neighbour Variables (Queen contiguity)

ColumnTypeDescription
neighbor_fire_count_nh_meanfloatMean fire count (nh) across neighbours — same month (EDA only)
neighbor_fire_count_nh_sumfloatSum of fire counts (nh) across neighbours — same month (EDA only)
neighbor_fire_any_nh_meanfloatMean binary fire indicator (nh) across neighbours — same month (EDA only)
neighbor_frp_sum_nh_meanfloatMean FRP (nh) across neighbours — same month (EDA only)
neighbor_fire_count_nh_mean_lag1floatAbove, lagged 1 month
neighbor_fire_count_nh_sum_lag1floatAbove, lagged 1 month
neighbor_fire_any_nh_mean_lag1floatAbove, lagged 1 month
neighbor_frp_sum_nh_mean_lag1floatAbove, lagged 1 month

Schema — modelling_data_linear_2012_2025.parquet and modelling_data_nonlinear_2012_2025.parquet

Both files share the same base feature set but differ in interaction terms and categorical encoding.

Identifiers and Targets (both files)

ColumnTypeDescription
cell_idintGrid cell identifier
yearintCalendar year (raw integer; not encoded)
monthintCalendar month — raw integer in nonlinear file; dummy-encoded in linear file
fire_any_nhintPrimary target: binary fire occurrence (nominal/high confidence)
fire_count_nhintSecondary target: fire count (for regression sensitivity check)

Base Features (both files)

Spatial controls: lon_centre, lat_centre, province (raw string in nonlinear; dummies in linear).

Static land-cover: peat_fraction, oil_palm_fraction, wood_fibre_fraction, road_length_km, road_density_km_per_km2.

Lagged fire history (n/h): fire_count_nh_lag{1/2/3/12}, fire_any_nh_lag{1/2/3/12}, frp_sum_nh_lag{1/2/3/12}.

Lagged climate: tp_lag{1/2/3/12}, t2m_c_lag{1/2/3/12}, wind_speed_lag{1/2/3/12}.

Drought proxies: precip_deficit_3m, precip_deficit_3m_dryonly, tp_3m_sum_lag1.

Spatial neighbour lags: neighbor_fire_count_nh_mean_lag1, neighbor_fire_count_nh_sum_lag1, neighbor_fire_any_nh_mean_lag1, neighbor_frp_sum_nh_mean_lag1.

Interaction Terms (linear file only — 14 terms)

ColumnFormulaMotivation
ix_drought_x_peatprecip_deficit_3m x peat_fractionDrought drives peatland fire disproportionately (Sherwood et al. 2021)
ix_drought_dry_x_peatprecip_deficit_3m_dryonly x peat_fractionDry-season-only deficit x peat
ix_frp_lag{1/2/3/12}_x_peatfrp_sum_nh_lag{n} x peat_fractionIntense recent peat fire indicates persistent subsurface combustion
ix_oil_con_x_peatoil_palm_fraction x peat_fractionOil palm on peat — primary THPA enforcement target
ix_wood_con_x_peatwood_fibre_fraction x peat_fractionWood fibre on peat
ix_concession_x_peatoil_palm_fraction x wood_fibre_fraction x peat_fractionCombined concession x peat
ix_wind_lag{1/2/3/12}_x_droughtwind_speed_lag{n} x precip_deficit_3mWind amplifies fire risk conditionally on dryness (Abatzoglou & Kolden 2013)
ix_neighbor_lag1_x_peatneighbor_fire_count_nh_mean_lag1 x peat_fractionSpatial contagion more persistent on peat

Categorical Encoding

VariableLinear fileNon-linear file
provinceOne-hot dummies, drop_first=TrueRaw string encoded to integer as province_code; passed via categorical_feature
monthOne-hot dummies, drop_first=TrueRaw integer; passed via categorical_feature
yearRaw integerRaw integer

Schema — outputs/tables/

Test-set evaluation results and predicted probabilities from the two trained models.

enet_final_test.csv and lgbm_final_test.csv

One row per test year (2024, 2025).

ColumnTypeDescription
test_yearintCalendar year being evaluated
n_testintNumber of cell-month observations in the test set
fire_ratefloatFraction of test observations with fire
log_lossfloatBinary cross-entropy
pr_aucfloatArea under the precision-recall curve
roc_aucfloatArea under the ROC curve
brierfloatBrier score (mean squared probability error)

lgbm_final_test.csv additionally contains n_trees_used (number of boosting rounds selected by early stopping).

enet_test_predictions.parquet and lgbm_test_predictions.parquet

One row per cell-month observation in the final test year.

ColumnTypeDescription
cell_idintGrid cell identifier
yearintCalendar year
monthintCalendar month
fire_any_nhintActual binary fire label
y_prob_enet / y_prob_lgbmfloatPredicted fire probability from the respective model

Modelling Design

Target Variable

The primary target is fire_any_nh (binary: >=1 nominal/high-confidence VIIRS detection in a cell-month). At threshold=1 the positive rate is ~33%. 513 cells burn in >50% of months (chronic hotspots). Only 236 cells never burn, meaning the negative class is genuinely informative. Consistent with Sherwood et al. (2021) and Kurniawan et al. (2025).

fire_count_nh is retained as a secondary regression target for Poisson sensitivity checks.

Train / Validation / Test Split

PeriodRole
2012–2013Burn-in (lag initialisation only; excluded from all folds)
2014–2021Training (expanding window)
2022–2023Outer validation (model class selection)
2024–2025Final test (touched once, at reporting)

Inner CV (hyperparameter tuning) uses 4 expanding-window folds:

FoldTrainValidation
12014–20172018
22014–20182019 (El Nino stress test)
32014–20192020
42014–20202021

Model Classes

Elastic Net (05A): Logistic regression with elastic net penalty, solved via FISTA on GPU (JAX) or sklearn SAGA as fallback. Hyperparameters C and l1_ratio tuned by inner CV on log-loss. Features include 14 pre-computed interaction terms.

LightGBM (05B): Gradient boosted decision trees with GPU acceleration. Hyperparameters tuned via Optuna or grid search. Province and month passed as native categorical features. Early stopping applied on a held-out fold separate from the scoring fold to prevent leakage. No scaleposweight — class imbalance is left unweighted to preserve probability calibration.


Data Sources

SourceDescriptionCoverage
NASA FIRMS VIIRS SNPPActive fire detections2012–2025
ERA5 Monthly Reanalysis (CDS)Temperature, precipitation, wind2012–2025
Global Peatland Database / GFWPeatland extent polygonsStatic
GFW — Oil Palm ConcessionsOil palm concession boundariesStatic
GFW — Wood Fibre ConcessionsWood fibre concession boundariesStatic
OpenStreetMap / GADMRoad network; administrative boundariesStatic

Loading the Data

python
import pandas as pd
from huggingface_hub import hf_hub_download

REPO_ID = "jq5522/aml_indo_fires"

# Core panel
panel = pd.read_parquet(hf_hub_download(REPO_ID, "panel_core_2012_2025.parquet", repo_type="dataset"))

# Enriched EDA panel
panel_eda = pd.read_parquet(hf_hub_download(REPO_ID, "panel_eda_enriched_2012_2025.parquet", repo_type="dataset"))

# Model-ready: Elastic Net
panel_linear = pd.read_parquet(hf_hub_download(REPO_ID, "modelling_data_linear_2012_2025.parquet", repo_type="dataset"))

# Model-ready: LightGBM
panel_nonlin = pd.read_parquet(hf_hub_download(REPO_ID, "modelling_data_nonlinear_2012_2025.parquet", repo_type="dataset"))
panel_nonlin["province"] = panel_nonlin["province"].astype("category")
panel_nonlin["month"] = panel_nonlin["month"].astype("category")

# Model outputs — test metrics
enet_test = pd.read_csv(hf_hub_download(REPO_ID, "outputs/tables/enet_final_test.csv", repo_type="dataset"))
lgbm_test = pd.read_csv(hf_hub_download(REPO_ID, "outputs/tables/lgbm_final_test.csv", repo_type="dataset"))

# Model outputs — predicted probabilities
enet_preds = pd.read_parquet(hf_hub_download(REPO_ID, "outputs/tables/enet_test_predictions.parquet", repo_type="dataset"))
lgbm_preds = pd.read_parquet(hf_hub_download(REPO_ID, "outputs/tables/lgbm_test_predictions.parquet", repo_type="dataset"))
python
# GeoParquet visualisation layer (requires geopandas)
import geopandas as gpd

grid = gpd.read_parquet(hf_hub_download(REPO_ID, "visualisation/grid_025deg.parquet", repo_type="dataset"))
grid.plot()

Construction Notes

  • Ocean cell filtering: Cells are retained if they have a non-null province assignment or a non-zero value for any of peat_fraction, oil_palm_fraction, or wood_fibre_fraction. This preserves ~11 coastal cells with roads but no province assignment.
  • Fire confidence: _nh columns restrict to nominal and high VIIRS confidence classes. _lnh columns include low-confidence detections. Only _nh series are retained in the model-ready files.
  • ERA5 matching: Each grid cell centre is snapped to its nearest ERA5 gridpoint using argmin distance. ERA5 and the analysis grid share the same 0.25° resolution.
  • Panel skeleton: A complete cell × month grid is constructed for all 168 months and all land cells. Months with no fire detections are filled with zeros, not dropped.
  • Lag leakage prevention: All lagged and rolling variables are computed within cell_id groups and shifted before rolling.
  • Wind direction components (u10/v10): Retained in panel_eda_enriched but excluded from both model-ready files. Reserved for a post-prediction transboundary haze transport layer.
  • Interaction terms: Present in the linear file only. LightGBM recovers these through recursive partitioning.
  • Categorical encoding: drop_first=True for province and month dummies in the linear file. The non-linear file retains raw values for LightGBM native categorical handling.
  • Early stopping (LightGBM): A three-way chronological split is used per fold — fit set, early-stopping set, and scoring set — keeping the validation year strictly untouched during tree selection.
  • Class weighting: Neither model uses scaleposweight or class weights, preserving probability calibration for log-loss and Brier score evaluation.

Citation

If you use this dataset, please cite the upstream data sources (NASA FIRMS, Copernicus ERA5, GFW) and link to this repository.

@dataset{aml_indo_fires_2025,
author    = {Jiaqi Chen},
title     = {Indonesian Wildfire Panel Dataset (2012--2025)},
year      = {2026},
publisher = {Hugging Face},
url       = {https://huggingface.co/datasets/jq5522/aml_indo_fires}
}

Licence

Released under Creative Commons Attribution 4.0 (CC BY 4.0). Downstream use of ERA5 data is subject to the Copernicus licence.