EurekaMoments

ロボットや自動車の自律移動に関する知識や技術、プログラミング、ソフトウェア開発について勉強したことをメモするブログ

Kaggleで上位10%に入るデータサイエンティストから学ぶデータ分析のプロセスについて

目次

目的

世の中の凄腕データサイエンティスト達はどのようにしてデータ分析をしているのか調べていたところ、Kaggleのコンペに参戦して上位に食い込んでいる人の技術記事を見つけました。最終的にモデルを作って予測をするところまでの過程が分かりやすくまとまっているので、とても参考になりました。
今回の記事は、上記の記事を読んで学んだデータ分析のプロセスについてのメモです。

参考記事

www.mirandora.com

www.mirandora.com

www.mirandora.com

Kaggleとは?

世界中で30万人以上のデータサイエンティストが登録している世界最大のデータ解析コンペサイトです。企業から様々なお題が出され、精度がもっとも高かった人 or チームが優勝となり、そのプログラムコードを提供する代わりに賞金が贈られるというものです。

扱われたお題

今回読んだ記事で扱われたお題は、チュートリアルチャレンジの一つであるTitanicチュートリアルです。1912年に起きた、タイタニック号沈没事件を題材に、乗客の年齢、性別、社会階級ランクなどのデータから生死を予測するというものです。
データセットは下記のようになっています。
f:id:sy4310:20180816154907p:plain

プロセス①: データの中身を確認する

まずは学習用データのCSVファイルを読み込んで、どういった形式のデータなのかを確認しています。Titanicチュートリアルでは以下のようになっているようです。
f:id:sy4310:20180816161856p:plain
この段階では、Sex(性別)やEmbarked(乗船場所)、NameやTicketのような非構造化データをどのように扱っていくか作戦を練ろうとしています。また、各データの欠損についても確認し、欠損があまりにも多すぎるデータは除外するなどの方針も決めています。
f:id:sy4310:20180816221140p:plain

プロセス②: データの相関を調べる

この問題を解く目的は、乗客の生死を予測すること、つまりデータにあるSurvivedの値を予測します。なのでこのプロセスでは、当てたいデータであるSurvivedと最も相関が高いデータはどれかを見つけようとしています。

f:id:sy4310:20180816221025p:plain

f:id:sy4310:20180816221209p:plain

このデータでは、性別がもっとも相関が高く、ついでに年齢が高いということを突き止めており、性別と年齢ごとの生存をプロットしてみています。このグラフから、女性の方が優先的に救助されていることがわかるのですが、このように可視化することでわかることがあるので、この段階ではできるだけデータを可視化してみることが大事だそうです。

プロセス③: 欠損したデータを補完する

プロセス②において生存と年齢の相関が高いことが分かりましたが、先に確認したように、年齢のデータには欠損があります。こういう時は平均値などを利用して補完するらしいのですが、ここでの補完のやり方はかなりの注目ポイントだと感じました。
f:id:sy4310:20180816223006p:plain
f:id:sy4310:20180816223031p:plain
ここでは名前のデータを苗字と敬称に応じてさらに4つのグループに細分化していますが、そのグループによって平均年齢に明らかな違いが出るということを突き止めています。また、苗字が同じであればその乗客同士は家族であり、全員が生存あるいは死亡であろうと考えています。
こうすることで、新たな特徴を見つけ出せるということですね。

プロセス④: モデリング前の事前処理

先ほど導き出した4つの名前フラグの抽出、家族名の抽出と家族単位での生存率計算、名前の敬称フラグ別にk-近傍法で年齢補完を行っています。
ここでの補完手法のチョイスもその後の予測精度にかなり効いてきそうですね。

プロセス⑤: 解析とモデリング

ここでの学習方法の選択やパラメータチューニングを経て、予測精度を目標値に近づけていきます。今回読んだ記事では、ランダムフォレストで0.7986の予測精度を出して、最終的にはSVM(サポートベクターマシン)をチョイスしています。このロジックについても分かりやすく書いてくれています。

最終的な結果

0.80861の予測精度を出すことが出来、晴れて上位10%以内に食い込むことが出来たようです。感想としては、データを解釈する段階で既存のデータを更に細かく分解できないか考えることが重要だと感じました。こういった前処理に対して如何に汗を流せるか。今後の自分のデータ分析業務に活かしていこうと思います。
今回読ませていただいた記事の著者である篠田裕之さん、大変勉強になりました。ありがとうございました。