1-⑦[AI][Kaggle]Kaggle入門(機械学習Intro 7. 機械学習コンペティション) 最終回
Kaggle入門1 機械学習Intro 1.モデルの仕組み
Kaggle入門1 機械学習Intro 2.基本的なデータ探索
Kaggle入門1 機械学習Intro 3.初めての機械学習モデル
Kaggle入門1 機械学習Intro 4.モデルの検証
Kaggle入門1 機械学習Intro 5.アンダーフィッティングとオーバーフィッティング
Kaggle入門1 機械学習Intro 6. ランダムフォレスト
Kaggle入門1 機械学習Intro 7. 機械学習コンペティション 最終回
→Kaggle入門2 Python Pandasライブラリの使い方 1.生成/読込/書込
Abstract
Kaggle「Intro to Machine Learningの(Machine Learning Competitions)」の翻訳と実行方法の解説
7. Machine Learning Competitions
理論編
機械学習のコンペティションは、データサイエンスのスキルを向上させ、自分の成長度合いを測るためのとても良い方法です。
次の演習では、Kaggle Learn ユーザー向けの House Prices コンペティションに対して、予測結果を作成し、提出します。

コースで学んだことを活用して、Kaggle コンテストへ応募しましょう。
実践編
はじめに(Introduction)
この演習では、Kaggle のコンペティションに提出する予測結果を作成します。
その後、(たとえば特徴量を追加するなどして)モデルを改良し、これまで学んだことを活かしながら、リーダーボードでの順位を上げていくことができます。
まずは、下のコードセルを実行して、コードチェックの設定とデータセット用のファイルパスを準備してください。
# Set up code checking
from learntools.core import binder
binder.bind(globals())
from learntools.machine_learning.ex7 import *
# Set up filepaths
import os
if not os.path.exists("../input/train.csv"):
os.symlink("../input/home-data-for-ml-course/train.csv", "../input/train.csv")
os.symlink("../input/home-data-for-ml-course/test.csv", "../input/test.csv")
これまでに書いたコードの一部を以下に示します。
これをもう一度実行してください。
# Import helpful libraries
import pandas as pd
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error
from sklearn.model_selection import train_test_split
# Load the data, and separate the target
iowa_file_path = '../input/train.csv'
home_data = pd.read_csv(iowa_file_path)
y = home_data.SalePrice
# Create X (After completing the exercise, you can return to modify this line!)
features = ['LotArea', 'YearBuilt', '1stFlrSF', '2ndFlrSF', 'FullBath', 'BedroomAbvGr', 'TotRmsAbvGrd']
# Select columns corresponding to features, and preview the data
X = home_data[features]
X.head()
# Split into validation and training data
train_X, val_X, train_y, val_y = train_test_split(X, y, random_state=1)
# Define a random forest model
rf_model = RandomForestRegressor(random_state=1)
rf_model.fit(train_X, train_y)
rf_val_predictions = rf_model.predict(val_X)
rf_val_mae = mean_absolute_error(rf_val_predictions, val_y)
print("Validation MAE for Random Forest Model: {:,.0f}".format(rf_val_mae))
コンテスト用のモデルをトレーニングする
上記のコードセルは、train_X と train_y でランダムフォレストモデルをトレーニングします。 以下のコードセルを使用してランダムフォレストモデルを構築し、X と y のすべてでトレーニングします。
# To improve accuracy, create a new Random Forest model which you will train on all training data
rf_model_on_full_data = RandomForestRegressor()
# fit rf_model_on_full_data on all data from the training data
rf_model_on_full_data.fit(X, y)
次に、「テスト」データのファイルを読み取り、モデルを適用して予測を行います。
# path to file you will use for predictions
test_data_path = '../input/test.csv'
# read test data file using pandas
test_data = pd.read_csv(test_data_path)
# create test_X which comes from test_data but includes only the columns you used for prediction.
# The list of columns is stored in a variable called features
test_X = test_data[features]
# make predictions which we will submit.
test_preds = rf_model_on_full_data.predict(test_X)
送信する前に、test_preds の形式が正しいかどうかを確認してください。

