第1回データサイエンス・カップ
初めまして!
今回は、第1回データサイエンス・カップに参加してみましたので、それに関して自分の実装方針とかを書いていこうと思います。
使用したコードはこちらになります。
https://gist.github.com/puyokw/04b8ab53bc842f96a18c
前処理にはC# を用い、分析にはR を使用しています。
Rにおける確率勾配ブースティング(stochastic gradient boosting)のことは、
「樹木構造接近法 / 金 明哲 編 下川 敏雄 杉本 知之 後藤 昌司 著 | 共立出版
」を参考にしました。
まずトレーニングデータを用いて、どの変数が大事なのかを見極めたいと思い、確率勾配ブースティングで変数重要度を求めました。(初めのころはランダムフォレストを用いたのですが、確率勾配ブースティングの方が精度が良かったので、こちらを採用しました。)このときに、補足データである「スタジアムの収容人数」と「気温」を追加しました。
観客数を確率勾配ブースティングで変数重要度を求めると以下のようになりました。
具体的な数字:
収容人数 | 32.2178969 |
---|---|
ホーム | 20.8747306 |
リーグ | 17.3211700 |
アウェイ | 9.2099660 |
気温 | 5.1304048 |
節 | 4.2438221 |
時間 | 3.3036148 |
日 | 3.0972751 |
月 | 1.8241909 |
年度 | 1.2862900 |
地方放送 | 0.6662175 |
NHK | 0.6340447 |
第何日 | 0.1903764 |
気温の重要度が意外と高かったので、観客数を予測する前に気温を予測することにしました。
そこでトレーニングデータを用いて気温の予測をすることにしました。時系列解析を用いるのが良さそうに見えましたが、自分の場合は上手くいかなくて確率勾配ブースティングで変数重要度を求めてサポートベクトル回帰を用いました。
このとき、変数の中でほぼ同一内容を表しているものを除いています。具体的には、ホームチームを残して、収容人数を除いています。
気温の予測に対する変数重要度:
月 | 54.0545748 |
---|---|
日 | 12.5239440 |
ホーム | 7.8870281 |
収容人数 | 7.1390037 |
時間 | 7.0403532 |
アウェイ | 6.5063540 |
年度 | 2.9434091 |
NHK | 0.7160711 |
地方放送 | 0.5105505 |
第何日 | 0.4194103 |
リーグ | 0.2593012 |
年度まで取り込んでおきたかったので、これよりも変数重要度が高いものを含めてSVRで予測しました。
提出した予測値は、確率勾配ブースティングで構築したモデルで計算したものです。変数を絞ってSVRで予測しようとしたのですが、確率勾配ブースティングのモデルを用いた予測値よりも精度が上がらなくて諦めました。
パラメータの調整についてはもう少し知識と経験をためてからまとめたいと思います。