Data provenance & model card

Everything in OffsetIQ is computed from Texas Railroad Commission (RRC) public data. No proprietary data, no synthetic wells. Where public data reports production only for a whole multi-well lease, we show that lease as one pad with its lease-total production; where production cannot be attributed at all, we show a coverage gap. We never invent a per-well split.

Sources

  • Production & completions: RRC Production Data Query (PDQ) bulk dump, retrieved via the RRC public download site (MFT/GoAnywhere), dump dated 2026-09-26. Tables: OG_LEASE_CYCLE_DATA_TABLE (monthly lease oil/gas), OG_WELL_COMPLETION_DATA_TABLE (API ↔ lease link).
  • Well locations & laterals: RRC digital map well layers (wellNNNs/b/l shapefiles), counties 003/135/317/329. Lateral length is a proxy: straight-line surface-hole → bottom-hole displacement.
  • Production window: 2012-01 through 2026-06 (last month treated as complete; RRC filings lag 2–3 months and later months are revised).
  • Counties: Midland, Ector, Andrews (v1 target) plus Martin. Martin is included because it is geologically continuous and well-covered; it is labelled “Martin” everywhere and is not hidden inside the core-three statistics.

Attribution rule (why coverage gaps exist)

Texas reports oil production by lease, not by well. Three cases:

  • Single-well lease → lease production = well production. These 4,716 wells are the only ones used to train the model and the only ones used as model features.
  • Multi-well horizontal lease (pad) → every completion on the lease is a horizontal, first production 2013 or later. Shown as one pad (1,661 pads covering 6,972 wells; 1,516 with an Arps fit): lease-total monthly oil, total lateral = sum of member laterals, Arps fit on the lease stream, centroid of the member laterals. Pads appear in reports and on the map (cyan squares) as offsets labelled “pad (N wells)”, with the well count. No per-well allocation is invented, and pads are not fed into the forecast model.
  • Mixed lease (horizontals sharing a lease with vertical or other completions, or pads that started before 2013) → still a coverage gap: lease volumes would mix unrelated wells. Shown on the map in purple and counted in every report.

Coverage by county (RRC well-layer county)

StatusANDREWSECTORMARTINMIDLANDTotal
Usable: single-well lease, oil production attributable6691221,8662,0594,716
Excluded: multi-well lease not shown as a pad (lease also has vertical/non-horizontal completions, pre-2013 production, or no reported oil)7332977651,4883,283
Excluded: no PDQ completion record (permit / DUC / not yet producing / plugged)5493901,2721,8714,082
Excluded: gas well (out of scope)5190129189
Excluded: no oil production reported 2012-20264840202243533
Excluded: first production before 2013 (start not observed)8743453
Excluded: RRC well layer has no surface location (lateral cannot be located)1743769127
Pad: multi-well horizontal lease, shown as one pad with lease-level production (no per-well split)257903,3223,3036,972

Usable wells by RRC-reported county: MIDLAND 2,060 · MARTIN 1,866 · ANDREWS 669 · ECTOR 121 (a handful of wells sit in one county’s map layer but report production in another).

Decline curves (Arps)

Hyperbolic Arps fit from the peak month on monthly oil, switching to exponential at a 5%/yr terminal decline; economic limit 150 bbl/month; EUR = cumulative to date + remaining forecast. Same pipeline as the public Midland Basin DCA dashboard. Fits: 4,058 wells; 658 have too little history (shown without EUR, never as zero). Confidence: high 3,180 · medium 654 · low 224.

Median EUR (bbl oil): ANDREWS 412k · ECTOR 462k · MARTIN 452k · MIDLAND 399k

Model card

Model: LightGBM gradient-boosted trees (log-space targets), plus quantile models for the P90 (low) and P10 (high) cases. P90/P50/P10 follow the PRMS convention: P90 is the value the actual has a 90% chance of reaching or exceeding. Params: n_estimators=300, learning_rate=0.03, num_leaves=7, min_child_samples=60, subsample=0.8, subsample_freq=1, colsample_bytree=0.7, reg_lambda=5, random_state=42.

Targets: first-12-producing-month oil (cum12) and Arps EUR (EUR trained on high-confidence fits only).