提出物を生成する
以下のコードセルを実行すると、コンテストへの提出に使用できる予測を含む CSV ファイルが生成されます。
# Run the code to save predictions in the format used for competition scoring
output = pd.DataFrame({'Id': test_data.Id,
'SalePrice': test_preds})
output.to_csv('submission.csv', index=False)
コンテストへの応募
結果をテストするには、コンテストに参加する必要があります(まだ参加していない場合)。このリンクをクリックして新しいウィンドウを開き、「コンテストに参加」ボタンをクリックしてください。
次に、以下の手順に従ってください。
- 画面右上にある Save Version ボタンをクリックします。すると、ポップアップウィンドウが表示されます。
- Save and Run All オプションが選択されていることを確認し、Save ボタンをクリックします。
- ノートブックの左下にウィンドウが表示されます。実行が完了したら、Save Version ボタンの右側にある数字をクリックしてください。
- 画面右側にバージョンの一覧が表示されます。最新のバージョンの右にある三点リーダー(…)をクリックし、Open in Viewer を選択します。
これで同じページの閲覧モードに切り替わります。再びこの説明に戻るには、下へスクロールする必要があります。 - 画面上部付近にある Data タブをクリックします。次に、提出したいファイルをクリックし、Submit ボタンを押して、リーダーボードに結果を提出します。
これで、コンペティションへの提出は完了です!
もし引き続きパフォーマンスを改善したい場合は、画面右上の Edit ボタンを選択してください。
そうするとコードを変更できるようになり、同じ手順を繰り返すことができます。改善の余地はたくさんあり、作業を続けるほどリーダーボードの順位も上がっていきます。
進歩を続ける
モデルを改善する方法は数多くあり、この時点では実験することが学習に最適な方法です。
モデルを改善する最良の方法は、特徴量を追加することです。データにさらに特徴量を追加するには、最初のコードセルに戻り、次のコード行を変更して列名を追加します。
features = ['LotArea', 'YearBuilt', '1stFlrSF', '2ndFlrSF', 'FullBath', 'BedroomAbvGr', 'TotRmsAbvGrd']
一部の機能では、欠損値や非数値データ型などの問題によりエラーが発生します。エラーが発生しない可能性のある列の一覧を以下に示します。
- 'MSSubClass'
- 'LotArea'
- 'OverallQual'
- 'OverallCond'
- 'YearBuilt'
- 'YearRemodAdd'
- '1stFlrSF'
- '2ndFlrSF'
- 'LowQualFinSF'
- 'GrLivArea'
- 'FullBath'
- 'HalfBath'
- 'BedroomAbvGr'
- 'KitchenAbvGr'
- 'TotRmsAbvGrd'
- 'Fireplaces'
- 'WoodDeckSF'
- 'OpenPorchSF'
- 'EnclosedPorch'
- '3SsnPorch'
- 'ScreenPorch'
- 'PoolArea'
- 'MiscVal'
- 'MoSold'
- 'YrSold'
列のリストを見て、住宅価格に影響を与える可能性のあるものについて考えてみましょう。それぞれの機能について詳しくは、コンテストページのデータの説明をご覧ください。
上記の機能を定義するコード セルを更新した後、すべてのコード セルを再実行してモデルを評価し、新しい送信ファイルを生成します。
次は何をすればいいですか?
前述のとおり、一部の機能を使用してモデルをトレーニングしようとすると、エラーが発生します。中級機械学習コースでは、これらの種類の特徴量の扱い方を学びます。また、ランダムフォレストよりもさらに高い精度を実現する手法であるxgboostの使い方も学びます。
Pandas コースでは、データ サイエンス プロジェクトで概念的なアイデアから実装までを迅速に実行するためのデータ操作スキルを習得できます。
また、コンピューター ビジョン タスクで人間よりも優れたレベルのパフォーマンスを備えたモデルを構築するディープラーニング コースの準備も整いました。
以上です。
お疲れ様でした。
Discussion