はじめに
機械学習の勉強の為にscikit-learnのデータセットを使って
カンタンな回帰分析を行い、投稿に纏めてきました
せっかく回帰問題の解法が分かったので、より実践的なスキルにする為に
Kaggleに挑戦してみたいと思います。
自分と同様、ゼロからKaggleを初めて見るという人たちの一助になれば幸いです。
Kaggleとscikit-learnデータセットの違い
scikit-learnのデータセットには欠損値がありませんでした(少なくともBoston住宅価格データセットには)
しかし仮に、人間が手入力したエクセルデータやCSVデータをもとに何らかの分析を行いたい場合
入力ミスなどにより欠損値や異常値が存在するケースは容易に想像出来ます。
Kaggleのコンペで与えられるデータセットには、欠損値や異常値(らしきもの)も存在するし
文字列のデータがあったり、必要ないようなデータも含まれてたりする事もあります。
また、企業から提供されたデータを用いて、何らかの予測を行うコンペもあったり
データも課題も実践的です。
挑戦するコンペ
実践的!と言いつつ、まずはKaggleのチュートリアルにあたるこちらのコンペに参加します。
物件の広さやプールの有無等から物件の価格を予測するという物です。
内容的にもボストン住宅価格予測とほぼ同じなので、導入にはちょうど良いと考えました。
勉強の方針
Kaggleではカーネルという実行環境が提供されています。
使い方に慣れる為にも、今回のコンペはカーネルを使って挑戦してみたいと思います。
また、各コンペで沢山のカーネルが公開されています。
公開されているカーネルは自分の環境にコピー可能(Githubのフォークみたいな)で
他人の作ったカーネルを一部改編してモデルを作る事も出来ますが
今回は勉強が第一なので、公開カーネルのカンニングはバリバリしますが、コーディングは自分で行います。
アカウント作成からカーネル作成まで
アカウント作ります。
如何にもフレッシュな初心者が来たって感じです
joined 2months agoって所が自分の腰の重さを表しています。
アカウントが出来たら、先ほどのコンペのページに移動して
右上の青いボタンJoin Competitionをクリックしてコンペに参加(下の画像は既に参加済みなのでSubmit Predictionに代わってます)
次にKernelsタブに移動してNew Kernelをクリック
そうしたら、Script形式で各かNotebook形式で書くか選択できるのでお好きな方を
自分は普段JupyterNotebookを使用しているのでNotebookスタイルでやっていきます。
最初はこんな感じになると思います、英語はGoogle翻訳で和訳してます。
右の方にデータセットの置き場所とかの情報があります。
データインポート
上の画像を参考に、データファイルからデータをインポートしましょう
# このPython 3環境にはたくさんの役に立つアナリティクスライブラリがインストールされています
# これは、kaggle / python docker image:https://github.com/kaggle/docker-pythonで定義されています。
# 例えば、これはロードするのに役立ついくつかのパッケージです。
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
# 入力データファイルは "../ input /"ディレクトリにあります。
# 例えば、(runをクリックするか、Shift + Enterを押して)これを実行すると、入力ディレクトリ内のファイルが一覧表示されます。
import os
print(os.listdir("../input"))
# 現在のディレクトリに書き込んだ結果はすべて出力として保存されます。
# データをインポート
train = pd.read_csv("../input/train.csv")
sample_sub = pd.read_csv("../input/sample_submission.csv")
test = pd.read_csv("../input/test.csv")
とりあえずトレーニングデータでも覗いてみましょう
print(train.info())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1460 entries, 0 to 1459
Data columns (total 81 columns):
Id 1460 non-null int64
MSSubClass 1460 non-null int64
MSZoning 1460 non-null object
LotFrontage 1201 non-null float64
LotArea 1460 non-null int64
Street 1460 non-null object
Alley 91 non-null object
LotShape 1460 non-null object
LandContour 1460 non-null object
Utilities 1460 non-null object
LotConfig 1460 non-null object
LandSlope 1460 non-null object
Neighborhood 1460 non-null object
Condition1 1460 non-null object
Condition2 1460 non-null object
BldgType 1460 non-null object
HouseStyle 1460 non-null object
OverallQual 1460 non-null int64
OverallCond 1460 non-null int64
YearBuilt 1460 non-null int64
YearRemodAdd 1460 non-null int64
RoofStyle 1460 non-null object
RoofMatl 1460 non-null object
Exterior1st 1460 non-null object
Exterior2nd 1460 non-null object
MasVnrType 1452 non-null object
MasVnrArea 1452 non-null float64
ExterQual 1460 non-null object
ExterCond 1460 non-null object
Foundation 1460 non-null object
BsmtQual 1423 non-null object
BsmtCond 1423 non-null object
BsmtExposure 1422 non-null object
BsmtFinType1 1423 non-null object
BsmtFinSF1 1460 non-null int64
BsmtFinType2 1422 non-null object
BsmtFinSF2 1460 non-null int64
BsmtUnfSF 1460 non-null int64
TotalBsmtSF 1460 non-null int64
Heating 1460 non-null object
HeatingQC 1460 non-null object
CentralAir 1460 non-null object
Electrical 1459 non-null object
1stFlrSF 1460 non-null int64
2ndFlrSF 1460 non-null int64
LowQualFinSF 1460 non-null int64
GrLivArea 1460 non-null int64
BsmtFullBath 1460 non-null int64
BsmtHalfBath 1460 non-null int64
FullBath 1460 non-null int64
HalfBath 1460 non-null int64
BedroomAbvGr 1460 non-null int64
KitchenAbvGr 1460 non-null int64
KitchenQual 1460 non-null object
TotRmsAbvGrd 1460 non-null int64
Functional 1460 non-null object
Fireplaces 1460 non-null int64
FireplaceQu 770 non-null object
GarageType 1379 non-null object
GarageYrBlt 1379 non-null float64
GarageFinish 1379 non-null object
GarageCars 1460 non-null int64
GarageArea 1460 non-null int64
GarageQual 1379 non-null object
GarageCond 1379 non-null object
PavedDrive 1460 non-null object
WoodDeckSF 1460 non-null int64
OpenPorchSF 1460 non-null int64
EnclosedPorch 1460 non-null int64
3SsnPorch 1460 non-null int64
ScreenPorch 1460 non-null int64
PoolArea 1460 non-null int64
PoolQC 7 non-null object
Fence 281 non-null object
MiscFeature 54 non-null object
MiscVal 1460 non-null int64
MoSold 1460 non-null int64
YrSold 1460 non-null int64
SaleType 1460 non-null object
SaleCondition 1460 non-null object
SalePrice 1460 non-null int64
dtypes: float64(3), int64(35), object(43)
memory usage: 924.0+ KB![Bad Request]()
**・・・。。。**
特徴量が80個ありますね、これくらい当たり前なんでしょうか
少なくともボストン住宅価格のデータセットで15個くらいの特徴量を捏ねてた**(超)初心者**の自分には驚きです!
高い相関を持つ特徴量や、目的変数に対して貢献の低い特徴量を削減したりする必要がありそうです。
sample_sub.csvには区画面積とベッドルームの数等から線形回帰で求めたテストセットの予測値が入っているようです
このベンチマーク用の予測値よりも、精度の良い予測をするのが最低限の目標ですね
試しに、このベンチマーク用のデータが、どの程度のスコアを出すのか提出してみて今回は終わりにしようと思います。
sample_sub.csvのスコア
コンペのページに戻ってSubmit Predictionをクリックします。
以下のページになるので、ダウンロードしたsample_sub.csvをアップロードして
Make Submissionボタンを押せばOKです。
sample_sub.csvをサブミットしてみると以下の順位にランキングされました。
スコアは0.4089です。
"このコンペでは予測精度の評価は**RMSE(二乗平均平方誤差)**で行われるみたいです
ただ、このスコアはイコールRMSEの値ではないっぽいです(RMSEにしては低すぎると思うので)"
単純なRMSEではなく、予測値と観測値の対数を取って、そのRMSEがスコアになっているようです。
4721人中4414位なんで、さすがにこの記録はなんとしても超えたいですね・・・
次回へ
次回以降は
- 特徴量エンジニアリング
- モデル構築
- クロスバリデーションで評価
- モデル改良
といったステップで進めて行くことになると思います。
次回は特徴量の俯瞰で終わりそうな気がします・・・