web icon indicating copy to clipboard operation
web copied to clipboard

Detect and show whether a player was playing support or core

Open anko opened this issue 8 years ago • 3 comments

I have a hunch that I win more games when supporting, than as a core. But how would I find out? It would be neat if as part of parsing a match, OpenDota attempted to categorise players this way, so we could use it as a filter criterion.

Some questions:

  • Has this been discussed before? What were the conclusions then?

  • What do support and core mean exactly, in a programming sense?

    I recognise a support mostly by having a large amount of net worth spent on support items (wards, courier, gem, dust, smoke, …), and to a lesser degree by how few last hits they have in 10 minutes, but it might be tricky to catch edge cases in code. If the support stats suggested in https://github.com/odota/ui/issues/831 become available, could we use some of those for this?

  • How accurate of assessments could such a simple definition make?

    • How would one measure that accuracy?
  • If the hard-coded method is inaccurate, what sort of machine learning algorithm could we use instead?

Any pointers for how I could go about implementing a prototype?

anko avatar Jun 27 '17 02:06 anko

We sort of do this client side for the analysis feature: https://github.com/odota/ui/blob/master/src/utility/index.jsx#L358

It's a very basic check, just determining if the player got fewer than 20 last hits in the first 10 minute and placed more than 2 observer wards total.

Unfortunately there isn't a good way of validating how accurate these kinds of rules are short of sitting down with a bunch of replays and manually classifying players, then running the replay parsing over those same matches to determine accuracy.

If you want to aggregate this data, you'll need to change odota/core to store each player_match's classified position for the match in the player_caches Cassandra table. Since we're starting from scratch, the data will not be available for previously played matches, only for future ones.

If you just want to experiment with testing rules and how accurate they are, then you can just use the match data API to pull JSON blobs for matches and running your rules on them in any programming language to determine how accurate you can classify players into support/core. If you come up with something that works, you can then port that code into odota/core to implement it in production.

howardchung avatar Jun 27 '17 03:06 howardchung

Could we try training a basic classification algo to do this? Then run the match stats through and see what it classifies?

sepehr500 avatar Nov 25 '17 18:11 sepehr500

Sure, although you'll probably want to do this server side (odota/core)

howardchung avatar Nov 25 '17 20:11 howardchung