Checkpoint
One last thing before we move on. Same surface as a write step — but the lesson doesn't complete until this passes.
Build defense #3: diff serving-time feature distributions against training. For each feature (alphabetical), compute the serving batch's mean, the relative shift abs(serve - train) / train, and print f"{feat:<8} train={t:<6} serve={s:.2f} shift={shift:.0%}" — appending " <- INVESTIGATE" when the shift exceeds 50%. One feature here has quietly quadrupled; the table should make it impossible to miss. (This comparison is chapter 47's drift monitoring being born.)