こんにちは。 開発者ブログに初めて投稿します。id:toyoshi です。 先週Misoca社のSlackの褒めチャンネルを紹介しましたが、私があそこで褒められたことがあるのは「Zoomでスペースを押してる間ミュートが解除されるようになるオプションを教えた」「アンケートの質問を考えるのが早い」の2点です。本来の仕事の方でも褒められていきたいです!
さて、今回のエントリでは先日社内で開催したKaggleの勉強会の内容を紹介します。やったことがないと難しそうなイメージのあるKaggleですが実は入門だけなら知識ほぼ0でも大丈夫なのです。このエントリを参考にぜひ入門してみてください。
今回のゴール
Kaggleでアカウントを作り、コンテストに参加して、予測を提出するところまでを目指します。 環境の準備なし、プログラミングなし、統計の知識なしでKaggleの予測提出までの流れがわかるようになっています。
そもそもKaggleとは
データサイエンスプロジェクトのコンペ(Competition)をやっているWebサービスです。AtCoderのデータ分析版。企業主催のコンペもあり賞金が出ることもあります。
どんなコンペがあるか
どんなコンペが開催されているのか一部を紹介します。
- PUBG Finish Placement Prediction (Kernels Only) | Kaggle
- PUBGのプレーヤーの行動から優勝者を予想するコンテスト(公式が主催しているわけではない)
- Two Sigma: Using News to Predict Stock Movements | Kaggle
- ニュースから株価を予測するチャレンジ
- Quick, Draw! Doodle Recognition Challenge | Kaggle
- 落書きの絵が何を描いたものか当てる
アカウント作成からコンペチャレンジの流れ
まずは全体を把握しましょう。下記のような流れになります。
- アカウント作成
- コンペを選んで参加登録
- 提供されたデータを使って分析・予測をする
- 予測を提出。点数・順位がでる。
- 納得いくまで3に戻る
- コンペの結果が出る
- 2に戻る
アカウント作成
さっそくアカウント作成から始めましょう。無料です。 Kaggle: Your Home for Data Science
画面の基本(グローバルメニュー)
Kaggleはコンペをやるためだけのサービスというわけでもないのでグローバルメニューに色々あります。簡単に説明します。
Competitions・・・コンペ一覧
Datasets・・・配布されているデータセット一覧
Kernels・・・公開されているJupyter NotebookのKernel一覧
Discussion・・・ディスカッションの場
Learn・・・各種情報
コンペを選んで参加登録
まずはコンペを選んで参加登録します。Kaggleには入門者向けのコンペ「Titanic: Machine Learning from Disaster」が用意されていますので今回はそちらに参加します。
まずはコンペ一覧ページから検索するなどしてタイタニックのコンペを開きましょう。
Titanic: Machine Learning from Disaster | Kaggle
「タイタニック:〜大惨事で機械学習を学ぼう 〜」という入門用コンペです。内容としては乗船者のリストから生存者を予測するというものです。
個人的には乗船者の直接の家族はまだ当然存命なので不謹慎な気もしますが「Join Competition」を押して参加しましょう。
コンペのゴール
乗船した人のリストを使って、誰が生き残ったかそうでないかを予測します。 簡単にいうと死んだかどうかを0と1で表したCSVを作ってアップロードすればよいです。簡単そうでしょう?
なんかわからんけどまずは提出だ!
テスト駆動開発におけるRED、GREEN、REFACTORの考え方にしたがって、まずはいい加減な内容でいいので予測を提出してみましょう。 例えばこんなデータはどうでしょうか
zero_fill_submission.csv (3.3 kB)
これは全員生き残らない(Survived=0)という予測ですね。
First submission
画面右の[Submit Prediction]から提出します。 すると即座にスコアと順位が表示されます。これを提出するとスコアは0.626です。正解率62.6%という意味ですね。つまり全員死亡で提出したので、タイタニックからの生還者はおよそ38%(1-0.626)しかいなかったということがわかります。
さあ、おめでとうございます!
スコアはそれほど良くないし、順位は低いですが、Kaggleでアカウントを発行し、コンペに参加して、予測を提出するという当初の目的をもう達成しました。
もう少しだけましなデータを送信してみよう
提供されているデータのところに、女性が全員生き残ると予測した場合のCSVというのが用意されているのでそれも提出してみましょう。
するとさっきのよりスコアがよくなるはずです。おそらく0.626から0.765とか。映画「タイタニック」にも救命ボートに女性や子どもを先に乗せていたシーンがありましたね。
さらに進めてやるには?
当日の勉強会ではさらに決定木を使って予測するデモもやりました。今回はやりませんが皆さんはもうKagglerですのであとは好きなようにデータを料理して高みを目指してください。次に紹介するようなサイトでは決定木や、ランダムフォレストといった手法の使い方をとてもわかりやすく解説してくれていますので参考になるでしょう。
- 【Pythonで決定木 & Random Forest】タイタニックの生存者データを分析してみた - これで無理なら諦めて!世界一やさしいデータ分析教室
- 【Kaggle初心者入門編】タイタニック号で生き残るのは誰?
まとめ
このエントリではKaggleのアカウントをつくり予測を提出するところまでをやりました。環境の準備なし、プログラミングなし、統計の知識なしでKaggleの全体像が掴めたかと思います。
タイタニックの事例が入門問題として素晴らしいのは有名な事故なので推理がしやすいということです。今回紹介した女性や子どもの方が生存率が高いということ以外にも、タイタニック号沈没事故 - Wikipediaなどを見ると1等船室の方が2、3等船室より生存率が高いことがわかったりもします。他の人のKarnelをみてみると、名前の敬称から特別な敬称の人は生き残りやすかったのではという仮説をたてたり、家族が多いと逃げ遅れやすいのではないかといった仮説を立てている人もいました。
さらに次のステップに進むには他の人が公開しているKarnelを読んでみたり、以前紹介した📚最近弊社で買ったデータ分析入門書📚 - Misoca開発者ブログの書籍を手にとってみてはいかがでしょうか。
採用
Misocaではサービスの改善のため仮説を立てる時や施策の検証などでデータ分析を使っています。データドリブンな改善に興味のあるエンジニアの皆様をお待ちしております!