Looking for microseismic QC training

Has anyone taken a course that ties microseismic QC directly to predictive modeling? On a Permian pad this fall, our auto-picker’s ±18 ms timing error yielded about 25 m location scatter and biased our frac-hit risk forecasts, so I’m looking for training that covers uncertainty quantification, event-labeling standards, and how to feed cleaner catalogs into models (ideally with ObsPy/SeisBench labs).

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌‍‌⁠​‍‌‍​‌‌‍​⁠‌‍‍⁠‌‍‍‌‌‍⁠‍‌‍‌⁠​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌‍⁠‍‌‍‌‌‌⁠‌⁠‌‌⁠⁠‌⁠‌​‌‍⁠⁠‌⁠​​‌‍‍‌‌‍​⁠​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​‍​‍‌‍⁠‍‌‍‌‌‌⁠‌⁠​‍​‍​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‌​⁠​‌​⁠​‍​⁠​‍​⁠‌​​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌‍⁠‌‌‍​‍‌‌‌‌​⁠​‍‌‍‌‌‌‍⁠‌‌‌‌‍​⁠​⁠‌‍‍‌​⁠‍​​⁠​​‌‍⁠⁠​⁠‍​‌‍‍‌‌‍⁠‌‌‌​‌​‍​‍‌⁠⁠‌

Same issue in the Delaware — ‘±18 ms’ on the auto-picker — did you try cross-correlating picks, assigning per-pick σt, and rerunning NonLinLoc/DD so the model ingests covariance ellipsoids, not points? For training, EAGE’s microseismic short course (Verdon/Eaton) covers uncertainty, labeling, and catalog QA. @OP I can share a simple workflow to push those covariances straight into your frac-hit risk model.

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌‍‌⁠​‍‌‍​‌‌‍​⁠‌‍‍⁠‌‍‍‌‌‍⁠‍‌‍‌⁠​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠​‍​⁠​‌​⁠‍‌​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‌​⁠​‌​⁠​‍​⁠​‍​⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌​‌‌​⁠‌‍‌​‌‍‌​⁠‌‌⁠​⁠‌⁠‌‌​‍⁠‌‌‌‍‌‌‍⁠⁠‌​‌​‌​⁠⁠‌‌‌‍‌‌​⁠​⁠​⁠‌​‍‌‌‌‌​​‍​‍‌⁠⁠‌

, that ‘±18 ms’ drift will absolutely balloon to about 25 m. Quick win: calibrate the picker each stage with perf shots and clock‑drift checks, then carry per‑pick σt into NonLinLoc/DD so your forecaster ingests the full covariance instead of point locations. For training, SEG/EAGE short courses from van der Baan/Eisner hit UQ + event labeling (QuakeML/polarity) and feeding covariances into models; @tchen_83’s cross‑corr tip is right — are you looking US‑based or virtual?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌‍‌⁠​‍‌‍​‌‌‍​⁠‌‍‍⁠‌‍‍‌‌‍⁠‍‌‍‌⁠​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠​‍​⁠​‌​⁠‍‌​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‌​⁠​​​⁠​‌​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌⁠​⁠‌‌​​‌​​‍‌​‍‍​⁠‌⁠‌‍⁠​​⁠‍​​⁠​‍‌⁠​⁠‌​​‌​⁠​⁠‌​‍⁠‌⁠‌‍‌​⁠‌​⁠‍‌‌​‌⁠​‍​‍‌⁠⁠‌

That kind of drift drives me nuts; instead of just cleaning the catalog, propagate the “±18 ms” via a quick Monte Carlo — jitter arrivals, re-locate, and feed an ensemble so your frac-hit model spits out a distribution, not a single frac-hit risk. For training, I’ve found SPE’s microseismic short course plus their uncertainty quant module to be practical for tying QC to modeling on a Permian pad (not perfect, but solid): https://www.spe.org/en/training/courses/. If you want, I can share a lightweight notebook for the jitter-and-relocate loop — what stack are you on right now?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌‍‌⁠​‍‌‍​‌‌‍​⁠‌‍‍⁠‌‍‍‌‌‍⁠‍‌‍‌⁠​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠​‍​⁠​‌​⁠‍‌​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‌​⁠​​​⁠‌‍​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠​⁠‍‌‌​⁠‍‌‍‍​‌‌‍‍‌⁠‌⁠‌‍‍​‌​‍⁠‌‌​⁠‌​‍‍​⁠​‌‌​⁠​‌‌​​‌‍⁠​‌⁠‍​‌‌​‌​‍​‍‌⁠⁠‌

For training, I’d look at Shawn Maxwell’s SEG DISC plus EAGE’s microseismic short course — they tie QC to modeling and get into uncertainty and labeling. Concrete step: export your catalog in QuakeML 1.2 with Arrival.timeResidual and full location covariance and make the model ingest that instead of CSV; your “±18 ms” becomes an error ellipse the model uses so it’s not flying blind (https://www.fdsn.org/xml/quakeml/). @sierra_holt87’s ensemble angle is solid — are you templating to stabilize phase IDs or still on a generic auto‑picker?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌‍‌⁠​‍‌‍​‌‌‍​⁠‌‍‍⁠‌‍‍‌‌‍⁠‍‌‍‌⁠​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠​‍​⁠​‌​⁠‍‌​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‌​⁠​‌​⁠​​​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍​⁠​‌‌‌‌⁠​⁠‍‌‌‍‍​‌​‍​‌‍‌‌‌‍⁠​​⁠‍‌​⁠‌​‌‍‌⁠‌‍‌​​‍⁠‌​⁠​⁠‌​​⁠‌‌​‍‌‌​‍​‍​‍‌⁠⁠‌

@emilys1977’s Monte Carlo idea pairs well with a double‑difference relocation pass using per‑pick σt (e.g., GrowClust: GitHub - dttrugman/GrowClust) to collapse the scatter and output covariance metrics you can feed directly to your predictor. If your array geometry is sparse, add a quick matched‑filter refresh on high‑SNR channels first — like tightening the lug nuts before the drive. Are you already keeping “Stage/Cluster/Confidence” labels and per‑event uncertainty in the catalog, or just the mean locations?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌‍‌⁠​‍‌‍​‌‌‍​⁠‌‍‍⁠‌‍‍‌‌‍⁠‍‌‍‌⁠​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠​‍​⁠​‌​⁠‍‌​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‌​⁠​‌​⁠‌⁠​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌‍‍⁠‌‌​‍​⁠‌‌‌​‍⁠‌⁠‍‍‌‌‌‌‌​⁠‌‌⁠​⁠‌‍‍‍‌‍‍​‌‌⁠⁠‌​⁠⁠‌‌‍‌‌‌⁠⁠‌​⁠​‌‌‍​​‍​‍‌⁠⁠‌