Inspiration

I’m thirteen, living in Phnom Penh, Cambodia. I kept seeing articles about how a billion people don’t have electricity, and I thought—surely someone’s already mapped all of them, right? Turns out, nobody had actually built a tool showing exactly which specific villages lacked electricity, how many people lived there, and how much it would cost to fix. Then I learned clinics without power can’t keep vaccines cold. Suddenly, this problem felt like something I could actually try to tackle using satellite data—so I did.

What it does

DarkMAP takes NASA nighttime satellite images and runs them through a machine learning pipeline with 10 independent agents that vote on whether a location is an unelectrified village or not. For every village it confirms, it outputs the GPS coordinates, estimated population, and a USD cost to connect it to the grid. That cost number is what an NGO needs to write a grant proposal to the World Bank or UNDP. We validated it on Kampong Speu Province, Cambodia — real village, real coordinates, $239,097 electrification cost, 29.3km from the nearest grid connection.

How we built it

Google Colab with GPU. NASA Earthdata for VIIRS nighttime light granules. Sentinel-2 for daytime satellite imagery. WorldPop for population density. Google Dynamic World and ESA WorldCover for land classification. GHSL for built surface detection. We wrote a DBSCAN clustering algorithm to find dark zones, then built a dual CNN (EfficientNet-B0 + ResNet18) fused with an XGBoost/LightGBM/RandomForest tabular ensemble. The 10 agents each vote independently and we require majority confirmation before flagging a village. The cost model uses terrain difficulty, grid distance from OSM power nodes, and population estimates.

Challenges we ran into

I genuinely did not know what I was doing for the first two weeks. The H5 file format for VIIRS data is not beginner-friendly. My tile coordinates were wrong and all my clusters were landing in the wrong province. The temporal analysis merge broke and I had to rebuild it. My team member couldn't respond during crunch. I also found out mid-build that my accuracy claim had a circular dependency — I was generating labels from the same features I was training on, which means the accuracy number was fake. I fixed it but it was a bad moment. I'm 13 and I was debugging satellite data pipelines at 1am.

Accomplishments that we're proud of

Phase 1 is actually done. That felt impossible when I started. We processed real NASA VIIRS granules, extracted nighttime light data for Southeast Asia, cropped to Kampong Speu Province, ran the full ML pipeline, and produced a verified map with GPS coordinates and cost estimates for real unelectrified villages. The system works. The $239,097 figure for the confirmed village at 11.39286°N, 104.50406°E is a real output from real satellite data. That's not a demo. That's the actual tool running.

What we learned

Satellite data is a lot harder than Kaggle datasets. Coordinate systems will betray you. A 10-agent voting committee is a better design than one model because it gives you explainability — you can tell an NGO exactly which data sources confirmed a village and why. The SDG 3 framing (no electricity → no cold chain → vaccines spoil → children die) made this feel like it mattered beyond a school project. I also learned that you can cold email a professor at Ohio University and they will actually respond.

What's next for DarkMAP

NASA Space Apps Challenge in October 2026. A peer-reviewed paper in IJHSR. Cold emails to EnergyLab Cambodia and Sevea Consulting to use our output data for real field validation. Fix the remaining code issues before any publication. Scale to Sub-Saharan Africa provinces. Build an NPV/ROI model on top of the cost estimates so impact investors can evaluate electrification as a capital allocation decision. The goal by Grade 12 is one documented case where a village got electrified because DarkMAP data was used in the grant proposal that funded it.

Built With

Share this project:

Updates