PASTEL (Predictive model for Atmospheric Substances and Trace pollutants in the Environment using machine Learning)
To view the associated AMS-AIES publication for this project see here: link.
For a link to all associated data used along side the above publication see here: link.
The PASTEL model uses meteorological variables calculated along backwards trajectories generated by the NOAA HYSPLIT model as inputs to make predictions about atmospheric trace substance concentrations using a hybrid global and regional ensemble system utalizing both random forest regression and linear regression.
Disclaimer! - I apologize for messy code, I started this project when I was still a programming novice and have learned much since! Absolute paths from my local machine still need to be changed and some logic dependant on these abolute paths (i.e. positions of variable names within these paths for plotting purpooses) may need to be changed first to properply run the main PASTEL model notebook.
This project/model are very much in the development stage. If you are interested in the project and think you may want to help, feel free to reach out using the information below.
Clone the repository and look at the Zenodo link to get the final cleaned csv used for the main "code/v0_1_5_PASTEL.ipynb" file.
Be sure to look at 'Prerequisites' section for necessary packages. Or use the provided environment file.
The provided 'pastel_env.yml' file is the environment with the packages currently required to run the main pvocal_env file, if you want to create the environment from scratch, please look at that file, or the top of the main "code/v0_1_5_PASTEL.ipynb" to see what packages to get started with.
To install the environment file run this line in an anaconda prompt window:
conda env create -f pastel_env.yml
Warning: There is currently a dependancy issue with this environment and the version of matplotlib basemap used within PySPLIT. A new environment will need to be created if re-generating any of the PySPLIT trajectories is desired (not necessary for the main notebook).
Make sure to use the provided environment file and find the data in the Zenodo link. Absolute paths to data sources and plot destinations will need to be changed.
The primary use cases for PASTEL are: 1) you need/want a more realistc interpolator for spatial gaps within an underlying dataset of atmospheric trace substances, or 2) predictions of: dimethyl sulfide (C2H6S), methane (CH4), carbon monoxide (CO), ozone (O3), ethane (C2H6), or methyl bromide (CH3Br) are warrented over a region where you have meteorological data, but not atmospheric chemistry data.
Currently the code is specialized to model creation itself and its basic evaluation but expanding this so it can be used in more general cases is the goal.
It can predict 6 target compounds: DMS, Ethane, Ozone, Carbon Monoxide, Methane, and Methyl Bromide, although there are many more within the underlying airborne campaigns that went into making the input dataset so this list can be expanded in the future..
Main contributions include making the model compatible with all VOCs from each airborne campaign (joining all inconsistant names into one input dataset) and adapting the code so that the process for adding additional compounds is more streamlined.
Turning this code it into a package so other folks can begin to use the model in their workflows is probably the biggest thing that needs to be done. This will probably mean a transition from notebook files to .py/object oriented scripts.
Misc projects:
- Given the findings in the paper published with this repository, PASTEL could be seen as a spatial interpolation tool (but a good one relative to other models), but to take this one step further, work exists to transition PASTEL to a DANN (domain adversarial neural network) architecture, one that may have an easier time with spatial extrapolation. PASTEL's KGCCL regions could then be used to look for domain invarient patterns in meterology/space, and then try to expand generalization/spatial extrapolation capabilities to places with less/no data. This would be the ultimate goal.
- Additionally, there exists a package for Utility Based Regression in R here: https://github.com/paobranco/UBL and I believe that implementing this for Python and as a part of this project may be benifical for more accurate predictions given the underlying dataset imbalences but also in a regression setting. This could also be coupled with under or oversampling the dataset with synthetic data using the SMOGN algorithm.
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.
Please contact: victor.w.geiser [at] gmail.com with any questions about this repository!
-All contributors for PySPLIT!
-The NASA SARP program for giving me the courage to chase the idea this project is based off.
Copyright (C) 2025 Victor Geiser. Licensed under the General Public License v3.0 (GPLv3).