hello there. this post is about my attempt to collect and visualize statistical data of recent season in for honor. there will be many things related directly to the game and also some technical details which maybe not so interesting for the players.
for those who are not familiar with the game at all: it is a fighting online game by ubisoft with uncommon mechanics, tons of characters, game modes and so on. i have been playing it for a long time and i can say that in general this game is pretty nice but there are some pitfalls.
i am not going to analyse the reason of such results by leaving such opportunity to upcoming ubisoft’s “state of balance”. actually, the goals of this experiment are:
to provide one more source of season stats which are based on completely different than upcoming “state of balance” population (pc-only, ranked top-100).
to be able to compare official results with something else (i.e. that which we have now).
if it is possible, to induce ubisoft to publish more detailed summaries by the endings of seasons.
ubisoft provides web interface for analyzing your stats. we are able to notice at least the following interesting things for us here:
per-character statistics: kills, deaths, assists, wins, losses etc;
current top-100 ranked leaderboard.
first key thing is that web client is exposing backend api so we can make plain standalone requests. and the second thing is that this api provides access to stats of any player (not only your’s data) by his profile id (which can be also retrieved by username).
here we can suggest that such possibilities make us able to retrieve enough data to build and analyze our own “state of balance”, but there are some pitfalls:
as for now, top-100 leaderboard is the only source of players. seems like we can’t get them automatically from anywhere else.
the data that ubisoft provides is not enough to see the full picture. currently i can rely just on mentioned above api and discovering its features by inspecting mentioned above web client. it is quite possible that there are much more features than i know. perhaps there exists some more suitable api for such purposes (for example, api that desktop client uses), but we have no information about. for example, at least we can’t build such graph just because we have no information about player’s opponents.
but despite such inconveniences we still can try to benefit from it.
by querying leaderboard at times to populate more players and fetching their stats since beginning of season, we can analyze quite a lot of interesting things.
the following graphs are the pick-rate stats (x axis is the total games played by certain hero) of the all players (+ me and my friend) that were (or still are) at any position in leaderboard (pc-only). currently it is about 300 players (if you changed nickname during the season, there will be your old one).
also take a look at “average games per player” graphs. i have added it to denote situations where players are grinding so much, so they are impacting overall picture. these graphs were calculated via
$total_hero_games / $total_hero_players, where
$total_hero_players is the total amount of players which have played at least one game by this character. if there is too large number, quite possible that there are some players which play this character too much. for example, valkyrie is top-4 in ranked pick-rate just because there is someone who played her 400+ games during the season.
and note that there are some differences with ubisoft’s techniques of collecting data:
official “state of balance” is merged data across all platforms vs my “pc-only”.
official “state of balance” based on much more players. we are talking about plat+ split (top 4%) vs my “top-100” (possibly it is something like ~0.5% but i do not know exact numbers).
also, it is not so clear - which duels ubisoft mean? is it ranked? as we can see, here is noticeable difference with ranked/unranked duels.
i do not know how exactly ubisoft calculates pick-rates. pick-rates above were calculated via simple
$total_games / $total_hero_games, but there is possible inaccuracy with such formula. take case with top-4 valkyrie as example. quite possible, ubisoft adjusts such situations somehow somehow.
in general, results are quite similar to ubisoft’s results for previous season (we do not consider raider/lawbringer/sakura because they are “new” in comparing to previous season), but anyway there are some curious things.
let’s analyze the most inconsistent ranked duel results. as long as ubisoft is talking about viability in their “state of balance”, we assume they are presenting ranked duels data (actually i do not know the real nature of this data) - just because simple duels are played more casually and here you usually are not thinking about viability. so:
ubisoft’s shugoki has 6.6% vs 1.0% in my results - possibly just because shugoki was “new” in previous season and that is why he was temporary viable. i guess, in general all players know how to play against him now and due to inability to perform something dangerous to them, shugoki has so low pick-rate.
ubisoft’s black prior has 9.7% vs 3.4% - in my opinion such difference has partially the same reason as in case of shugoki. but objectively black prior is more viable than shugoki despite the knowledge of his toolkit. that is why his pick-rate is not total garbage, but also not so high. i think he has 3% despite his viability due to his repetitive gameplay - just like conqueror (conqueror has 2.3% according to my results).
ubisoft’s kensei - 6.2% vs 1.9%, gladiator - 5.0% vs 1.3%, orochi - 7.7% vs 3.9%. i have several predictions about explaining such differences:
possibly ubisoft’s data is about unranked duels (or mixed ranked/unranked).
possibly there were players in previous season which are grinding these characters a lot (like someone who brought valkyrie in top-4 according to my data) and ubisoft does not handle such cases in any way.
possibly it is impact of:
different populations (data for plat+ merged across consoles vs data for top-100 pc-only);
recent season changes (for example, it can be hard to play gladiator or orochi vs raider or sakura, so their pick-rate fall down);
different methods of calculating pick-rates.
however, waiting for the next “state of balance” to compare our data.
next graphs are win-rates. i have splitted the data into two categories:
average total win-rate - calculated by the following formula:
$total_hero_wins / $total_hero_games
average player win-rate:
(sum of ($player.total_hero_wins / $player.total_hero_games)) / $total_hero_players
possible there are more improved ways to calculate such things, but i left it as it is.
as i said above, we can’t build win/loss matrix due to inability to retrieve such data. we also can’t distinguish duels between opponents which are not in the same mmr bracket (ubisoft says they actually do that). so:
it sometimes coincides with ubisoft’s results for the previous season, but mostly it is not, so i am going to leave it as it without comparison like in previous section. i think that possible reason of such differences is absence of filtering by the same mmr bracket.
also, just like in case of pick-rate, ranked and unranked duels vary significantly. again, quite possible it is the consequence that ranked matchmaking enforces the same mmr bracket. if not, maybe it can be an occasion for ubisoft to publish such results separately too.
just a fun obvious fact from the graph above is that if you are a top-100 player and you play raider/sakura/lawbringer, it is quite likely that you will win 3/4 of your duels.
all the data was presented for top-100 players, but i am inclined to think that overall and plat+ populations will be similar. however, we will check it soon.
this experiment has taken quite a lot of my time to implement and i hope you like it. glad to see any your thoughts in reddit thread here.
it is quite possible that i will continue to develop this project, so if you want to participate in, you can leave your ingame username and your platform in the same reddit thread to make me able to count your activity in possible similar future reports. i have not developed a sane front-end yet to do this automatically, but possibly it will land soon.
have a nice day and thank you for the reading.