情報共有&質問&雑談

はじめに

コンペ開催中でのトピック投稿は初となるので,もし,ルールなどに反する記述などがありましたら早急に削除するので,何か問題があればご指摘よろしくお願いいたします.

一つ前に参加していたコンペで,疑問に思っていたことなどを,聞けずに最終日を迎えて後悔が多かったので,今回は思い切って,疑問に思ったことなどを聞けるように,トピックを作ってみました. データ解析のコンペ自体も,参加経験が少ないため,ルールなどの基本事項なども確認させてもらえたらと思っています. 少しでも,誰かのスコア向上に貢献できたら,いいなとも思っているので,いろいろ気づきがあったら,内容追加できたらと思っています.

スプラトゥーンに限らず,ゲームがゲームボーイアドバンスあたりで止まっているので,いろいろ質問させてもらえたら幸いです. 好きだったゲームは,スーパーマリオワールドです.

随時,コメントでデータに関する雑談交えつつ,情報共有を追加していけたらと思っています.

情報共有

まず,ベストスコアはLightGBMのみを使用し,CV:0.558751,LB:0.563867となっており,現状はCV:よりもLBが高い結果となっています. 複数手法のアンサンブルなどは,コンペ後半にやった方がいいみたいなことをどこかで目をしたので,今はLightGBM,NNの各モデルでのスコア向上に挑戦しています. 他の参加者のモデルと,そのCV,LBがどれくらいなのか気になっているので,教えてあげてもいいよって人はコメントで教えてほしいです! また,自分は交差検証でのデータ分割を完全にランダムにしているのですが,みなさんは,データ分割に工夫したりしているのでしょうか? このあたりも,試して駄目だったものでもいいので,良かったらコメントで教えてください!

また,すでに気づいている方もいると思いますが,テストデータに関しても少し気づいたことがあるので共有しておきます. リーダーボードにはテストデータの一部で計算と書いてあり,リーダーボードと最終スコア計算に使われるデータの割合は書いてありませんが,LBの計算に使われているデータは,テストデータの4分の1の約7085件であり,最終評価で使用されるのは残りの4分の3の約21255件のデータです(一応計算して出したのですが,ミスってるかもしれないので,間違ってたらすいません). また,スプラトゥーンに関してほとんど知識はありませんが,対戦ゲームで情報だけから,勝敗が必ず決まるようなゲームではないと考えているため(有利・不利はある),LBのスコアが高くてもこの割合だと油断はできないなと思っています(CV信じて,特徴量とか決めていきたい). また,いったん全ての予測を1にして提出したLBのスコアは,0.524065でした. ちなみに自分のLightGBMモデルのテストデータの1の割合は57%で少し多い傾向にあり,nnモデルは,1の割合が53%とLB計算に使われている割合に近い結果となっていました.

その他の質問&疑問点

雑談にも繋げられるように,いくつか質問や疑問点についてメモしておきます.

その1

与えられたデータからいくつか疑問点があるのですが,modeが'nawabari'のとき,ランクが必ずNaNになっているような気がするのですが,これはなんでなのでしょうか? また,4対4のゲームと認識しているのですが,A4やB4のweaponとlevelが欠測している原因は,切断とかが原因なのかなと思っているのですが,どうなんでしょうか?

その2

日付と時間帯のデータありますが,実際,ガチ勢が多い時間帯や,適当にやっている人が多い時間帯とかってあるものなのでしょうか? そもそもランクごとの強さのイメージがまったくわからない(;´・ω・) 小学生とかの平均ランクってどのくらい何ですかね? オンラインゲームとかだと,深夜はガチプレイヤー多かったりするのかなと思ったのですがどうなんでしょうか? データの分布として,時間帯では0時から順に,

[4293, 4354, 5364, 6725, 7056, 9315, 14619, 17196, 12334, 5600, 4252, 3357]

のデータがテーブルに存在しており,12時から18時の時間帯のデータが多い印象を受けます. この時間帯に多いのは,曜日ごとでカウントしたデータが,月曜日から曜日ごとに,

[12024, 10897, 10408, 11868, 11506, 19390, 18372]

