第1回データサイエンス・カップ

初めまして!

今回は、第1回データサイエンス・カップに参加してみましたので、それに関して自分の実装方針とかを書いていこうと思います。

使用したコードはこちらになります。

https://gist.github.com/puyokw/04b8ab53bc842f96a18c 

前処理にはC# を用い、分析にはR を使用しています。

Rにおける確率勾配ブースティング(stochastic gradient boosting)のことは、

樹木構造接近法 / 金 明哲 編 下川 敏雄 杉本 知之 後藤 昌司 著 | 共立出版

」を参考にしました。

 

まずトレーニングデータを用いて、どの変数が大事なのかを見極めたいと思い、確率勾配ブースティングで変数重要度を求めました。(初めのころはランダムフォレストを用いたのですが、確率勾配ブースティングの方が精度が良かったので、こちらを採用しました。)このときに、補足データである「スタジアムの収容人数」と「気温」を追加しました。

観客数を確率勾配ブースティングで変数重要度を求めると以下のようになりました。

f:id:puyokw:20150308200941j:plain

具体的な数字:

収容人数32.2178969
ホーム20.8747306
リーグ17.3211700
アウェイ9.2099660
気温5.1304048
4.2438221
時間3.3036148
3.0972751
1.8241909
年度1.2862900
地方放送0.6662175
NHK0.6340447
第何日0.1903764

気温の重要度が意外と高かったので、観客数を予測する前に気温を予測することにしました。

 そこでトレーニングデータを用いて気温の予測をすることにしました。時系列解析を用いるのが良さそうに見えましたが、自分の場合は上手くいかなくて確率勾配ブースティングで変数重要度を求めてサポートベクトル回帰を用いました。

このとき、変数の中でほぼ同一内容を表しているものを除いています。具体的には、ホームチームを残して、収容人数を除いています。

 気温の予測に対する変数重要度:

f:id:puyokw:20150308202126j:plain

 

54.0545748
12.5239440
ホーム7.8870281
収容人数7.1390037
時間7.0403532
アウェイ6.5063540
年度2.9434091
NHK0.7160711
地方放送0.5105505
第何日0.4194103
リーグ0.2593012

年度まで取り込んでおきたかったので、これよりも変数重要度が高いものを含めてSVRで予測しました。

 

提出した予測値は、確率勾配ブースティングで構築したモデルで計算したものです。変数を絞ってSVRで予測しようとしたのですが、確率勾配ブースティングのモデルを用いた予測値よりも精度が上がらなくて諦めました。

 

パラメータの調整についてはもう少し知識と経験をためてからまとめたいと思います。