Kaggleは、約 100 万人以上の方が利用している世界最大のデータサイエンスコンペティションプラットフォームで、企業や政府等がコンペティション形式で課題を提示し、参加者がその課題に挑戦する形式になっていて、優れた回答を提示したと判断されると報酬が支払われる仕組みになっている。

今回は、Kaggleのタイタンニックコンペで予測結果を提出してみたので、その手順を共有する。

前提条件

下記記事のKaggleのアカウント登録が完了していること。

Kaggleのアカウント登録を行ってみたKaggleは、約 100 万人以上の方が利用している世界最大のデータサイエンスコンペティションプラットフォームで、企業や政府等がコンペ...

また、Kaggleのタイタンニックコンペでコード実行できる状態になっていること。

エンジニアファーストバナー

Kaggleでの提出用ファイルの作成

Kaggleのタイタンニックコンペで、機械学習モデルを作成し、予測結果を提出用ファイルに出力する実装例は、以下の通り。

1) 以下のようにライブラリを読み込み、inputファイル名を確認する。

# ライブラリを読み込む
import numpy as np
import pandas as pd
import os
import seaborn as sns
Kaggleでの提出用ファイルの作成_1_1
# ファイル名を一覧表示する
for dirname, _, filenames in os.walk('/kaggle/input'):
    for filename in filenames:
        print(os.path.join(dirname, filename))
Kaggleでの提出用ファイルの作成_1_2

2) 各インプットファイルをそれぞれ読み込む。

# train.csvを読み込む
train_csv = pd.read_csv('/kaggle/input/titanic/train.csv', header=0, encoding='UTF-8')
print(train_csv.shape)
train_csv
Kaggleでの提出用ファイルの作成_2_1

上記「train.csv」が訓練用データで、各特徴量と予測結果(Survived)が含まれている。

# test.csvを読み込む
test_csv = pd.read_csv('/kaggle/input/titanic/test.csv', header=0, encoding='UTF-8')
print(test_csv.shape)
test_csv
Kaggleでの提出用ファイルの作成_2_2

上記「test.csv」が予測するテストデータで、各特徴量のみを含み、予測結果(Survived)が含まれていない。

# gender_submission.csvを読み込む
gender_submission_csv = pd.read_csv('/kaggle/input/titanic/gender_submission.csv', header=0, encoding='UTF-8')
print(gender_submission_csv.shape)
gender_submission_csv
Kaggleでの提出用ファイルの作成_2_3

上記「gender_submission.csv」が提出用ファイルのフォーマットで、この「Survived」を予測結果に書き換えて提出することになる。

3) train.csvとtest.csvの両方に対し前処理を行うため、 train.csvから正解データを除外したデータとtest.csvを結合する。

# train.csvから正解データ(Survived)を除外したデータと、test.csvを結合する
train_test_csv = pd.concat([train_csv.drop(['Survived'], axis=1), test_csv], ignore_index=True)
train_test_csv
Kaggleでの提出用ファイルの作成_3

4) 3)で読み込んだファイルの統計指標・データ型・欠損値数を確認する。

# train_test_csvの主要な統計指標を確認する
train_test_csv.describe()
Kaggleでの提出用ファイルの作成_4_1
# train_test_csvのデータ型を確認する
train_test_csv.info()
Kaggleでの提出用ファイルの作成_4_2
# train_test_csvの欠損値を確認する
train_test_csv.isnull().sum()
Kaggleでの提出用ファイルの作成_4_3

5) 3)のデータから、特定の列を削除する。

# train_test_csvのSurvived判定に関係ない列(PassengerId,Name,Ticket)、欠損値の多い列(Age,Cabin)を削除する
drop_columns = ['PassengerId','Name','Age','Ticket','Cabin']
train_test_csv = train_test_csv.drop(drop_columns, axis=1)
print(train_test_csv.shape)
train_test_csv
Kaggleでの提出用ファイルの作成_5

6) 3)のデータの欠損値を補完する。なお、以下のソースコードは、データ補完の一例である。

# train_test_csvの、Fareの欠損値は、train.csvの中央値で補完する
train_test_csv.loc[:, 'Fare'] = train_test_csv['Fare'].fillna(train_csv['Fare'].median())
# train_test_csvの、Embarkedの欠損値は、train.csvの最頻値Sで補完する
train_test_csv.loc[:, 'Embarked'] = train_test_csv['Embarked'].fillna('S')
# train_test_csvの欠損値を再度確認する
train_test_csv.isnull().sum()
Kaggleでの提出用ファイルの作成_6

