|
||||
|
|
OOTP 26 - General Discussions Everything about the brand new 26th Anniversary Edition of Out of the Park Baseball - officially licensed by MLB, the MLBPA, KBO and the Baseball Hall of Fame. |
![]() |
|
Thread Tools |
![]() |
#1 |
Bat Boy
Join Date: Oct 2018
Posts: 12
|
A projection system for OOTP 26
I like to play OOTP with a projection system, which I cobbled together in python code based on prior publicly-available systems from Sgt Mushroom, OOTP calculator and the Donkeykong spreadsheets that were posted here, once upon a time.
I've only played one season in 26 so far but the system looks fit for purpose in the new version. I used it extensively in 24, I didn't get to 25 so I'm coming back into the fold for 26. I find doing this makes the game more immersive and fun, and thought perhaps it might be interesting for others also. So I've uploaded the code and made an explanatory video which I will link below. If you give it a go, good luck with it. https://www.youtube.com/watch?v=P-F4Djmjes0 |
![]() |
![]() |
![]() |
#2 |
All Star Starter
Join Date: Jan 2021
Posts: 1,417
|
Nice work, as always - look forward to trying this out!
|
![]() |
![]() |
![]() |
#3 |
Bat Boy
Join Date: Sep 2020
Posts: 6
|
I love this. I have a similar home brewed system using excel. This might be a good excuse for me to learn how to use python.
|
![]() |
![]() |
![]() |
#4 |
Hall Of Famer
Join Date: May 2011
Posts: 3,074
|
yes, this is quite a project! Nice work! One thing I realize with it though is that I don't believe you'd be able to use it to assist in online leagues, as I don't think you can export databases from them unless you're the commissioner...
I did something similar in OOTP 25, which I'll attach here... this copy includes the 2024 Phillies roster just to show how it works. It provides a current expected stat line (and WAR), a "projected" expected future stat line, and a "peak" future stat line. The basic info that informs it: -I created a fictional league with basically out of the box settings (with all neutral parks), then simmed ahead 10 years (to get the kinks out), then simmed for 20 years and exported all the ratings and stats at the end of the year -I then calculated the effect that each rating had on what it was supposed to affect (e.g. a Power rating of 50 works out to x HR/AB) and then used that info to build baseline offensive profiles for sets of ratings -Defense was much harder to calculate, but in the end, the actual position rating (rather than the component ratings) was a pretty effective proxy for the defensive value at the position -then basically used Fangraphs calculations to get WAR -for pitchers, doing a straight FIP-based WAR calculation didn't make as much sense because of the pBABIP rating, so instead I calculated a pitcher "expected wOBA allowed" and used that to calculate WAR -there are some corrections made for injury proneness, what position you play (e.g. first basemen play more games than catchers), DH hitting penalty, and leverage index for relievers when relevant -The "current" and "peak" stat lines are pretty self explanatory, but basically use the current ratings and the potential ratings, respectively. -I also did some research on development to inform the "projected" stat line. It basically looks at the player's potential and age, lightly incorporates personality factors, and then provides expected (not peak) future ratings. I was hoping to include current ratings as well, but it just muddied the results too much. It assumes players will not develop past age 25- which they rarely do in OOTP 25. To use it, you would export a list including all the columns listed on the final tab for hitters or pitchers, respectively, then paste those columns into the left side of the appropriate tab. I don't have the coding chops to make a web app out of this, but I was able to get Excel to do what I needed to... I'm hoping to build on this a bit in OOTP 26 when the dust settles a few patches in- likely putting together an aging model as well as a development model. |
![]() |
![]() |
![]() |
#5 |
Bat Boy
Join Date: Mar 2025
Posts: 5
|
This is super impressive man, bravo!
|
![]() |
![]() |
![]() |
#6 | |
Bat Boy
Join Date: Oct 2018
Posts: 12
|
Quote:
|
|
![]() |
![]() |
![]() |
#7 | |
All Star Starter
Join Date: Jan 2021
Posts: 1,417
|
Quote:
|
|
![]() |
![]() |
![]() |
#8 |
Hall Of Famer
Join Date: May 2011
Posts: 3,074
|
Neither of those should matter actually- the overall and potential ratings aren't pulled in anywhere, nor are the height or weight. But you do need to have ratings set to 20-80. And to be clear, this was all done on OOTP 25, I haven't looked at this for 26 yet.
|
![]() |
![]() |
![]() |
#9 |
All Star Starter
Join Date: Jan 2021
Posts: 1,417
|
Thanks, that's perfect for me as my online league is remaining with 25 for the foreseeable future!
|
![]() |
![]() |
![]() |
#10 |
Bat Boy
Join Date: Oct 2018
Posts: 12
|
|
![]() |
![]() |
![]() |
#11 |
Bat Boy
Join Date: Oct 2018
Posts: 12
|
I've just updated the Pistachio projection system shown in my youtube videos to v2 - reflecting various tweaks I've made this week as I've been playing OOTP.
If you want the latest version I've posted it as a github repo here: https://github.com/squirrelplays/pistachio Changes from v1 to v2: - catcher defense WAR projection now based on catcher framing, not catcher ability - pitching projections now based on HRA + pitcher BABIP, not just movement i.e. updated to reflect the changes made in OOTP 25. - pitcher projection weightings updated to 25% stuff, 19% control, 51% HRA, 5% pitcher BABIP (this is data-driven based on OOTP 26 data from my save but v rudimentary - I'm multiplying these against the 20-95 ratings not the 1-600 underlying ratings - it seems to work ok but far from the most accurate projections imaginable) - FIP projections normalised onto a scale with 4.1 as league average - hence FIP and pitcher WAR projections should look a bit more sensible - pbabip >= 45 threshold added for pitchers - groundball % minimum threshold now fixed to flow through properly to current and potential ratings (didn't previously) - minimum rating for a pitch to count as a 'good pitch' set at 45 (on 20-80 scale) for both current and potential pitchers - previously it was left at 50 in error for potential and cut various guys off - players traded in-year now come up as one row not multiple (with thanks to the user who pointed this out and provided code to fix) - adds a new column Tpct for position players which is short for 'on-track %' - it compares current (not potential) OPS+ projection vs standardised curves by position to see extent of development for prospects Any other thoughts welcomed. EDIT: Added reference to Tpct which I forgot in the first draft of this post Last edited by squirrel; 03-24-2025 at 06:47 AM. |
![]() |
![]() |
![]() |
#12 |
Minors (Double A)
Join Date: Mar 2011
Posts: 154
|
squirrel, I cannot wait to try the new system. Having a new one was very overdue, and let's face it, is a lot of fun. I hope you continue with OOTP, your videos are a breath of fresh air and I like when the "vets" do theory work too in-between their playthroughs.
--my playing around with pitching projection is childlike compared to what pistachio is doing, I'd rather see how that can keep getting better-- Last edited by Guthrien; 03-24-2025 at 09:50 PM. Reason: removed link |
![]() |
![]() |
![]() |
#13 | |
Bat Boy
Join Date: Oct 2018
Posts: 12
|
Quote:
In OOTP 24 I had a bit of extra logic going on to see whether a position player draft prospect has an OPS+ 'on track' for their age i.e. whether their current ratings made sense vs their age. I've left the calc in the code - and in fact I forgot to mention this in the changelog above but in this v2 I've added back into the outputs an extra column called Tpct which attempts to cover this...the idea is that 1.00 indicates a player is 100% on track to be a MLB-level player, 0.9 means 90% on track, 1.10 means 110% on track and so on. The idea behind this is to cool the jets when I see a 20/75 prospect in the fifth round and when you look closely the player is age 19 and apparently won't have a bat ready to compete in rookie ball level for another four years or so. Still might take the player, but just have that slightly better grounding on what I'm looking at. I'm hesitant to recommend this to others for now because I haven't used it for many drafts - and it relies on a load of hard-coded numbers for (1) player OPS+ projection growth % at each age, on average and (2) what OPS+ I expect from a 21 year old MLB-calibre prospect at each position. I can't imagine these will vary that much between OOTP 24 and 26, but they might. At first glance in my first handful of OOTP 25 drafts it looks useful in its current form. Last edited by squirrel; 03-24-2025 at 06:54 AM. |
|
![]() |
![]() |
![]() |
#14 |
Bat Boy
Join Date: Oct 2018
Posts: 12
|
# Define the growth factors
growth_factors = { 14: 0.00, 15: 0.01, 16: 0.00, 17: 0.02, 18: 0.04, 19: 0.05, 20: 0.06, 21: 0.09, 22: 0.10, 23: 0.08, 24: 0.04, 25: 0.05, 26: 0.01, 27: 0.01, 28: 0.00, } These are the growth factors I've used to calculate Tpct and they are based on data taken from OOTP 24 with default MLB settings. This tells you, for example, that the code expects a player aged 22 to have a 10% improvement in their current OPS+ projection during that year. The code expects players to be fully developed by age 27 and considers a position player to be MLB-level or on-track for MLB if their OPS+ projection at that age (accounting for these growth factors based on their current OPS+ projection) is: For 1B and DH: 110 For C, SS and CF: 90 For everyone else: 100 Last edited by squirrel; 03-24-2025 at 06:52 AM. |
![]() |
![]() |
![]() |
#15 | |
Bat Boy
Join Date: Jan 2022
Posts: 4
|
Quote:
|
|
![]() |
![]() |
![]() |
#16 |
Hall Of Famer
Join Date: May 2011
Posts: 3,074
|
oh right, that part needs a little more explanation. Within the "projected ratings" section, the projected/"smoothed" ratings are only calculated for players under the age of 25- as there is little if any expected development after that age. The section right after that is basically carrying forward the current ratings, but using potential at fielding positions for position players. Then the last few columns will take the maximum of these two. Hope that helps!
|
![]() |
![]() |
![]() |
Bookmarks |
|
|