J'ai un ensemble de données sur lequel j'essaie de faire une régression, et échoue.
La situation:
- Des milliers d'opérateurs de robots de combat se battent entre eux à l'aide de robots de combat.
- Certains robots de combat sont forts et puissants, et d'autres sont faibles; les plus forts gagnent plus souvent et infligent plus de dégâts.
- Les opérateurs de robots varient en compétences, les plus qualifiés gagnant plus souvent et causant plus de dégâts
- Nous avons quelques informations sommaires sur les résultats de leurs batailles, mais pas tous les détails.
- Nous savons quels robots de combat ils ont utilisés dans leurs batailles, et combien de fois (y compris le nombre de ces batailles qu'ils ont gagnées), et nous connaissons le total des dégâts qu'ils ont infligés (de deux types, dommages A et dégâts B) au total
- Certains robots infligent mieux des dégâts A, tandis que d'autres endommagent B
- Pour les opérateurs de robots de combat inconnus basés uniquement sur les robots qu'ils ont utilisés dans les batailles (et combien de fois), nous aimerions estimer le montant des dégâts de chaque type qu'ils réaliseraient et le pourcentage de batailles qu'ils ont probablement gagné
Par exemple:
- John a utilisé le robot A pour 4 batailles et le robot B pour 2 batailles, et a infligé 240 unités de dégâts A
- James a utilisé le robot A pour 1 bataille et le robot B pour 10 batailles, et a infligé 1010 unités de dégâts A
Je peux donc estimer que le Robot A inflige probablement 10 unités de Dégâts A par bataille, tandis que le Robot B inflige 100 unités de Dégâts A par bataille, et donc si on lui demande d'estimer les Dommages A infligés par Matthieu qui n'a joué que chacun des deux robots pendant 2 batailles chacune, estimeront à 220 == (10 * 2 + 100 * 2).
Malheureusement, les données réelles ne sont pas aussi claires et simples, probablement parce que:
- Il y a un écart important en raison de la compétence de l'opérateur du robot, par exemple, un bon opérateur pourrait infliger 20 unités de dégâts avec le robot A tandis qu'un mauvais seulement 5 unités.
- Il y a une certaine variance aléatoire due aux adversaires tirés dans le cas d'un petit échantillon (par exemple, quelqu'un attire un adversaire fort et perd malgré avoir un meilleur robot que l'adversaire), bien que finalement, il égaliserait
- Il peut y avoir un biais de sélection mineur dans la mesure où les meilleurs opérateurs de robots parviennent à choisir les meilleurs robots à affronter plus souvent.
L'ensemble de données réelles est disponible ici (630 000 entrées de résultats d'opérateurs de combat connus):
L'ensemble de données est organisé comme suit, avec une entrée d'opérateur de robot par ligne:
- Colonne 1 sans étiquette - ID opérateur
- batailles - nombre total de batailles auxquelles cet opérateur a participé
- victoires - nombre total de batailles remportées par cet opérateur
- défaites - nombre total de batailles perdues par cet opérateur
- damageA - total des points de dégâts A infligés
- damageB - total des points de dégâts B infligés
- 130 paires de colonnes comme suit:
- battles_ [robotID] - batailles utilisant le robot [robotID]
- victories_ [robotID] - victoires obtenues en utilisant robot [robotID]
Ce que j'ai fait jusqu'à présent:
- J'ai essayé quelques modèles linéaires en utilisant le
biglm
package R qui construisent une formule telle quedamageA ~ 0 + battles_1501 + battles_4201 + ...
pour essayer d'obtenir des valeurs "attendues" ajustées pour chacun des robots. - Idem, mais en supprimant l'interception d'origine forcée en ne l'incluant pas
0 +
dans la formule - Idem, mais inclut également le
victories_[robotID]
dans les variables indépendantes - Comme auparavant, mais en sélectionnant uniquement les opérateurs de robots dont le nombre de victoires est proche de leur nombre de défaites
- Un modèle de régression linéaire pour
damageA ~ 0 + battles_1501 + battles_non_1501
oùbattles_non_1501
sont toutes les batailles dans des robots autres que le modèle de robot 1501. Puis répété pour tous les autres types de robots.
J'ai fait des vérifications de santé mentale en examinant les valeurs de dommages A et de dommages B prévues, ainsi qu'en comparant le rapport victoires / batailles avec le rapport victoires / batailles réel que nous pouvons réellement calculer avec précision pour chacun des robots.
Dans tous les cas, alors que les résultats n'étaient pas complètement erronés, ils l'étaient suffisamment pour que le modèle ne fonctionne pas tout à fait. Par exemple, certains robots ont atteint des nombres de dégâts négatifs qui ne devraient pas vraiment se produire car vous ne pouvez pas faire de dégâts négatifs dans une bataille.
Dans le cas où j'ai également utilisé les victories_[robotID]
valeurs connues dans la formule, de nombreux battle_[robotID]
coefficients ont fini par être des nombres négatifs quelque peu importants, j'ai donc essayé d'estimer pour l'opérateur "moyen" par battle_[robotID] + victories_[robotID] / 2
mais cela n'a pas non plus donné de résultats raisonnables.
Je suis un peu à court d'idées maintenant.
lme
place de la mienne biglm
, mais j'ai évidemment besoin de faire beaucoup plus de lecture à ce sujet pour comprendre quoi exactement lui fournir comme paramètres.