DatabricksでKaggleのTitanicコンペティションにチャレンジしてみる

こちらにチャレンジしてみます。Kaggleのアカウント作成していましたが、一つもチャレンジしたことなかったのでした。お恥ずかしい。

https://www.kaggle.com/competitions/titanic

> このコンペティションはシンプルです: どの乗客がTitanic沈没を生き延びたのかを予測するモデルを作成するために機械学習を用います。

チャレンジの項目も翻訳します。

タイタニックの沈没は、歴史上最も悪名高い沈没事故の一つです。

1912年4月15日、処女航海の勝っていで、「不沈」と広く知られていたRMS Titanicは氷山との衝突後に沈没しました。不幸なことに、全員分の救命ボートが無く、結果として2224人の乗員乗客のうち1502人が亡くなりました。

生死を分けた要因にはある程度の運も含まれましたが、あるグループの人々が他のグループよりも生存した可能性があるようです。

このチャレンジでは、乗客データ(氏名、年齢、性別、社会・経済的なクラス)を用いて「どのような人々がより生存する可能性が高かったのか？」という質問に回答する予測モデルを構築することになります。

# チュートリアルの活用

ここまで読み進めたら、チュートリアルがありましたのでこちらをウォークスルーします。

https://www.kaggle.com/code/alexisbcook/titanic-tutorial/notebook

右上の3点リーダーをクリックして**Download code**をクリックします。`titanic-tutorial.ipynb`がダウンロードされます。
![Screenshot 2023-11-02 at 14.31.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1e2c4e9a-ddea-4bd1-b3a3-14953711e909.png)

チャレンジページの**Data**タブをクリックし、画面を下にスクロールすると表示される**Download All**をクリックします。`titanic.zip`がダウンロードされます。
![Screenshot 2023-11-02 at 14.33.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b471854c-cf94-5de9-15ac-6cca44999df6.png)

# データのアップロード

