Statistische Signifikanz der Winrate bei World-of-Tanks
-
ist das nicht zu kompliziert`?
kann man nicht einfach die treffer zählen oda so?
-
10k Spiele für 95% Signifikanz sieht plausibel aus.
Als WoT Spieler frage ich mich hier aber nach dem Warum?
Aus Erfahrung erkennt man schnell, dass bereits 2k-3k Spiele ausreichen um sagen zu können die WR eines Spielers ist(umgangsprachlich) nicht mehr zufällig.Viel interessanter ist doch die Gefährlichkeit eines Spielers, also die Kombination und Gewichtung aus Winrate(Gesamt und im aktuellen Panzer), Panzerwahl(OP oder UP), Erfahrung(# Spiele) und Erfahrung im Panzer(# Spiele im konkreten Panzer).
-
Was kommt für n raus, angenommen jedes Team besteht nur aus 2 Spielern?
-
WoT Spieler schrieb:
10k Spiele für 95% Signifikanz sieht plausibel aus.
Als WoT Spieler frage ich mich hier aber nach dem Warum?
Aus Erfahrung erkennt man schnell, dass bereits 2k-3k Spiele ausreichen um sagen zu können die WR eines Spielers ist(umgangsprachlich) nicht mehr zufällig.Stimme dir da vom Gefühl her zu.
Deshalb hab ich ja nach Fehlern in der Methode gefragt, weil die Anzahl spiele hoch klingt.
Andererseits setzen wir eine Signifikanz mit wissenschaftlichem Anspruch voraus.
Wahrscheinlich ist unser "Gefühl" schon mit Z=1 => N=2500 zufrieden.WoT Spieler schrieb:
Viel interessanter ist doch die Gefährlichkeit eines Spielers, also die Kombination und Gewichtung aus Winrate(Gesamt und im aktuellen Panzer), Panzerwahl(OP oder UP), Erfahrung(# Spiele) und Erfahrung im Panzer(# Spiele im konkreten Panzer).
Und daraus werden dann so Ungeheuer wie WN7 mit ca. 20 magischen Parametern über deren genauen Wert dann Monatelang gefeilscht wird. Nein Danke. Das ist ja was die Winrate so unglaublich gut macht: Sie ist der simpelst mögliche Messwert mit echter direkter spielrelevanter Aussage. (Da mitteln sich sogar so Sachen wie OP/UP Panzer raus). Aber halt erst nach vielen Gefechten.
-
cooky451 schrieb:
Was kommt für n raus, angenommen jedes Team besteht nur aus 2 Spielern?
Fangfrage?
Oben fliesst die Spielerzahl nicht ein.
D.h. naja, indirekt. Denn ich gehe davon aus das der eigene Beitrag gering ist (wegen hoher Spielerzahl), daher die Winrate nicht weit von 50% weg liegt, weshalb ich die Analogie zum Münzwurf erst machen darf.
Wobei, selbst wenn wir ein beliebiges 1v1-Spiel (bsp Tennis) anschauen, und zwei Spieler mit 50% und 51% Winrate vergleichen kann IMHO die gleiche Überlegung verwendet werden. Wohlgemerkt es spielen nicht A gegen B, sondern A und B spielen jeweils 1v1 gegen eine zufällige Auswahl aus der Gesamtheit aller anderen Spieler.
Auch da müssten wir wieder bis n=10k warten um eine signifikante Aussage zu treffen, das B besser ist als A.
-
scrontch schrieb:
Beide müssen also ca. 10000 Spiele gespielt haben um mit sehr guter Sicherheit sagen zu können dass Spieler A mit einer Winrate von 51% wirklich besser gespielt hat als Spieler B mit Winrate 50%.
Das stimmt glaube ich noch nicht.
Mit je 10000 Spielen kannst du sagen, dass mit 95% Wahrscheinlichkeit die wahre Gewinnwahrscheinlichkeit von Spieler A im Interval [50%, 52%] und von Spieler B im Interval [49%, 51%] liegt.
Da sich die Intervalle überlappen, heisst das aber noch nicht, dass mit 95% Wahrscheinlichkeit Spieler A besser als Spieler B ist.
Wenn man sich die Fehler beider Schätzer in 2D anschaut und davon ausgeht, dass sie unabhängig sind,
kommt noch ein Faktor 1/sqrt(2) bei der Intervalbreite dazu (die Gerade durch (1,0) und (0,1) hat Abstand 1/sqrt(2) vom Ursprung), bzw. ein Faktor 2 bei den Spielen.
Man bräucht also meiner Meinung nach sogar 20000 Spiele für die wissenschaftliche Qualität der Aussage "Spieler A ist besser als Spieler B"PS:
Alternative Erklärung: Die Wahrscheinlichkeitsverteilung der Summe bzw. Differenz der beiden Schätzfehler ist gerade die Faltung der Einzelfehler und hat so eine Standardabweichung von sqrt(2) mal die der Einzelfehler.
-
scrontch schrieb:
Fangfrage?
Teilweise. Ich bin der Meinung, es sollte einfließen, und zwar deutlich. Die "Streuung", also auch die Zahl benötigten Spiele, nimmt mit der Größe des Teams doch deutlich zu. Wenn wir jetzt mal ein 1v1 Spiel nehmen sollten eigentlich schon ein paar wenige Spiele (10 - 50, je nach konkretem Spiel) reichen um relativ gut einschätzen zu können, welcher Spieler besser ist. (Insbesondere wenn man wie du annimmt, dass winrate == gut; das Spiel also kein Glück beinhält, dann sollte bei einem 1v1 Spiel nämlich alles bei 100% liegen.)
-
cooky451 schrieb:
Ich bin der Meinung, es sollte einfließen, und zwar deutlich. Die "Streuung", also auch die Zahl benötigten Spiele, nimmt mit der Größe des Teams doch deutlich zu. Wenn wir jetzt mal ein 1v1 Spiel nehmen sollten eigentlich schon ein paar wenige Spiele (10 - 50, je nach konkretem Spiel) reichen um relativ gut einschätzen zu können, welcher Spieler besser ist. (Insbesondere wenn man wie du annimmt, dass winrate == gut; das Spiel also kein Glück beinhält, dann sollte bei einem 1v1 Spiel nämlich alles bei 100% liegen.)
Du machst wie ich schon oben angenommen habe glaube ich einen Denkfehler.
Es spielen nicht A und B gegeneinander. (Dann würden weniger Spiele reichen, und der Ausgang wäre besser vorherzusagen)
Stattdessen spielen *jeweils* A und B gegen viele Andere, einer Auswahl von noch viel mehr Anderen.
Wenn dann nach 50 Spielen B 26 mal gewonnen hat und A nur 24 mal, sagt A: "Pah, ich hatte halt zufällig schwerere Gegner als du!"
-
C14 schrieb:
...
Äh, ja, wahrscheinlich hast du recht.
Wenn man die Formel nimmt, könnte man auch naiv E=0.005 (halbiert) wählen um sicher zu sein dass der maximale Fehler jeweils nur ein halbes Prozent beträgt und sich dann die Fehlerintervalle nicht mehr überschneiden. Dann wär's allerdings sogar ein Faktor 4 für die Anzahl der benötigten Spiele.
-
scrontch schrieb:
Es spielen nicht A und B gegeneinander.
Schon klar. Trotzdem hat ein Einzelner mehr Einfluss auf die Win-Rate, je kleiner das Team ist.
scrontch schrieb:
Wenn dann nach 50 Spielen B 26 mal gewonnen hat und A nur 24 mal, sagt A: "Pah, ich hatte halt zufällig schwerere Gegner als du!"
Das hast du ja gerade ausgeschlossen, indem du volkard so nett erklärt hast dass Win-Rate = Skill. Hat allerdings keine Relevanz für meinen Punkt.
-
cooky451 schrieb:
Das hast du ja gerade ausgeschlossen, indem du volkard so nett erklärt hast dass Win-Rate = Skill.
Oh, neue Idee.
Weil Win-Rate = Skill ist bereits beim ersten Spiel schon sicher, daß der mit mehr Winrate mehr Skill hat. Und zu jeder späteren Messung auch. Fertig.
-
cooky451 schrieb:
scrontch schrieb:
Es spielen nicht A und B gegeneinander.
Schon klar. Trotzdem hat ein Einzelner mehr Einfluss auf die Win-Rate, je kleiner das Team ist.
scrontch schrieb:
Wenn dann nach 50 Spielen B 26 mal gewonnen hat und A nur 24 mal, sagt A: "Pah, ich hatte halt zufällig schwerere Gegner als du!"
Das hast du ja gerade ausgeschlossen, indem du volkard so nett erklärt hast dass Win-Rate = Skill. Hat allerdings keine Relevanz für meinen Punkt.
... Bei sehr hoher Zahl von Spielen. Genau darum geht es doch: wie hoch muss ich die Zahl wählen, damit ich mit hoher WK die richtige Aussage treffe.
Oder möchte von euch einer ernsthaft die these vertreten, dass der bessere spieler ggf. aufnlange sicht weniger spiele gewinnt als der schlechtere? Inwiefern ist der bessere dann besser wenn er weniger gewinnt?
Entschuldigung, wollte nicht stören.
-
cooky451 schrieb:
scrontch schrieb:
Es spielen nicht A und B gegeneinander.
Schon klar. Trotzdem hat ein Einzelner mehr Einfluss auf die Win-Rate, je kleiner das Team ist.
scrontch schrieb:
Wenn dann nach 50 Spielen B 26 mal gewonnen hat und A nur 24 mal, sagt A: "Pah, ich hatte halt zufällig schwerere Gegner als du!"
Das hast du ja gerade ausgeschlossen, indem du volkard so nett erklärt hast dass Win-Rate = Skill. Hat allerdings keine Relevanz für meinen Punkt.
Das dahinterstehende Modell ist:
Jeder Spieler hat einen konstanten Skill s der streng monoton in eine konstante Gewinnwahrscheinlichkeit p für jedes Gefecht übersetzt wird. (Mittelung über alle unbekannten Umwelteinflüsse)
Wenn es ein 1vs1-Spiel ist, dann ist die Umrechnung von s auf p sensitiver, d.h. man braucht nur geringfügig mehr skill für eine höhere Gewinnwahrscheinlichkeit.
Insofern braucht man um einen konstanten skill-Unterschied zu messen weniger Gefechte, da der Gewinnwahrscheinlichkeits-Unterschied größer ist.Wir wollen aber nur herausfinden wer besser ist und da spielt es keine Rolle wie die Umrechnung von s auf p ist.
Ein Spieler heisst besser, wenn sein Skill höher ist als der des Vergleichsspielers. Das ist aber genau dann der Fall wenn sein p höher ist.
Es reicht also p zu messen und es spielt keine Rolle ob es ein 1vs1 oder 15vs15 Spiel ist.
-
Kleines Modell:
#include <iostream> #include <random> #include <vector> #include <stdint.h> #include <algorithm> #include <cassert> using namespace std; struct Player { double skill; double gamesPlayed; double gamesWon; int name; Player(double skill,int name) :skill(skill), gamesPlayed(0), gamesWon(0), name(name) { } }; int main() { size_t playersCount=10000; vector<Player> players; //spieler erzeugen std::mt19937 generator; std::normal_distribution<double> distribution(100,10); for(size_t i=0; i!=playersCount; ++i) players.emplace_back(distribution(generator),i); double gamesPlayed=0; for(;;) { for(int i=0; i<1000; ++i) { //die ersten 30 ins Feld mischen for(size_t i=30; i>0;) { --i; swap(players[i],players[i+1+generator()%(playersCount-i-1)]); } //teamA sind die leute 0-14 und teamB sind die 15-29 //skills addieren double sumA=0; for(size_t i=0; i<15; ++i) sumA+=players[i].skill; double sumB=0; for(size_t i=15; i<30; ++i) sumB+=players[i].skill; //gewinne merken if(sumA>sumB) for(size_t i=0; i<15; ++i) ++players[i].gamesWon; else for(size_t i=15; i<30; ++i) ++players[i].gamesWon; for(size_t i=0; i<30; ++i) ++players[i].gamesPlayed; ++gamesPlayed; } double hits=0; assert(playersCount%2==0); for(size_t a=0;a!=playersCount;a+=2) { size_t b=a+1; bool wonBySkill=players[a].skill>players[b].skill; bool wonByRank=players[a].gamesWon/players[a].gamesPlayed>players[b].gamesWon/players[b].gamesPlayed; if(wonBySkill==wonByRank) ++hits; } cout<<"gamesPerPlayer="<<gamesPlayed/playersCount; double prob=hits*200.0/playersCount; cout<<" prob="<<prob<<'%'<<endl; if(prob>=95) break; } }
Man beachte, daß hier die Annahme getroffen wird, daß man einfach die Stärken der Players addieren kann und damit die Stärke der Mannschaft hat.
double sumA=0; for(size_t i=0; i<15; ++i) sumA+=players[i].skill; double sumB=0; for(size_t i=15; i<30; ++i) sumB+=players[i].skill;
Es kommt raus, daß bereits 50 Spiele reichen.
Aber das Modell ist VÖLLIG aus der Luft gegriffen.
Sagen wir mal, ein wenig realistischer, die besseren 50% nehmen überhaupt nur wirksam am Spiel teil. Die anderen sind schlicht Kanonenfutter.
double sumA=0; for(size_t i=0; i<15; ++i) if(players[i].skill>100) sumA+=players[i].skill; double sumB=0; for(size_t i=15; i<30; ++i) if(players[i].skill>100) sumB+=players[i].skill;
Ähm. Da reichen 10000 Spiele bei weitem nicht, um in die Nähe von 95% zu kommen.
Kurzum, die Abhängigkeit zwischen Spielerskill und Ranking muss an echten Daten erstmal herausgefunden werden.
Und diesen Zusammenhang suchst Du. Zu definieren, der Skill SEI nur das Ranking, ist irreführend.
a) Der Skill ist immer genau das Ranking. Dann haste auch immer 100% und fertig.
b) Der Skill ist das, wohin das Ranking des Spielers hinkonvergiert. Dann isses aber eben genau der Spielerskill, über den nicht weiß, welchen durchschnittlichen Einfluß er auf ein einzelnes Spiel hat.Das muss anhand einer Liste vieler gespielter Spiele herausgefunden werden. Haste die Liste nicht, glaube ich nicht, daß jemand den richtigen Zusammenhang, also das richtige Modell, aus der Luft erraten kann.
edit: schon 100000 Spiele pro Player und er gammelt noch bei 87% herum.
-
@volkard:
Wenn du unbedingt Experimentalmathematik machen willst, probiers mal mit folgendem Programm:#include <iostream> #include <random> #include <vector> #include <stdint.h> #include <algorithm> #include <cassert> using namespace std; struct Player { double skill; double gamesWon; int name; Player(double skill,int name) :skill(skill), gamesWon(0), name(name) { } }; int main() { const size_t playersCount = 150000; const size_t playersPerTeam = 15; assert(playersCount % 2*playersPerTeam == 0); vector<Player> players; //spieler erzeugen std::mt19937 generator; std::normal_distribution<double> distribution(100,10); for(size_t i=0; i!=playersCount; ++i) players.push_back(Player(distribution(generator),i)); double gamesPlayed=0; for(;;) { for(size_t i=0; i<100; ++i) { // alle mischen random_shuffle(players.begin(), players.end(),[&](int i){return generator() % i;}); // alle spielen lassen for (size_t n=0; n<playersCount; n+=2*playersPerTeam) { double sumA=0; for(size_t i=0; i<playersPerTeam; ++i) sumA += players[n+i].skill; double sumB=1; for(size_t i=playersPerTeam; i<2*playersPerTeam; ++i) sumB += players[n+i].skill; //gewinne merken if(sumA>sumB) for(size_t i=0; i<playersPerTeam; ++i) ++players[n+i].gamesWon; else for(size_t i=playersPerTeam; i<2*playersPerTeam; ++i) ++players[n+i].gamesWon; } ++gamesPlayed; } double hits=0; assert(playersCount%2==0); sort(players.begin(), players.end(), [](const Player& a, const Player& b) { return a.gamesWon < b.gamesWon; } ); size_t n=0; size_t b=0; for(size_t a=0; a<playersCount; a+=10) { // wir vergleichen nicht zufaellige leute, sondern welche deren winrate sich um ein wenig mehr als 1% unterscheidet while (b<playersCount && players[b].gamesWon/gamesPlayed < players[a].gamesWon/gamesPlayed + 0.01) b++; if (b>=playersCount) break; bool wonBySkill=players[a].skill>players[b].skill; bool wonByRank=players[a].gamesWon>players[b].gamesWon; if(wonBySkill==wonByRank) ++hits; ++n; } cout<<"gamesPerPlayer="<<gamesPlayed; double prob = hits*100.0/n; cout<<" prob="<<prob<<'%'<<endl; if(prob>=95) break; } system("pause"); }
Ergebnis: Um die 12000.
Dann kannst du auch mal mit der Funktion rumspielen (z.B. * statt +) und solange du keine Kanonenfutter-Funktion nimmst, sondern eine bei der die Gewinnwahrscheinlichkeit für jeden Spieler streng monoton mit dem Skill steigt, wird etwas Ähnliches rauskommen. Jedenfalls muss die Zahl im Mittel unter 20000 bleiben.
Mathematik lügt nicht.
-
C14_off schrieb:
Wir wollen aber nur herausfinden wer besser ist
Wollten wir nicht herausfinden wie viele Spiele man braucht um (relativ) sicher sagen zu können dass jemand mit einem Prozent besserer Win-Rate auch besser ist? (Ja, das ist ein Unterschied..)
C14_off schrieb:
Das ist aber genau dann der Fall wenn sein p höher ist.
Hä.. ist p nicht genau die Win-Rate?
Btw hört sich die Fragestellung "Wie viele Spiele braucht man um mit x% Sicherheit sagen zu können dass die Win-Rate eines Spielers der Win-Rate seines Skills entspricht? (Mit einem y% Fehlerintervall)" für mich sinnvoller an.
-
cooky451 schrieb:
C14_off schrieb:
Das ist aber genau dann der Fall wenn sein p höher ist.
Hä.. ist p nicht genau die Win-Rate?
Btw hört sich die Fragestellung "Wie viele Spiele braucht man um mit x% Sicherheit sagen zu können dass die Win-Rate eines Spielers der Win-Rate seines Skills entspricht? (Mit einem y% Fehlerintervall)" für mich sinnvoller an.
Das Missverständnis ist hier, das "Winrate" im Eingangsposting doppelt belegt ist.
Es gibt die Gewinnwahrscheinlichkeit, die es zu schätzen gilt ("wahre Winrate")
und die relative Häufigkeit wieviele Gefechte denn nun tatsächlich gewonnen wurden ("Winrate").
Die "Winrate" konvergiert gegen die "wahre Winrate"/Gewinnwahrscheinlichkeit im Limit unendlich vieler Gefechte
bzw. wir gehen davon aus, dass die eigentlichen Siege Ziehungen aus dieser Gewinnwahrscheinlichkeit sind (so wie Münzwürfe mit einer je nach Gewinnwahrscheinlichkeit gezinkten Münze).
Damit kann man die wahre Gewinnwahrscheinlichkeit schätzen.
Wenn diese wahre Gewinnwahrscheinlichkeit jetzt mit dem Skill wächst kann man damit auch etwas über den Skill aussagen.cooky451 schrieb:
C14_off schrieb:
Wir wollen aber nur herausfinden wer besser ist
Wollten wir nicht herausfinden wie viele Spiele man braucht um (relativ) sicher sagen zu können dass jemand mit einem Prozent besserer Win-Rate auch besser ist? (Ja, das ist ein Unterschied..)
Ja, genau das wollen wir. Im Zusammenhang wollte ich mit dem "nur" sagen, dass es nicht wichtig ist, um wieviel sich der Skill unterscheidet, sondern nur welcher Skill höher ist.
Das wollte ich deshalb betonen, weil ich glaube dass es die unbewusste Quelle deines Einwands war, die Anzahl der Spieler pro Team müsste eingehen:
Wenn die Frage lauten würde
"Wieviele Spiele braucht man, um (relativ) sicher sagen zu können, dass jemand mit einem Prozent besserer Win-Rate einen Skill-Punkt mehr hat als sein Gegner?"
müsste man den Zusammenhang zwischen Skill und Gewinnwahrscheinlichkeit kennen.
Der wäre in einem 1vs1 Spiel steiler als in einem 15vs15 Spiel (somit bräuchte man im 1vs1 weniger Gefechte) und deswegen dachtest du vermutlich intuitiv, dass die Anzahl der Spieler pro Team in die Endformel eingehen muss.
Da die Frage aber lautet
"Wie viele Spiele braucht man, um (relativ) sicher sagen zu können, dass jemand mit einem Prozent besserer Win-Rate auch den höheren Skill hat?"
reicht es zu wissen, dass der Skill streng monoton mit der Gewinnwahrscheinlichkeit wächst und der konkrete Zusammenhang zwischen Skill und Gewinnwahrscheinlichkeit ist egal.
Da jeder sinnvolle Skillbegriff diesen Einfluss auf die Gewinnwahrscheinlichkeit haben sollte, können wir auch noch einen Schritt weiter gehen und den Skill für diese Aufgabenstellung
(es kommt nur auf die Reihenfolge an, absolute Zahlenwerte sind egal) gleich als die Gewinnwahrscheinlichkeit (nicht Winrate!) definieren.