Mineral Prospectivity Modeling over Chagupani Area of Ghana's Northern Parts
# Chagupani MPM — reproducibility code
Modelling code for the machine-learning mineral-prospectivity study of the
Chagupani gold deposit, northwestern Ghana (GBM vs Naïve Bayes).
> **Data.** The airborne geophysical and stream-sediment geochemical datasets are
> proprietary to **Azumah Resources Limited** and are **not** distributed here; they
> are available from the corresponding author on reasonable request and with the
> data owner's permission. This repository reproduces the **workflow**, and can
> generate a **synthetic** dataset for demonstration (see below).
## Files
- `aux_func.py` — core functions (data loading, models, metrics, log-odds, DeLong,
consensus/occurrence, IDW cross-validation).
- `chagupani_mpm.py` — top-level workflow: `reproduce_all()`, `summary_statistics()`,
`make_synthetic()`.
## Install
```bash
pip install -r requirements.txt
```
## Configure
Copy `.env.example` to `.env` and edit the paths/values:
```bash
cp .env.example .env
```
A `.env` file **must** exist in the working directory before running.
## Reproduce the published results (exact)
```python
import chagupani_mpm as mpm
data = mpm.load_data()
split = mpm.split_data(data["X"], data["y"])
# fit models fixed to the reported Table 2 optima -> exact, version-independent
gbm, nb = mpm.fit_frozen_models(split["X_train"], split["y_train"])
mpm.reproduce_all(data, split, gbm, nb)
```
`reproduce_all()` prints Tables 3 & 4, the DeLong test, the arsenic–gold
correlation and the consensus/occurrence results, and **checks them against the
published numbers** (AUC 0.88/0.85, arsenic ≈99.9%, occurrence capture ≈98.3%).
## Re-run the hyperparameter search (Table 2)
```python
gbm, nb, gbm_cv, nb_cv = mpm.gridsearch_models(split["X_train"], split["y_train"])
mpm.reproduce_all(data, split, gbm, nb, gbm_cv, nb_cv)
```
Note: re-running `GridSearchCV` may select slightly different optima under a
different scikit-learn version. For exact reproduction of the paper, use
`fit_frozen_models()` abo …