geothermal-gradient-prediction-eval
Predicting the Geothermal Gradient in Colombia: a Machine Learning Approach — Mejía-Fragoso et al. (2024) (arXiv:2404.05184, 2024)
What this evaluates
Predicts the geothermal gradient (°C/km) across Colombia using geophysical and geological features. Evaluates model generalization on unseen spatial locations and quantifies prediction error against sparse borehole measurements.
Datasets
- Colombia Geothermal Gradient Dataset — total ?; splits: train (-1), test (-1); repo https://github.com/jcmefra/Geothermal-Gradient-Machine-Learning
Metrics
MAE— range: other- Mean Absolute Error between predicted and actual geothermal gradient values. Computed as the average of absolute differences across all test instances.
RMSE— range: other- Root Mean Squared Error between predicted and actual values. Computed as the square root of the average of squared differences across all test instances.
nMAE— range: [0, 1]- Normalized Mean Absolute Error, calculated by dividing MAE by a normalization factor (typically the data range or mean). Reported as a decimal fraction of the correct values.
nRMSE— range: [0, 1]- Normalized Root Mean Squared Error, calculated by dividing RMSE by the same normalization factor used for nMAE. Reported as a decimal fraction of the correct values.
R2(primary) — range: [-1, 1]- Coefficient of determination, defined as 1 - (SS_res / SS_tot), where SS_res is the sum of squared residuals and SS_tot is the total sum of squares. Measures the proportion of variance in the target explained by the model.
Input / output format
Input: Geophysical and geological features per location (e.g., active faults, elevation, Moho depth, basement proximity, potential fields, Curie Depth, Free Air Anomaly).
Output: Predicted geothermal gradient value in °C/km.
Scoring recipe
import numpy as np
def compute_metrics(y_true, y_pred):
mae = np.mean(np.abs(y_true - y_pred))
rmse = np.sqrt(np.mean((y_true - y_pred)**2))
ss_res = np.sum((y_true - y_pred)**2)
ss_tot = np.sum((y_true - np.mean(y_true))**2)
r2 = 1 - (ss_res / ss_tot)
norm_factor = np.max(y_true) - np.min(y_true)
nmae = mae / norm_factor
nrmse = rmse / norm_factor
return {'MAE': mae, 'RMSE': rmse, 'R2': r2, 'nMAE': nmae, 'nRMSE': nrmse}
Common pitfalls
- Model systematically underestimates high gradient values due to under-representation of those values in the training data.
- Geographic bias in borehole measurement locations affects spatial generalization and can inflate error in unexplored regions.
- Normalized metrics (nMAE/nRMSE) are reported as decimals (0.06, 0.12) rather than percentages, which can cause misinterpretation of error magnitude.
Evidence (verbatim from paper)
The accuracy of the methodology is evaluated using the test subset derived from the initial dataset partitioning. We examine the key performance metrics: MAE, RMSE, nMAE, nRMSE and the coefficient of determination $(R^2)$ to quantify the predictive precision of the model. Conversely, the test data got an MAE of 2.6826, an RMSE of 3.5842, and an $R^2$ of 0.5497.
Citation
@misc{mejiafragoso2024geothermal,
title={Predicting the Geothermal Gradient in Colombia: a Machine Learning Approach},
author={Mejía-Fragoso et al. (2024)},
year={2024},
note={arXiv:2404.05184}
}
- arXiv: 2404.05184