It's been a while since I rolled out a new feature to my spectral reports, wasn't it? Welcome again to my tech-stats-dota yap session.
There were multiple reasons for this sort of pause, major ones being my work with Tundra Esports for the past couple of years up until the end of TI12, technical challenges for introducing some new features and general lack of time. I want to cover the first two topics sometime later in my blog, and right now I want to talk about one feature I was working on for a while now: Starting Items and Consumables.
While it's not that fancy of a feature (it's not that exciting to see starting items), there were some things about it I wanted to do a slightly different take on. And Consumables became an interesting byproduct of it, which, I am sure, has a lot of potential.
So let's dive into the story of this feature, how to use it, what it reveals and what can be improved.
(this blog post will also be the first to be published to Substack directly, though all the older posts from Medium should also be there)
…initially this blog post was planned for publishing a bit earlier, but I figured it's better to wait until 7.38 releases and the dust is settled after that.
The Why and The How
The Why is rather simple. At first, I wanted to add starting items to my stats-based builds, but couldn't really find anything that would look at starting items in the way that made more sense to me – by looking at the full builds and looking at the items in the context of laning.
As a byproduct of it came the consumables stats section. The core idea of it was to expand on the laning stats and see, how various "good" players on the roles tend to behave in terms of consumables at the different stages of the game (e.g. how much regen a certain player prefers compared to others and how the team generally behaves in terms of laning habits).
And so the work started, and it took a bit too long.
Well, technically I wasn't really working on it for THAT long. The core prototype was created sometime during late spring of 2022 (and late summer for consumables), then presented as one of my work-in-progress features to the team I was testing for during the TI11 run. It was abandoned for some time. Then picked up again during summer 2023, put on hold until post-TI12 to collect new batch of data after fixing some issues with data processing , when I started asking pro players and talents for feedback. In the beginning of 2024 I spent some time polishing this feature and cracking related performance issues, getting ready to release it in the spring, but had to postpone it due to personal matters. And finally picked it up again during the winter break recently.
So while it was in the works for a while, it didn't really change much for the past two years and was available as an Early Preview feature. Even the code for data processing didn't really change that much after the first major version. Because of that, starting items, builds and consumables sections are supported by all Immortal Rank Meta Trends reports since 7.35d and some competitive events before and after that (though data quality may differ from immortal rank report to report).
There were two major problems: (1) legacy system components, which ended up causing slowdowns and increased resources usage while processing data for this feature in particular and (2) data source issues.
The first problem was popping up during the very long patches and was mostly related to how my system was set up about seven (DAMN!) years ago (when the stats hub was a glorified collection of my "Competitive Meta Trends" reddit posts). But there is also another reason: MMR inflation at the Immortal rank (caused by multiple factors, including Double Down tokens), which caused the increase of daily matches at Immortal (after filtering out matchmaking abuses and botmatches) from ~7k to ~20k, and it also significantly increased the dataset size. Thankfully, I was able to tame it down through some clever hacks and regular monitoring throughout the 2024.
The second problem is of different nature. While I use a combination of OpenDota and Valve's APIs for competitive matches, for ranked specifically I'm relying on Stratz as a provider. Their awesome API was a real lifesaver that enabled all my crazy experiments throughout the years. Unfortunately, they encountered several issues, that seemed like targeted attacks and API abuse, which ultimately led to them limiting query complexity down. This also impacted some calls I was making in a way.
One big problem is caused by Immortal Draft: as the players get "assigned" to their slots, they tend to be slightly mixed up, and this affected the quality of data coming from Stratz. I only noticed while preparing the feature for release in late 2023. In simple words, it meant that initial purchases (aka starting items) were recorded to incorrect players, resulting in practically garbage data. And as in 2023 this drafting mode was fairly new and everything worked fine prior to that, I had to quickly find a new way to reconstruct starting purchases.
The approach I chose was to use a snapshot of players' inventories at minute zero. Howevee, as Stratz was facing these targeted attacks, I had to remove some data from the requests – and this affected backpack slots and charges information in the inventory snapshots, meaning there are only up to six items recorded, and multiple purchases of stackable items are still recorded as one.
While this compromise didn't sound as exciting, it was still a decent way out of the situation, and it worked well enough for my purposes. And competitive stats were largely unaffected by this. I'll get back to this topic later, covering the further improvements to the feature, but for now…
Core ideas
So what's that different about it anyway?
Let's take a look at the starting items section first, as it should be fairly familiar and simple.
All the new sections have support for different roles and "total" for all the heroes playing on this role. The approach to calculating the number of matches played on a specific role is slightly different, so the numbers might not match with the main "positions" section, but the difference is usually very minor.
Starting items section lists all the items that were found in the starting builds, including multiple instances of a single item (unless it's a stackable item, in which case there is a limitation, mentioned prior).
Every item has the number of matches when this item was purchased, overall purchase rate, winrate and also lane winrate (helping to see average laning impact). Toggle filters allow to hide any sequential purchases and purchases with the low number of matches.
In most cases for Immortal Meta Trends reports there is a limiter working to filter out low purchase rate options (which are likely to be noise, replay parsing issues, or both).
Another place of interest is the "Starting Builds" section. The core idea of it is to take the actual full builds and compare them, since sometime starting build is not about any individual item, but rather about the idea that ties everything together. As a nice bonus, there is an option to look at the total numbers for a given role, and find out the "average" build.
The same data is also available for individual players (in non-ranked reports) and even whole teams.
Observations
There should have been some sort of observations block in this text, but frankly speaking there isn't much to talk about.
The most peculiar part for me personally is the meta for each role overall.
The main thing is having a confirmation for trends we already observed for quite some time. For safelane it was already rather common to go for a complete Magic Wand and it's still holding strong, being at the top with 17% purchase rate and whopping 56% lane winrate. Complete Wraith Band (49.79%), Gloves (51.13%), Blood Grenade (50.45%) and Orb of Venom (47.54%) are, on the other hand, some of the worst items in this regard, with Orb of Frost (53.45%) being only slightly higher, though still having a formidable lane winrate.
Surprisingly though, Blight Stone is also very high on the list in terms of lane winrate (I wonder, if it's because of Nature's Prophet?)
Another trend for Safelane Core is to get multiple Circlets, with any number of them having at least 54% lane winrate. We already saw the Circlet trend for a while, but it's nice to have a confirmation of sorts.
Midlane trends are slightly different. First of all, it's usually Midlane players who are guilty of spamming purchase events and skewing the data, which makes navigating their stats a bit… rough.
Unlike Safelane, complete Magic Wand is not as popular, and Circlets are not as strong. Instead, main stat items (well, except for Mantle) take their place with 55% lane winrate each. The worst items to go for are Quelling Blade (48.98), Mantle of Intelligence (46.68%), Orb of Venom (46.92%), Gloves (47.89), Wraith Band (48.03%), Null Talisman (48.98%).
Offlane meta is not that different from Safelane, except the lane winrates are lower all across the board. Supports seem to be generally similar to Offlane, but with items like Smoke (56.22%), Mangoes (53.6%+), Blood Grenades (54.11%) and Magic Stick (54.95%) giving a significant boost.
Wait, but what about full starting builds?
Well, starting builds with low number of purchases are filtered out, and all remaining Safelane Support builds have a Grenade in them, with Offlane Support having a couple of Boots of Speed as a starting item, but otherwise the same picture. Still, the most successful build seems to be Grenade-Stick-Circlet-Branch-Tango-Wards for either role.
Best Sidelane Core builds are Wand + 3x Branches, with 2x Circlet + 3x Branches to follow. Even Midlane somehow still ends up following this trend, though 2x Circlets build is valued slightly more.
Consumables joined the chat
But wait, there's more!
Consumables stats section was born during my test period for a certain team during TI11. The basic idea initially was simple: looking at the specific players and their laning habits: how much regen do they get and how are they playing usually?
Now these stats are a part of the main reports, along with all the tier 1 tournaments. Though, this section is still experimental and it's only enabled after the event has concluded (processing consumables takes a while, compared to other sections). For the same reason Consumables are only enabled for ranked reports after the patch has ended.
This section is still in its early stage, and I'm still looking for ways to make it more useful outside of competitive setting, as I sense a great potential in it. I think it would also work well with some sort of "aggression" metric.
Observations
Since it takes a while to update Consumables stats, I will be using the last patch with a complete data in this section – 7.37e (at the moment 7.38 already concluded, but the data was not fully collected yet).
With a fellow friend Casual (analyst of Avulus team) we took a look at the lane winrate vs mean purchases of an item by a hero. To reduce the number of complicated operations, we used the main hero laning stats (not divided by role), but still filtered heroes with less than 5% of their matches on a certain role to hide irrelevant data.
The biggest problem with this data at the moment is the issue with stackable starting items (more about it in the next section), but it still gives a rough idea of certain trends.
More of these plots will be on my Patreon/Boosty/Private chat, but here are some of the more peculiar ones.
One peculiar trend: while for positions 1-3 there isn't a clear trendline for additional regen, there's a clear trend for both Tango and Salve for Supports. Mango has a somewhat similar picture, while Clarity doesn't give a more or less clear picture.
Cores do not seem to have any significant spread in this regard at all.
These charts are more of a proof of concept and I wouldn’t take it seriously for now. The most value of this feature still comes from the competitive part.
Problematic moments and points for improvement
One thing I was concerned about is the teams abusing Player laning, starting items and builds, as well as consumables stats during events. So these sections for Tier 1 events are not available without Early Access feature, until 2 weeks pass after the event is concluded.
Now what comes to the current implementation of these features, there are some problems with it. While I have plans to deal with it eventually, this is something worth talking about.
First of all, this section has much more "garbage" data, than one would want. Partially because of the replay parsing issues (e.g. Tome of Knowledge just appears out of nowhere), but as bigger problem are mass purchase spam, selling the item straight away. Ideally, I'd have to set up a sort of filter for that in the future.
Another problem is grouping very similar builds. I'm not entirely sure if it's worth doing, but it's at least worth considering.
It would be nice to have facets for these filters. And it is indeed very nice, however I don not want to include it for now.
The data source for starting items is the inventory snapshot from Stratz, limited only to the first six slots. This means that backpack slots are not available for use. This also means that multiple purchases of a stackable item (e.g. Tango) will blend together into a single purchase. I think I found a clever workaround, but we'll see how it goes.
When it comes to consumables, the pipeline to processing the match data takes a lot of resources and takes a very long time. As it's still an experimental feature, it won't matter as much. And in the meantime I will try to optimize it even further. And I will also consider merging consumables section with laning stats in some way.
But that's not all!
But that's not all! With this update there are some more cool things:
A lot of optimizations to Stratz queries (for Immortal Meta Trends)
Inline search filters now also support negation (add a minus before the word), as well as logical "and" (add "&" between two conditions, e.g. "core & offlane")
Added Section Markers to show what's new/updated in the stats reports
Ukrainian locale for the stats hub is 100% complete now
Interactive map, metadata, courier icons (including bigger item icons) were all updated to support patch 7.38 (and 7.38b)
Closing thoughts and plans going forward
So that's about it. I spent way too much time on this feature, collecting the data and doing all sorts of optimizations behind the scene. Spending time on Dota things while not being able to give all my time to esports is a bit rough, but hopefully other features I'm working on will come sooner than in a couple of years.
Also I'm slowly migrating to Substack now. In addition to that, I'm trying to promote my Patreon/Boosty/Telegram Tribute a bit more and post more exclusive content and stuff to private discord/telegram chats for patrons.
I don't have much to share there (as I usually try my best to make everything public and available to everybody), but that's a nice way to support my work if you wish so, get direct support line for my APIs or get Early Preview access.
As for right now – that's about it. Not sure about what will be the next cool feature to make public, but there are a couple of promising prototypes: starting with MVP and ranking, ending with skill builds and Turbo Meta Trends.
We'll see how it goes!