Ottobasket Dollar Values

There’s now a free agents page! And it includes average ottoneu roster % and salary - not broken down by scoring type as that’s not available on the website. For reference, the page with that information is Ottoneu Fantasy Basketball - Average Values

edit: as far as I can tell, the free agents page will update quickly so I think it’ll be helpful for drafts. Of course, you can also download it and do whatever in excel or sheets or whatever. TBD though we’ll find out once drafts start lol

Couple more updates!

  • There’s now a glossary / data sources page! Feel free to ask for clarifications or additions to this but hopefully it clears some stuff up
  • Fixed a bug on the free agents page where it wasn’t working for traditional points leagues
  • Added some check boxes to the main page! You can now choose which minutes options to show values for, as long as you pick at least one. It defaults to year to date and rest of season. You can also choose to show players’ NBA and Ottoneu IDs in case you want to download the page and join it to other data sources. If there are other IDs that others are interested in, let me know! I’m going to work on adding this to other pages, too.

Also for hopefully the last time, I’ve updated the URL now that Streamlit allows for custom subdomains.

New URL:

The link still works, but the other one does not. Hope that doesn’t break too many people’s favorites or anything :grimacing:

1 Like

Getting buggy values for the rest of season projections due to hashtag-basketball’s projections being wonky for players who have missed time (eg Otto Porter projected for about 50 more games when he’s out for the season and there aren’t 50 games left on the schedule).

I’m working on a solution, including looking at other projections and manually updating. For now I’d avoid the rest of season.

1 Like

Two new additions to the app!

  1. I’ve added a historical stats page to the app that includes data on position, production, and value from 1996-97 through last year (21-22). Please note that for those seasons the position used for each player are what has listed for the players and not Ottoneu’s data provider. Last year’s values are also calculated using the current, 2 UTIL spot lineups and not the 1 UTIL spot lineups that were used last year. You can also download the data from the website or find it here. I’m planning on doing some analysis using some of this data and will post the results whenever it’s done!
  2. The league values page now has a “rotation” breakdown available when you select the “Teams” option. From the page:

The ‘rotation’, ‘depth’, and ‘other’ columns are estimations of where a team is spending their money in their roster construction. I designate the top 3 guards, top 2 forwards, top center, G / F, and F / C, and the next 4 best players by total value as ‘rotation’ players, the bottom 8 players as ‘other’, and the middle as depth. This is subject to change during the season as injured players may go in and out of the rotation. Other players are typically pre-NBA prospects and injured players.
The rotation level columns are currently only calculated using year-to-date statistics. I hope to add rest of season statistics to it at some point.

I might also add which category each player is in to the player option of the league values page.

Any input on design, particularly for the rotations breakdown, is welcome! I know the app is getting a little busy and the number of pages has gotten to be kind of a lot (at least to me). LMK if you think there’s anything that could be adjusted to make it more user friendly!


Just a heads up as the cut deadline is a couple days away - I’m working on getting the app up to date for this season as some minutes projections were released this week. I’m not totally sure that I’ll get to it since things have been pretty hectic (and trying to manage my own teams). Will update further if / when it happens!

1 Like

It’s basically back up and running.

The main thing to note is rookies are not included right now. So you will not see Wemby. This is mainly due to the models I pull from only using NBA data and since they haven’t accrued any of that yet, they aren’t there. I’ve tried incorporating data from another source for rookies but so far have only gotten a few of them (Wemby is around $30 in simple points, $40 in trad points, and $50 in cats in that run). The main thing there is that those players will have a ripple effect on other players once they’re included, so those numbers will likely vary whenever I get it working.

YTD numbers are still for last season since they pull from the Ottoneu leaderboards, which are still on last year.

ROS numbers are the projections for this season.

Rookies are now included! I pulled their stats from hashtag basketball’s projections and incorporated them in with the projections I have for veterans that are derived from DARKO and DRIP. I don’t love using two different sources, but I still trust DARKO and DRIP over hashtag basketball in general, so this is what we’re rolling with for now.


Here are the rookies that have a positive projected value for any format. As you can see, categories is pretty tough on rookies while there’s more hope for them in the points formats. Wemby is projected to be a touch more valuable than Evan Mobley’s rookie season a couple years ago, where he went for $36 in simple points, $45 in trad points, and $48 in categories.

I don’t have any numbers right now on how much more Scoot would be projected for in the event of a Dame trade, though I’d like to add some ability to fiddle with the projections at some point.

Now on to how the different formats were impacted. Rookies will be excluded from these tables since all the relevant info is in the above table. Minutes projections for the veteran players were the same between the “old” (no rookies) and the “new” (rookies included).


I’m pretty sure it’s just a coincidence that Zach Collins is the main beneficiary of Wemby being added, though it is kinda funny. I was a little surprised that any veterans gained projected value, but I guess the added rookies moved the replacement level line and impacted the surplus factor that’s used to find the projected value. Other than Collins, De’Anthony Melton was the only other player to see a boost of more than $1.


