実際のデータセットの線形回帰/予測に失敗する


8

回帰を実行しようとして失敗したデータセットがあります。

状況:

  • 何千人ものバトルロボットオペレーターが、バトルロボットを使用して互いに戦います。
  • 戦闘ロボットの中には、強力で強力なものもあれば、弱いものもあります。強いものはより頻繁に勝ち、より多くのダメージを与えます。
  • ロボットオペレーターのスキルはさまざまで、スキルの高いオペレーターが勝つ頻度が高く、より多くのダメージを与えます
  • 彼らの戦いの結果に関するいくつかの要約情報がありますが、詳細のすべてではありません。
  • 彼らが戦闘で使用した戦闘ロボットとその回数(勝利した戦闘の数を含む)、および彼らが与えた合計ダメージ(2種類のダメージAとダメージB)がわかります
  • 一部のロボットはダメージAを与えるのが得意ですが、他のロボットはダメージBを与えます。
  • 戦闘で使用したロボット(およびその回数)のみに基づいて不明な戦闘ロボットオペレーターの場合、達成できる各種類のダメージの量と、勝った可能性が最も高い戦闘の割合(%)を推定します

例えば:

  • ジョンはロボットAを4戦、ロボットBを2戦使用し、240ユニット分のダメージを与えました
  • ジェームズはロボットAを1戦、ロボットBを10戦使用し、1010ユニット分のダメージを与えました

したがって、ロボットAはおそらく1戦あたり10ユニットのダメージAを与える一方、ロボットBは1戦あたり100ユニットのダメージAを与えると見積もることができるため、2つのロボットのそれぞれをプレイしただけのマシューによって与えられたダメージAを見積もるそれぞれ2戦、220 ==(10 * 2 + 100 * 2)と推定されます。

残念ながら、実際のデータはそれほどクリーンで簡単ではありません。

  • ロボットオペレーターのスキルには大きな違いがあります。たとえば、優れたオペレーターはロボットAに20ユニットのダメージを与え、悪いオペレーターは5ユニットしかダメージを与えることができません。
  • 小さなサンプルの場合、対戦相手が引き寄せられるため、ランダムな差異があります(たとえば、誰かが強い対戦相手を引き、対戦相手よりも優れたロボットを持っているにもかかわらず負けます)。
  • 最高のロボットオペレーターが最高のロボットを選んでより頻繁に戦闘に参加するという点で、いくつかのマイナーな選択バイアスがあるかもしれません

実際のデータセットはこちらから入手できます(既知の戦闘オペレーターの結果の63万件)。

http://goo.gl/YAJp4O

データセットは次のように構成され、行ごとに1つのロボットオペレーターエントリがあります。

  • ラベルのない列1-オペレーターID
  • 戦闘-このオペレーターが参加した戦闘の合計
  • 勝利-このオペレーターが獲得した合計戦闘数
  • 敗北-このオペレーターが負けた合計戦闘数
  • DamageA-与えられたダメージAポイントの合計
  • DamageB-与えられたダメージBポイントの合計
  • 次の130組の列:
    • battles_ [robotID]-ロボット[robotID]を使用した戦闘
    • victories_ [robotID]-ロボット[robotID]を使用して獲得した勝利

これまでに行ったこと:

  • R biglmパッケージを使用していくつかの線形モデルをdamageA ~ 0 + battles_1501 + battles_4201 + ...試して、ロボットごとに「期待される」値のフィッティングを取得するなどの式を作成しました。
  • 同じですが0 +、数式に含めないことで強制原点インターセプトを削除します
  • 同じですがvictories_[robotID]、独立変数にも含まれています
  • 以前と同じですが、勝利数が敗北数に近いロボットオペレーターのみを選択します
  • ロボットモデル1501以外のロボットでのすべてのバトルがdamageA ~ 0 + battles_1501 + battles_non_1501どこにbattles_non_1501あるかについての線形回帰モデル。他のすべてのロボットタイプに対して繰り返されます。

予想されるDamageAとDamageBの値を確認し、勝利/戦闘の比率を各ロボットについて実際に正確に計算できる実際の勝利/戦闘の比率と比較することにより、健全性チェックを行いました。

すべての場合において、結果は完全にオフではありませんでしたが、モデルが十分に機能していないことを確認するのに十分オフでした。たとえば、一部のロボットは負のダメージ数を達成しましたが、これは戦闘で負のダメージを与えることができないため、実際には起こりません。

victories_[robotID]式で既知の値も使用した場合、battle_[robotID]係数の多くはやや大きな負の数になるため、「平均」演算子の推定を試みましたbattle_[robotID] + victories_[robotID] / 2が、それでも妥当な結果が得られませんでした。

私は今ややアイデアがなくなっています。


4
オペレーターと(その中にネストされている)ロボットとの間の変動を説明するためにここで実行する必要がある混合効果モデルを適合させていないようです。負のダメージの問題については、何らかの変革を行うことで回避できます
M. Berk

アドバイスをありがとうございます。ただし、どちらの提案を適用するかわかりません。私はのlme代わりにプラグインを試しましたが、biglmパラメーターとして何を提供すべきかを正確に理解するには、これについてさらに多くのことを読む必要があります。
james.taylor.1985 14年

1
これがデータを取得できる唯一の方法ですか?2人のオペレーター、2人のロボット、および結果を特定し、戦闘ごとに1つの観測値を持つデータセットを用意することをお勧めします。データが要約情報として提供される必要がある場合、別の要約情報を取得できますか、またはこれですか?
2014年

これはそれであり、データは別の会社が所有する外部システムから受信され、これは残念ながら利用可能なデータの範囲です。ここで言及しなかったいくつかのサマリー変数があります(それらはDamageB、DamageCなどと見なすことができます)。ただし、それらはDamageAおよびDamageBと密接に相関しているため、それほど有用ではないと思います。混乱を避けるためにそれらに言及しなかった。
james.taylor.1985 14年

2
オペレーター、マシン、またはそれらのバリアントのELOレーティングを作成しませんか?また、このデータは信じられないほどの楽しさのように聞こえると言います。
RegressForward 2015年

回答:


1

これはおそらく、線形回帰ではなく、同時方程式モデリングが必要です。

成功の確率は、2つの別々の方程式に依存します。1つは、対戦相手、個人、およびマシンの品質を測定し、もう1つは、自己、個人、およびマシンの品質を測定します。それらは互いに直接反対しますが、1つの結果のみが観察されます。SEMを実行しないと、係数に偏りがあると思います。そのため、係数は重要ではありません。これは、需要と供給の方程式の推定を連想させるものであり、よく準備されていない限り、何も得られないことがよくあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.