Self-paced course · Intermediate · 43 lessons
PREDICT THE WIN.
Build and evaluate the machine-learning models sports teams actually use in Python, from regression to neural nets.
An agent can write the model. This course is about knowing when it is wrong.
Who it is for. Python users who want to build real machine-learning models on sports data, end to end.

A full ML pipeline in scikit-learn
GLMs, GAMs, trees, and neural networks on real sports data
Honest model evaluation and selection
The chart on this page, drawn by code you can edit. R runs on webR and Python on Pyodide; nothing loads until you press Run, and nothing you type leaves the page.
Edit me: Set cell to 0.25 for a finer grid, or min_swings to 20 for steadier rates, and run again.
Data: Pitch movement and whiffs (pitch_movement.csv). Simulated for practice by AthlyticZ (agents/sim_data.py, seed 20261109). License CC BY 4.0.
The code runs in your browser on webR or Pyodide; nothing you type leaves the page.

Director of Predictive Modeling @ Philadelphia Phillies
Teaches the course the way the work is done in the role above. The team page lists everything they teach here.
The artifact. Prediction models on sports data with honest evaluation, from feature engineering to a validated result.
# Can a model tell the pitch type from release speed alone? A classifier on six thousand pitches, scored honestly on held-out data.
import sys, pathlib, csv
sys.path.insert(0, str(pathlib.Path(__file__).parent))
from _palette import plt, emit, GOLD, TEAL, AQUA, CREAM, MUTE
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.ensemble import GradientBoostingClassifier
rows = list(csv.DictReader(open("site/18-practice/pitch-speeds/files/pitches_2026.csv")))
X = np.array([[float(r["release_speed"])] for r in rows]); y = np.array([r["pitch_type"] for r in rows])
Xtr, Xte, ytr, yte = train_test_split(X, y, test_size=0.3, random_state=3, stratify=y)
clf = GradientBoostingClassifier(random_state=3).fit(Xtr, ytr)
acc = (clf.predict(Xte) == yte).mean()
grid = np.linspace(65, 102, 300)[:, None]; proba = clf.predict_proba(grid)
fig, ax = plt.subplots(figsize=(7.2, 4.0))
cols = {"FF": GOLD, "SL": TEAL, "CH": AQUA, "CU": CREAM}
for j, c in enumerate(clf.classes_):
ax.plot(grid[:, 0], proba[:, j], lw=1.8, color=cols.get(c, MUTE), label=c)
ax.set_xlabel("release speed, mph"); ax.set_ylabel("P(pitch type | speed)"); ax.set_ylim(0, 1)
ax.set_title(f"Speed alone gets {acc:.0%} right on held-out pitches: the overlap is where the model is unsure")
ax.legend(frameon=False, fontsize=9)
emit(fig)Data: Pitch speeds by type. Simulated for practice by AthlyticZ (agents/sim_data.py, seed 20261109). License CC BY 4.0.
From the academy course record, in the order it is taught. The first section is open; the rest fold out.
43 lessons in 11 sections, 11 quizzes. Every lesson is yours to keep.
Refunds. If you enrolled and it is the wrong course for you, write to michael@athlyticz.com and a person will answer.
Yes. Membership includes this and the entire course catalog, plus the live Masterclass. If you plan to take more than a couple of courses, Membership is the better math.
Python users who want to build real machine-learning models on sports data, end to end. If the "not for you" list above reads like you, start elsewhere; if the outcome at the top reads like something you could use next week, it is pitched right.
11 sections · 43 lessons. Every lesson, the project files and code, and all future updates. Lifetime access: it is yours to keep.
Yes. Start today and go at your own pace, with lifetime access to every lesson and all future updates.
11 sections · 43 lessons, the project files, and every future update.
Enroll nowThis course, the whole catalog, and the Masterclass: every live session and every recording.
Get MembershipLoading the calendar.
The calendar did not load here. Open it on Calendly.
Confirmed
Calendly has sent the invitation to your inbox, with the link for the call. Michael will see you then.
We've teamed up with AthlyticZ to supercharge how we use data science and statistics to impact our sports. More clarity in the numbers means bigger results for our athletes.
AthlyticZ has completely transformed the learning approach to data science through the use of sports-based problems. The instructors are the best of the best, and the practical projects have immediate impact to students.
The sports industry moves fast. Managing the pace of evolving technology, data, and AI isn't optional - it's imperative. Our Analytics team was looking for a partner to meet us where we are, to help us in the continued investment of our people and capabilities without pulling us away from the work that matters. AthlyticZ delivers exactly that: a structured, practitioner-led platform that fits how modern sports analytics groups actually operate.