Ph Poverty Mapping

Mapping Philippine Poverty using Machine Learning, Satellite Imagery, and Crowd-sourced Geospatial Information
Alternatives To Ph Poverty Mapping
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Raster Vision1,85374 days ago4March 26, 202155otherPython
An open source library and framework for deep learning on satellite and aerial imagery.
a year ago14May 01, 202118mitPython
Satellite imagery for dummies.
Awesome Earthobservation Code936
5 months agocc0-1.0HTML
A curated list of awesome tools, tutorials, code, projects, links, stuff about Earth Observation, Geospatial Satellite Imagery
Stac Spec631
2 months ago59apache-2.0JavaScript
SpatioTemporal Asset Catalog specification - making geospatial assets openly searchable and crawlable
Awesome Geospatial Companies389
3 months ago2mitPython
:globe_with_meridians: List of 500+ geospatial companies (GIS, Earth Observation, UAV, Satellite, Digital Farming, ..)
4 days ago11January 28, 202216gpl-2.0R
Satellite image time series in R
Geospatial Machine Learning196
5 years agomit
A curated list of resources focused on Machine Learning in Geospatial Data Science.
Georaster Layer For Leaflet165769 months ago47August 27, 202242apache-2.0HTML
Display GeoTIFFs and soon other types of raster on your Leaflet Map
Up42 Py119
3 days ago40May 18, 20221mitPython
:earth_americas: Python SDK for UP42, the geospatial marketplace and developer platform.
24 days ago15October 11, 20225mitJupyter Notebook
GeoWombat: Utilities for geospatial data
Alternatives To Ph Poverty Mapping
Select To Compare

Alternative Project Comparisons

This repo is no longer maintained. Checkout our latest poverty mapping repo here!

Setup | Code Organization | Data Sources | Models | Key Results | Acknowledgements

Philippine Poverty Mapping

This repository accompanies our research work, "Mapping Philippine Poverty using Machine Learning, Satellite Imagery, and Crowd-sourced Geospatial Information".

The goal of this project is to provide a means for faster, cheaper, and more granular estimation of poverty measures in the Philippines using machine learning, satellite imagery, and open geospatial data.

pampanga map


To get started, run the jupyter notebooks in notebooks/ in order. Note that to run the notebooks, all dependencies must be installed. We provided a Makefile to accomplish this task:

make venv
make build

This creates a virtual environment, venv, and installs all dependencies found in requirements.txt. In order to run the notebooks inside venv, execute the following command:

ipython kernel install --user --name=venv

Notable dependencies include:

  • matplotlib==3.0.2
  • seaborn==0.9.0
  • numpy==1.16.0
  • pandas==0.24.0
  • torchsummary==1.5.1
  • torchvision==0.2.1
  • tqdm==4.30.0

Code Organization

This repository is divided into three main parts:

  • notebooks/: contains all Jupyter notebooks for different wealth prediction models.
  • utils/: contains utility methods for loading datasets, building model, and performing training routines.
  • src/: contains the transfer learning training script.

It is possible to follow our experiments and reproduce the models we've built by going through the notebooks one-by-one. For model training, we leveraged a Google Compute Engine (GCE) instance with 16 vCPUs and 60 GB of memory (n1-standard-16) and an NVIDIA Tesla P100 GPU.

Downloading Datasets

Demographic and Health Survey (DHS)

We used the poverty indicators in the 2017 Philippine Demographic and Health Survey as a measure of ground-truth for socioeconomic indicators. The survey is conducted every 3 to 5 years, and contains nationally representative information on different indicators across the country.

Due to data access agreements, users need to independently download data files from the Demographic and Health Survey Website. This may require you to create an account and fill out a Data User Agreement form.

Once downloaded, copy and unzip the file in the /data directory. The notebook /notebooks/00_dhs_prep.ipynb will walk you through how to prepare the dataset for modeling.

Google Static Maps

We used the Google Static Maps API to download 400x400 px zoom 17 satellite images. To download satellite images and generate training/validation sets, run the following script in the src/ directory:

python Note that this script downloads 134,540 satellite images from Google Static Maps and may incur costs. See this page for more information on Maps Static API Usage and Billing.

To download satellite images and generate training/validation sets, run the following script in src/:


Training the Model

To train the nighttime lights transfer learning model, run the following script in src/:


Usage is as follows:

usage: [-h] [--batch-size N] [--lr LR] [--epochs N] [--factor N]
                [--patience N] [--data-dir S] [--model-best-dir S]
                [--checkpoint-dir S]
Philippine Poverty Prediction
optional arguments:
  -h, --help          show this help message and exit
  --batch-size N      input batch size for training (default: 32)
  --lr LR             learning rate (default: 1e-6)
  --epochs N          number of epochs to train (default: 100)
  --factor N          factor to reduce learning rate by on pleateau (default:
  --patience N        number of iterations before reducing lr (default: 10)
  --data-dir S        data directory (default: "../data/images/")
  --model-best-dir S  best model path (default: "../models/")
  --checkpoint-dir S  model directory (default: "../models/")

Data Sources


We developed wealth prediction models using different data sources. You can follow-through our analysis by looking at the notebooks in the notebooks/ directory.

  • Nighttime Lights Transfer Learning Model (notebooks/03_transfer_model.ipynb): we used a transfer learning approach proposed by Xie et al and Jean et al. The main assumption here is that nighttime lights act as a good proxy for economic activity. We started with a Convolutional Neural Network (CNN) pre-trained on ImageNet, and used the feature embeddings as input into a ridge regression model.
  • Nighttime Lights Statistics Model (notebooks/01_lights_eda.ipynb, notebooks/03_lights_model.ipynb): in this model, we generated nighttime light features consisting of summary statistics and histogram-based features. We then compared the performance of three different machine learning algorithms: ridge regression, random forest regressor, and gradient boosting method (XGBoost).
  • OpenStreetMaps (OSM) Model (notebooks/04_osm_model.ipynb): we extracted three types of OSM features, roads, buildings, and points-of-interests (POIs) within a 5-km radius for rural areas and 2-km radius for urban areas. We then trained a random forest regressor on these features.
  • OpenStreetMaps (OSM) + Nighttime Lights (NTL) (notebooks/02_lights_eda.ipynb, notebooks/04_osm_model.ipynb): we also trained a random forest model combining OSM data and nighttime lights-derived features as input.


Use this bibtex to cite this repository:

  title={Mapping Poverty in the Philippines Using Machine Learning, Satellite Imagery, and Crowd-sourced Geospatial Information},
  author={Tingzon, Isabelle and Orden, Ardie and Sy, Stephanie and Sekara, Vedran and Weber, Ingmar and Fatehkia, Masoomali and Herranz, Manuel Garcia and Kim, Dohyung},
  journal={GitHub repository},


This work was supported by the UNICEF Innovation Fund.

Popular Geospatial Projects
Popular Satellite Projects
Popular Mapping Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Jupyter Notebook
Satellite Imagery