【超入門】機械学習ド素人によるkaggle挑戦記録

# きっかけ

研究で機械学習をすることになり、[こちらの動画](https://qiita.com/koichi2426/items/584aa315aa4b2efc9160)を見た後、実際にモデルを作ってみようということでKaggleに挑戦することとなった。


# 目的

* 将来的に後輩へ機械学習を教える際に備え、自身の学習プロセスを記録しておく。
* Kaggleの操作方法が分からず戸惑う日本語ユーザー（自分を含む）に向けて、提出までの流れを日本語で解説するチュートリアル記事を作成する。



# やること

アカウント登録\~コンペに提出してスコアを確認

# やらないこと
コードの解説(別記事に分離)

https://qiita.com/koichi2426/items/4a7a3fc474f7593d9023

# 本文

### Kaggleアカウントを作成

まずは[Kaggleの公式サイト]([https://www.kaggle.com/)にアクセスして、Googleアカウントで登録した。


### 参加するコンペを選ぶ

「Titanic: Machine Learning from Disaster」という初心者向けのコンペに参加した。

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

### Notebookを作成

「コード」から「New Notebook」で新しい自分のNotebookを作成する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3868342/df864aec-fe39-4e16-adc0-1e863a36c2b2.png)

### 提出物を作成
コーディングを行い提出物を作成する。コードの解説は[こちら](https://qiita.com/koichi2426/items/4a7a3fc474f7593d9023)


以下は実際に作成したコード全文。
```python
# -------------------------------
# ライブラリのインポート
# -------------------------------
import numpy as np  # 数値計算ライブラリ
import pandas as pd  # データ処理・CSV読み込み用

import os
# 入力データの一覧を表示（確認用）
for dirname, _, filenames in os.walk('/kaggle/input'):
    for filename in filenames:
        print(os.path.join(dirname, filename))

# -------------------------------
# データの読み込み
# -------------------------------
train_df = pd.read_csv('/kaggle/input/titanic/train.csv')
test_df = pd.read_csv('/kaggle/input/titanic/test.csv')

print("Trainデータの形:", train_df.shape)
print("Testデータの形:", test_df.shape)

# -------------------------------
# データの基本確認
# -------------------------------
print("\n--- 欠損値の数 ---")
print(train_df.isnull().sum())

print("\n--- 学習データの先頭 ---")
print(train_df.head())

print("\n--- 学習データの情報 ---")
print(train_df.info())

# -------------------------------
# 欠損値の補完
# -------------------------------

# Age（年齢）を中央値で補完
train_df['Age'] = train_df['Age'].fillna(train_df['Age'].median())
test_df['Age'] = test_df['Age'].fillna(test_df['Age'].median())

# Embarked（乗船地）を最頻値で補完
train_df['Embarked'] = train_df['Embarked'].fillna(train_df['Embarked'].mode()[0])

# Fare（運賃）を中央値で補完（テストデータ）
test_df['Fare'] = test_df['Fare'].fillna(test_df['Fare'].median())

# -------------------------------
# カテゴリ変数を数値に変換
# -------------------------------

# 性別（Sex）: male → 0, female → 1
train_df['Sex'] = train_df['Sex'].map({'male': 0, 'female': 1})
test_df['Sex'] = test_df['Sex'].map({'male': 0, 'female': 1})

# 乗船地（Embarked）: S → 0, C → 1, Q → 2
embarked_map = {'S': 0, 'C': 1, 'Q': 2}
train_df['Embarked'] = train_df['Embarked'].map(embarked_map)
test_df['Embarked'] = test_df['Embarked'].map(embarked_map)

# -------------------------------
# 使用する特徴量の選択
# -------------------------------

# モデルに使う列
features = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked']

# 学習用とテスト用のデータを準備
X_train = train_df[features]
y_train = train_df['Survived']
X_test = test_df[features]

# 処理後のデータ確認
print("\n--- 処理後の特徴量（学習データ） ---")
print(X_train.head())

# -------------------------------
# 機械学習モデルの学習と予測
# -------------------------------

from sklearn.ensemble import RandomForestClassifier  # ランダムフォレストを使用
from sklearn.metrics import accuracy_score  # （任意）精度確認用

# モデルのインスタンスを作成
model = RandomForestClassifier(n_estimators=100, random_state=42)

# 学習データでモデルを訓練
model.fit(X_train, y_train)

# テストデータに対して予測を実行
predictions = model.predict(X_test)

# -------------------------------
# 提出用ファイルの作成
# -------------------------------

# 提出には PassengerId が必要なので test データから取得
submission = pd.DataFrame({
    'PassengerId': test_df['PassengerId'],
    'Survived': predictions
})

# CSVファイルとして保存（Kaggleにアップロードする用）
submission.to_csv('/kaggle/working/submission.csv', index=False)

print("\n--- 予測結果の一部 ---")
print(submission.head())

print("\nsubmission.csv を作成しました。Kaggle画面から [Submit Predictions] で提出できます。")

```
### 提出物の確認
プログラムを「Run All」で実行すると「/kaggle/working」下に「submission.csv」が作られることを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3868342/21103bee-2cea-4c2d-8d18-3165c4cba59c.png)

### 保存
1. 「Save Version」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3868342/663ff6d3-b8d3-4d68-9028-5c6b4f416eff.png)

2. バージョンの名前をつけて「Save」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3868342/e3d66979-812b-45db-9fe9-f1a5b14fb68b.png)



### 提出方法
1. [コンペのページ](https://www.kaggle.com/competitions/titanic)に戻り「Submit Prediction」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3868342/e6ceb8a6-eed5-4e00-ab61-76e9ac73edb7.png)

2. 「Notebook」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3868342/d730a638-c36a-4214-94ed-b9fa3e54e802.png)

3. 提出物する「NOTEBOOK」「VERION」「FILE」を指定して「Submit」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3868342/baf0a613-58fa-4e5d-807f-d24899711c01.png)


### スコアの確認
[コンペのページ](https://www.kaggle.com/competitions/titanic)に戻り「Submissions」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3868342/b859dc9f-63f9-4454-a8fc-d43e92d6bb48.png)