Simplified Analysis: OPS and xFIP

Jayne Kamin-Oncea-Imagn Images
Over the years, I’ve gone to the cutting edge of stats to find advantages. I can go into a deep analysis on any player’s fantasy value, but there isn’t always time to analyze each player’s profile. For a shortcut, I use OPS to evaluate hitters and xFIP and botERA for pitchers. They give me a good predictive look, especially in a small sample. Besides those stats, I might make a cursory look at BABIP and Contact% for hitters and K%-BB% for pitchers.
Note: Recent plate appearances could be the #1 stat to follow for hitters, but I’m going to focus on production stats.
Hitters: OPS Rules Supreme
It’s hard to value hitters with traditional stats because each league has its own rules. For this reason, I’ve found OPS to be the best general stat to use. Here are our Player Rater values at different OPS values.

An R-squared of .44, with stolen bases and playing time not being accounted for. Here is the rank at different OPS values.
| OPS | Auction Calculator Rank |
|---|---|
| 1.000 | 1 |
| .950 | 3 |
| .900 | 8 |
| .850 | 19 |
| .800 | 46 |
| .750 | 108 |
| .700 | 257 |
| .650 | 609 |
Ideally, hitters with projected/actual OPS values over .700 should be targeted, with a .650 OPS being the minimum.
I came to a similar conclusion in this year’s The Process when I included stolen bases.
My goal with this tool is to get a quick idea of a hitter’s roto 5×5 value given his OPS and potential stolen bases. I like using OPS since it correlates with a hitter’s overall fantasy value (once stolen bases are included). This formula takes the two inputs and comes up with a projected draft slot. I use this as a quick way to value players with incoming news, after I’ve already calculated all my draft values. To find the values, I used 2024 ADP (top 450 picks) and the hitters’ stats (OPS and SB). My plan was not to create a formula to value the top players but instead to focus on regular Joes. The studs are well
known, have guaranteed jobs, and are universally drafted in the first few rounds. There is no need to calculate a value for these studs.The formula I ended up with is:
ADP: 8.66*OPS^(-10.5)-8.1*SB+8.7
R-squared: .566Considering no plate appearances were taken into account, I’m surprised with the strong correlation.
From the formula, I created this simple table.

Without being able to steal bases, a hitter’s value drops once they have a sub-.700 OPS.
While other fancy stats, like wOBA and wRC+, capture a player’s overall production, they adjust the hitter’s talent based on league and park factors. Fantasy games don’t adjust for these other factors. All they care about is whether the batter hit a home run, and it doesn’t adjust the contribution depending on the park.
Honorable Mention #1: BABIP
With a small data sample, I might adjust a hitter’s OPS based on their BABIP. If I see a BABIP value over .350 or under .250, I regress them to the closest value. Usually, fewer than 10 qualified hitters have a BABIP over .350 or under .250, I assume the breakout will not outperform the league’s best bats.
For a back-of-the-napkin adjustment, I double the amount BABIP is regressed by and adjust the player’s OPS by that amount (both OBP and SLG take a hit). The numbers don’t work out perfectly, especially if a lot of home runs are involved (they don’t count towards BABIP). Here is an example using Tommy Edman.
Currently, Edman has a .432 BABIP and triple slash line of .351/.431/.491 leading to a .922 OPS, making him an elite hitter. I need to cut his BABIP by 82 points to get it to .350. I use that number to cut both his OBP and SLG each by .082 or .164 total off his OPS. His resulting OPS would be .758 or around the 100th best hitter.
Honorable Mention #2: Contact%
Hitters need a minimum level of Contact% to make it in the league. From the 2026 Edition of The Process, I found:
Those in the 64%-70% Contact range are in trouble of losing playing time while those under 64% are
short for the league.
Currently, no qualified batter has a Contact% under 64%. While there are exceptions (Munetaka Murakami), the rule has held up.
Pitchers: xFIP (and botERA)
My fondness for xFIP and botERA comes from these two tables from the 2025 edition of The Process. The first table shows how predictive stats are after one month compared to the rest-of-the-season value. The other one looks season-to-season.
R-Squared from One Month to Rest-of-Season

R-squared Season-to-Season

Five stats live near the top: Pitching+, SIERA, K%-BB%, botERA (botOvr on an ERA scale), and xFIP.
Listing all five is a complete waste of time, so I need to cull the herd. Pitching+ and K-BB% don’t make the cut because they aren’t on an easy-to-understand ERA scale. For SIERA, I wish it were on our pitcher’s Splits page like xFIP, but it’s not, so it goes away.
The major issue with botERA is that it’s also not available on our splits page, so I mainly reference xFIP even though it may not be as predictive as the other stats.
And when it comes to a backup, I like going with botERA. It is on the same ERA scale as xFIP, so the values can easily be compared. Second, its inputs are completely different than xFIP, so it can show if the two agree or disagree for different reasons.
Honorable Mention #1: K-BB%
I will sometimes use K-BB% when comparing a pitcher split like versus handedness. It’s predictive going forward, and sometimes the differences are stark.
Jeff, one of the authors of the fantasy baseball guide,The Process, writes for RotoGraphs, The Hardball Times, Rotowire, Baseball America, and BaseballHQ. He has been nominated for two SABR Analytics Research Award for Contemporary Analysis and won it in 2013 in tandem with Bill Petti. He has won four FSWA Awards including on for his Mining the News series. He's won Tout Wars three times, LABR twice, and got his first NFBC Main Event win in 2021. Follow him on Twitter @jeffwzimmerman.
You just cannot fake a good xFIP: it probably likes GB heavy guys that aren’t awesome for whip and guys without sufficient stuff to suppress homers at a level that will keep them in mlb for long too much but the inputs are not noisy.