となっているため,土日のデータが多いことによる影響で,多いのかなと考えています. 時間帯,曜日は勝ち負けの判断には使えないと思っているのですが,一応情報を共有しておきつつ,このあたりの情報から,ガチな試合やってるプレイヤーが多い・少ないみたいな情報から,予測には寄与しなくても,データごとの学習における重みとかに,もしかしたら使える??と思ったり思わなかったりしてます.

その3

スコアやランクをどうとらえるべきか,悩んでいるのですが,ランク'x'が一番高いようですが,ランクが'x'でレベルが37のプレイヤーと,ランクが'c+'でレベルが134のプレイヤーとかいるのですが,これは最短で'x'までレベルを上げたこのプレイヤーは優れており,レベルが134だけど,ランクが'c+'なのは,めちゃくちゃやりこんでるけど,うまくない残念なプレイヤーととらえればいいのでしょうか?

今後の方針

初めて2値分類で予測がこんなに難しいコンペへの参加なので,悪戦苦闘しつつすごく楽しめています. 次の方針としては,疑似ラベルを付与した半教師あり学習で,予測を行ってみようかなと思ったりしているのですが,こういうデータに対して半教師あり学習ってどうなのでしょうか?(疑似ラベルがまともに付けられる気がしない(;´・ω・)) とりあえず,半教師学習これまで使ったことないので,とりあえず実装の練習も兼ねてやってみたいなと思っています!

その他

①これまで最終サブを1つor2つほど選ぶコンペしか参加してこなかったのですが,このコンペは締切日までに提出した全submitが最終評価の対象ってことでいいのでしょうか?

②基本情報の評価方法に記載されている提出ファイルの例が,idが0から始まっていますが,実際のtestデータや,チュートリアル確認すればわかることですが,idは1からでした.(小心者の自分は最初の提出で1からで大丈夫かドキドキしてました)

上記の内容に限らずコメントお待ちしております.

Icon21
fffukken

初めまして。私も初めてのコンペで何もわからなない状態ですが、スプラトゥーンはやったことがあるのでわかる点は回答します。

その1

nawabariだとランクは関係なくマッチングされるので、NaNになっているのだと思います。nawabariのランクも存在しません。 また、このゲームはネットを介して行うのでネット環境が弱い人は回線落ちする(=その試合に参加できない)ことが多々あります。これは試合開始時にすでに人数が少なかったり、試合中に回線落ちすることもあります。感覚的には数万試合あってA4やB4がNaNである数十~数百だと回線落ちの割合が低いと感じています。ですので、この回線落ちは試合開始時にすでに回線落ちしていると推測します。4対4のゲームが4対3になるので、回線落ちしていると勝率が著しく悪いと思います。

その2

時間帯は気にしたことないので分からないですが、あまり関係ないと思っています。

その3

概ねご理解の通りだと思います。また、nawabariだとレベルは上がりますが、ランクは上がりません。nawabariをやりこんでランクが低いけどレベルは高い、という人もいるかもしれません。私はnawabariは一切やらず、gachiしかしません。

その他 ① 私も気になります。

Icon10
uratatsu

その2についてはプレイ時間帯はわかりませんが、下記のようなtwitterでアンケートを取った結果があります。 スプラトゥーン2ではウデマエというランク帯のほかにXPという内部レートが存在し、その平均は15~17歳ぐらいがピークになります。ガチマッチ(ナワバリ以外)では基本的に同じウデマエ帯の中の、似たようなXPの人がマッチングされる仕様になっているとされています。基本的には勝率の高いガチ勢はガチ勢同士マッチングする方向なはずです。ナワバリはわかりません。 https://twitter.com/Nanatoman710/status/1292456320860213249

その3についてはサブアカが存在するのでもう少し複雑です。例えばレベル10台でウデマエが高い方はサブアカ勢(もしくはスプラトゥーン1をやりこんでいた方)の可能性があります。ただ、このようなサブアカ勢と初心者がマッチングしないようにB帯以降は内部レートに従ってサブアカ勢同士をマッチングしやすくするようにしているとも噂されています。例えば、今回のトレーニングデータのid 3470などはほぼ全員がサブアカ勢のように見えます。

あとは新しいブキの練習のためにわざとウデマエ帯を落とすことも可能なので、レベルが高く、ウデマエがC+という方も本当に下手なのかはわかりません。

Aws4 request&x amz signedheaders=host&x amz signature=931800394561a325f0b40b7f8f91b1823f1e262c09f157eab35b3d7ffafd2092
takaito

