Fehler bei der linearen Regression / Vorhersage eines realen Datensatzes


8

Ich habe einen Datensatz, für den ich versuche, eine Regression durchzuführen, und der fehlschlägt.

Die Situation:

  • Tausende von Kampfroboterbetreibern kämpfen mit Kampfrobotern untereinander.
  • Einige Kampfroboter sind stark und mächtig, andere sind schwach; Die Starken gewinnen öfter und verursachen mehr Schaden.
  • Die Fähigkeiten der Roboterbediener variieren, wobei die erfahreneren häufiger gewinnen und mehr Schaden verursachen
  • Wir haben einige zusammenfassende Informationen über die Ergebnisse ihrer Schlachten, aber nicht alle Details.
  • Wir wissen, welche Kampfroboter sie in ihren Schlachten eingesetzt haben und wie oft (einschließlich der Anzahl dieser Schlachten, die sie gewonnen haben), und wir kennen den Gesamtschaden, den sie insgesamt verursacht haben (von zwei Arten, Schaden A und Schaden B)
  • Einige Roboter können besser Schaden A zufügen, während andere Schaden B verursachen
  • Für unbekannte Kampfroboterbetreiber, die nur darauf basieren, welche Roboter sie in Schlachten eingesetzt haben (und wie oft), möchten wir schätzen, wie viel Schaden jeder Art sie erleiden würden und wie viel Prozent der Schlachten sie höchstwahrscheinlich gewonnen haben

Zum Beispiel:

  • John hat Roboter A für 4 Schlachten und Roboter B für 2 Schlachten verwendet und 240 Einheiten Schaden A zugefügt
  • James hat Roboter A für 1 Schlacht und Roboter B für 10 Schlachten verwendet und 1010 Einheiten Schaden A zugefügt

Ich kann daher schätzen, dass Roboter A wahrscheinlich 10 Einheiten Schaden A pro Kampf verursacht, während Roboter B 100 Einheiten Schaden A pro Kampf verursacht, und daher, wenn er gebeten wird, den von Matthew verursachten Schaden A zu schätzen, für den nur jeder der beiden Roboter gespielt hat Jeweils 2 Schlachten werden auf 220 == (10 * 2 + 100 * 2) geschätzt.

Leider sind die realen Daten nicht so sauber und unkompliziert, wahrscheinlich weil:

  • Es gibt eine signifikante Abweichung aufgrund der Fähigkeiten des Roboterbedieners, z. B. könnte ein guter Bediener 20 Einheiten Schaden mit Roboter A verursachen, während ein schlechter nur 5 Einheiten Schaden zufügt.
  • Es gibt einige zufällige Abweichungen aufgrund von Gegnern, die im Falle einer kleinen Stichprobe gezogen werden (z. B. zieht jemand einen starken Gegner und verliert, obwohl er einen besseren Roboter als der Gegner hat), obwohl dies letztendlich ausgeglichen werden würde
  • Es kann eine geringfügige Auswahlverzerrung geben, da es den besten Roboterbetreibern gelingt, die besten Roboter auszuwählen, die häufiger in den Kampf gezogen werden sollen

Der reale Datensatz ist hier verfügbar (630.000 Einträge bekannter Ergebnisse von Kampfbetreibern):

http://goo.gl/YAJp4O

Der Datensatz ist wie folgt organisiert, mit einem Roboterbedienereintrag pro Zeile:

  • Spalte 1 ohne Label - Operator ID
  • Schlachten - Gesamtschlachten, an denen dieser Betreiber teilgenommen hat
  • Siege - Gesamtschlachten, die dieser Betreiber gewonnen hat
  • Niederlagen - totale Schlachten, die dieser Operator verloren hat
  • SchadenA - Gesamtschaden A Punkte
  • Schaden B - Gesamtschaden B Punkte zugefügt
  • 130 Spaltenpaare wie folgt:
    • Schlachten_ [Roboter-ID] - Schlachten mit Roboter [Roboter-ID]
    • victories_ [robotID] - Siege, die mit robot [robotID] erzielt wurden

