So here's my followup writeup. Let me know if this is on point. If not I'll be happy to change it. And if anyone else along the pipeline wants to change it, that's totally fine with me as well. Whatever's easiest for everyone.
Since my models includes high school ranking while several other models do not, those players with strong high school rankings will rate significantly better, and those with weaker or more importantly, no rankings at all, will rate significantly worse. Myles Turner, Cliff Alexander, and Frank Kaminsky are all examples of this phenomenon.
In addition, my model covers data that only goes back to 2002, so the weights and importance of each feature will only be reflective of those players that have been drafted since 2002. This means they will be slightly different than other draft models, if the other draft models are trained on larger or smaller sets of data. Karl Towns, for example, may suffer from my models only being trained on data going back to 2002. Stars have a high amount of leverage on draft models (as they should), and the collection of non-high-school stars (at least as defined by my target variable, a RAPM-WS blend) that have been drafted since 2002 is somewhat guard heavy, (Chris Paul, Stephen Curry, James Harden, Dwayne Wade, etc.) and Karl Towns is missing the benefit of models trained on more star-bigs, players like the great Tim Duncan, who was drafted before 2002. I do not model my players by position, as it appears to degrade model performance.
My model’s final output heavily leans on neural networks, and thus overfitting is a fair criticism. Overfitting is a statistical phenomenon that occurs when models are “greedy” and essentially “memorize” the training data in the pursuit of accuracy, rather than discover actual trends. Some of my base models utilize a technique called boosting, a machine learning technique that aggressively pursues accuracy, and iterates over the training data, each time focusing on the predictions the previous learners had the most trouble with. With every iteration, the learners are improved to increase their predictive power, which eventually leads to impressively accurate results. As you can imagine, this technique can lead to even more overfitting. To alleviate some of these overfitting concerns, I also take input from more stable regression based models, as well as perform a technique known as bootstrap aggregating on some of my neural networks. Bootstap aggregating, or bagging, is a technique this is designed to alleviate overfitting and increase predictive stability by sampling (with replacement) from the original data set and training several neural networks on several different samples, and then averaging the outputs together. Since each individual neural network is trained on its own unique training dataset sampled from the original data, actual trends are more likely to be identified and noise is more likely to be ignored when the network’s outputs are combined for the final prediction. Although overfitting is a very valid concern, I utilize neural networks in my draft model because neural networks can be powerfully accurate.
With regards to feature importance, age, points per 40, steals per 40, true shooting percentage, assists per 40, and high school rank are among the most important features to the base models trained on those players who were drafted, played in the NBA, or participated in the NBA combine. Among the base models trained on all prospects, the most important features are high school rank, points per 40, strength of schedule, minutes per game, free throw rate, and blocks per 40. All of my features are pace adjusted.
The last thing I would do as a GM is take my model predictions as gospel and draft exclusively based on them. Even in a theoretical universe where I believe my model to be infallible (it isn’t) and I believe it always evaluates prospects perfectly (it doesn’t), selecting the best available player isn’t necessarily the way to get maximum return on assets (as weird as that sounds). Thus far, draft models have done little to no work on evaluating player-team fit. I am of the opinion that there is untapped value here to be quantified and exploited. Fit is an area that I hope to see draft models improve on by next year.
But the consideration that is even more important than player-team fit is a prospect’s perceived value. Let’s say, for example, I am on the clock for my first round draft pick. Player A and Player B are available, and my model slightly prefers Player A to Player B. Should I always draft Player A? Not necessarily. What if the market significantly prefers Player B to Player A? The market should be considered as an extremely valuable opinion on who the best player will be. In addition, if I take Player B, the player with the higher market value, Player B will be more liquid and easier to trade than Player A and I may be able to get more return from selecting player B, even though Player A may end up being the better overall player.
If I were a GM, I would consider a model consensus as a valuable, perhaps the most valuable input, but it would be FAR from the only input. There are things that models can miss, and draft models are ALL based on the condition that what has worked in the past will work in the future, and this is a massive assumption. There are also aspects that affect players’ careers that models do not consider at all, aspects like player personality, team culture, player development effectiveness, and more. For this reason, it is still vitally important to consider the input of human scouts, the coaching staff, and other members of the front office.
Also, I've been doing a lot of tinkering. I've changed/transformed some features, and slightly changed the base models considered in my final output. I also added the Euros. I now have what I think is going to be my final predictions before the draft. I shared a csv with Jesse for his tool, and I've also posted number rankings here. Column D is the number I'm using, but I'm presenting 3 for fun.
https://docs.google.com/spreadsheets/d/ ... =561660716
Please let me know if these updates needs to be addressed for DX stuff, and I'd be happy to help in any way needed.
Amp, you mentioned moving the numbers to a 0-100 scale(min-max normalization). It's really easy. We just need everyone's raw numbers.
(xval-min(x))/(max(x)-min(x))*100
Where xval is each player's projected number in each model, min(x) is the smallest projected number in each model, and max(x) is the largest projected number in each model. As other people mentioned, this method captures the fact that the difference between the 1st and 2nd best player isn't always the same as the difference between the 54th and 55th, which is what averaging ranks is essentially assuming.
Really interested to see other Mario H. evaluations because my model, it's not a fan.