fffukken さん

コメントありがとうございます.

コメント大変参考になりました.

自分としてもA4やB4のweaponとlevelが欠測している原因は,回線落ちだと思っていましたが,試合開始時にすでに回線落ちしていると考えると勝率に大きく影響を与えそうですね.

武器やステージの組み合わせももちろんですが,このランクとレベルをどうやって特徴量にしていくかもカギになってきそうですね.(まだ単純に数値化しているだけなので汗)

Aws4 request&x amz signedheaders=host&x amz signature=931800394561a325f0b40b7f8f91b1823f1e262c09f157eab35b3d7ffafd2092
takaito

uratatsu さん

コメントありがとうございます.

コメント大変参考になりました.

ザブアカ勢の存在や,ウデマエ(ランク?)を落とすことが可能とのことで,実際にこういうゲームをプレイしたことがないので詳しくはわかりませんが,レベルが高いプレイヤーが集まる場所だと他のプレイヤーにかけて迷惑がかかってしまうことから,あえて少し低めのマッチングをしているって感じなんですかね? そう考えると,このあたりのランクやレベルの扱いは,かなり難しいものになりそうですね(;´・ω・)

Icon12
TASSAN

他の方がドメイン知識について回答をされているようなので、自分はCV,LBスコアや気になるところを簡単に共有したいと思います。
自分の場合、CVとLBは下の通りです(若干記憶が曖昧なのですが大体はあってるはずです・・・)

  • CatBoost
    CV: 0.568〜0.571, LB: 0.568~0.569
  • LightGBM
    CV: 0.566〜0.568, LB: 0.568〜0.569
  • NN
    CV: 0.562, LB 0.566

いずれも5foldで、勝敗の比率が同じようになるように分割しています(いずれ分割方法は変えようと思っています)。
NNとLightGBMを3:7で重み付き平均したらLBが0.571になりました。

trainとtestの分布はあまり変わらないと思うのでCVを信じようと思います。

以下気になってるところです。

  • カテゴリ変数が多いので、どうエンコーディングしたら良いかはすごく悩んでいます。embedding等を試しているのですが、今のところはone-hot(ぽいやつ)が一番うまくいっています。
  • A1の人はレベル平均が高い傾向があり、Aチームのほうが勝率が高いのはこれに起因していると思うのですが、何を元にAチームBチーム、添字1~4を決めているのか気になっています。
  • データのかさ増しとしてA1~A4とB1とB4をそれぞれシャフルしたものを用いて学習したのですが、NNだと精度や学習ロスが改善するのに対し、LightGBMだと殆ど変わりませんでした(実装バグの可能性あり)。

参考になれば幸いです!

Aws4 request&x amz signedheaders=host&x amz signature=ccf54abe32b8f3adf3e889a4963f8d1802c18150f7acc68d2956d0a86821ba9b
sylk

その③ ランクとウデマエについて

実際のところ、ゲームモードは全部で ・なわばり ・ガチマッチ ・プライベート(フレンドのみ入れる) ・リーグマッチ の4つが存在します。

ガチマッチとリーグマッチは、よく似ていて、どちらも2時間起きにステージ更新、ルールもエリアからあさりまでじゅんぐりあります。

違いは、ガチマッチはランダムマッチング、リーグマッチは固定の2人or4人のチームで行われる点です。 1人でも味方でVCできる人がいるだけでもわりと違ったりしますし、楽しめます。

そういう観点で、人によっては、ガチマは知らん人と組まされるからつまらん、リグマは楽しい。みたいな人はいます。そういった場合、ガチマッチのウデマエは(やらないので、)クソ低いのですが、ランクや実際のスキルは高いみたいな人は存在します。

Aws4 request&x amz signedheaders=host&x amz signature=931800394561a325f0b40b7f8f91b1823f1e262c09f157eab35b3d7ffafd2092
takaito

TASSAN さん

コメントありがとうございます.

コメント大変参考になりました.

各手法,CVとLBが一致しており,またLBが安定して高いこと考えると,自分自身の各モデルも特徴量の作り方次第で,まだまだ上げることができるはずなので,いろいろ試行錯誤してみたいと思います.

