おうちだいすき

自宅警備員からデータサイエンティストになった人の雑記的ななにか。

はじめて参加したKaggleは学びしかなかった

Kaggle、ずっと参加したいなぁとか思いつつ結構尻込みしてました。
理由はいくつかあります。

  1. 英語
  2. 分析に対する自信のなさ
  3. 時間的制約

こんな感じといったところでしょうか。
しかし、そんな思いとは裏腹に初めて参加したKaggleのコンペは思った以上に得るものが沢山ありました。

こんにちは。
今回はデータ分析コンペティションサイト、Kaggleにて開催されたコンペに初めて参加したのでそこで得た体験をお話ししたいなと思います。
よろしくお願いいたします。


赤信号、みんなで渡れば怖くない

よいこは真似しないでね!

冗談はさておき、参加するにあたってまずは冒頭に挙げました尻込みの原因を取り除く所から入らねばなりませんでした。
この解決方法は案外簡単で、「人を巻き込んじゃう」ことで解決しました。

会社の同僚にも私と同じ理由でKaggleに挑戦したくても尻込みされてる方がやはり何人かいらっしゃいました。
というわけで、「みんなでKaggleやろうよ!」なお集まりを作りました。

「ひとりがこわくて出来ないなら、みんなでやればいいじゃん!」

もはや暴論かもしれないです。
ですが、完全に言い出しっぺになった私はもう後に引くことが出来なくなってしまいました。
いいおくすりになっていたみたいですね。

重たい腰が上がった瞬間です。


コンペのおはなし

会社のお集まりでは2つのチームに分け、チーム対抗戦でこちらのコンペに参加しました。
PLAsTiCC Astronomical Classification

超ざっくり説明すると超でっかい望遠鏡から観測される光のデータからお星様を分類してくださいねと言う問題です。(語彙)

titanicチュートリアルと同じノリでかかったら死んだ

なんか適当に前処理して、
なんか適当にカテゴリ変数をダミー化して、
なんか適当にモデリングして、
なんか適当にチューニングすればいけるんでしょ?

って思っていた時期が私にはありました。
あの頃の自分をぶん殴りたい。

コンペに参加した当初、

  • 何言ってだこいつ(専門用語まみれでわけわかめ
  • てかテストデータおもっ!!!(20GB)
  • なんなんだよ、hostgal_photozって!ウェーイな写真か!?

な状態に陥り、まるでキャッチアップが追いつかない上にどでかすぎるデータに対するアプローチなんかそもそも初見だったしで、折角参加まで漕ぎ着けたのにまたしても壁にぶち当たりました。

これらは愚直に真っ向から立ち向かいましたが、英語が苦手なのでデータの概要を把握しきるだけで2〜3週間は費やしてしましました。。。

Kernelは最高の参考書である(しかもタダ)

いや、ちょっと言い過ぎました。
盲信はよくないです。
中にはすごく遅い処理を野放しにしてる物もありますゆえ。

ですが、先ほど述べたような大規模データに対する取り扱い方法に始まり、他者のEDA、前処理や特徴量抽出などが公開されているので、そこからある程度の解法を見つけることが出来ました。

少なくともデータ分析初心者は通常業務へ落とし込めるだけのキャッチアップは十二分に得られると考えております。

実際にコンペに参加していた1ヶ月半で、

  • 大規模データに対する取り扱い
  • pivot_tableを用いた高速な集計
  • 省メモリ化

あたりは、大きく知識として得たと感じています。
業務で困る前に知る事が出来たのは大きかったです。

問題を解く中で様々なテクニックを得る事ができる点において、KaggleのKernelはとても有効な勉強手段の1つではないかと考えます。

ならばDiscussionは英語の参考書だ(半分マジ)

コンペ攻略のヒントは基本的にKernelかDiscussionを参照してました。
11月の中旬から終盤にかけては毎日血眼になってKernelとDiscussionを行ったり来たりしてました。

自宅ではPCでGoogle翻訳を使って概要を把握し、細かい部分はきちっと読んで内容を素早くキャッチする事を図りましたが、通勤電車内ではなかなかそうも行かなかったのでスマホで頑張って英語を読んでました。
その甲斐あってか、英語に対する抵抗も徐々に解消され、少しではありますが英語を読めるようになってきました。
まだスラスラ読めるという訳ではないので、この取り組みは今後も続けていきたい次第です。

「えいごわかんない」からちょっと前進した気がします。

コンペ終了4日前で見えてきたメダル

KernelやDiscussionを参考にしてきた甲斐あって、余分な特徴量は削除したり、使ってない特徴量は追加したり、自分でオリジナルで作った特徴量を追加するなど様々なアイデアを盛り込みスコアを大きく伸ばしました。
競争していた社内のチームを抜き、あとスコアが0.020向上すれば銅メダル圏内突入という位置に漕ぎ着けました。

翌日もスコアを僅かに伸ばし、メダルラインとの差は0.015に。
ここで大きな不安が襲ってきました。

もう、特徴ネタがないのだが??

一番嫌な時に一番嫌な現象が襲ってきました。
そこから悪あがきの連続でした。
まるで理解してない係数をライブラリに片っ端から算出させたり、foldの分割数いじったり。 焼け石に水なのは見えていたのですが、何ももう思いつかなかったので出来る限りの事をやろうと思いました。

そして逃したメダル

その後、少しだけスコアは伸びましたが0.002。
もちろん追いつくことは出来ず、銅メダルとは0.03の差。

近いようで遠い差に見えました。
あとほんの少しの気づきと、あとほんの少しの工夫があれば。
あの時あれをもっと深掘りしていれば。

コンペ終了後のKagglerの方々のお話やSolutionもとても勉強になりました。
そして、自分のやっていた事が如何にしょうもないことだったかも思い知らされてしまいました。
1つでも多く、皆様のテクニックを盗みたい次第です。

コンペを終えて

コンペに参加するメリットデメリット

コンペに参加したメリットとしては、

  • 短期間で沢山のスキルを得る事ができる。
  • コンペを追う事でみんなの「ああでもないこうでもない」をタイムリーにキャッチできる
  • 悩んだからこその後からのSolutionで「そうやるのか!」を得る事ができる

デメリットとしては、

  • 自己学習への時間が減ってしまう
  • 体調に気遣っていても疲弊する

などを感じました。
ただ、これらについては現状の私だとメリットの方が大きいので、しばらくは積極的にコンペに参加する事に重きを置きたいと考えています。
色々慣れたりしてから両立させれば良いかと。

会社のお集まりの運用

チーム対抗戦は燃えたといえば燃えたのですが、いくつか課題も感じました。

  • 深入りした話が出来ない。
  • 状況によって動けなくなる人が出るため戦力に差が出る。
  • 後からチームマージがしづらくなる(これは私個人の問題)
  • めっちゃプレッシャー感じる(同上)

などなど。
初心者同士を集めてコンペに参加するのであれば最初は対抗戦にしなかった方が良かったかもしれません。
この辺りは運用方針をコンペや参加状況によって適宜見直していく必要がありそうです。

さいごに

ようやく、少しずつではありますが良い性能のモデル作りには何が必要なのかがわかるようになってきました。より沢山のデータセットに触れ、より沢山の問題を解く事が自分のスキル向上への一番の近道かと考え始めております。
よって、繰り返しになってしまいますが、暫くはコンペに積極的に参加して沢山のテクニックを吸収して私も強いデータサイエンティストになりたいと思う次第です。