7) 3)のカテゴリカルデータ(文字や分類のデータ)をOne-hot encoding(「0」と「1」の並び(数値のベクトル)に変換する)を行う。

# train_test_csvのPclass, Sex, SibSp, Parch, EmbarkedをOne-hot encodingする
train_test_csv = pd.get_dummies(train_test_csv, columns=['Pclass', 'Sex', 'SibSp', 'Parch', 'Embarked'], dtype=int)
print(train_test_csv.shape)
train_test_csv
Kaggleでの提出用ファイルの作成_7

8) 3)の「Fare」を標準化する。

# train_test_csvのFareを標準化する
train_test_csv["Fare"] = (train_test_csv["Fare"] - train_test_csv["Fare"].mean()) / train_test_csv["Fare"].std()
print(train_test_csv.shape)
train_test_csv
Kaggleでの提出用ファイルの作成_8

9) 3)のデータから正解値(ラベル)を取得する。

# train.csvの正解データ(Survived)を、train_labelに格納する
train_label = train_csv['Survived']
train_label
Kaggleでの提出用ファイルの作成_9

10) 3)のデータを再度train.csvのデータとtest.csvのデータに分割する。

# train_test_csvを、train.csvのデータとtest.csvのデータに分割する
# train.csvのデータ
train_data = train_test_csv[:891]
print(train_data.shape)
train_data
Kaggleでの提出用ファイルの作成_10_1
# test.csvのデータ
test_data = train_test_csv[891:]
print(test_data.shape)
test_data
Kaggleでの提出用ファイルの作成_10_2

11) train.csvのデータを用いて機械学習モデル(下記ではロジスティックス回帰)を作成し学習する。

from sklearn.linear_model import LogisticRegression

# ロジスティックス回帰で学習する
clf = LogisticRegression(random_state=0)
clf.fit(train_data, train_label)
Kaggleでの提出用ファイルの作成_11

12) 11)で作成したモデルを用いて、test.csvの正解値を予測する。

# 作成済のモデルを利用して、test.csvの正解値(ラベル)を予測する
y_pre = clf.predict(test_data) 
y_pre
Kaggleでの提出用ファイルの作成_12

13) test.csvの予測結果を、Kaggle提出用ファイルに書き出す。

# gender_submission.csvのSurvivedを、test.csvの予測結果(y_pre)の値に書き換える
gender_submission_csv['Survived'] = y_pre.tolist()
gender_submission_csv
Kaggleでの提出用ファイルの作成_13_1
# 予測結果をCSVファイル(submission.csv)に書き出す
# index=Falseを指定しないと不要な行番号が書き込まれてエラーになる
gender_submission_csv.to_csv('submission.csv', index=False)
Kaggleでの提出用ファイルの作成_13_2

上記プログラム実行すると、以下赤枠のファイル(submission.csv)が出力されることが確認できる。
Kaggleでの提出用ファイルの作成_13_3



Kaggleでのファイル保存と提出

Kaggleでのファイル保存と提出方法は、以下の通り。

1) Kaggleの状態や実行結果をまとめて保存するには、以下のように、「Save Version」ボタンを押下後、「Save & Run All (Commit)」を選択した状態で「Save」ボタンを押下する。
Kaggleでのファイル保存と提出_1_1

Kaggleでのファイル保存と提出_1_2

保存が完了すると、以下のように、左下に完了メッセージが表示される。
Kaggleでのファイル保存と提出_1_3

なお、「Save & Run All (Commit)」の他に、「Quick Save」という、コードの記述内容(テキスト)のみを素早く下書き保存する機能もある。
Kaggleでのファイル保存と提出_1_4

2) Kaggleコンペに結果を提出するには、右下の「Submit to competition」から「Submit」ボタンを押下する。
Kaggleでのファイル保存と提出_2_1

表示されるバージョンが+1になっているが、そのまま「Submit」ボタンを押下する。
Kaggleでのファイル保存と提出_2_2

完了すると、左下に完了メッセージが表示され、右下にスコアが表示される。
Kaggleでのファイル保存と提出_2_3

要点まとめ

  • Kaggleのタイタンニックコンペには、インプットファイルとして、train.csv(訓練用データ)、test.vsv(テストデータ)、gender_submission.csv(提出用ファイルフォーマット)が含まれている。
  • Kaggleのコンペで予測結果を提出するには、機械学習モデルを作成後、予測結果を提出用ファイルに出力し、「Submit to competition」から「Submit」ボタンを押下する。