特に,自分の作成したNNモデルは,LB:0.553くらいなので,見直しが必要だなと思いました.

この後に書くことは実装とかミスってるかもしれないので参考程度に読んでもらえたらと思います.

weaponに関してはmodeとセットにして,Target Encodingを試してみましたが, CVは上がったものの,LBは上がりませんでした. ただ,自分が試したTarget Encodingが,リークを起こしやすいデータ全体を使ったTarget Encodingだったため,リークの起こりにくい,Holdout TSなどまだまだ試してみる価値はあるのかなと思っています.

また,ゲームを知らない素人考えでやったシンプルなものとしては,使用頻度が高い武器=強い武器or扱いやすい武器,なのではと思い,武器を使用頻度でランク付けしてみたものが,lightGBMでは,それなりに特徴量として結果に影響を与えているような気がします. ただ,マニアックな武器を使う玄人プレイヤーとかもいるようなので,そのあたりはレベルなどと組み合わせていく必要があったりするのかなと思っています.

レーティング算出に関するトピックをあげている方もいたので,そのあたりも試してみたいなとは思っています.

有効かどうかはともかく,他に試してみたいのは,NNでチームではなく個人の勝率予測を学習させて,その中間層を取り出し,それを武器,ステージ,スコア,ランクを集約した分散表現として取り出すとかやってみたら面白いのかなと思っています.

何を元にAチームBチーム,添字1~4を決めているかは確かに気になっています. ゲームとかだと,ステージによって初期位置とかがあると思うので,初期位置とかに紐づいているんですかね?

まだ,一か月以上あるので,コメント参考にしつついろいろ試してみようと思います!

Aws4 request&x amz signedheaders=host&x amz signature=931800394561a325f0b40b7f8f91b1823f1e262c09f157eab35b3d7ffafd2092
takaito

sylk さん

コメントありがとうございます.

コメント大変参考になりました.

やはり,ランクとレベルをどうやって,モデルに組み込むかは,いろいろ試してみる価値がありそうですね. 自分は,このあたりドメイン知識ないので,単純にランクとレベルを順位付けして入力していますが,実際分類には影響を与えているので,もう少し凝った前処理をいただいたコメントを参考に考えていきたいと思います.

Aws4 request&x amz signedheaders=host&x amz signature=337b58c3dd773269156b5798cb8fd5f0db88ac9ba0885283fd0a90b2c13fc771
pop-ketle

僕は基本的にはCVとPublicのスコアが大体同じくらいで安定しているなと考えていたのですが、ちょっと前にターゲットエンコーディングを試してみたら、CV:0.63くらいでpublic:0.526くらいのモデルがたまたまできて、本コンペでここまでCVとPublicのスコアに差が出たのは初なのでどうしたものか現在悩んでいます。ターゲットエンコーディング初めて試してみたのでリークしてそうですが...

というか今回ProbSpace初参加なので、そもそもどうやって最終サブを選ぶのか僕も全くわかってないのですがここどうなんでしょう?

疑似ラベルは擬似ラベルをそれなりの精度で付けられないと、あんまりうまくいかないことがあったので、今回のタスクでは個人的にはうまくいかなさそうかなと思ってます。といっても一回しか試したことないので、どうなるかわかりませんが。

個人的には、ランクやレベルよりかは、武器の相性・バランスや、(データにはないけど)プレイヤーの位置どり、(こちらもデータにはないけど)Ult(スペシャルウェポンってやつかな)の使うタイミングなんかが勝敗に大きく影響しそうな気がしてるので、武器データをいじって何かいい結果が出ないかなと現在は試してみています。

Aws4 request&x amz signedheaders=host&x amz signature=931800394561a325f0b40b7f8f91b1823f1e262c09f157eab35b3d7ffafd2092
takaito

pop-ketle さん

コメントありがとうございます.

コメント大変参考になりました.

自分もTarget Encodingを試してみましたが, CVは上がったものの,LBは上がりませんでした. 自分もCV:0.63くらいだった気がします. ただ,自分が試したTarget Encodingが,リークを起こしやすいデータ全体を使ったTarget Encodingだったため,リークの起こりにくい,Holdout TSなど他のTarget Encodingを試してみる価値はあると思っております.

最終サブに関しては,他のトピックが作られており,提出ファイルの内,private LB上で最も精度の高いcsvが自動選択される仕様みたいですね.