[ボリューム](https://qiita.com/taka_yayoi/items/453026daacf71ba5662f)の機能を使ってクイックにzipファイルをDatabricksに取り込みます。

ボリュームを選択して**このボリュームにアップロード**をクリックして、`titanic.zip`をドラッグ&ドロップします。
![Screenshot 2023-11-02 at 13.52.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/81ba28ce-e0d0-b581-7c49-d524a1796c83.png)
![Screenshot 2023-11-02 at 13.52.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/ace0d3b1-0752-e09d-cf08-c8297ac2be63.png)

# ノートブックのインポート

Databricksワークスペースでフォルダを作成して、メニューから**インポート**を選択します。`titanic-tutorial.ipynb`をドラッグ&ドロップします。
![Screenshot 2023-11-02 at 14.38.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/68e1fe89-0d4e-c15b-0643-c00253725af2.png)

# zipファイルの解凍

上でインポートしたノートブックにセルを追加してもいいですが、ここでは新規ノートブックを作成します。`%sh`マジックコマンドを使ってシェルコマンドを実行していきます。

```sh:shell
%sh
ls /Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/titanic.zip
```
```
/Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/titanic.zip
```
ファイルを解凍します。
```sh:shell
%sh 
unzip /Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/titanic.zip -d /Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/titanic/
```
```
Archive:  /Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/titanic.zip
  inflating: /Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/titanic/gender_submission.csv  
  inflating: /Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/titanic/test.csv  
  inflating: /Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/titanic/train.csv  
```
```sh:shell
%sh
ls /Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/titanic
```
3つのcsvファイルが解凍されました。
```
gender_submission.csv
test.csv
train.csv
```


# ノートブックの実行

インポートした`titanic-tutorial`ノートブックを実行していきます。

ファイルを読み込みます。`train.csv`はトレーニング用のデータセットです。

```py
train_data = pd.read_csv("/Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/titanic/train.csv")
train_data.head()
```
![Screenshot 2023-11-02 at 14.42.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e6406d22-1e4f-d6e9-7e02-410489efc0a8.png)

せっかくなので、Databricksの`display`関数を活用します。
```py
display(train_data)
```
よりリッチな一覧が表示されます。
![Screenshot 2023-11-02 at 14.43.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/d38a3753-f223-1968-255f-140c9fc2af6f.png)

これで終わりではありません。一覧の上にある **+** をクリックして**データプロファイル**を選択します。
![Screenshot 2023-11-02 at 14.43.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/122353d2-06dd-74ad-9613-f80c445f5b69.png)

これだけで、データの概要を掴む助けとなるデータプロファイルが生成されます。
![Screenshot 2023-11-02 at 14.44.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2e19ba17-21c8-ba4e-5f36-f8fe2ffd7193.png)

さらにデータの可視化も行います。 **+** をクリックして**可視化**を選択します。

チケットのクラスと年齢のグラフを設定します。
![Screenshot 2023-11-02 at 14.55.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/942480a8-459f-8659-dec0-6c3ccf662f5f.png)
これだけでグラフが追加されます。
![Screenshot 2023-11-02 at 14.55.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/a5f7a7e9-0f62-5ec0-bdd3-4025cde7628a.png)

テストデータも確認します。

```py
test_data = pd.read_csv("/Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/titanic/test.csv")
test_data.head()
```
![Screenshot 2023-11-02 at 14.57.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/7c159799-15a0-46cb-74b1-2754d0120222.png)

パターンを探索します。

```py
women = train_data.loc[train_data.Sex == 'female']["Survived"]
rate_women = sum(women)/len(women)

print("% of women who survived:", rate_women)
```
```
% of women who survived: 0.7420382165605095
```
こちらも可視化で確認することができます。
![Screenshot 2023-11-02 at 15.02.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/ca2aa9a3-a4ab-271d-4410-1f16b233685f.png)

Random Forestで分類器を構築します。

```py
from sklearn.ensemble import RandomForestClassifier

y = train_data["Survived"]

features = ["Pclass", "Sex", "SibSp", "Parch"]
X = pd.get_dummies(train_data[features])
X_test = pd.get_dummies(test_data[features])

model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=1)
model.fit(X, y)
predictions = model.predict(X_test)

output = pd.DataFrame({'PassengerId': test_data.PassengerId, 'Survived': predictions})
output.to_csv('/Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/titanic/submission.csv', index=False)
print("Your submission was successfully saved!")
```

ボリュームに予測結果が保存されます。さらにDatabricksでは、[MLflow](https://qiita.com/taka_yayoi/items/1a4e82f7e20c56ba4f72)によってモデルが自動で記録されます。
![Screenshot 2023-11-02 at 15.03.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/10fa73d5-b625-a68f-972b-95c9d035186f.png)
![Screenshot 2023-11-02 at 15.06.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/5c97b9b2-6c70-9a29-70d7-dd46ba48d449.png)

# 結果のダウンロードと提出

ボリュームから`submission.csv`をダウンロードします。
![Screenshot 2023-11-02 at 14.17.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c4bc1f07-f8fa-2e70-90aa-3d54d0550969.png)
![Screenshot 2023-11-02 at 14.18.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2531411e-9f93-742d-d342-a261258caf03.png)

Kaggleで**Submit Predictions**をクリックします。`submission.csv`をアップロードします。
![Screenshot 2023-11-02 at 14.19.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/ad6e879b-9e4a-250d-f243-351ffd82704c.png)

提出できました！
![Screenshot 2023-11-02 at 15.11.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/9d53cf38-5272-0dce-64d4-efeb881cf70c.png)

この後はおそらく、パラメーターチューニングなどで精度を改善していくことになるのですが、そういった場合でもMLflowが活躍します。可視化機能含めて是非ご活用ください！

https://qiita.com/taka_yayoi/items/44a5bb667e4f6dc7491d



### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)