talosのプログラミング教室

【Kaggle】PUBG MOBILEでドン勝するためにデータ分析してみた

スポンサーリンク

こんにちは。talosです。

最近、PUBG MOBILEにハマっています。

でもドン勝するのって難しいです。

そこでふと思い出しました。

「KaggleにPUBGのコンペがあったな」と。

PUBGのデータを分析して、ドン勝を目指したいと思います。

データセット


特徴量 内容
DBNOs 敵をノックアウトした回数
assists アシスト数
boosts ブーストアイテムを使った回数
damageDealt 敵にダメージを与えた量
headshotKills ヘッドショットでキルした回数
heals 回復アイテムを使った回数
Id プレイヤーID
killPlace その試合におけるキル数の順位
killPoints キルベースのランキング
killStreaks 連続キル数
kills キル数
longestKill キルしたときの最長距離
matchDuration 試合時間(秒)
matchId マッチID
matchType マッチタイプ(ソロ、デュオ、スクワッドとTPP、FPP)
rankPoints ランク
revives 復活させた回数
rideDistance 乗り物に乗って移動した距離(m)
roadKills 乗り物によるキル数
swimDistance 泳いで移動した距離(m)
teamKills チームキル数
vehicleDestroys 乗り物を破壊した回数
walkDistance 乗り物を使わずに移動した距離(m)
weaponsAcquired 武器を拾った回数
winPoints 勝利数ベースのランキング
groupId グループID
numGroups その試合のグループ数
maxPlace その試合の最下位
winPlacePerc 勝利順位

なお、string型の特徴量はダミー変数に置き換えるべきですが、メモリが足りなくなるため使用しません。

分析1:相関

相関を表すヒートマップは以下のようになりました。

ヒートマップ

勝利順位は「ブーストアイテムを使った回数」、「乗り物を使わずに移動した距離」、「武器を拾った回数」と正の相関があり、「その試合におけるキル数の順位」と負の相関があります。

分析2:ランダムフォレスト

ランダムフォレストは特徴量の重要度を知ることができる機械学習アルゴリズムです。

下のようなプログラムを作りました。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
%matplotlib inline

df = pd.read_csv('../input/pubg-finish-placement-prediction/train_V2.csv')

# 欠損値を含む行削除
df.dropna(inplace=True)
df.head()

# 欠損値を含む行削除
df.dropna(inplace=True)
df.head()

# ランダムフォレスト
rf = RandomForestRegressor(n_estimators=10, max_depth=10, random_state=0)
rf.fit(train_X, train_Y)
score = rf.score(test_X, test_Y)
print(score)

# 特徴量の重要度
feature = rf.feature_importances_
label = train_X.columns[0:]
index = np.argsort(feature)[::-1]
for i in range(len(feature)):
    print(str(i+1)+' '+str(label[index[i]])+' '+str(feature[index[i]]))

出力は正解率と特徴量の重要度です。

正解率

特徴量の重要度

正解率は90%ということでそれなりに信用できそうです。

重要度を見ると乗り物を使わずに移動した距離」が圧倒的です。

次いで重要なのが「その試合におけるキル数の順位」。

勝利順位と相関が高かった「ブーストアイテムを使った回数」、「武器を拾った回数」はそれぞれ8位と11位という結果になりました。

「乗り物を使わずに移動した距離」と「その試合におけるキル数の順位」は勝利順位と相関が高く、ランダムフォレストでの重要度も高いためある程度信用してよさそうです。

ただ、「勝利順位が高い=生存時間が長い」ため、結果的に移動距離とキル数の順位が伸びたという可能性もありそうです。

結果を踏まえて実践

スクワッドでやりました。

開始直前に1人消えてしまい、3人でやることに。

結果は、、、




ドン勝できず

おしい!

あと1人のところで撃ち負けてしまいました。

意識して移動を増やしましたが、それが2位に繋がったかというと「うーん」という感じです。

やはり、勝利順位が高いと必然的に移動距離やキル数などが増えるため、あまり意識する必要はないのかな?と思いました。

まとめ

残念ながらドン勝はできませんでした。

データを分析した結果、「乗り物を使わずに移動した距離」や「その試合におけるキル数の順位」が勝利順位に大きく関わることがわかりましたが、結果的なものであると感じました。

みなさんもどうなるか試してみてください。