AutoAIでkaggle タイタニックの生存予測にチャレンジ

Watson StudioにはAutoAIという、学習データ(CSV)を読み込ませると、いい感じに最適な(?)機械学習モデルを作ってくれる機能があります。作成した機械学習モデルは、Webサービスとしてデプロイが可能で、自分のアプリケーションに組み込むことが可能です。

AutoAIでkaggleで最初のチュートリアルとして有名な[タイタニックの生存予測](https://www.kaggle.com/c/titanic)にチャレンジしてみましょう。

(2020/05/07更新)

#0. 前提
##1. IBM Cloudのアカウントがあること
有効なIBM Cloudのアカウントが必要す。
お持ちでないかたは [こちら](https://cloud.ibm.com/registration?cm_mmc=Email_Events-_-Developer_Innovation-_-WW_WW-_-nishito\tokyo\japan&cm_mmca1=000019RS&cm_mmca2=10004805&cm_mmca3=M99938765&cvosrc=email.Events.M99938765&cvo_campaign=000019RS
) から取得お願いします。
取得方法の動画はこちらです: https://youtu.be/Krn1jQ4iy_s

##2. kaggleのアカウントがあること
当記事では実際にSubmitもしますので、kaggleのアカウントをお持ちでない方は取得してください。
[kaggleのサイト](https://www.kaggle.com/)に行くと、`Register`というボタンがありますのでクリックして登録してください。Googleのアカウントを使うか、お好きなメールアドレスで登録できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/394d0dfd-8463-70d0-716a-82da416caa2b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/365c8686-e9da-7d65-1ce0-9419918e464a.png)

#1. タイタニック データのダウンロード
まずは[kaggleのサイト](https://www.kaggle.com/)にアクセスしてサインインしてください。
その後kaggleのTitanic: Machine Learning from Disasterのデータのページ https://www.kaggle.com/c/titanic/data にアクセスしてください。
[Join Competition]をクリックして、コンペに参加してください(参加してないとデータのダウンロードができません）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/a68890c3-30b0-40fc-4c64-732d7ef706a4.png)

コンペのルールを確認して、問題なければ[I Understand and Accept]をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/ca5dfff2-d7b9-7d8b-b577-9fcbba18548f.png)

下にスクロールしてDataセクションにある[Download All]をクリックして、データファイルをダウンロードしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/bffd5984-3164-fc54-c527-ba6ee04053b7.png)

zipファイルがダウンロードできるので、適当な場所に保存してください。
保存が完了したら、zipファイルを解凍してください。

ファイルを解凍すると、以下の3つファイルがあります。

- train.csv 
  - 学習用データファイル。AutoAIに読み込ませます。
- test.csv
  - Submission用データファイル。このデータのSurvivedの値を予測します。
- gender_submission.csv
  - Submissionサンプルファイル。このフォーマットで提出します。


#2. Watson StudioサービスとProjectの作成
AutoAIはWatson StudioというIBM Cloud上のツールで使えます。そのためWatson Studioのセットアップが必要です。
表示された「Watson Studio」の起動をクリックします。
既に作成済みの方はここは飛ばしてください。
[Watson Studio サービスとProjectの作成](https://qiita.com/nishikyon/items/ba698b638300848b746e)を参照して、  Watson StudioサービスとProjectを作成してください。「Watson Studio サービス」作成の際はロケーションは`ダラス`を選択し作成お願いします。


#3. Watson StudioのProjectとWatson Machine Learningサービスの関連付け
2で作成したProjectとWatson Machine Learningサービスを関連付けます。
2が終わった状態の場合は、Watson Studioの画面で作成したProjectのOverviewが表示された状態だと思います。
もしWatson Studioの画面で作成したProjectが表示されてない場合は、[ログイン後、作成済Projectの表示方法](https://qiita.com/nishikyon/items/ba698b638300848b746e#4-%E3%81%8A%E3%81%BE%E3%81%91%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E5%BE%8C%E4%BD%9C%E6%88%90%E6%B8%88project%E3%81%AE%E8%A1%A8%E7%A4%BA%E6%96%B9%E6%B3%95)を参照の上、Projectを表示させてください。

別のQiitaの記事「IBM Watson Studio AutoAI: Modeling for the rest of us 日本語解説 #1」の
[2. Add a Watson Machine Learning service to the project: Watson Machine LearningサービスのProjectへの追加](https://qiita.com/nishikyon/items/66e5c675d030258c6afe#2-add-a-watson-machine-learning-service-to-the-project-watson-machine-learning%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AEproject%E3%81%B8%E3%81%AE%E8%BF%BD%E5%8A%A0)
を実施してWatson Machine Learningサービスの関連付けを行ってください。
2番のみの実施となるで、`モデルの作成を開始する準備が整いました。`まで実施したら、こちらの記事に戻ってきてください。

#4. AutoAIモデルの作成
さあ、これでAutoAIを使う準備は完了しました。いよいよAutoAIを使って予測モデルを作ります。
学習用データは1でkaggleからダンロードした`train.csv`を使います。

3が終わった状態の場合は、Watson Studioの画面で作成したProjectのSettingsが表示された状態だと思います。
もしWatson Studioの画面で作成したProjectが表示されてない場合は、[ログイン後、作成済Projectの表示方法](https://qiita.com/nishikyon/items/ba698b638300848b746e#4-%E3%81%8A%E3%81%BE%E3%81%91%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E5%BE%8C%E4%BD%9C%E6%88%90%E6%B8%88project%E3%81%AE%E8%A1%A8%E7%A4%BA%E6%96%B9%E6%B3%95)を参照の上、Projectを表示させてください。


###1. 画面の右上にある`プロジェクトに追加`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/9a5799f7-395e-71d6-e7ec-66a7cd4b48ea.png)



###２. `AutoAI experiment`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/9b53bfa5-7d02-332e-9e1e-656e90ba9944.png)

###３. 必要項目を入力してAutoAI experimentを作成
Nameに`Titanic Model`と入力します。
Watson Machine Learning Service Instance に３で関連づけたWatson Machine Learning Serviceの名前がはいっていることを確認します。

問題なければ[Create]をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/964e5bf0-e48c-dc43-7cd4-2fba6a0abc8d.png)


###4. `train.csv`のアップロード
1でダウンロードした`train.csv`をAdd data souceの点線で囲まれたエリアにドラッグする(または`browse`をクリックしてファイルを選択)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/9da377cf-b6cd-7a50-a4de-61142a07da97.png)


###4.  予測する列を選択して、作成プロセスを開始します。
- 「Select prediction column」のドロップダウンから列名`Survived`をクリックします。
  - タイタニックの生存予測ではSurvived`の値、1:生存、0:死亡を予測します。
  - PassengerIdとか予測に関係なさそうな項目の事前削除は不要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/17f0405d-9bb0-689a-ef16-d8a38d88a7cb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/fb2a15e3-2647-378a-2c00-69f4bcd363e4.png)

 
- Prediction columnが`Survived`になっていることを確認して、`Run experiment`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/c1c2a18e-2b9b-549d-3e77-67bb6220af8e.png)

###5.完了するまで待ちます.
データ量やその時のサーバーの負荷にもよりますが、`train.csv`の場合は、10分から15分くらいで完了することが多いです。

実行中：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/5da5317f-ba01-addb-4f42-736f39e94768.png)


完了：　これは9分かかりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/c79de4f8-9cf3-f011-b5f9-576737dc177f.png)


###6. 一番評価の高いモデルを選んで、保存
画面をスクロールすると`Pipeline leaderboard`という一覧が見えます。8つのパイプラインを実施して指定した評価軸(今回はデフォルトのAccuracy(Optimized))で評価が高い順に上から下に並んでいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/0fdc2e08-f20c-a791-3fb7-1fbaf8d853f1.png)

(各ラインをクリックするとモデルの詳細が表示されます。）

今回はRank1のものをkaggleのコンペに提出してみます。

Rank1のBuild Time列に**マウスカーソルを重ねる**と、`Save as `というボタンが表示されますので、クリックします(マウスカーソルを重ねないとボタンは表示されません)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/0302fbf2-cd9a-a95d-c7f1-d9dcd2d2b319.png)

`Model`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/36fa4db5-7476-b2e6-ceb4-0fb18153a779.png)



Model nameをセットして(デフォルトのままでもOK)、[Save]をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/a640c87f-28e5-c302-d4e3-5a2966034816.png)


右上に、`Saved model successfully`とメッセージが出ます。[X]をクリックしてメッセージを閉じます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/ff1cd3b8-3119-7560-3191-19eee33cd594.png)


上部のプロジェクト名のリンク(下の例では　`DojoMLTutorial`)をクリックして、プロジェクトの画面に戻ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/860c5aff-8169-1d2d-3738-05f3fdc60b45.png)

###7. Deploymentを作成する

Deploymentを作成して、Webサービスでモデルにアクセスできるようにします。

もし下のような`Assets`のタブが表示されてない場合は、`Assets`をクリックして表示してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/7b24b953-3682-990d-09ff-e63a5fb0577a.png)

下にスクロールして、Modelsの下にある、先ほど保存したModel nameが表示されていますので、クリックします（下の例の場合は`Titanic Model - AutoAI`)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/09e464a8-8f22-b20a-9f2e-70ff2ecb8bf3.png)

モデルのOverviewが表示されますので、`Deployments`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/b71c1739-1c87-97c7-73de-387a3d91ceb5.png)

`Add Deployment +`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/297389f3-a6cc-b33f-c3ad-9ed683992448.png)

NameにDeployment名を入れます。これは後でpythonのコードから呼び出しますので、わかりやすいタイプしやすい名前にします。後のpythonのコードをそのまま使いたい場合は:
`Titanic AutoAI Deployment`
としておいてください。
Nameを入力したら[Save]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/25ac1baf-b783-4b34-7974-2eb36cd9052d.png)

STATUSが`Initializing`から`Ready`になるまで待ちます。5分たっても状況が変わらない場合はブラウザーをリロードしてみてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/ab23c36d-49ed-369b-0563-c10469631198.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/3979d804-1d26-736d-a331-fcd04b436215.png)

###8. Deploymentのテスト(オプション)
Deployment　ができたので、テストしてみます。
ちなみにテストなしでも次のステップは可能ですので、ここは省略可能です。

STATUSが`Ready`になったら、Deployment名をクリックします。下の例では`Titanic AutoAI Deployment`となっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/792cac68-f4d7-bce0-d33d-817cb4af649c.png)

`Test`タブをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/0ba6ad16-0b1a-fcb0-efea-bd41a7e31ded.png)

`Enter input data`の右側の四角いアイコンをクリックして、JSON入力フィールドを表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/0b3b9607-8f5b-ca55-4222-122ca16b0b3b.png)

`Paste the request payload here`と書いてあるエリアに以下のJSONをコピペします。このデータはKaggkleからダウンロードした`test.csv`の１行目の内容です。

```json
{
    "input_data": [
        {
            "fields": [
                "PassengerId",
                "Pclass",
                "Name",
                "Sex",
                "Age",
                "SibSp",
                "Parch",
                "Ticket",
                "Fare",
                "Cabin",
                "Embarked"
            ],
            "values": [
                [
                    892,
                    3,
                    "Kelly, Mr. James",
                    "male",
                    34.5,
                    0,
                    0,
                    "330911",
                    7.8292,
                    null,
                    "Q"
                ]
            ]
        }
    ]
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/50d7d92b-b3d1-6041-7996-933ede7efe49.png)


[Predict]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/b6e3607b-fb2e-b573-e11e-9d8cfb9e34b2.png)

予測結果が右側に表示さればテスト完了です！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/1f202e29-82a7-df70-bab6-002bfb12b328.png)

これでモデルの準備が整いました。

#5. notebookを使って提出用データを作成
AutoAIのモデルがWebサービスとして呼び出せるようになったので、これをpythonのAPIで呼び出して提出用データを作成します。

pythonのコードはWatsonStudio用のnotebookで実行します。AutoAIの作成が終わって、プロジェクトがそのまま開いていること前提で以下は書いてあります。

###1. 画面の右上にある`プロジェクトに追加`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/9a5799f7-395e-71d6-e7ec-66a7cd4b48ea.png)

###2. `Notebook`をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/9a9a35ae-f214-0a32-b77e-b97d76729c29.png)

###3. `From URL`タブをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/c831e562-4d5f-0fd9-7ac3-eaca556ba0bd.png)

###4. `Name`, `Notebook URL`を入力して、[Create]をクリック

`Name`には任意の名前(下の例は`Titanic_AutoAI_Submission_Data`), `Notebook URL`には以下のURLをコピペして入力します。

`https://github.com/kyokonishito/autoai_titanic/blob/master/notebooks/Titanic_AutoAI_Submission_Data.ipynb`

その後[Create]をクリックして、notebookを作成してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/19b78251-1f57-2c67-197e-5a7b821cb812.png)