Of the top five “losers” (I feel bad calling them that…), only Matisse Thybulle went from projected positive value to being a replacement level player. Again I think it’s just a coincidence that one of the impacted players is a teammate of one of the main rookies. The rest of the losers are all top end guys who got knocked down just a touch when compared to their overall value.

Simple Points

In another illustration of how simple points is the most conducive to rookies, only Zach Collins saw his value go up with the rookies included. Nobody else moved in that direction.


Here we see several players booted into the replacement level pool, though I think there’s reason for optimism with all of them. Smart could have some early season value while Morant is suspended, though his adjustment to the Grizzlies will be interesting. Fultz and Sexton will both be fending off rookie guards in Anthony Black and Keyonte George, respectively. Sexton also had very rosy projections last year before struggling with injuries. If he can be healthy, maybe he makes some noise this year. Lu Dort has the toughest road as he’s now behind SGA, Giddey, and Jalen Williams on the perimeter for the Thunder, though he’s also the easiest to plug into an off-ball role of those players.

Kevin Huerter got knocked down a touch as well, but is still a strongly positive player and probably still a surplus value for most teams.

Trad Points

I upped the number of players to include here since there were so many. Jokic somehow got pushed up even higher! And many other high level players saw increases along with our favorite gainer, Zach Collins. I am curious about why so many players got bumped up here…just another thread to pull on, if I have the time.


Similar to the gainers, we see players with sizeable deltas compared to their projections without the rookies included. Several got bumped into the replacement player pool. It’s interesting that all of these players have F eligibility while most of the gainers have G eligibility.

I can share the full document if people are interested, especially since not all the impacted players in traditional points were shared.

Next up in my projects list is adding fppg and some other things to the app itself, and an analysis of how the various projections that I downloaded prior to the 2022-23 season performed, aka some retrodictions.


More updates!

I added Chet Holmgren to the list of rookies, so his data will now also be pulling from hashtag basketball for the time being. In general for the rookies I might switch them over around midseason to the same system as everyone else or try to blend the two numbers together.

I also added the games forecast from Hashtag Basketball to the Free Agents page, along with fantasy points per game for points-based formats. I hope to have something similar for categories at some point, but need to decided how to present it since on a per-game basis it’s bunched around 0.0. Might just multiply it by 82. Hopefully this helps with players who are projected to miss some time such as Ja Morant this year (or Jaren Jackson last year).

And some analysis!

Lastly, I compared my 2022-23 preseason values and ones derived from Hashtag Basketball, Numberfire, and FantasyPros’ projections (note could only do simple points for FP and their projections are a composite of the other two plus ESPN) to the actual results for last season.

I used mean absolute error (MAE) and root mean squared error (RMSE) for the testing. MAE is probably the easiest to understand - the MAE for Ottobasket and Simple Points is 5.09, meaning Ottobasket missed on the predicted value compared to the real value by just over $5 on average.

Mine were the best by MAE and RMSE for both traditional points and categories, though it was a pretty narrow margin for traditional points. They were 3rd out of 4 in RMSE and 4th in MAE for simple points. I suspect this is largely due to rookies not really being included last year and so they were all projected for $0 by me, which is definitely an issue for the format that is most rookie friendly. Hopefully this is rectified to a degree by bringing in the rookie numbers from Hashtag Basketball. It looks like FantasyPros would be even better, but I’d have to do more work to bring them in from there so accepting HB as good enough for now.

I’d really like to dive in more to who it missed on, the distribution of errors, which players the systems may have disagreed on heading into the season, and stretch goal is to compare the errors to other sports to get a handle on how “big” they are. In the meantime, here are the error tables:

There’s a bug in DARKO right now that’s causing some of the columns to be displayed incorrectly, which is causing downstream errors for my app. I’m not gonna do anything about it for now since any patch I do would probably have to be undone later, but if it’s still giving errors later today then I might try and fix it real quick in case anyone is drafting.

I decided to go ahead and make a temporary patch, so it should be working, though I believe the DARKO numbers are from preseason. Better than nothing, but it is now on my to-do list to make the app more resilient. Maybe I’ll find a way to store the values and only overwrite if the app is working.

I’m sure that now I’ve done this that the new DARKO fixes will be up and running immediately lol


Seeing another error that seems related to DARKO and some data mismatches. Hope to have some time tomorrow night to see what exactly is going on.

1 Like

Doesn’t seem to have been related to DARKO, but everything seems good for now. I’ll keep checking on it…and switching some stuff up to make it more resilient is creeping / shooting up the to-do list.


Ok now I found the true bug. Andre Jackson Jr is showing up 4 times on hashtag basketball’s rankings, which I pull some data from (oddly just the rankings and not the projections). I submitted a bug report to them so hopefully it gets resolved soon

EDIT: this is finally fixed!