Introduction
If you’ve been in the dynasty community or the dynasty subreddit long enough, you’ve undoubtedly at least heard of KeepTradeCut. KeepTradeCut (often referred to as KTC) provides crowd-sourced dynasty rankings based on the community’s up-to-date opinion on every relevant player in the league, as well as a dynasty trade calculator, which will be the focus of this particular article.
The most interesting feature of the trade calculator is the “Value Adjustment” that typically shows up in trades involving multiple players on at least one side.
As you add and remove players to each side of the trade, you’ll notice that the adjustment changes, often a significant amount. This naturally leads to the question: how exactly are they coming up with this number?
The FAQ explains the general idea behind the adjustment, but most of the formula is left a mystery.
Fortunately, the actual value adjustment calculation is done in client-side Javascript, which means we can take a peek into the site’s code and see exactly how the algorithm works. In this article, I’ll break it down in detail (warning: math ahead).
Basic Concepts
The first key thing to understand is the existence of a value called the raw adjustment. The raw adjustment is a hidden number computed for each player in the trade, calculated by a formula based on three inputs:
- the KTC value of the player
- the KTC value of the most valuable player in the trade
- the KTC value of the most valuable player overall (e.g. Josh Allen with 9999 value)
The specifics of the formula will be described in detail later in this post; for now, it’s enough to know that the raw adjustment value for a player tends to be in the range of 10-40% of the player’s KTC value, with better players occupying the higher end of that range. Since the raw adjustment is partially based on the most valuable player in the trade, it can differ from trade to trade for a given player. This is a different number than the “normal” KTC value visible on the site.
The reason that the raw adjustment numbers matter so much is due to the way KTC determines who is winning a trade. Simply put:
KeepTradeCut considers a trade to be equal if the sum of the raw adjustment values on each side of the trade are equal.
This is a fairly simple concept overall, since it’s essentially how all basic trade calculators and trade value charts work: you add up the values on each side, and whichever side is bigger is winning the trade. The distinction here is that KTC isn’t adding up their normal player values, they are summing up the raw adjustment values on each side instead. I’ll provide an example that will illustrate this better, but first let’s describe the rest of the algorithm.
Once the raw adjustment values are calculated for each player in the trade, the next step is to figure out what normal player value to add to the losing side to make the trade even. Let’s say that team one’s total raw adjustment is 400 higher than team two’s in a trade; team two would need to add a player whose normal KTC value gives them a raw adjustment of 400 in the trade to make it even. That normal KTC value is what the algorithm calculates.
The final piece to the puzzle is how the actual value adjustment number is calculated. Now that the algorithm knows the KTC value of the player that would make the trade even, it sums up the regular KTC values assuming the additional “player” is added to the losing side to make the trade even. The value adjustment is just the difference between the two sides of the trade in terms of normal KTC values, and is applied to the smaller side so that if the additional player were added, the sum of normal KTC values on each side of the trade would be equal.
It turns out that the value adjustment itself doesn’t actually matter to the formula at all; it’s actually the last thing that is calculated, and because the raw adjustment values are kept hidden its purpose is really just to make the numbers visible to the user make some amount of sense!
Example
The way the whole algorithm works is best illustrated with an example. The KTC values and raw adjustment numbers here are rounded off for our convenience, but are relatively close to the correct values at the time of writing. We can use the Ja’Marr Chase trade shown above to illustrate.
Step one is to calculate the raw adjustment values. In this case, when plugging Ja’Marr Chase’s approximate KTC value of 8200 into the raw adjustment formula, it results in a value of around 2900. We do the same for the other side of the trade.
Team One
Player | KTC Value | Raw Adjustment |
---|---|---|
Ja’Marr Chase | 8200 | 2900 |
SUM | 2900 |
Team Two
Player | KTC Value | Raw Adjustment |
---|---|---|
CeeDee Lamb | 5500 | 1400 |
Joe Mixon | 4900 | 1100 |
SUM | 2500 |
The algorithm adds up the raw adjustments on each side and looks at the difference, which in this case is 400.
Team One | Team Two | Difference |
---|---|---|
2900 | 2500 | +400 |
The algorithm then finds the KTC value that would provide a raw adjustment of 400. While this particular detail doesn’t matter for our example, in code this is essentially done through trial and error, starting with a guess and adjusting closer to the target on each iteration.
As the trade is fairly close already, a player worth around 2700 is enough to provide the proper raw adjustment of 400 and even the trade. That player is added on to the smaller side, so our example table now looks like this:
Team One
Player | KTC Value | Raw Adjustment |
---|---|---|
Ja’Marr Chase | 8200 | 2900 |
SUM | 8200 | 2900 |
Team Two
Player | KTC Value | Raw Adjustment |
---|---|---|
CeeDee Lamb | 5500 | 1400 |
Joe Mixon | 4900 | 1100 |
(additional) | 2700 | 400 |
SUM | 13100 | 2900 |
Note that the raw adjustment sums are now equal.
For the final step, the formula simply takes the difference in the sums of KTC values to calculate the value adjustment:
Value Adjustment = (13100 - 8200) = 4900
And the “Add a player worth ____ to even trade” is simply the KTC value of the “additional” player calculated above.
Add a player worth 2700 to even trade
The Key Formula: “Raw Adjustment”
It’s now time to answer the question of how the raw adjustment is actually calculated.
As we’ve mentioned before, the formula involves three separate parameters, which we’ll assign to variables in order to illustrate the equation.
p
: the KTC value of the player (e.g. CeeDee Lamb at 5500 value)t
: the KTC value of the most valuable player in the trade (e.g. Ja’Marr Chase at 8200 value)v
: the KTC value of the most valuable player overall (e.g. Josh Allen at 9999 value)
Now, the formula:
Confused yet? Let’s break it down.
The value of a player in the trade, p
, is always going to be either less than t
or equal to t
(if p
is the best player in the trade). The same thing applies with p
and v
; every player’s value is less than or equal to the most valuable player overall, of course. Stated mathematically:
0 < p <= t
and 0 < p <= v
Knowing this, let’s take a look specifically at the fractions and exponents in the formula:
The highlighted fractions p / v
, p / t
, and p / (v + 2000)
all must be between 0 and 1 based on the invariants above. A number in the range of [0,1]
with a positive exponent (also highlighted) must also be in the range of [0,1]
.
The closer p
(the player) is to either t
(the most valuable player in trade) or v
(the most valuable player overall), the closer the sections in blue get to 1. The further away p
is from t
and v
, the smaller that decimal gets, with the exponents playing a role as well in pushing those sections down to 0 quicker. Of course it is possible that the player is the best player in the trade, in which case p = t
and (p / t)^1.3 = 1
. In the rare case that you’re trading for the best player overall on KTC, then for that player p = v
, (p / v)^8 = 1
and (p / (v + 2000))^1.28 ~= 0.79
.
The rest of the formula is fairly straightforward: the values in blue are multiplied by decimal constants, and the resulting sum is multiplied by the player value p
.
Now let’s take a look at the smallest and largest possible raw adjustment values. Assuming p
is a basically worthless player, let’s approximate that p ~= 0
. In this case, all three of the highlighted sections evalutate to 0, and the formula reduces to:
Assuming the opposite is true, i.e. p = 9999
, then most of the highlighted fractions evaluate to 1 and the formula reduces to:
This means that a player’s raw adjustment number is between 10% and 42.4% of the player’s KTC value.
Due to the exponents in the formula, however, the raw adjustment is not linear relative to the player’s value. In order to better illustrate how the formula works, we can take an example settting v = 9999
and t = 8200
(i.e. Ja’Marr Chase in our example), and graph the raw adjustment relative to the value of p
on the x axis. The result:
The numbers in the graph will differ depending on the value of t
in a particular trade, but the key takeaway here is the shape of the graph. It is an exponential curve, and is this exponential relationship that is the backbone of all the features that differentiate the KTC trade calculator from a more basic one.
Analysis
The purpose of the value adjustment is to handle the idea that “four quarters don’t equal a dollar”, or in this case that four 2024 3rds don’t equal a stud WR. As we saw above, the key to this is the exponential relationship between player value and raw adjustment. Four quarters don’t equal a dollar because the raw adjustment formula counts a quarter as worth much less than $0.25.
For reference, here are the raw adjustment values for players of various KTC values compared to a player with a value of 9999. Note that these raw adjustment values are calculated assuming the 9999 value player is in the trade; they will not be exactly the same if only lesser players are involved.
KTC Value | as % of max | Raw Adjustment | as % of max |
---|---|---|---|
9999 | 100% | 4169 | 100% |
9000 | 90% | 3250 | 78% |
8000 | 80% | 2537 | 61% |
7000 | 70% | 1959 | 47% |
6000 | 60% | 1478 | 35% |
5000 | 50% | 1077 | 26% |
4000 | 40% | 746 | 18% |
3000 | 30% | 479 | 11% |
2000 | 20% | 271 | 7% |
1000 | 10% | 115 | 3% |
The raw adjustments as a percentage of the max (4169) fall off much quicker due to the exponential curve. A player worth 5000 is only worth 26% of a player worth 9999 in terms of raw adjustment, and therefore it takes four of them to make a fair trade for the 9999 player instead of just two (and you can check this on KTC if you don’t believe me!). While not perfectly applicable to every trade, this table should help give you some intuition as to the underlying values in a trade calculation.
There is no way to know exactly how the raw adjustment formula was constructed, and how the constants and exponents were chosen. I would assume that it went through a significant amount of tuning. My takeaway here is that the formula is not magic; it’s just a somewhat complicated formula made up of constants and crowdsourced player values. While the KTC algorithm does a great job addressing some of the issues with other trade calculators, as always it is not a substitute for good judgment in trades!
Some Interesting Takeaways
-
Since even bad players will contribute to the raw adjustment sum, it is always possible to make a trade on KTC appear fair by adding a bunch of junk players to one side of the trade. Be wary if this tactic is used on you in trade negotiations; often it is better to ignore throw-in players when using the calculator.
-
The value adjustment isn’t necessarily applied to the side with the best player; it tends to be applied to the side with less junk becasue of the way the math works out.
-
Not all uneven trades have value adjustments. It’s possible that when the additional player to even the trade is calculated, the sums of KTC values are very close and thus a value adjustment is not applied. This scenario often happens when the best and worst player(s) in the trade are both on the same side of the trade.
-
It is really hard to trade for players in the 9000+ range, given how few there are and the gap between them and the rest of the field in terms of raw adjustment. In my experience playing dynasty, this mirrors reality.
And some fun tidbits:
-
KeepTradeCut only allows you to add 11 players/picks to one side of a trade.
-
If this were not the case, it would be possible to create an even trade for Josh Allen (9999 value, 4169 raw adjustment) given enough 4th round picks, as they would have a small but non-zero raw adjustment value. Specifically, 44 late 4ths (value: 848, 95 raw adjustment) would do it. Yes, we ran the numbers.
-
Ironically, though the FAQ claims that 12 third round picks are not a fair deal for DeAndre Hopkins, at his current superflex value (~3200) he can be had for only three 2023 mid 3rds according to the calculator. It is very apparent that the FAQ was written well before Hopkins turned 30 and got suspended.
Final Thoughts
If you’ve made it to the bottom of this article without falling asleep, congratulations! Hopefully this post helped explain the “secret sauce” behind the KTC trade calculator so that the dynasty community can make more informed trade decisions going forward.
For any questions or comments, feel free to reach out via any of the methods listed in the contact page.