Ottobasket Dollar Values

I made an app for calculating dollar values for players. Basically pulls stats and then does some calculations to find projected production for each of the different scoring formats and converts that to a dollar value. It’s more of a beta version right now since I’m still working on finding and incorporating a games played number. Some kinks to work out with the UI, too. Hopefully y’all find it helpful though!

Feel free to ask questions

App: https://share.streamlit.io/wfordh/ottobasket_values/main/src/app.py

Full readme: https://github.com/wfordh/ottobasket_values/blob/main/README.md

7 Likes

Very cool!

Would it be possible to tweak the CSV download to include Ottoneu team name and the players’ salaries in the selected league? It would save a step in merging. from the Ottoneu roster export for further analysis.

Yeah definitely. I want to adjust the flow for how the filtering and selecting a league works. Hopefully get it to where the CSV that is downloaded matches what’s on the screen, as I think that makes the most sense in general. No timeline at the moment, but I’ll post here when I get around to it

1 Like

Still working on the presentation side of things especially as it’s getting a lil busy now, but just updated my app to include:

  1. Rest of season values using games and minutes forecasts from hashtag basketball. Obv the season is over so these are 0 but I tested it on some saved data from right before the season is over. Tl;dr is that healthy and active stars at the end of the year are massively valuable. IDK how accurate the hashtag basketball games / minutes forecasts are, but for now that’s what I’m using. This will update once a day when the season restarts
  2. Year to date values using the Ottoneu leaderboard - thanks Niv for adding that! As the season is over, this is basically how much value the players provided during the season. Caveat being that this is agnostic as to whether the player was rostered in Ottoneu. Perhaps this will be useful for arbitration!

LMK if you have any questions.
https://share.streamlit.io/wfordh/ottobasket_values/main/src/app.py

1 Like

It now downloads what is displayed in the app and some formatting stuff has been updated. LMK how it works or if there’s anything else that would make further analysis easier.

I wasn’t sure where else to put this but my question is what actions do we take before the keeper deadline on August 31 as it doesn’t look like we have the ability to add or select players as keepers and I can’t find anywhere where it even tells you how many keepers you get

You can actually keep as many players as you want, so long as your roster is legal (i.e., under 25 players and under $400, subject to having $1 free for every open roster spot).

To keep a player, simply don’t cut him before now and the keeper deadline. That is, you don’t submit a “keeper list.” Rather, your keepers are all the players left on your roster after you’ve made the cuts to make it legal (see above).

2 Likes

So in one of my leagues I have zero dollars free as my team salary is $400 but I still have 15 roster spots free so that would mean I would need to get my team salary down to $385 right?

You need to have enough money free that each of your free roster spots can be filled by a $1 player.

If you have 15 free roster spots and $400 you will need to cut someone such that you will have $16 free for your now 16 free roster spots.

The site tells you if your roster will be valid every time it confirms if you want to make a cut.

I feel like we need to figure out a better way to incorporate players currently not in the league as someone like Victor Wembanyama who is owned for $2 Will even if he gets hit with lots of arbitration next year still be super cheap

When we only have one initial draft to start the league I think you can lead to some of that in balance so one suggestion I would have that I’m certainly not saying is something that will definitely make the situation better but it’s something that I think has some merit and that is to have a rookie snake draft four players currently not in the league where are the teams with the worst records draft first And similar to an NBA draft each position in the draft would have a predetermined salary structure

Feel free to make a wishlist item (and a new topic, since this has strayed quite a bit from the original post), but:

This system has worked for football for 7 years and baseball for 11 and you’re heavily overrating how good players are when they first come in to the league.

I agree with Niv. Maybe Wemby should have gone for more? In one of my leagues he’s already $18 or so. That’s how it goes.

Tying that back to the values, only a few rookies last year provided above replacement value over the whole season. Obviously Cade was maybe over replacement when healthy, etc etc but it was really only Mobley, Scottie, Franz, and maybe one or two others who provided double digit values. It’s hard to be a rookie in the league. Maybe I’ll try to add a rookie player filter to the tool, or do an analysis by years of experience. Thanks for the inspiration!

2 Likes

App is up to date. Hopefully it’ll be useful for cuts. RoS values are using 2022-23 minutes / games projections from hashtagbasketball and the current production projections from DARKO / DRIP. It’s still pulling the leaderboard values for last season on the year to date values, fwiw. I think the rest of season and year to date columns will probably be most helpful for keep/cut decisions.

EDIT: deleted old url!!

(the service I’m using to host it changed the way they make the URLs, in case you’d saved it. They have plans to allow for customizable URLs, so :crossed_fingers: that happens soon)

4 Likes

Another update! Only partially because I found a bug in the categories calculations :grimacing: sorry to anyone who made big decisions there…if it’s any solace, so did I! The tl;dr there is that guards are less valuable and bigs are more valuable than even previously thought.

On to the more exciting stuff! I was able to move it to be a true multipage app, so now there are pages for all of the values and players, your league values, a value breakdown by categories page, and a replacement value frontier page.

The page for all values and players and your league values are the same as what was previously on the app, with maybe some updates under the hood (ie the correction to the categories calculations). The value breakdown by categories is meant to help you plan out which categories you’re strong in and not just give you an overall surplus number, as well as compare players on your team to see if maybe you have too much overlap in one category and so can afford to trade or cut a player. The frontiers page is to show the dividing line between replacement and above replacement value players.

The platform I use made a change to how the table is displayed so all the column names are squished…I’m trying to figure out how to update that since right now it’s hard to tell which is which without expanding them individually. Sorry for the inconvenience!

Lastly, because of the move to the multipage app, I had to change the URL for real this time. Either one of these will get you there:
https://wfordh-ottobasket-values-srcottobasket-values-86spaw.streamlitapp.com/
https://share.streamlit.io/wfordh/ottobasket_values/main/src/ottobasket_values.py

1 Like

That’s interesting that there was a bug involving G vs F and C. I was independently coming up with G values a bit less than you while F and C were a bit higher. I attributed it to methodological differences (i.e., I was basing it on SGP that I had calculated based on last year Ottoneu leagues). So I wound up loading up on F and C for my keepers, which I’ve been second guessing since the keeper deadline. I wound up cutting guys like LaVine, Lonzo Ball, Klay Thompson. Will know in a month or so if that was the correct approach.

It wasn’t explicitly with positions but that’s mainly how it shook out. Yeah switching to SGP is also on the to-do list…just haven’t done it before and haven’t really sat down to wrap my head around it. Lavine is interesting since he has F eligibility but yeah a lot of those guys were cuts at their average prices. Ball especially with his injury woes.

1 Like

I love what you’ve done here and having been exposed to our a little bit I am very impressed!

When I changed it to categories however the table didn’t render

Thanks, I appreciate it! Which table was it that didn’t render?

I think I was mistaken and didn’t notice that it required an input for league ID however the problem I have now is I can’t seem to find where you provide that information.

Also just to clarify are you saying that both links provide the same UI experience and data but just have different URLs?

Yes, it’s the same UI and data. There’s a sidebar with a spot to enter the league number, which you can find in the URL of your league, ie Ottoneu Fantasy Basketball - NBA Twitter Slack - Index is league 26