Sw Predictor (Direct Supervised, Merkle Aquila Model 1)
Trains an XGBoost regressor to predict Sw directly from wireline curve shape -- NOT the hydrocarbon flag. Checked against the real label data first: only 12 of ~105k strat_interval rows have an explicit 'checked, not hydrocarbon' code, so a classifier trained on the flag would just re-learn WellStrat's own historical picking pattern. Predicting the same continuous Sw the Archie physics chain already computes sidesteps that -- no hydrocarbon flag anywhere in the loop -- and, once trusted, could eventually estimate Sw wherever curves exist but no Rw fit does.
What "accuracy" means here: Deliberately does not use the hydrocarbon flag anywhere -- training against it directly was ruled out after checking the real label distribution (8,919 explicit positives vs. 12 explicit negatives, the rest simply unassessed). This card evaluates whether the model reproduces the Archie-based Sw calculation, not whether it finds hydrocarbons -- extending it to fill Sw coverage gaps or feed the Curve-Shape Clustering card's enrichment check is a deliberate follow-up, not done here yet.
This version's training details
Trained on every well with a derived_curve_parquet row (built by build_derived_curves), filtered to rows where sw_derived is non-null. sw_derived itself is gated upstream by VSH_CUTOFF_SW=0.5 (Clavier Vsh) plus a porosity-plausibility range in rw_calibration.sw_sample_gate -- there is no Log-PHI-vs-Core-PHI residual filter in this pipeline today.
- row_stride
- 10
- random_seed
- 42
- test_fraction
- 0.2
- vsh_cutoff_sw
- 0.5
Last run: 2026-08-04 06:47:19 UTC
Sw Predictor: Predicted vs. Actual (Held-Out Wells)
Each point is one held-out depth sample: X = actual Sw (the Archie physics chain's own value), Y = this model's prediction from curve shape alone, trained without ever seeing the hydrocarbon flag. Points near the diagonal mean the model reproduces the physics chain; systematic drift off it means the model isn't ready to be trusted where physics coverage doesn't reach.
How this result was generated
(VSH/PHI/RT_TRUE/SW already computed)"] feat["Phase 2's Rolling-Window Curve Features
(GR/RHOB/DT/NPHI/Rt/Vsh + formation + X/Y)"] target["Target: sw_derived
(Archie Sw, NOT the hydrocarbon flag)"] split["Well-Level 80/20 Split"] train["XGBoost Regression"] eval["Evaluate on Held-Out Wells
(RMSE, R-squared, predicted vs actual)"] wells --> feat --> split --> train --> eval target --> train
Hover a step for a plain-language explanation.