Four sources, one leaderboard:
multiclass classification, graded honestly

Session 15 · Mon Nov 2 · Book section 3.5

🏆

Today’s question

A leaderboard turns your classifier into one number.

What has to be true of the design for that number to mean anything?

This lecture in the literature

📖 Where today’s data comes from: the curated Pacific Northwest catalog behind our four classes.

Ni, Y., Hutko, A., Skene, F., Denolle, M., Malone, S., Bodin, P., Hartog, R., & Wright, A. (2023). Curated Pacific Northwest AI-ready seismic dataset. Seismica, 2(1).

Doing it right: earthquake-vs-blast classifiers deployed beside human analysts, scored per class.

Linville, L., Pankow, K., & Draelos, T. (2019). Deep learning models augment analyst decisions for event discrimination. Geophysical Research Letters, 46, 3643–3651.

Leakage in the wild: a taxonomy of competitions and studies whose winning scores measured the leak, not the skill.

Kaufman, S., Rosset, S., Perlich, C., & Stitelman, O. (2012). Leakage in data mining: formulation, detection, and avoidance. ACM Transactions on Knowledge Discovery from Data, 6(4), Article 15.

📖 Why leaderboards need a hidden test set: repeated submissions overfit the public score — and how to limit it.

Blum, A. & Hardt, M. (2015). The Ladder: a reliable leaderboard for machine learning competitions. Proceedings of the 32nd International Conference on Machine Learning, PMLR 37.

The field is actively writing this story — new papers land monthly. These four anchor today’s ideas.

Four sources of shaking, one catalog

4 × 1000 earthquake · explosion · surface event · noise

61 physical waveform features per event

Real Pacific Northwest events, curated and archived on Zenodo (record 14025693). Balanced by curation — real catalogs are not.

The seismometer records all four. The network needs to know which one it just felt.

Where the errors live

32 explosions called earthquakes — the biggest cell off the diagonal. Quarry blasts and shallow earthquakes shake alike at regional distances.

One class against the rest

ROC is a two-class tool. For four classes: binarize — each class versus the other three. Explosions are the hardest to separate.

The graded metric: macro-F1

0.88 random forest, macro-F1, held-out events

Per class: F1 = harmonic mean of precision and recall. Macro = average the four F1 scores with equal weight — the rarest class counts as much as the commonest.

Accuracy lets a model coast on easy, common classes. Macro-F1 makes every source type count equally.

The leaderboard contract

  • One canonical design: everyone trains on the same random 75%, stratified by class — one shared line, defined in the notebook, seeded
  • Predict the shared held-out 1000 events, submit predictions by pull request
  • CI scores macro-F1 and posts the standings
  • Opens today · closes Tue Nov 24

Any model, any features. Model choices are made by cross-validation inside the training set — never by peeking at the held-out events.

Honest by design — what the random line hides

  • No event ID, station, or origin time in the tables → nothing to group by
  • The same quarry, blasted many times, can straddle the line — credit for recognition, not generalization
  • So the public score is diagnostic; the grade rides on a hidden set, regenerated yearly from private seeds

Naming what your evaluation cannot test is part of the evaluation. Monday (3.8): the full ladder of designs this dataset cannot run.

What we built today

Tool The question it answers Today’s answer
Confusion matrix which sources get mistaken for which explosions → earthquakes, 32 of 250
One-vs-rest ROC is each class separable at any threshold AUC 0.95–0.98; explosions lowest
Macro-F1 skill with every class weighted equally 0.88 vs a 0.25 floor
Hidden test set did you tune to the public score public = diagnostic, hidden = grade

Per-class evaluation plus an evaluation design you can defend — that pair is the deliverable, today and in your project.

Now run it yourself — open 3.5

  1. pixi run jupyter lab3.5_multiclass_classification.ipynb
  2. Run the canonical split cell (train_test_split, random_state=2026, stratify=y) — then the three classifiers
  3. Beat 0.88: engineer features, try any model — select by cross-validation on X_train only
  4. Write results/predictions_<uwnetid>.csv and open your leaderboard pull request

Leaderboard closes Tue Nov 24 · Wed: logistic regression + calibration (3.6), HW-CML assigned · Mon: robust training (3.8)