Was ich bisher gemacht habe:

  • Versuchte ein paar lineare Modelle mit dem R- biglmPaket, die eine Formel erstellen, um damageA ~ 0 + battles_1501 + battles_4201 + ...zu versuchen, angepasste "erwartete" Werte für jeden der Roboter zu erhalten.
  • Gleiches, aber Entfernen des erzwungenen Ursprungsabschnitts durch Nichteinbeziehung 0 +in die Formel
  • Gleich, aber auch victories_[robotID]in den unabhängigen Variablen enthalten
  • Wie zuvor, jedoch nur diejenigen Roboteroperatoren auswählen, deren Siegzahlen nahe an ihren Niederlagenzahlen liegen
  • Eine lineare Regressionsmodell für damageA ~ 0 + battles_1501 + battles_non_1501wo battles_non_1501sind alle Schlachten in Roboter andere als Robotermodell 1501. Dann gilt für alle anderen Robotertypen wiederholt.

Ich habe die Gesundheit überprüft, indem ich mir die vorhergesagten Werte für Schaden A und Schaden B angesehen und das Verhältnis von Siegen zu Schlachten mit dem tatsächlichen Verhältnis von Siegen zu Schlachten verglichen habe, das wir für jeden der Roboter tatsächlich genau berechnen können.

In allen Fällen waren die Ergebnisse zwar nicht vollständig falsch, aber ausreichend schlecht, um festzustellen, dass das Modell nicht ganz funktioniert. Zum Beispiel haben einige Roboter negative Schadenszahlen erreicht, was eigentlich nicht passieren sollte, da Sie in einem Kampf keinen negativen Schaden anrichten können.

Für den Fall, dass ich auch die bekannten victories_[robotID]Werte in der Formel verwendet habe, waren viele der battle_[robotID]Koeffizienten etwas große negative Zahlen, also habe ich versucht, für den "durchschnittlichen" Operator nach zu schätzen, battle_[robotID] + victories_[robotID] / 2aber das ergab auch keine vernünftigen Ergebnisse.

Ich habe jetzt etwas keine Ideen mehr.


4
Klingt so, als würden Sie kein Modell mit gemischten Effekten anpassen, was Sie hier tun sollten, um Unterschiede zwischen den Operatoren und (darin verschachtelt?) Den Robotern zu berücksichtigen. Was das Problem mit negativen Schäden
M. Berk

Vielen Dank für Ihren Rat, obwohl ich zugeben muss, dass ich keinen der Vorschläge anwenden kann. Ich habe versucht, lmeanstelle meines zu stecken biglm, aber natürlich muss ich viel mehr darüber lesen, um zu verstehen, was genau als Parameter dafür bereitgestellt werden soll.
James.Taylor.1985

1
Ist dies der einzige Weg, um die Daten zu erhalten? Es wäre besser, einen Datensatz mit einer Beobachtung für jede Schlacht zu haben, in dem die beiden Bediener, die beiden Roboter und das Ergebnis identifiziert werden. Wenn die Daten als zusammenfassende Informationen vorliegen müssen, können Sie andere zusammenfassende Informationen erhalten, oder ist dies der Fall?
Bill

Dies ist es, die Daten werden von einem externen System empfangen, das einem anderen Unternehmen gehört, und dies ist leider der Umfang der verfügbaren Daten. Ich habe ein paar weitere zusammenfassende Variablen zur Verfügung, die ich hier nicht erwähnt habe (Sie können sie als DamageB, DamageC usw. betrachten), aber sie sind eng mit DamageA & DamageB korreliert, daher denke ich nicht, dass sie so nützlich sind und ich erwähnte sie nicht, um Verwirrung zu vermeiden.
James.Taylor.1985

2
Warum machen Sie keine ELO-Bewertung für die Bediener, Maschinen oder eine Variante davon? Diese Daten sagen auch, dass es unglaublich viel Spaß macht.
RegressForward

Antworten:


1

Dies erfordert wahrscheinlich eine simultane Gleichungsmodellierung anstelle einer linearen Regression.

Die Erfolgswahrscheinlichkeit hängt von zwei getrennten Gleichungen ab, von denen eine die Qualität des Gegners, der Person und der Maschine misst und die andere die Qualität des Selbst, der Person und der Maschine misst. Sie stehen sich direkt gegenüber, aber es wird nur ein Ergebnis beobachtet. Ohne SEM glaube ich, dass Ihre Koeffizienten voreingenommen sind, weshalb sie möglicherweise unbedeutend sind. Dies erinnert an die Schätzung von Angebots- und Nachfragegleichungen , die oft nichts bringen, wenn sie nicht gut vorbereitet sind.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.