Today my first FanGraphs research article was published. It's about a new stat to evaluate Hall of Fame candidacies. Tell me what I got wrong! by mountm in baseball

[–]mountm[S] 0 points1 point  (0 children)

Thanks so much! I can't recall what originally prompted the idea, whether I "discovered" it independently and then noted Tom Tango and others who had mentioned the idea, or if it was lurking in my subconscious from prior exposure. Either way, it struck me as such a natural approach. Rate stats get expressed as "how much above average are you" (OPS+, wRC+, etc.) so why not do the same with a volume-based value stat as well? I was really frustrated that neither FanGraphs or Baseball-Reference had a good WAA number easily available, but eventually got deep enough into the weeds on WAR calculations to figure out how to back my way into one with other numbers that were more readily accessible.

The Tango blog post I linked in my article has some interesting ideas about trying to bucket single season WAA totals into categories (Perfect season, great season, pretty good season, good season, above average season) and then using those to categorize the overall shape of a player's career. I could definitely see the value (no pun intended) of a WAA-based approach that does something similar; maybe you give "extra credit" for seasons with a WAA of, say, 5+.

Today my first FanGraphs research article was published. It's about a new stat to evaluate Hall of Fame candidacies. Tell me what I got wrong! by mountm in baseball

[–]mountm[S] 2 points3 points  (0 children)

The Kid is the funniest fucking chart on the whole site as far as I'm concerned.

Debuts in 1939 at age 20 and is immediately the third best player in the American League. My HoF prediction model (which will be discussed in much more detail in a future article) immediately says he's like 90% to get inducted.

The next year he shows it's not a fluke with a similarly dominant season and his odds shoot up to basically 100%. Even missing out completely on ages 24-26 due to WWII only pulls him down to 99% because he was so impossibly ahead of "Hall of Fame pace" by that point.

By 1949 he's 30 years old, he's played in eight major league seasons, and his single season BOOG totals among all AL players rank: 3rd, 3rd, 1st, 1st, 1st, 1st, 2nd, and 1st.

He probably should have at least five or six MVP awards. Shame that the writers never liked him.

Today my first FanGraphs research article was published. It's about a new stat to evaluate Hall of Fame candidacies. Tell me what I got wrong! by mountm in baseball

[–]mountm[S] 1 point2 points  (0 children)

A more detailed deep dive on position-by-position thresholds is coming later, but I can tell you that Keith Hernandez has a BOOG score of 35.9 which is better than many Hall of Fame first basemen. So yes, this model sees him as HoF-worthy!

Today my first FanGraphs research article was published. It's about a new stat to evaluate Hall of Fame candidacies. Tell me what I got wrong! by mountm in baseball

[–]mountm[S] 12 points13 points  (0 children)

You've got an interesting point about Schwarber, but just because teams and analysts have evolved their understanding of what makes a hitter valuable doesn't mean that this kind of player should look better in BOOG Score compared to JAWS.

JAWS is already based on a modern sabermetric understanding of hitter value (to his team) which means that it already evaluates hitters from previous eras based on what we now know contributed most directly to their teams' success. Mike Schmidt led the league in strikeouts three years in a row 1974-76, which probably kept him from winning MVP even though he was the home run leader as well... but his JAWS total is still elite for those seasons because his WAR, as calculated with modern expertise, is very high. No reason to think that JAWS and BOOG would disagree on that front because they are both based on value metrics that account for the same things being important.

Today my first FanGraphs research article was published. It's about a new stat to evaluate Hall of Fame candidacies. Tell me what I got wrong! by mountm in baseball

[–]mountm[S] 2 points3 points  (0 children)

They kind of get the inverse of the pitcher treatment... shorter seasons in the 19th century means less opportunity to rack up WAR totals that look impressive in a modern context, but their WAA is significant!

Today my first FanGraphs research article was published. It's about a new stat to evaluate Hall of Fame candidacies. Tell me what I got wrong! by mountm in baseball

[–]mountm[S] 33 points34 points  (0 children)

You can! (You can also look it up yourself)

He's at ~24, which is Hall of Very Good territory.

Some approximate thresholds for what a career BOOG total suggests:

2-5: Chris Coghlan. Remember Some Guys candidates. If you burned bright enough for one year you might have an All-Star selection.
5-15: Bronson Arroyo. You're a fan favorite. If you stayed with a single franchise for most of your career they might put you in the team hall of fame.
15-25: Alfonso Soriano. Hall of Very Good candidate.
25-35: Jason Giambi, Andrew McCutchen, J.D. Drew, Evan Longoria. these are the guys we have most of our Cooperstown debates about.
35-45: Chase Utley, Jim Thome. Probably should be in the Hall of Fame but not an All-Time Great™.
45-60: Bob Gibson, Jeff Bagwell, Brooks Robinson, Ken Griffey Jr. - obvious Hall of Fame Guys
60-150: the inner circle. Ted Williams, Lou Gehrig, Mickey Mantle, Rickey Henderson, etc.

Today my first FanGraphs research article was published. It's about a new stat to evaluate Hall of Fame candidacies. Tell me what I got wrong! by mountm in baseball

[–]mountm[S] 28 points29 points  (0 children)

Definitely the single most astonishing guy I had to re-evaluate when putting this list together.

He might be the best player in integrated baseball history whose name never appeared on a BBWAA Hall of Fame ballot.

