How We Built It

So what did we do about it?

We put on our thinking caps and built a machine learning model that accurately showcases "Sol" in California based on vegetation and urban island heat influencing factors.

TLDR: Check for trees and building density around a specific location. Mix it in with temperatures and some special ML magic and you get a heat vulnerability score.

1NDVI (Vegetation Index)
2LST (Land Surface Temp)
3Building Footprint Density
4Google Earth Engine
5Random Forest ML Model
6Gemini-2.5-Flash Tuner
7Tuned Weights → Heat Score
Data at each stage
NDVI Input
Vegetation Index
NDVI raster
LST Input
Land Surface Temp
LST raster
Building Density
Urban Footprint
Building density
Vulnerability Output
Heat Score Map
Heat output

Remote Sensing Data

Both NDVI and LST rasters were exported directly from Google Earth Engine using Landsat 8/9 imagery for California.

NDVI raster — California
Google Earth Rasterization of NDVI
NDVI raster shows vegetation health and density across California, with brighter areas indicating more vegetation.
LST raster — California
Google Earth Rasterization of LST
LST raster shows land surface temperature across California, with brighter areas indicating higher temperatures (hotter urban heat islands).

*Notice how areas near the coast are darker, corresponding to cooler temperatures.
Machine Learning Model Dataframes
Machine Learning Model Dataframes

Data Classifications for ML Model

As part of feature extraction, we rasterized both building density and tree density into uniform 100 m grid cells across California. These become two of the three columns in our feature matrix X (the third being normalized temperature). We then fed X into our Random Forest, which learned how those spatial patterns combine to predict heat‐vulnerability scores.

Tree Density per 100m Cell43.65043.64843.64643.64443.64243.64043.63843.636-79.3950-79.3925-79.3900-79.3875-79.3850-79.3825-79.3800-79.37750.0000.0010.0020.0030.0040.0050.006
Building Density per 100m Cell43.65043.64843.64643.64443.64243.64043.63843.636-79.3950-79.3925-79.3900-79.3875-79.3850-79.3825-79.3800-79.3775050100150200250300
Tree Density Raster
Each cell = 100m × 100m patch. Scattered green clusters correspond to urban tree canopy. The darkest cell peaks at 0.006 (density units).

In ML terms: Vegetation input (proxy for NDVI), normalized tree/vegetation cover per cell.
Building Density Raster
A concentrated urban cluster (center-left) reaches 300 m² of roof per 10,000 m² cell. Surrounding cells show moderate suburban density.

In ML terms: Urbanization input — m² of roof area per 10,000 m² cell.

Enough Technical Talk. Check out the 3D City Visualization.