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

前回の説明で足りないと思われる部分の補足です。

(1) 欠損値の取り扱いについて

 欠損値を含む項目がある場合に、その項目の値がすべて欠損しているのか、それとも部分的に欠損しているのかがまず確認したいところです。今回のデータサイエンス・カップでは、気温の項目はトレーニングデータではすべてあるものの、テストデータではすべて欠損していました。

 そこでトレーニングデータにおいて、RandomForest などで変数重要度を求めてみたところ気温の項目が重要であったので、テストデータにおいても欠損値を補完することを考えました。

 自分の場合は結果的にブースティングで変数重要度を求めて、サポートベクトル回帰をしましたが、時系列解析の方が普通かもしれません。(今後の課題として考えます)

 

(2) 解答用データにおける罠

 IDの項目が、既存のデータとこれから予測すべきデータとで大きくかけ離れているため、IDを含めてモデルの推定を行うと実際のデータと照らし合わせたときに、ひどくずれそうだなと直感的に思えたので、IDの項目を入れないようにしました。 実際のところIDを含めて予測した場合には、たとえば3月の気温が地域によらず、10℃以下のところが多かったり、気温が低い方が観客数が多かったりしていました。

 ただし、ID に関しては意味のある振り分けをなされている場合もあり、そのようなときにはIDを含めた方が良いかもしれません。たとえば年月日(20140331) のようなときです。

---

以下、おまけです。

(3) サポートベクトルマシンのパラメータ調整については、このあたりの記事を参考にしていました。

SVM のチューニングのしかた(2) - ほくそ笑む

Rで機械学習するならチューニングもグリッドサーチ関数orオプションでお手軽に - 銀座で働くデータサイエンティストのブログ

---

これは、実際にはやっていなかったことですが、参考になりそうでしたので、付け加えておきました。

交差検定の値の設定について:

交差検定の k の値はどれくらいにすればいいのか - ほくそ笑む

交差検定の値 k を

k = 1 + log(n)/log(2) (log は自然対数)

としてみるのはどうかという提案です。何も考えずデフォルトの値(10)を使うより良さそうです。

 

 

第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で予測しようとしたのですが、確率勾配ブースティングのモデルを用いた予測値よりも精度が上がらなくて諦めました。

 

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