firepredict: daily wildfire-start risk for the communes of the Var (France)

A small logistic regression that gives each of the 153 communes of the Var (83), France, a daily chance that a fire of 0.1 ha or more starts there. It is built only from open data. Code, data pipeline and full report: github.com/guillaumegay13/firepredict.

Research preview. This is not an official warning tool. Fire danger warnings in France are issued by Météo-France and the prefectures. The every-year results below are exploratory (see Limitations); the clean test is the 2026 one.

What it predicts

For one commune and one target day: the chance that at least one fire of 0.1 ha or more starts in the commune on the target day.

  • The forecast is issued on the morning of the day before the target day.
  • It uses data up to two days before the target day (the last complete day of station data).
  • No input uses recent fire records. BDIFF publishes a year's fires months later, so a live forecast cannot know them. Automated tests in the GitHub repository check the time rules and that no input changes when fire records change.

Version: small_commune_v2, frozen on 9 November 2026 (git commit 5fa2bc1), trained on every labelled year.

Inputs

A scikit-learn pipeline: StandardScaler then LogisticRegression (default settings, max_iter=1000). Five inputs, in this order:

Input Definition Unit / transform Standardised weight
log_usual_rate Commune's usual fire rate: average number of days per year with at least one fire start of 0.1 ha or more, 2006–2025 without 2024 (usual_rates.csv) log(rate + 0.01) +0.589
log_local_fwi Fire Weather Index two days before the target day, from the commune's nearest Météo-France stations log(1 + FWI), FWI has no unit +0.858 (strongest)
local_wb_30d Rain minus potential evaporation (Météo-France ETP) over the 30 days that end two days before the target day, nearest stations mm, negative = dry −0.562
orange_period Target day in February or March (brush burning allowed under conditions) 0 / 1 +0.230
red_period Target day in June to September (fire use banned) 0 / 1 −0.261

A missing input is replaced with its training median (fill_values in metadata.json).

The FWI here is an approximation computed from daily station values (daily maximum temperature, minimum humidity, mean wind, daily rain), not the official noon-based product.

How to use

uv run --with scikit-learn==1.9.1 --with joblib --with pandas python example.py

example.py checks the SHA-256 fingerprints, loads the model and computes the chance for example rows. The pipeline was saved with scikit-learn 1.9.1; older versions (for example 1.7.2) fail to load it. Joblib files are pickles: load only files whose fingerprint you trust (model_sha256 in metadata.json).

import joblib, json, numpy as np, pandas as pd

model = joblib.load("model.joblib")
meta = json.load(open("metadata.json"))
rates = pd.read_csv("usual_rates.csv", dtype={"insee": str}).set_index("insee").usual_rate

X = pd.DataFrame([{
    "log_usual_rate": np.log(rates["83137"] + 0.01),  # Toulon
    "log_local_fwi": np.log1p(35.0),                  # FWI two days before the target day
    "local_wb_30d": -140.0,                           # mm over 30 days
    "orange_period": 0,
    "red_period": 1,                                  # target day in July
}])[meta["inputs"]].fillna(pd.Series(meta["fill_values"]))
print(model.predict_proba(X)[0, 1])                   # about 0.0034

To build the inputs from raw data (weather download, station matching, FWI), use the GitHub repository: firepredict.model_communes.build_panel and firepredict.freeze.predict, or uv run python -m firepredict.pipeline forecast for today's forecast.

Files

File Content
model.joblib The fitted pipeline (SHA-256 a1e64b40ed3aa7c274d4b2ec01f24e93a80beb976c3e03ce6d2a3e837056b243)
usual_rates.csv Usual fire rate per commune (INSEE code), used for forecasts
metadata.json Inputs, weights, fill values, training years and rows, raw-data fingerprints, file fingerprints
forecasts_2026.csv Retrospective 2026 test forecasts: target_day, insee, chance (47,889 rows)
example.py Load the model and compute a chance
LICENSE MIT licence of the code and model

Training data

  • Fire records: BDIFF (Base de Données sur les Incendies de Forêts en France), Var, 2006–2025 without 2024. Only fires of 0.1 ha or more are counted.
  • Weather: Météo-France daily climatological data, all Var stations.
  • Burning calendar: Var prefectoral orders on fire use of 16 May 2013 and 2 November 2025.

1,052,640 commune-days, of which 902 positive commune-days (from 910 fires). A positive commune-day is a day on which at least one fire of 0.1 ha or more started in the commune.

Evaluation

Leave-one-year-out over 19 years (2006–2025 without 2024): each year is hidden in turn, the model learns on the other years, then forecasts the hidden year. The unit is a positive commune-day (902 in total). Ranges are 95% ranges from resampling years.

Against two references:

Reference ROC AUC (reference → model) Years better 15 communes/day: caught 10% of commune-days: caught
FWI alone (Var) 0.718 → 0.782 19 / 19 85 → 213, +151% (+104% to +221%) 230 → 354, +54% (+33% to +74%)
Local FWI alone 0.728 → 0.782 18 / 19 123 → 213, +73% (+46% to +111%) 256 → 354, +38% (+20% to +58%)
FWI × commune history 0.757 → 0.782 16 / 19 (p < 0.001) 222 → 213, −4% (−10% to +2%) 307 → 354, +15% (+2% to +30%)
  • Against the FWI alone, the model is clearly better.
  • Against the FWI multiplied by each commune's usual fire rate, the model ranks commune-days better, but the gain in fires caught is about zero at practical warning levels (15 communes a day: −4%, −10% to +2%).
  • On its very top warnings the model does worse than FWI × history: 59 against 76 at the 1% most alarming commune-days. Its pooled PR AUC is also lower (0.0030 against 0.0034).

