PROSPECT

This model predicts where gold occurs in Georgia from public geologic data. A prediction is not a result. The validation is the result, so it is on this page too.

Hover any cell for probability, map unit, lithology and age. The layer control toggles the 345 known gold occurrences. They are drawn for comparison. They were never used at scoring time. The red band is the Dahlonega belt. The model was not told it exists.

The honest numbers

Spatial-block cross-validation, five folds, XGBoost. Two rows are emphasized. They answer different questions, and quoting one alone would be dishonest.

Validation schemeBlocksAUC What it answers
random KFold8540.927 ± 0.009nothing useful — see below
0.1° blocks (~9 km)5170.925 ± 0.023interpolate between neighbors
0.25° blocks (~23 km)2230.928 ± 0.022interpolate between neighbors
0.5° blocks (~46 km)690.919 ± 0.049score the state with training points scattered nearby. This is how the map above is used
1.0° blocks (~93 km)240.857 ± 0.043generalize to a region held out entirely
2.0° blocks (~186 km)80.815 ± 0.049too few blocks to quote

Baseline AUC 0.500; baseline average precision 0.404 (positive-class prevalence). 854 points, 345 positive.

Why not a random train/test split

Mineral occurrences are spatially autocorrelated. A point 200 m from a known mine sits in the same map unit. It carries the same lithology and the same age. Shuffle those into different folds and the held-out point is one the model has already seen, feature for feature, label included. Random cross-validation measures interpolation between neighbors. That is not the question being asked.

The gap between random and blocked validation is only 0.008 AUC at fine scales. That does not mean there is no leakage. It means the blocks are too small. Every feature is a map-unit attribute, so a 9 km block holds the same geology as its neighbors and the fold boundary cuts nothing. Only blocks large enough to hold out whole regions reveal the effect. At 186 km the score falls to 0.815.

Where to actually go

Ranked by map unit, not by grid cell. Limitation 6 explains why.

PCellsCentroidMap unit
0.9205834.10, -84.30Neoproterozoic-Cambrian sedimentary
0.910733.70, -82.60Cambrian volcanic: felsic rocks
0.888134.20, -84.00Mesoproterozoic crystalline metamorphic rocks
0.796133.90, -85.10Devonian volcanic: mafic rocks
0.7371734.60, -84.50Neoproterozoic sedimentary
0.7373734.70, -84.30Neoproterozoic sedimentary rocks
0.465233.80, -84.75Devonian plutonic: undivided granitic rocks
0.45116233.70, -83.90Neoproterozoic-Cambrian volcanic: interlayered sedimentary and volcanic rocks

Honest limitations

  1. The lithology features are weaker than they look. The map source covering 87% of positives has no metamorphic vocabulary. It calls gold-belt metasediments "sedimentary". lith_quartz fires on zero rows of 854. lith_schist fires on one. Quartz-vein-in-schist is the host rock for Georgia gold, and the model cannot see it.
  2. Statewide AUC is partly a Fall Line detector. All 345 positives fall in the crystalline province. Restricted to that province the model scores 0.804 ± 0.101. That is real discrimination inside gold country. It is also the number that matters for planning a trip.
  3. Negatives are pseudo-absences, not verified absences. This is a positive-unlabeled problem dressed as binary classification. It holds only because gold-bearing ground is a small fraction of the state. That was verified, not assumed.
  4. MRDS records where industry looked. It does not record where gold is. Sampling bias in the labels propagates into the map.
  5. No field validation yet. One trip is planned. The writeup happens either way.
  6. Resolution is the map polygon, not the grid cell. Every feature is a map-unit attribute, so 1462 cells produce 34 distinct probabilities. Ranking cells inside a plateau would be sorting noise. A finer grid does not fix this. Per-point features would: distance to contacts, distance to faults, geochemistry.

How it works

USGS MRDS occurrences and Macrostrat map units, joined by cached point lookups. Deduplicated to one row per location. Featurized into age and lithology features under an enforced allowlist. Trained with XGBoost, validated spatially. A 0.1° grid over the state runs through the same code path and gets scored.

The method, every design decision with what was rejected, and the steps to reproduce it are in the repository.