Jump to content
Android25

WNR - Development Thread

Recommended Posts

 

Weighted and Normalized Recent (or Retired) would be (if it gets enough help from the more math savvy here) an alternative successor to WN8. A lot of pages of development have already gone into WN9, but that thread died off over a year ago. The biggest problem standing in the way of WN8 right now is its viability in that values have to be updated by script and debated/peer reviewed every few months. The other major problem is WG's complete lack of accurate record keeping by making enormous changes to tanks and keeping their ID the same.

The major idea around WNR would be that it is written as a "set and forget" program on a server that updates expected tank values based on the values from ALL players (not just those we have dossiers from). Whether it be from all players across all servers, or select servers, or just one server, is up for debate and understanding that based on the data I've collected so far I would expect all servers to have over 13 million active users. Whereas a server like NA would have 1.2 million and EU would have around 5 million (very preliminary extrapolated estimations from the oldest NA, EU, RU accounts).

I've read over how expected values on WN8 were initially crafted, and though a lot of the hand tweaking had to do with lack of data for some tanks, it is not a completely automatable system. I'm wondering, for you more mathy people, if you had access to ALL tank data for ALL accounts on a given server, how would you automate finding expected values? The idea would be to repeat this process with 30-day delta values EVERY 30 days, so unlike the current script for updating values where that's exactly what it's made to do, update existing values, this would have to be a formula that REMAKES values every 30 days.

If anybody is wondering what I'm talking about, this is my initial (partially executed) idea for data collection and crafting of expected values, but I think people here could come up with a much more elegant method.

 

Computation times based on players from ALL servers, would be considerably smaller for just NA, or even just NA and EU.

Phase 0 (initial data gathering) (Computation time expected: 20-25 days)
(1) Program skimms all accounts across NA, EU, and RU servers for "last_battle_time" and saves all accounts that post data until 10000 consecutive account numbers come back blank (end of player id's)
(2) All tank data is saved from accounts active within the last 60 days, As tank id's are found, they are either checked for existing records or added to the database
(3) 30 days later, program skimms all accounts that have previously returned data, plus id's after the last iteration until 10000 consecutive account numbers come back blank
(4) Go to Phase 2

Phase 1 (future data gathering) (Computation time expected: 20-25 days)
(1) Every 30 days, program skimms all accounts that have previously returned data, plus id's after the last iteration until 10000 consecutive account numbers come back blank
(2) All tank data is saved from accounts active within the last 30 days, As tank id's are found, they are either checked for existing records or added to the database
(3) 2 records of data are always saved plus the new incoming data. ID's without data from either of these periods or the incoming data are dropped from the table.

Phase 2 (calculating expected values) (Computation time expected: 0.5-1 hour)
REPEAT FOR EVERY TANK
(1) Delta values on every account are recorded from the largest date gap the player has on record (30 or 60 days)
(2) Players with fewer than 1000 total battles and tanks with fewer than 50 battles are ignored, then the bottom 50% of players by WGPR less battles played modifier are removed
(3) Each STAT is plotted with the remaining values and lineraly regressed to find an "average" STAT value for every tank.

Phase 3 (general expected value correction) (Computation time expected: 3-5 hours)
REPEAT FOR EVERY TANK
(1) Each player with more than 1000 battles is given a WNRaplha rating based on all tanks that have been played during the time period between data collection 1 and 2.
(2) Top 10% of players who play well PER TANK are filtered and tankWNRalpha/accountWNRalpha is calculated
(3) All STAT values are multiplied by (tankWNRalpha/accountWNRalpha)/1.15 from this 10% group.

Phase 4 (specific expected value correction) ( 3 hours to 5 days (hard to say))
(1) Repeat steps 1 and 2 from phase 3
(2) Any outlier tanks (outside 0.9<[(tankWNRalpha/accountWNRalpha)/1.15]<1.1) repeat step 3 of phase 3
(3) Repeat this phase until there are no outlier tanks

Repeat Phase 1-4 every 30 days

 

The other question is how do you want to USE those expected values. Should the system simply keep the WN8 formula or does anybody have better idea of how to craft a better formula? I'm not against getting a copy of Eureqa and using it with ALL server data. Bjshnog pointed out some things that should be implemented in WN9 on the first post of the WN9 development topic and I know RN did a lot of development on it in the same topic, so I'm wondering if anybody would be willing to make any suggestions for a new formula or methods for going about making a new formula.

I plan on having 30-day delta data in about 45 days, so don't get too excited, a lot could go wrong when it comes to data collection that could quickly bin this idea, but I wanted to at least get people thinking about it.

I have a pretty high end dedicated server (on a desktop processor though), and the internet to host the project. So the only real issue would be the possibility of getting banned from the API by WG. Crawling their API isn't explicitly against the rules but who knows, it's a LOT of requests (like 25 million requests a month).

Share this post


Link to post
Share on other sites

Unless you can figure out a way to get recent data for spotting dmg, track damage, and now stun damage, you will struggle to develop a formula that does better than WN8 or WN9. I tried many using R to automatically assign weightings to the factors, both first order and second order.  RN, on his WN9 website went through same drill and as explained here  and ended up with:

wn9base = 0.7*rDmg + 0.25*sqrt(rFrag*rSpot) + 0.05*sqrt(rFrag*rDef)

Share this post


Link to post
Share on other sites

Assisted damage (rAssisted) would be able to be calculated the same way we calculate overall WN8. (Delta assisted / Delta games played)/((expected assisted values for each tank x * delta games played in each tank x) / Delta games played). However making expected values for the tanks would be difficult...

With a large enough sample size (which wouldn't really be a problem) you could use multiple linear regression to estimate the values but I'm not sure how well it would work with the massive potential for error... I know very little about multiple linear regression, especially in this type of implementation, and I don't currently have the data to test it... would it be practical at all?

Would it be worth calculating each player's WNR without assisted damage, then dividing the average value by their value, and multiplying that value by the assisted damage? Better players are likely to assist more than poorer players, so this would take a ton of variance out of the regression, but at the same time it would relate the expected assisted damage directly to the initial pre-assisted damage equation before implementing it into a post-assisted damage equation... would that really be any better than not having assisted damage at all?

We would never have able to do this in the past because delta assisted wasn't cumulative for any accounts played before it was tracked. It would be cumulative for any recent values though.

Share this post


Link to post
Share on other sites

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...