Self-paced course · Intermediate to Advanced · 80 lessons
PRIOR. DATA. POSTERIOR.
Build real Bayesian models in Stan from the ground up, the skill that separates analysts who can quantify uncertainty from those who only ever point-estimate.
An agent can write the model. This course is about knowing when it is wrong.
Who it is for. Analysts and data scientists who can write R and want to actually build Bayesian models in Stan, hands-on.

Bayesian models coded and fit in Stan, from priors to posteriors
GLMs and hierarchical models on real sports data
The judgment to check, compare, and trust your models
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: Move the prior strength, or edit prior_strength and run: watch the hot starts pull toward the group.
Data: Hot-start hitters (batting_2026.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.

PhD · Lecturer, Applied Analytics @ Columbia University
Teaches the course the way the work is done in the role above. The team page lists everything they teach here.
Also teaches Becoming a BayeZian II.
The artifact. Bayesian models on sports data, specified, fit in Stan and checked, with the write-up that explains the uncertainty.
# Prior, data, posterior for two hitters: the same Beta prior, forty-five at-bats each, two different posteriors.
suppressPackageStartupMessages({library(dplyr); library(ggplot2); library(readr); library(tidyr); library(svglite)})
hitters <- read_csv("site/18-practice/hot-start-hitters/files/batting_2026.csv", show_col_types = FALSE) |> mutate(avg = hits / at_bats) |> arrange(desc(avg))
a0 <- 40 * .26; b0 <- 40 * .74 # a league prior: mean .260, worth about forty at-bats
pick <- hitters[c(1, nrow(hitters)), ]
grid <- tibble(x = seq(.05, .6, length.out = 300))
dens <- bind_rows(
grid |> mutate(who = "prior", d = dbeta(x, a0, b0)),
grid |> mutate(who = sub(".* ", "", pick$name[1]), d = dbeta(x, a0 + pick$hits[1], b0 + pick$at_bats[1] - pick$hits[1])),
grid |> mutate(who = sub(".* ", "", pick$name[2]), d = dbeta(x, a0 + pick$hits[2], b0 + pick$at_bats[2] - pick$hits[2])))
p <- ggplot(dens, aes(x, d, color = who)) + geom_line(linewidth = 1.1) +
scale_color_manual(values = c("#8FA3AA", "#C7BB42", "#5EC0D0"), name = NULL) +
labs(x = "true batting average", y = "density", title = "One prior, two hitters' first 45 at-bats, two posteriors") +
theme_minimal(base_size = 11) +
theme(plot.background = element_rect(fill = "#010B0F", color = NA), panel.background = element_rect(fill = "#010B0F", color = NA),
panel.grid = element_line(color = "#1B3A42"), text = element_text(color = "#F5F1E6"), axis.text = element_text(color = "#F5F1E6"),
legend.text = element_text(color = "#F5F1E6"), plot.title = element_text(face = "bold", size = 12), legend.position = "top")
s <- svgstring(width = 7.2, height = 4.2, standalone = FALSE); print(p); invisible(dev.off()); cat(s())Data: Hot-start hitters. 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.
80 lessons in 20 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.
Analysts and data scientists who can write R and want to actually build Bayesian models in Stan, hands-on. 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.
20 sections · 80 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.
20 sections · 80 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.