Inspiration

Singapore fights dengue reactively. NEA flags a cluster only after cases are confirmed, so mosquito control arrives once transmission is already under way. In 2020, MOH's weekly bulletin recorded 35,315 cases, the worst year on record, with 1,792 cases in a single week at the peak. Meanwhile Singapore keeps getting hotter: annual mean surface temperature has risen by about 0.24°C per decade since 1984, and 2025 was the hottest year on record. What struck us is that the early-warning signals are already public. Rainfall creates breeding sites, heat speeds up mosquito development and virus incubation, and both show up in dengue case counts weeks later. Rain and temperature data are published every few minutes on data.gov.sg, but they aren't used to look ahead. We wanted to turn that open data into a two-week head start for the people who fight outbreaks.

What it does

DengueRadar is a two-stage forecasting pipeline.

National forecast: a forecast model predicts Singapore's dengue cases two weeks ahead from recent case counts and lagged rainfall and temperature. Planning-area risk: a data-driven allocation spreads that national forecast across Singapore's 55 planning areas, based on live NEA cluster activity and population. Each area is classified Low, Medium or High risk.

The results appear on an interactive risk-map dashboard for NEA vector-control teams and town councils. It shows:

the risk level of each planning area; the two-week forecast against actual cases and simple baselines; the main reasons behind each area's risk, such as "rainfall well above normal six weeks ago" or "three active clusters nearby"; a ranked list of the areas to act on first.

A Genie space lets officers ask questions in plain English, such as "Which areas moved from Low to High this week?"

How we built it

DengueRadar is designed end to end on Databricks Free Edition using Singapore open data.

Data: MOH's Weekly Infectious Disease Bulletin (with later weeks from CDA's bulletins), NEA historical rainfall, NEA real-time rainfall and air temperature APIs, NEA dengue cluster GeoJSON, URA planning-area boundaries and SingStat Census 2020 population. Pipeline: scheduled Lakeflow Jobs bring raw data into Bronze Delta tables, which are cleaned into Silver and combined into a weekly Gold feature table. Unity Catalog governs every table and model and tracks lineage from raw data to each forecast. Forecast model: negative binomial regression, suited to case counts that swing widely during outbreaks, using 2–12-week lags of rainfall, temperature and cases. A gradient-boosted model competes against it as a challenger, and SHAP explains every individual forecast. Evaluation: a rolling-origin backtest over 2017–2022, including the 2020 outbreak, compared against three simple baselines (last week's count, the four-week average and the same week last year). All runs are tracked in MLflow. Spatial layer: Empirical Bayes estimation sets how much each area's estimate relies on local cluster data versus population. It is recalculated every week, so no weights are set by hand. Local rainfall adjusts each area's share, using the rainfall effect learned by the national model. Hotspot statistics (Getis-Ord Gi* and Local Moran's I) confirm which areas are significantly elevated. Risk thresholds are fixed from historical incidence, so a quiet week correctly shows Low everywhere. Output: an AI/BI dashboard and a Genie space.

Challenges we ran into

No history for dengue clusters. NEA's cluster file only shows clusters that are active right now; past versions aren't published. That ruled out training a cluster-level model on public data, so we designed a transparent allocation method instead and set up a daily snapshot job to build our own history. Gaps in the case data. The case series on data.gov.sg ends in 2022, and the regional dengue datasets haven't been updated since 2024. We supplement with CDA's weekly bulletins and are open about where each number comes from. Justifying every number. Our first allocation design used hand-picked weights that we couldn't defend. We replaced them with empirical Bayes estimation and a rainfall effect learned from six years of data. Small data. With roughly 300 weeks of overlapping case and weather data, deep learning would mostly memorise noise. We chose an interpretable count model and keep the number of inputs small. Double-counting the weather. The national forecast already accounts for a wet month. Adjusting areas by their own rainfall would have counted it twice, so each area is adjusted by how its rainfall differs from the island-wide average. Free Edition limits. Outbound internet access is restricted, and quotas are tight, so we designed scheduled batch jobs rather than streaming, plus a fallback for loading data.

Accomplishments that we're proud of

A design where every weight is data-driven: the national model learns from history, and the spatial weights are re-estimated each week from the latest data. Explanations built in from the start: every forecast and every area's risk comes with the reasons behind it, which an officer needs before acting. Honesty about limits. We can say exactly what the national model has been tested on, what the spatial layer assumes, and how both would improve with NEA's internal data. An architecture that is realistically buildable in two weeks on Free Edition, using standard open-source libraries.

What we learned

Weather affects dengue weeks to months later. Mosquitoes take about 1–2 weeks to develop from egg to adult, the virus needs about another week inside the mosquito, and a person takes about 6 days to fall ill. Singapore research found that rainfall and temperature affect cases with a lag of up to 20 weeks, strongest at 12–16 weeks. That gives us a clear next experiment: testing longer weather windows. The data you need often doesn't exist in the form you expect. Checking what each dataset actually contains, before designing around it, changed our whole approach. Simple, explainable models often beat complex ones on small public datasets, and they're far easier for a public agency to trust. The medallion architecture (Bronze, Silver, Gold) and the champion-versus-challenger model workflow in Databricks.

What's next for DengueRadar - Team bzzz

Longer weather windows and lead times. Research suggests authorities need around three months to contain an outbreak, and weather signals reach that far ahead. We plan to test lags of up to 20 weeks and longer forecast horizons. Cluster-level growth model. As our daily snapshots accumulate, we'll train a model that predicts which clusters will grow, and test it against a simple "keeps growing at last week's pace" baseline. Retraining on NEA's internal data. The pipeline is designed to retrain on richer data such as case locations, years of cluster records and breeding-site inspection results. Alerts. Automatic notifications when an area moves into High risk. Other Aedes-borne diseases. The same mosquitoes spread chikungunya and Zika, so the pipeline could extend to them.

Built With

  • data.gov.sg
  • databricks
  • databricks-ai/bi
  • delta-lake
  • genie
  • lakeflow
  • lightgbm
  • mlflow
  • nea-api
  • pysal
  • pyspark
  • python
  • shap
  • sql
  • statsmodels
  • unity-catalog
Share this project:

Updates

Submission history