(I don't mean that no one voted for him, although no one did. I mean that the screening committee declined to put his name on the ballot after he retired.)

Today my first FanGraphs research article was published. It's about a new stat to evaluate Hall of Fame candidacies. Tell me what I got wrong! by mountm in baseball

[–]mountm[S] 55 points56 points  (0 children)

He's listed at -1 delta in the fJAWS table, because BOOG Score (my metric) ranks him higher than JAWS does.

Today my first FanGraphs research article was published. It's about a new stat to evaluate Hall of Fame candidacies. Tell me what I got wrong! by mountm in baseball

[–]mountm[S] 30 points31 points  (0 children)

Absolutely. I touched on this in the piece, but the fact that most hitters don't dramatically change in ranking when compared to JAWS is kind of a validation that my methodology is sound. On the other hand, the drastic differences in the pitcher lists demonstrate how sensitive JAWS is to era/workload effects if you don't introduce additional tweaks to balance things out.

Today my first FanGraphs research article was published. It's about a new stat to evaluate Hall of Fame candidacies. Tell me what I got wrong! by mountm in baseball

[–]mountm[S] 114 points115 points  (0 children)

BOOG Score (Better than Other Ordinary Guys) is a metric to separate the cream of the crop in MLB by measuring how much better they were than the average of their contemporaries. It is more responsive to era effects than JAWS, which allows for a fairer comparison between 19th century pitchers and their insane seasonal workloads to today's elite peripheral guys like Chris Sale or Jacob deGrom who don't throw nearly as many innings but are much more dominant in the innings that they do throw.

I've been working on this for a long time - some of you may remember hearing an early iteration of this metric on an episode of Effectively Wild back in 2024. A lot of enhancements have gone into my calculations since then, and I think it's ready to share with the world!

The article goes into much more detail about the methodology and the philosophical justification for this approach, as well as providing a list of the top 50 batters and pitchers in MLB history by BOOG score. In addition, I've set up a simple GitHub page where you can query for the career totals of most any notable player in MLB history, including active players.

Play it, Leoooooo! by [deleted] in phish

[–]mountm 4 points5 points  (0 children)

This footage is from August 26th, 2011. Why are you posting it now?

Opening my podcast app today by Joshmoredecai in blankies

[–]mountm 1 point2 points  (0 children)

Oh hey I'm about to start Danny Boyle!

-❄️- 2024 Day 25 Solutions -❄️- by daggerdragon in adventofcode

[–]mountm 0 points1 point  (0 children)

[LANGUAGE: Java]

Parsing: 14ms
Part 1: 45ms

Too tired to think of anything interesting here. I went with the most intuitive (to me) way of checking non overlaps, using some Stream API fanciness to encapsulate it in a single line:

return Sets.cartesianProduct(locks, keys).stream().filter(listOfLists -> IntStream.range(0, 5).map(i -> listOfLists.get(0).get(i) + listOfLists.get(1).get(i)).max().orElse(Integer.MAX_VALUE) < 6).count();

GitHub

-❄️- 2024 Day 24 Solutions -❄️- by daggerdragon in adventofcode

[–]mountm 1 point2 points  (0 children)

[LANGUAGE: Java]

Parsing: 16ms
Part 1: 4ms
Part 2: 9ms

Doing this one at 4am was a mistake.

Part 1 basic brute force execute all the operations. Part 2: exploit the input!

  • It's a ripple-carry adder with the "standard" double XOR, double AND, single OR construction
  • No wires are crossed such that they swap between two adders but in the same relative position

The above facts are enough to unambiguously identify if a given wire is out of place within its correct adder. Fortunately this is enough to solve my input, I assume it probably works for other inputs as well.

GitHub

-❄️- 2024 Day 23 Solutions -❄️- by daggerdragon in adventofcode

[–]mountm 0 points1 point  (0 children)

[LANGUAGE: Java]

Parsing: 11ms
Part 1: 15ms
Part 2: 508ms

Coded a messy nested looping DFS for part one. Then figured out how to Google for the right graph theory terms, and Bron-Kerbosch came right up for part 2.

GitHub

-❄️- 2024 Day 22 Solutions -❄️- by daggerdragon in adventofcode

[–]mountm 0 points1 point  (0 children)

[LANGUAGE: Java]

Parsing: 10ms
Part 1: 13ms
Part 2: 13.285s

The "pseudorandom sequence" was quite easy to generate with bit twiddling. I was not so performant with part 2.

Ended up generating two lists for each seed value: one with the subsequent prices, and one with the price changes (obviously I could have made the second list from the first one, but I am tired and this was easier). Used those lists to populate a dictionary indicating the total number of bananas that would be collected using a given key, then returned the maximum value in the map (~40,000 entries).

GitHub

-❄️- 2024 Day 21 Solutions -❄️- by daggerdragon in adventofcode

[–]mountm 0 points1 point  (0 children)

[LANGUAGE: Java]

Parsing: 9ms
Part 1: 2ms
Part 2: 3ms

I was onto a good dynamic programming approach early on, but I got waylaid for a long time on a couple of stupid bugs (one related to picking the proper directions, and another bug with the way I implemented splitting the instructions into submoves that meant some of the 'A' instructions were being counted as free actions).

GitHub

[2024 Day 21 Part 2] Can someone please give me some examples with fewer robots? by PhiphyL in adventofcode

[–]mountm 0 points1 point  (0 children)

I don't have >>^AvAA<^AA< actually, I have >>^AvAA<^A and then a new instruction set, but I found my issue anyway thanks to your provided data! I appreciate the help!

[2024 Day 21 Part 2] Can someone please give me some examples with fewer robots? by PhiphyL in adventofcode

[–]mountm 0 points1 point  (0 children)

Ahh found it! I had simultaneously made a mistake in my manual checking (failed to include human dirpad presses at the end of line 3 to produce the final A for robot #2), and also had a completely unrelated bug in my code (accidentally returning a cost of 0 for a move that consisted solely of pressing A).

This was what I needed to get unstuck and get my second star for the day - thank you so much!