What each input adds (nested, ROC AUC):

Inputs ROC AUC
Commune history + local FWI 0.767
+ burning calendar 0.775
+ 30-day dryness (this model) 0.782
+ buildings and roads in wildland (IGN BD TOPO) 0.781

Buildings and roads near vegetation add nothing once each commune's fire history is known, so they are not in the model.

Calibration holds in the bands used by the map: commune-days predicted at 0.1–0.3% had a mean prediction of 0.167% and an observed rate of 0.169%; those at 0.3–1%, 0.38% predicted against 0.45% observed. Above 1% there are only 17 commune-days, too few to check.

Robustness (model against FWI × commune history):

  • Without 2023: ROC AUC 0.787 against 0.761 (better in 16 of 18 years).
  • Fires of 1 ha or more: ROC AUC 0.780 against 0.720 (better in 16 of 19 years).

Location within a day is hard to improve. None of the fixed rankings tested puts more than about 25% of fire starts in the day's 15 highest-ranked communes. This is what the rankings tested reach, not a proven ceiling.

Larger models (CatBoost, the Timestral time-series model) were tested in the project too. They do no better and are less consistent from year to year.

These results were corrected after an independent review of the code and claims on 9 November 2026 (inputs built from recent fire records were removed, two small leaks were closed, wording was corrected). See the "Update after an independent review" section of reports/phase1_results.md.

2026 retrospective test and live archive

The inputs were chosen after looking at results across all years, so the scores above are somewhat optimistic. Two cleaner tests are running:

  • Retrospective 2026 test, blind to the outcomes. On 9 November 2026, before any 2026 fire record was published, the model was frozen and its forecasts for 1 January – 9 November 2026 were saved in forecasts_2026.csv (SHA-256 2be6091ab25539dc47bb751822d2a9b2b48f21218f8238bf0be1e1653dc8c6d6). They were all computed on that day, from the weather available then. This is a retrospective test, not a live trial. When BDIFF publishes the 2026 fires, the forecasts will be scored as they are.
  • Live archive. From 9 November 2026, each day's forecast from the frozen model is saved in the forecasts/ folder of the GitHub repository and committed the same day, so the git history dates it.

Limitations

  • Exploratory results. The inputs and the 30-day window were chosen after looking at the same years used for evaluation, so p-values and ranges are optimistic. The ranges are conditional on the chosen model.
  • Approximate FWI. Computed from daily station values, not the official noon-based FWI or Météo-France's forecasts.
  • One department. The model is trained and tested on the Var only. It has not been checked on other departments.
  • Label issues. 2024 is excluded: BDIFF holds only 3 Var fires for 2024, against 50–380 in other years. In 2023 BDIFF started recording many more tiny fires, so only fires of 0.1 ha or more are counted.
  • Commune-level locations only. BDIFF gives the commune of each fire, not its position.
  • Burning calendar. The 2013 and 2025 rules are applied to all years. The 2006–2012 rules and the prefect's extra red days are not included.
  • Past features use later knowledge. Weather stations were chosen by their coverage over 2006–2026, and the leave-one-year-out test trains on years after the one it scores.
  • Small chances. Most predicted chances are below 1% per commune-day; they are useful to rank communes and days, not as yes/no forecasts.

Data and credits

The model was trained on the data below. This repository does not contain BDIFF or Météo-France raw data; the code in the GitHub repository downloads it from the official sites. usual_rates.csv holds yearly averages per commune derived from BDIFF.

Data Provider Licence
Fire records 2006–2025 (BDIFF) Ministère de l'Agriculture, bdiff.agriculture.gouv.fr see below
Daily weather, all Var stations Météo-France, via data.gouv.fr Licence Ouverte / Etalab 2.0
Burning calendar Var prefectoral orders of 16 May 2013 and 2 November 2025 public acts
Commune boundaries (to match each commune to its nearest stations) geo.api.gouv.fr (IGN, INSEE) Licence Ouverte / Etalab 2.0

The wider project (GitHub repository) also uses IGN BD TOPO, DDTM du Var burned-area outlines, Corine Land Cover 2018 and school holiday data; none of them is an input of this model.

BDIFF. Source : Base de Données sur les Incendies de Forêts en France, bdiff.agriculture.gouv.fr. Droits de reproduction réservés et strictement limités. BDIFF data may be reused for personal, associative or professional purposes, unchanged, with this source cited, and may not be sold or rented.

Licence

Code and model under the MIT licence (see LICENSE). Data under the licences above.

Citation

@software{gay2026firepredict,
  author = {Gay, Guillaume},
  title  = {firepredict: daily wildfire-start risk for the communes of the Var, France, from open data},
  year   = {2026},
  url    = {https://github.com/guillaumegay13/firepredict},
  note   = {Model small\_commune\_v2, frozen 9 November 2026}
}

Contact

Guillaume Gay, guillaume.gay@protonmail.com. Feedback from fire services, researchers and local authorities is very welcome.

Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support