Features (14): lateral_proxy_ft, mid_lat, mid_lon, county_code, vintage_year, n_off, d_nearest_mi, idw_cum12_per_kft, idw_early_qi, idw_early_Di, idw_early_b, frac_steep, frac_mild, off_cum12_scaled. Offset features use wells within 3 miles, inverse-distance weighted (1/(d+0.25 mi)²).

Leakage rules: (1) a well is never its own offset; (2) an offset is visible only if its first 12 producing months were complete before the target first produced; (3) offset features use only those early months; (4) the target’s own production is used only as the label. Known mild leakage: the 3 early-decline cluster centroids are fit on all wells.

Validation: time split at first production 2022-01. Train window 2013-03–2021-12; test 2022-01–2025-07 (EUR test to 2024-07). The app’s backtest mode uses this holdout model, so wells first producing 2022+ are scored out-of-sample; older wells are flagged in-sample.

HoldoutnMedian APEWithin ±25%R² (log)MAE
First-12-month oil
LightGBM2,30620.7%57.2%0.18448k bbl
Baseline: offset average × lateral2,30624.4%51.5%0.03557k bbl
Baseline: county median2,30626.7%46.9%-0.08160k bbl
EUR
LightGBM1,46231.6%39.8%0.062191k bbl
Baseline: offset average × lateral1,46237.9%34.6%-0.215223k bbl
Baseline: county median1,46230.8%43.1%-0.015191k bbl

Quantile calibration on holdout: share of actuals ≥ P90 (low case) = 83.2% (cum12), 81.7% (EUR); share ≤ P10 (high case) = 84.1% (cum12), 86.5% (EUR). The P90–P10 range therefore covers ~67–68% of outcomes, narrower than the nominal 80%.

Feature importance (cum12, gain share): lateral_proxy_ft 48% · mid_lon 18% · off_cum12_scaled 11% · vintage_year 4% · idw_early_qi 3% · mid_lat 3% · idw_early_Di 3% · d_nearest_mi 3% · idw_cum12_per_kft 3% · idw_early_b 1% · n_off 1% · frac_steep 1% · county_code 1% · frac_mild 0%

Final models are refit on all wells (cum12 n=4188, EUR n=3180) and used for prospect pins.

What the model gets wrong

  • EUR is no better than a county median. On 1,462 held-out wells (first production ≥ 2022-01) the EUR model’s median error is 31.6% vs 30.8% for simply using the county median. EUR labels are themselves Arps extrapolations of short histories, and public data has no completion design. The app therefore shows first-12-month oil as the primary forecast (20.7% median error vs 24.4% for an offset average; 57.2% within ±25%, n=2,306) and EUR as secondary context.
  • Even the 12-month forecast misses often. About 42.8% of held-out wells land outside ±25%, and the P90–P10 band covers only ~two-thirds of outcomes (see calibration above), not the nominal 80%.
  • Multi-well development is shown as pads, not wells. Pads carry lease-level production only; you cannot read a single pad well’s performance from them, and pad volumes are not comparable 1:1 with a single well (compare per 1,000 ft of total lateral). Pads are not used to train or drive the model, so in pad-dominated areas the forecast still rests on the nearby single-well leases.
  • Remaining gaps. Mixed leases, permits/DUCs without production records, and wells with no location stay as coverage gaps (counts above).
  • Screening, not reserves. Not SEC/PRMS reserves; no economics, gas, water, landing zone, proppant or spacing.

Limitations — read before using a number

  • Not a reserves estimate. Screening and offset-review tool only; not SEC/PRMS reserves and not a substitute for an engineer’s sign-off.
  • EUR skill is weak. On held-out wells the EUR model is roughly tied with a county median. Treat the 12-month forecast as the primary signal and EUR as context.
  • Coverage gaps. Pure-horizontal multi-well leases are shown as pads with lease-level production (no per-well split); mixed leases and wells without production records are excluded. Each report lists pads and counts the excluded wells in range.
  • Public-data lag. RRC production lags 2–3 months and is revised; the newest wells have short histories.
  • Missing completion design. No proppant, fluid, landing zone or spacing data — lateral length is the only design variable, and it is a surface→bottom-hole proxy.
  • Oil only. Gas/water forecasts, economics, seismic and SCADA are out of scope.

Reproduce: see the README in the GitHub repo (fetch_rrc → build_dataset → dca → train_model → export_web → tests).