疑似ラベルは,いまのところはうまくいっていないので,いろいろ検討中です. 今回のような予測の難しいタスクには向いていない気はしております.

Aws4 request&x amz signedheaders=host&x amz signature=7d37e19fd9bc3f3fc4cf10db3a9082a1e397ba363fdc7247026583aa31c844af
masato8823

今回のコンペティションでは、各行が1マッチ分の情報(参加選手の武器や勝敗のデータ)を含んでいます。

そのうえで、データの出典元を少し覗くと「「A1」は投稿者であり、このプレーヤーを統計に含めると大きく偏ることに注意してください。」という注意書きがあるのがわかります。 このことからおそらく、「A1」プレイヤーがマッチしたマッチ情報が、データセットの各行にあたります。つまり「A1」プレイヤーはある特定のプレイヤー、そのほかのA2~B4まではランダムなプレイヤーの可能性があります。 (masatoさんのtopic「A1-levelの一部抜けについて」をみてもらうとその節は有力なのではないでしょうか)

また、A1プレイヤーは特定のプレイヤーではありますが、一人ではなく複数、つまり投稿者がひとりではなく多数いるということがEDAなどしてみるとわかります。 以上を踏まえると、仮説ではありますが、「A1プレイヤーの特定」が有効かもしれないとうことと、 「A1~B4プレイヤーのランダム性に基づく特徴量作成」が重要であるかもしれないという二つの仮説をつくることができます。

前者に関しては、train data と test data をconcatさせてEDAをしてみると、A1プレイヤーのみに注目した時、おそらく同一の投稿者のマッチがtrain と test の両方にいることがわかります。 そのことから、A1プレイヤーの特定は有効なのかなという感じではあります。

後者に関しては、データセットの各行にある「A2~B4プレイヤー」はランダムで決まるので、学習データに、A2~B4プレイヤーの武器などの特徴量をそれぞれそのまま入れるとoverfitする可能性があると思います。 加えて、武器ごとの勝率などをtarget encodeing で得ようとした際には、A1プレイヤー以外のプレイヤーのデータをすべて用いて行わないと正しい勝率は得られないと考えられます。 (A1プレイヤーも含めて勝率を得たほうが、予測にはもしかしたらいいのかもしれませんが) 今回のコンペでは、各プレイヤーの扱い方が重要になるのではと思っています。

ここに書いたのは全部私個人の感想ですが、まちがっていたら本当にすみません。

今回のコンペの課題的にランダム性がすごく大きいことが理由かどうかわりませんが、私のcvスコアもlbスコアも全然安定してません。cvがよくなった!と思ったらlbは下がるし..という感じです。 結構seed値にも左右されるのではないのかなとも思っています。(私自身のスコアは、cv:0.568前後、lb:0.559前後結構幅広くという感じでした) また、学習データのoof予測値も、テストデータの予測値も、targetの分布とはことなり、1を異常に多く予測してしまいます。そこから、過学習しているのかなとも思っていますが、まだよくわかっていません。 予測したラベルの分布を、targetの分布とくらべてみるのいいのかもしれません。

Aws4 request&x amz signedheaders=host&x amz signature=931800394561a325f0b40b7f8f91b1823f1e262c09f157eab35b3d7ffafd2092
takaito

masato8823 さん

コメントありがとうございます.

コメント大変参考になりました.

データの出典元の確認しておらず,見落としていましたが,「A1」のプレイヤーによって,情報提供がなされているんですね. それによって,「A1」のレベルの分布が,他の分布と異なる結果になっていることにも納得ができました.

A1プレイヤーとその他のプレイヤーの情報を分けて考えることで,精度upのためにいろいろなことがまだまだできそうだなと感じました.

特にコメントにいただいた「A1プレイヤーの特定」は,投稿者によっては投稿の偏り(勝ったものを投稿しやすい,とある武器での勝率が高いなど)みたいなものがあるとしたら,かなり有効なのかもと思いました.

ゲーム未プレイであり,間違ってたら申し訳ないですが,levelに関しては単調に増加していくものと解釈しているため,プレイヤーのlevelは少しずつ上がっていく気がするのですが,どの程度の期間or試合数でlevelは上がっていくものなのでしょうか?また,RPGのように高レベルになるとレベルが上がりにくくなるものなのでしょうか?

