Inspiration

2025 was Singapore's hottest year on record, and 2026 is the Year of Climate Adaptation. Yet NEA measures official heat stress (WBGT) at only 15 stations, so most residents inherit a reading from a sensor that may be far away. Heat does not hit everyone equally: older residents in lower-floor HDB flats, many without air-conditioning or facing high utility bills, are the most exposed. I wanted a way to see where heat is most dangerous, including where there is no sensor.

What it does

HeatGuard estimates heat stress across Singapore and turns it into a Low / Medium / High risk score with tiered alerts, for outreach coordinators, town councils and planners.

  • Heat stress beyond the sensors: a model learns WBGT from temperature, humidity, wind, rainfall and time of day, then estimates it where no WBGT sensor exists.
  • How places hold heat: hot-night gaps from nine years of station history, plus block-level afternoon sun exposure from HDB footprints, height, orientation and neighbour shading.
  • Risk score: heat hazard × building exposure × elderly density × cooling gap (distance to the nearest Senior Activity Centre).
  • Stretch goal: a what-if simulation of adding shade or a cooling refuge in the highest-risk zones.

How I plan to build it

Open data from NEA, SingStat, HDB, URA and MSF/MOH is ingested with scheduled Lakeflow jobs into Delta tables (bronze, silver, gold) governed in Unity Catalog. The heat stress model and risk score are tracked in MLflow. Results are served in an AI/BI dashboard with a live map and a ranked list of areas.

Challenges

Checking the data shaped the design:

  • HDB's elderly tables stop at 2018 and are town-level, so elderly density uses SingStat subzone data instead.
  • WBGT history is only about a year and a half long, so the model has to stay simple.
  • There is no open health-outcome data, so the score prioritises areas rather than predicting illness.
  • The two HDB datasets use different street identifiers, so joining them needs care.

What success looks like

The heat stress model must beat the "nearest station" baseline when I hide each WBGT station in turn, and a coordinator should be able to open one screen and see which neighbourhoods need attention tomorrow, and why.

What I learned so far

The most valuable step was checking which datasets really exist and at what resolution before choosing the solution. That changed the plan from block-level elderly counts to subzone-level counts plus block-level building physics.

Built With

Share this project:

Updates

Submission history