Gaming Zone > [MiA] Servers

Freon. PPR. Need an expert in stats!

(1/2) > >>

Piglet:
As any of you who've played much Freon know, unbalanced teams aren't that much fun.

Over time I've tweaked the way players are rated in-game. The current mechanism is pretty good but it's still not entirely satisfactory.

In particular my concern has been that the number of players in a game significantly impacts the points per round a player gets, whilst the PPR rating of  player is based on the last 20 qualifying maps where more than 3 rounds of the game were played.

So, a player who plays a lot of smaller games will join a bigger game with a much lower PPR than they deserve - and will be over-strong for their team. A player who plays a lot of larger games will be put on a much weaker team when they join a smaller game. Neither of these things are fair to the players impacted.

This morning I've pulled some data and done a bit of work to get it into a state where it can be used for analysis.

Here's a plot of all Zeus' games this year. As you can see that even though PPR is somewhat scattered, there's clearly a rise in average PPR as the player count goes up:



Here's a spreadsheet /downloads/FreonStats.zip where you can play with the data. You can use the players list to find player number to filter on - or you can use the stats page to find player numbers: https://miasma.rocks/stats_freon.php

The conclusion I'm reaching is that there probably needs to be a change to take into account number of players rather than just the average PPR for the last 20 maps.

I really need two people to help:

1. Someone to take the data and work out a fair way of rating players (e.g. PPR at player count)
2. Someone to take the database layout and help me with SQL to pull those values fast from the database as a player joins.

Anyone got the skills and would like to volunteer?

Piglet:
More info:

Games:

--- Code: ---+---------------+--------------+
| Field         | Type         |
+---------------+--------------+
| id            | int(11)      |
| timestamp     | timestamp    |
| gametime      | varchar(20)  |
| server_id     | int(11)      |
| map_id        | int(11)      |
| team_scores   | varchar(16)  |
+---------------+--------------+

--- End code ---

Gamestats:


--- Code: ---+-------------+---------------------+
| Field       | Type                |
+-------------+---------------------+
| id          | int(11)             |
| timestamp   | timestamp           |
| server_id   | int(11)             |
| game_id     | int(11)             |
| player_id   | int(11)             |
| team_idx    | int(11)             |
| rounds      | int(11)             |
| score       | decimal(10,2)       |
| kills       | int(11)             |
| deaths      | int(11)             |
| thaws       | int(11)             |
| git         | int(11)             |
| healthgiven | int(11)             |
+-------------+---------------------+

--- End code ---

The database doesn't currently store the number of rounds played in the game - but this will get a record for a map for the most played rounds, which although cound be wrong is good enough: select game_id, max(rounds) as round from gamestats;
The database doesn't currently store the average number of players in the game - but given the max rounds from the paragraph above, you can work out the the proportion of time in the game that each player was there and add them up as sum of(rounds played / max from above) for each player in the game.

The game code could be changed to calculate those things as it sends data back to the stats server at end of game, and they could be read by the stats server and saved on the Games table.

Piglet:
I've done a bit of work on the player stats page, and have started some database/unrealscript/backend changes  - but here's the Zeus example using the full set of game stats that are sitting on the server.

https://miasma.rocks/stats_freon.php?p=1641

I think this is pretty clearly showing the issue of the correlation between player count and PPR. If Zeus joins a 6 player game he'll be rated at 11.6 ppr for balancing purposes, when in reality something like 7.6 is realistic.

holyspam:

--- Quote from: Piglet on October 09, 2024, 15:25 ---I've done a bit of work on the player stats page, and have started some database/unrealscript/backend changes  - but here's the Zeus example using the full set of game stats that are sitting on the server.

https://miasma.rocks/stats_freon.php?p=1641

I think this is pretty clearly showing the issue of the correlation between player count and PPR. If Zeus joins a 6 player game he'll be rated at 11.6 ppr for balancing purposes, when in reality something like 7.6 is realistic.

--- End quote ---
This is just re-inventing the wheel.
The example shows a classic bell curve with outliers.
If you do standard deviation and remove outliers you will end up with similar average PPR

Instead, a different metric should be used

If you want to balance a game, you need a negative feedback loop. Points per Round quickly becomes highly positive and above 1
(10% of Damage  + Kills) / Rounds

Rounds are not a skill or quality metric, they are just a quantity. As an absolute value, it's always increasing at a rate of X/n+1

Comparing for balance, there's no "baseline" you just have whatever the current game average PPR is - meaning you have to resort to player counts, current VS alltime tricks etc etc..


But it also means that it's impossible to use when the situation in the game changes...
For DM/TDM a simple way to rate performance is the KDR - too simple but the goal is also simpler
Skill level will usually be 1:1 KDR.

Higher KDR = higher influence in the game. For TAM geniuses decided to have no ratio - just damage+kills => inflate your "rating" number
For Freon, you have an additional factor - Thawing, which also influences the game as much as kills and deaths.

So a better way to compare skills for freon, include Thaws in the KDR
(Kills + Thaws / Deaths)

This is a much better ratio which 100% depends on YOUR influence over the game goals:

* + Kill enemies
* + Thaw friends
* -  Don't die
The number of rounds or the damage you caused is useless if you are not achieving these goals.

Arbok:
(Kills + Thaws / Deaths) 100% agree.

U could also add, "if the current player has more dmg /thaw than his entire team in each round "( compared for each individual teammate ofc), will raise his ppr a bit more,like 5%.
in that way the algorithm will not only rely on kills /thaw for each player by itself, it will also add the dmg variable in between.

Navigation

[0] Message Index

[#] Next page

Go to full version