このあたりがある程度わかれば,A1プレイヤーの特定は,レベルと日時のデータを使うことで,雑にですができるのかなと思いました.

また,改めてlevelの分布を見てみると,異様に多いlevel (198, 99, 297)があるようですが,このあたりもなんでなのか疑問が残ります.

Aws4 request&x amz signedheaders=host&x amz signature=ccf54abe32b8f3adf3e889a4963f8d1802c18150f7acc68d2956d0a86821ba9b
sylk

これスレッド更新しても特に通知とかないから本当に更新がわかりづらい...

一度スレッドでレベルについてまとめたので見てみてください。 https://prob.space/competitions/game_winner/discussions/sylk-Post7f21c4a3311b778a36ae

一言で言うと、レベルは1~99を循環します。ただし、99 -> 1 (=100)にするかどうかをプレイヤーは選択できます。特に後半だと更新する意味もないので、更新せず99や198で放置しているためです。

Aws4 request&x amz signedheaders=host&x amz signature=931800394561a325f0b40b7f8f91b1823f1e262c09f157eab35b3d7ffafd2092
takaito

sylk さん

コメントありがとうございます.

以前に挙げられていたトピック読んだときは,イマイチ理解できなかったのが,今改めて読んで納得できました.

Aws4 request&x amz signedheaders=host&x amz signature=931800394561a325f0b40b7f8f91b1823f1e262c09f157eab35b3d7ffafd2092
takaito

横軸を時系列にし,縦軸をA1プレイヤーのlevelにすると以下のような図になりました. 全データ

trainのy=1に限定したもの,y=0に限定したもの,testに限定したものは以下のような図になりました.

train1

train0

test

小さくて分かりづらくて申し訳ないですが,学習データとテストデータは,投稿者関係なくランダムに分けられているように見えます.

また,時間経過とともに,A1プレイヤーのレベルが上がっている傾向が見えたため,雑にですが同じデータ投稿者の特定をしてみました.(武器を変えた場合は,同じ投稿者だとしても,別の投稿者とみなしてます)

投稿者ごとに色分け

同じ投稿者だろうなっていうのは,データをsortするとよくわかります.

これが何かに使えるかどうかはわかりませんが,一応ある程度の特定はできそうと確認できたので,簡単にですが共有しておきます.

テーブル

Aws4 request&x amz signedheaders=host&x amz signature=337b58c3dd773269156b5798cb8fd5f0db88ac9ba0885283fd0a90b2c13fc771
pop-ketle

ちなみになんですが、「データの出典元を少し覗くと「「A1」は投稿者であり、このプレーヤーを統計に含めると大きく偏ることに注意してください。」という注意書きがあるのがわかります。 」
とありますが、このデータの出典元ってどこから見れますか?探しても見つけられなかったので少し気になります。

また、A1~B4までの'x', 's+', 's'のランクの人数が(A4, B4を除いて(恐らく欠損値とかの関係で))

  • x: 24736
  • s+: 13241
  • s: 5164

と全て同じなことに気づいたのですが、これについてなにか考えがある人はいますか?データ生成のプロセスと関係していそうで、プレイヤーの特定に役立つのではないかと考えています。

Aws4 request&x amz signedheaders=host&x amz signature=931800394561a325f0b40b7f8f91b1823f1e262c09f157eab35b3d7ffafd2092
takaito

pop-ketle さん

コメントありがとうございます.

前者のデータの出典は,「基本情報」→「データ」のstat.inkより見れると思います(一応リンクも貼っておきます).

後者の上位ランクの人数に関しては,スプラトゥーンの知識共有及び質問回答スレッドにて,上位は同じランクとしかマッチしないと書いてあったので,それが原因なのではと思いますが,ゲーム未プレイなので自信はありません.

Aws4 request&x amz signedheaders=host&x amz signature=337b58c3dd773269156b5798cb8fd5f0db88ac9ba0885283fd0a90b2c13fc771
pop-ketle

takaito さん

コメントありがとうございます。
データの出典確認しました。ありがとうございます。

確かに、上位は同じランクとしかマッチングしないのでしたら納得がいきます。その説が有力そうですね。

Favicon
new user
コメントするには 新規登録 もしくは ログイン が必要です。