DeepLearningでモデル予測、h2o

#**kaggle概要　データ分析スキルのオンライン競技**
データ分析スキルを競うインターネットサイトがあることをご存知でしょうか。kaggleというサイトでは、世界中の統計家・データ分析家が、そのスキル・最適モデルを競っています。2016年5月時点で、53万6千人の登録ユーザーがいるそうです。

そして面白いのは、サイトで提示されている課題を解くと、世界中のデータ分析家のうち、自分が何位にいるかが、すぐに表示されます。もし、あなたが、腕に覚えがありデータ分析を業務とされる方であるとしたら、提示される課題を解くことによって、実力がわかります。また、提示される課題は様々ですので、社会課題の解決に応用できる機会があるかもしれません。

<a href="https://www.kaggle.com/">**「Kaggle」**
<a href="https://www.kaggle.com/">![160623_kaggle_home.jpg](https://qiita-image-store.s3.amazonaws.com/0/89222/6ff500cf-cafc-ab78-493d-a7281adae873.jpeg)

<a href="https://en.wikipedia.org/wiki/Kaggle">**「Kaggle Wiki 英語」**
https://en.wikipedia.org/wiki/Kaggle
<a href="https://ja.wikipedia.org/wiki/Kaggle">**「Kaggle Wiki 日本語」**
https://ja.wikipedia.org/wiki/Kaggle

#**問題　豪華客船Titanicの生存者は誰かを分析予測せよ！！！**
![Stöwer_Titanic.jpg](https://qiita-image-store.s3.amazonaws.com/0/89222/6b608897-8803-2b1f-9efb-ff0fb5ad0fb9.jpeg)
出展：wikimedia commons, willy stower

今回はあの、1912年に北大西洋上で氷山に接触した後、沈没したタイタニックが問題になります。
タイタニックは、乗客の1309人のうち、約40%の方がサバイブされたと言われています。

1997年に公開された映画「タイタニック」では3等客室であろうジャック（レオナルド・ディカプリオ）と1等客室であろうローズ（ケイト・ウィンスレッド）の、悲劇と生きる強さの物語として描かれました。

今回の問題では乗客1309人のデータが与えられます。課題はどの人が亡くなり、どの人が生き延びたのかを予測せよ、というものです。ただし、900人分のデータについては生死を明らかにするので、残りの400人について予測してください、というものになります。

提供される主なデータは、次の通りです。
https://www.kaggle.com/c/titanic/data
1.生存したか、死亡したか（約900人のみ与えられ、残り約400人の予測が提出審査対象）
2.客室等級
3.名前
4.年齢
5.チケット代
6.乗船場所
7.家族の人数
8.部屋番号

予測を正確に行うためには、900人分のデータの生死を観察したうえで、その生死の分かれ目となるルールを見極めることが必要です。それぞれの人が、どのような局面を迎え、どのように生き残ったか、あるいは生き残らないという選択をしたのかという考察に加えてや、今から約100年ほど前のロンドンやフランスの時代考察も重要となるでしょう。

提供されたデータをみると家族で乗船している人が多いことに気が付きます。また、よくこれまで語られているとおり、1等客室の女性・子供は生存確率が高く、3等客室の男性は亡くなられた方が多かったようです。

#**まずはやってみる（チュートリアルに示されている方法）**
手始めに、残りの約400人のうち、女性が全員生き残った、として予測しました。
データをサブミットしたところ、次の結果となりました。
![160622_kaggle_v1.jpg](https://qiita-image-store.s3.amazonaws.com/0/89222/1e3d16b0-1b94-cd54-8ac8-0353e9492712.jpeg)
#3634位！！
データをサブミットしたら、すぐに結果が出ることや、分析している世界中の人が、かなり近い時間帯でバトルしているのがよくわかって、驚きです。

#**追加したデータ**
提供されたデータでは、称号、CirとかCaptainとか、Masterなど、イギリスの伝統的な呼称が記載されています。また、色々と着目して、分析予測の基礎としたいデータを追加しました。

まとめると、次のデータを追加しました。
・呼称（Ladyとか伯爵夫人とか、海軍大佐とか）
・ファミリーネーム（アンドリューとか、アンドリュースとか）
・家族の人数（結構こだわった）
・家族関係から推定される年齢
・部屋番号の記号
・部屋番号の数字
・チケット番号（上N桁）
・チケット代

上記のデータをクラスごとに平均値や中央値・分散などを行ってデータが無い部分（欠損値）も補完しました。また、チケット番号から同一ファミリーを推定し、ファミリーの中で誰が生存するかの予測にこだわりました。

また、この段階では、情報収集として、様々なサイトを参考にしました。フランスのタイタニックの図面で部屋番号が振られているものをみると、右舷は奇数番号の部屋、左舷は偶数番号の部屋であることがわかりました。



<a href="https://ja.wikipedia.org/wiki/%E3%82%BF%E3%82%A4%E3%82%BF%E3%83%8B%E3%83%83%E3%82%AF_(%E5%AE%A2%E8%88%B9)">**「タイタニック（客船） wiki」**

#**環境構築は以下の通りです。**
・R ver 3.3.0
・java version 1.8.0
・64bit Windows
・h2o packages（DeepLeaning)

#**Rからのh2o ディープラーニング**
Rを起動して、ディープラーニングなどの統計解析ツールを使用できるh2oをインストール
install.packages("h2o")
library(h2o)
![h2o_install.jpeg](https://qiita-image-store.s3.amazonaws.com/0/89222/c5488947-d62c-e96f-6c11-53b48a8c8839.jpeg)


h2oを起動
'nthreadsでスレッド数を指定（-1はすべてのCPUコアを使用することを意味する）
'max_mem_sizeで使用可能な最大メモリ数を指定（ここでは2GB）
localH2O = h2o.init(nthreads = -1, max_mem_size="2g")
![h20_kidou.jpeg](https://qiita-image-store.s3.amazonaws.com/0/89222/bf09fc89-b7ca-768e-c1fd-2fa31989061a.jpeg)

コンソールにローカルホストのurlが示されるので、Webブラウザで開く。
h2oが起動されていればdone

#**h2o**
基本的な流れは、
1.学習データをアップロード、パース、モデリング作成
2.テストデータをアップロード、モデリングでテスト
その過程で、必要なデータと不要なデータを取捨選択できる。

#**結果！！**
![160623_kaggle_v2.jpg](https://qiita-image-store.s3.amazonaws.com/0/89222/5f266620-3b2b-b625-28ca-a8d41f5a3791.jpeg)
#1333位！！
初期の「女性は全員生き残った説」では3634位でしたが、「h2oディープラーニングモデル」では1333位となり、順位は上昇。今回はディープラーニングで試してみましたが、他の分析手法を試すのも面白いと思います。

#**まとめ**
結構大変だったけど、ディープラーニング、面白かった！！！
応用展開できそうな領域は様々にあります。

・商品購買データと、人属性データなどがあり、どういう人が、いつ買うかなどの分析予測
・報酬・評価、退職、異動願いなどのデータを学習、バッファーを分析予測
・人材採用の局面の人属性データ、1年目、2年目の評価から、3年目にどういうポジションにつかせるか
・PC故障率と、予備在庫の関係
・エレベータ稼働率の最適化
・電力系統最適化

#**レファレンス**
http://qiita.com/taka4sato/items/802c494fdebeaa7f43b7
http://qiita.com/suzumi/items/8ce18bc90c942663d1e6
http://smrmkt.hatenablog.jp/entry/2013/01/04/211844