About

About MLBAnalytic

I’m C. B. Zakarian. I run my own numbers on public baseball data, show the math, and try not to oversell what any of it means.

This site started as a folder of Python scripts I kept rerunning to settle questions for myself — is that hitter actually good, or just hitting in front of the right park; is this reliever’s ERA real or a sequencing accident. At some point the notes got long enough to be articles, so here they are. There’s no staff and no “we.” It’s one person who likes the math and would rather show you the calculation than ask you to trust a take.

That’s the one promise I’ll make: every data-driven piece ships with the script that produced its numbers. If a statistic appears here, it came from a real pull on a specific date — not from memory, not from a screenshot, not from a number I half-remembered being roughly right. You can re-run any of it and check me. People do, and when they catch something I fix it and say so.

What I’m skeptical of, and what you’ll see me poke at a lot: any single number that promises to end an argument. WAR is an estimate stacked on estimates. A lot of “clutch” is noise wearing a narrative. Small samples lie constantly, and most hot streaks are regression waiting to happen. I find the honest version — here’s what the metric can tell you, here’s where it falls apart — more interesting than pretending the spreadsheet has the last word. Baseball is too weird for that.

Methodology & data sources

I lean on a small set of trustworthy, public sources:

  • Baseball Savant (Statcast) — pitch- and batted-ball-level tracking data: exit velocity, barrels, expected stats (xBA/xSLG/xwOBA), pitch types and spray coordinates.
  • The MLB Stats API — the same public feed that powers MLB’s scoreboards: standings, season totals back to the 1900s, schedules, and play-by-play win probability.
  • Baseball-Reference (via pybaseball) — the historical record, OPS+, and Baseball-Reference WAR.
  • Retrosheet and the Lahman database — deep historical play-by-play and season data for long-run questions.

The rules I hold myself to are simple. Historical facts, formulas, and rule changes I’ll state directly — those don’t move. But anything presented as a current or recent-season statistic comes from an actual pull, captioned with its source and retrieval date. When a source is unreachable, I leave a visible note and the working script rather than guess a number into existence. Charts are computed with Python and matplotlib from the fetched data — never mocked up to look right.

How to read the data notes

Tables and charts carry a caption like “Source: Baseball Savant, retrieved June 2026.” That date matters more than people think, because leaderboards change every night the season is live. The bundled datasets behind the exhibits are served openly at /data/data_layer/ (start with SOURCE.txt, which documents where each file came from), and every data piece quotes the exact pull and computation in its “Reproduce it” section. I’d rather hand you the data than ask you to trust a stale screenshot.

Who’s writing this

C. B. Zakarian

C. B. Zakarian is an independent analyst who writes about what he can measure: ball sports and the player-run economies inside Roblox. He builds every model, chart, and calculator here himself from public data, shows the working, and never invents a number. When the data can't answer a question, he says so. On MLBAnalytic, that means sabermetrics you can recompute yourself.

I read every email. If a number looks wrong, tell me which article and what you’re seeing — since each stat has a script behind it, corrections are easy to verify and I fix them fast and note the change. Questions and data requests welcome too: contact@mlbanalytic.com.

One author, several sites

I'm C. B. Zakarian. I write a family of data sites — sports analytics on one side, Roblox's trading economies on the other — all built the same way: public data, open methods, real charts, no invented numbers. The range isn't as odd as it looks; a Pythagorean win expectation and a virtual pet's trade value are the same problem in different clothes — noisy public numbers that reward careful measurement. Every site carries my name because I'd rather stand behind the work than hide behind a brand.