https://rubenahrens.com/docs/MScThesis.pdf
Earth observation is becoming important in gaining insight into shipping emissions which produce a large percentage of global emissions. Maritime pollution contributes to global warming, causes health issues in harbors and coastal regions, and disrupts marine ecosystems. Therefore, the International Maritime Organization (IMO) has imposed strict emission limits, and national governments are restricting emissions in harbors and national waters. Because self-reporting is insufficient for measuring compliance, remote sensing is essential for collecting data on ship emissions in the open sea. In previous works, individual ship plumes have been detected using TROPOMI/Sentinel-5P satellite measurements of NO2. This study uses machine learning to investigate the impact of incorporating SO2 and HCHO measurements, alongside NO2, in detecting ships' exhaust plumes. Showing the potential of using gases other than NO2 in finding anomalously emitting ships, benefitting compliance monitoring.
The study focuses on a portion of the eastern Mediterranean, covering the period from January 2020 to July 2022. From AIS (Automatic Identification System) data, we derived each ship's path for the past two hours until the satellite overpass. We derived the path of the plume from this path and wind data. We trained an XGBoost classifier on data samples from
We present heatmaps that combine learning curves with proxy bins to compare each possible combination of gases (NO2, SO2, and HCHO). Similar to other experiments, the heatmaps showed an increase in detectability for higher NOx proxy bins for gas combinations involving NO2.
Comparing the learning curves of different proxy bins shows that for all proxy bins, more data for training the model is beneficial.
We also see the added benefit of SO2 and HCHO data in learning curves that use the entire tabular database without splitting the data into proxy bins.
Our findings show that incorporating SO2 and HCHO measurements alongside NO2 improved the classifier's performance at higher and lower NOx proxy values. We also observed SO2 and HCHO data by themselves to detect ships with a ROC AUC of 0.647 and 0.634 respectively, while showing room for improvement in the learning curves when acquiring more TROPOMI and AIS data. While this performance is worse than NO2 (ROC AUC 0.684) it shows the value of these gases in ship plume detection.
These are the main files to run to reproduce the results. Other files contain helper functions or data exploration.
Data Acquisition
SentHub/catalog.ipynb: Retrieves a list of relevant TROPOMI files and their metadata.S3/Download_Files.ipynb: Downloads TROPOMI satellite data from AWS S3.
Data Processing
AIS/prep_ais.py: Processes AIS ship tracking data to calculate ship paths and plume trajectories.make_tab_db/create_agg_db.py: Creates aggregated database for machine learning.
Machine Learning
ML/xgbc.ipynb: Contains XGBoost classification models, cross-validation, and evaluation metrics.
If you use code from this repo, do not forget to cite:
@mastersthesis{ahrens2025detecting,
author = {Ruben Ahrens, Cor Veenman, Fons Verbeek},
title = {Detecting ship plumes using TROPOMI NO<sub>2</sub>, SO$_2$ and HCHO observations},
school = {Leiden University},
year = {2025},
month = {1},
address = {Leiden, The Netherlands},
type = {Master's Thesis in Computer Science},
note = {Specialisation: Artificial Intelligence. Supervisors: Prof. F. J. Verbeek and Dr. C. Veenman}
}