ランダムおすすめ記事

ホームページ作りました

重回帰分析を使ってベルマーレの観客動員数を予測したい!!!①

はあい!!pythonをやるならデータ解析とかやれたほうがいいよね?
ということでとりあえず少しかじって何か作ってみよう!!・・・ということで結局やるのはサッカー関係のこと。
ベルマーレの観客動員数を予測したい!! ちなみにこれをできるようにするために勉強したんだけどその勉強日誌はそのうち公開します。

重回帰分析を使ってベルマーレの観客動員数を予測したい!!!

というわけでまずは基礎分析から。とはいえ(スクレイピングの技術がないから)データは手作業でとったし、そもそも平塚の集客データなんて頭に入ってるし、そんなに分析することもありませんでした。
ただ今まで気が付かなかったこともちらほらと。
グランパスは意外とAWAY動員力が無くて、2018年にグッと伸びた、とか開幕戦と最終戦はブーストかかってるかと思ったら開幕戦だけだったとか。
今シーズンは川崎戦が延期、大雨、水曜、のコンボ+W杯の水曜開催が多くなければ2015年の動員を超えていたんじゃないかとか、(ただし今年は イニエスタブーストと金Jの動員は大きかった)。

まずはJ1に所属していた2010,2013,2015の3シーズンの観客動員数。横軸は時系列。

f:id:sr2460:20190226214644p:plain


続いてヒストグラムf:id:sr2460:20190226214923p:plain

こうやってみるとボリューム層は11500くらいですね。
赤線の平均値は12000近い。こりゃ新スタジアム絶対必要ですよね。
J1だと明らかにスタジアムが手狭なのが分かります。

続いて実際に統計分析。
観客動員数を目的変数(予測したいもの)として、相手チーム、曜日、気温、天気、降水量、スター、開幕戦、最終戦、産能大スペシャルデー、平塚市民デー(予測に関係がありそうなもの)を説明変数として使用しました。
なんとなく手でデータを取っていて、気温、最終戦、平塚市民デーは相関関係が薄く、過学習の恐れがあるので無いほうがよいかなとも思いましたが、とりあえず使用します。

スター、開幕戦、最終戦、産能大スペシャルデー、平塚市民デーは対象の試合の場合1を対象でない場合0と分類したつもりが、0を書き忘れていたので

train.fillna(0)

でjupyter上で埋めることにしました。


pd.get_dummies(train[["相手チーム","曜日","気温"]])


でダミー変数化。

trainX = pd.get_dummies(train[["相手チーム","曜日","気温","天気","降水量","スター", "開幕戦", "最終戦", "産能大スペシャルデー", "平塚市民デー"]])
trainX = trainX.fillna(0)

とすることで同時に反映させられました。
ただ

pred = model.predict(testX)


としたらカラム数が違ったらしくエラーに。
2010~2017年までのデータを学習データとして使用し、評価データに2018年のものを使いました。
この中で曜日は土、日、水、祝、としたのですが2018年は土祝しかなく土祝は土で登録していたため学習データが存在せずエラーが出てしまったのです。
仕方ないので土祝のマリノス戦を祝に。
このカラム数の問題はもっとスマートに解決できる気がするのですけれど今のところはまだ勉強してなくて分からないんですよねえ。


まあ問題は分かったところで

pred = model.predict(testX)


sample[1] = pred


sample.to_csv("submit.csv")



submit.csvを開いて見やすくしてみましたよ。

f:id:sr2460:20190226222125p:plain

大きくずれているのがガンバ戦。ヴィッセル神戸戦。レイソル戦。鳥栖戦。
評価データが少なくて水曜開催の観客動員の減少分を学習しきれてない気がするんですよね。
ガンバ戦はこれ休日じゃなきゃいかんだろこんなに。
レイソル戦も水曜+雨のコンボの予測が甘い気がするけど同じ条件のフロンターレ戦は結構いい精度が出てるんだよねえ・・・。


あとスターが来ると動員が大幅に増えるのですがスターはほとんど来ないので学習データが足りなさすぎてえらいずれてます。


マリノス戦とレッズ戦はキャパを超えていて、でもスタジアムの上限値から数字を割り出す手法なんて知らないから今は無理です。

でも新スタジアム作らなきゃいけない証拠にはなりますよねこれ。


というわけで重回帰分析の評価関数 f:id:sr2460:20190226223244p:plain
むずっ!
に突っ込んだところスコアは 3545.436841
ということに。本当に計算あってるのかは不安ですw
次回は相関関係の薄そうなものはぬかして再度分析しましょうかね?

パート2 重回帰分析を使ってベルマーレの観客動員数を予測したい!!!② - ニートがベルマーレ好きすぎて会社起こしたけど今後は未定