より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

FIFA18のデータを活用して、セリエAの選手が何点取れるか線形回帰で分析してみるも失敗

2018-2019の注目はセリエA

これまでFIFA18のデータを分析してきましたが、データをちまちまとこねくり回しながら考えていたのは、 CR7こと、クリスチアーノ・ロナウドがイタリアで何点取るかです。

web.gekisaka.jp

2018年、イタリアはW杯出場を逃しましたが、クリスチアーノ・ロナウドがイタリアの名門・ユベントス移籍してきました。

イタリア国民の興味はW杯からクリスチアーノ・ロナウドの話題で持ちきりとなりました。

もうシーズンは進んでしまいましたが、このクリスチアーノ・ロナウドがイタリアのセリエAで何点取れるか気になるところです。

前準備としてセリエAについて分析してみます。

やっぱり、まずはデータ集め

以前、KaggleのDataSetよりFIFA18のゲームのデータを入手して、分析していました。

rimever.hatenablog.com

セリエAのプレイヤーのみを対象として、モデルの作成、予測とします。

ですが、FIFA18のデータには実際の試合での得点がありません。

下記サイトなどを参考に、頑張って得点情報を追加することになります。

www.espn.com

ESPNのサイトでは過去のシーズンでも試合数、得点、アシストを確認することができます。

今回の目的は得点だったのですが、入力していて気づいたので試合数も入れておくことにします。

というのも、スポーツの世界ではどうしても怪我などの事情により良い選手でも出場できないためです。

たとえメッシやクリスチアーノ・ロナウドのようなストライカーでも、試合に出場していなければ得点は記録できません。

相変わらず、データを集める作業は大変で、今回はWebスクレイピングを使わず手入力です。

というのもデータを名寄せしようにも微妙に名称が違うので、手入力することにしました。

f:id:rimever:20181116225330p:plain

C#だろうかPythonだろうか御構い無しに、もくもく会で、私はこんなことを地味にやっていました。

データの確認

もくもく会を2回分くらいでやっとデータの入力が完了しました。およそ5時間に渡る作業。

data.head()

f:id:rimever:20181116225919p:plain

data.describe()

f:id:rimever:20181116225945p:plain

500人分のデータです。

きっちり耳を揃えて入力しましたよ!

多分。

線形回帰分析

では、データ分析をしてみます。

いきなり、ディープラーニングなどと、とにかくスゴい奴と行きたいところですが、まずは手頃なところから攻めることにします。

で、選んだのが線形回帰分析です。

Scikit-learn で線形回帰 - Qiita

誰でも出来る!!scikit-learn(sklearn)で重回帰分析しちゃう - Qiita

線形回帰分析ならば、化学の授業でやったような記憶があります。

そこでは2次元でしたが、今回行うのは多次元の重回帰分析となります。

ゲームのデータだから、そんな難しいことしなくても、いいところまで行けるんじゃない?

と思いつつ進めていきます。

from sklearn.linear_model import LinearRegression

linear_regression = LinearRegression()

#説明変数を縦(1)の列と指定して削除します!
X = result.drop("Goal", 1)

#Yに目的変数を入れます!
Y = result.Goal

linear_regression.fit(X,Y)

結果

FIFA18のパラメータは50以上もあるので、係数が高いものをピックアップします。

f:id:rimever:20181117083326p:plain

※一部のパラメータ(年齢)は例外としてありますが、ほとんどの項目が0-100のパラメータなのでデータの正規化は省略。【Python】数量データの正規化 ( 標準化 ) について - St_Hakky’s blog

LWやRW以外にもSTがあり、ストライカーよりウイングの方が点が取れるというのはいいのですが、

CBやLCBというのはセンターバックの適性を数値化したものです。

他にもFinishingやLongShotsという得点に直結しそうな能力があるのに。うーん。

相対関係

いくつかの項目とGoalとの相対関係をみてみます。

CBとGoal

f:id:rimever:20181117085234p:plain

全然関係ないような……。

FinishingとGoal

f:id:rimever:20181117085036p:plain

散布図としてみると悪くはないですね。

Finishingが高いのにゴールに結びつかない選手がいるようです。

f:id:rimever:20181117090155p:plain

マンジュキッチやエデル、ミリク、テレオ、カリニッチといった選手がピックアップされました。

ある一定のパラメータを越えるとドバーッとゴールを量産するプレイヤーが生まれるような感じ。

比例していく訳ではないので、線形回帰を適用は出来ませんね。

このパラメータだけで結論を下すのも早計ですが、線形回帰は適切とは言い難いかもしれません。

検証

どれほどの精度が出ているのか確認してみます。

f:id:rimever:20181117155144p:plain

重回帰の精度の目安となる50%も満たず。

失敗でした。

これでは、クリスチアーノロナウドが何点取れるかを予測するのは厳しそうですね。

引き続き、挑戦していきます。