###5. notebookに書いてある指示を読んで、指示にしたがって手順を実施し、最後までセルを実行してください。
指示はnotebookに書いてあります。

###6. 提出用ファイルのダウンロード
notebook最後まで実行後、`File`→`Save`でnotebookをSaveします。

上部からProject名のLinkをクリックし、Projectページに戻ります。(以下の例では`DojoMLTutorial`をクリックとなります)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/6b0ba7e5-c8c3-88ec-e88d-52c41f651663.png)

`Assets`タブの`Data Sources`の下に`submission_titanic.csv`というファイルが表示されています。マウスを重ねると右側に縦の3点のメニューが表示されますので、クリックして`Download`をクリックし、提出用ファイルをダウンロードしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/6b9beb53-32f1-251f-ebe6-0fd6fba1b9ca.png)

#6. kaggleに結果を提出(Submit)
提出ファイルができましたので、ファイルを提出(Submit)してみましょう。

###1. https://www.kaggle.com/c/titanic/ にアクセス
https://www.kaggle.com/c/titanic/ にアクセスします。サインインをしていない場合はしてください。

###２.　[Submit Predictions]をクリック 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/d202e6f9-1fd9-7324-7501-ea3ab94583b3.png)

###3. ダウンロードした`submission_titanic.csv`をアップロード

`submission_titanic.csv`を以下のエリアまでドラッグするか、クリックしてファイルダイアログで指定してアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/6b02f9b9-ceb9-2c54-5f62-d65f6fb9b8e7.png)

###4. [Make Submission]をクリックして提出(Submit)します
ファイルがアップロードされていることを確認し、コメントがあれば入力後、[Make Submission]をクリックして提出(Submit)します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/88f0b5d5-c494-14ae-d639-3958ed15646c.png)


###4.  `leaderboard`で結果確認

`Jump to your position on the leaderboard `をクリックして順位を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/524e2ed8-e02c-2dbc-71d9-21575b629f91.png)


提出時の順位は17650人中6483位でした。正確度は0.77990でした！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/de97d186-559a-1644-9c62-101078c0f241.png)


#7. まとめ
いかがでしたか？　AutoAIでモデルをつくって、ｐｙｔｈｏｎから呼び出して提出ファイルを作ればkaggleにもチャレンジできます。一度トライしてみてください!!

また別のデータでももちろんできますので、ここで使用しているpythonのコードを参考にして、パラメーターや提出フォーマットを変更して別のCompetitionにもチャレンジしてみてください。