w3champions / website-backend

This is the backend that powers https://w3champions.com/
30 stars 36 forks source link

Serve game length stats by MMR bracket #350

Open francislavoie opened 1 month ago

francislavoie commented 1 month ago

On https://w3champions.com/OverallStatistics/ we have a "Game Lengths" graph which shows game lengths (bucketed by 30s or 60s chunks) for each mode.

What would be nice is if we could also load this data by MMR range, which would be interesting to know whether low-skill matches are shorter or longer than high-skill matches for various modes.

I see this is where the data is being loaded currently for that graph:

https://github.com/w3champions/website-backend/blob/ada2d1c5956694a2a2e971f47891d39844c7b760/W3ChampionsStatisticService/W3ChampionsStats/W3StatsRepo.cs#L53

In that same file, it serves data on "Matchup Lengths" for 1v1 by MMR brackets, but this doesn't support showing data for other game modes.

Can we reuse some of the matchup lengths code to expand it to collect buckets for other game modes (regardless of matchup)? I figure it would just mean an additional query param for the MMR bracket to query to the game-lengths endpoint:

https://github.com/w3champions/website-backend/blob/ada2d1c5956694a2a2e971f47891d39844c7b760/W3ChampionsStatisticService/W3ChampionsStats/W3CStatsController.cs#L46-L51

For ref, the MMR buckets are defined as 200 MMR ranges, the frontend has a MmrRangeValues enum here https://github.com/w3champions/website/blob/978e9011fdea499fd9f724d6bee6d7815d0f15dc/src/store/overallStats/types.ts#L119-L134

francislavoie commented 1 month ago

There was some good discussion following on this on Discord https://discord.com/channels/688377338576109643/741708055833608313/1301425259626631239

gremlinhunter commented 4 weeks ago

Can we reuse some of the matchup lengths code to expand it to collect buckets for other game modes (regardless of matchup)? I figure it would just mean an additional query param for the MMR bracket to query to the game-lengths endpoint

What does this mean? Isn't the filtering done client-side?

Here's a draft: https://github.com/w3champions/website-backend/pull/351 I seem to have misunderstood the issue.

francislavoie commented 4 weeks ago

Well I think we wouldn't want to send all the data down up-front (on page load) if there's a lot of buckets of data, it could be changed to be fetched as the user changes the options.

Did you read the conversation on Discord? I think we'll want to use MMR quantiles instead of flat 200 ranges if anything. Still unclear if the data will be interesting so we might want to do some tests on the match history dataset to figure that out before wiring it up. I don't have access to the data nor the skills to do that data science work though.

gremlinhunter commented 4 weeks ago

The discord conversation is private. Isn't it kind of odd if the primary information for the issue is not on github? 😄

francislavoie commented 4 weeks ago

Oh, you should probably get added as Staff to see the conversations if you want to contribute! FYI @gustav87

But yes I agree, just that others replied to the idea there and we had a more lengthy conversation from there.