Kaggleで機械学習に挑戦してみる（House Prices: Advanced Regression Techniques）

# はじめに
Kaggleの勉強会に参加し、Kaggleにおける初めの一歩（Hello World的なこと）が出来たのではその流れをまとめておきます。対象のコンペは[House Prices: Advanced Regression Techniques](https://www.kaggle.com/c/house-prices-advanced-regression-techniques)です。

# Python実行環境の構築
普通にPythonが実行できる環境であれば良いようなので、Pythonを使える方はどのような方法で実行環境を作成しても良いです。Pythonを使ったことがない人は以下のような解説を参考にしてインストールしてHello Worldしてみましょう。
>(参考)[Anaconda を Windows にインストールする手順](https://weblabo.oscasierra.net/python-anaconda-install-windows/)
>(参考)[Windowsにjupyter notebookを入れてHello,Worldするまでのメモ(Python & Julia)](https://qiita.com/SouTakenaka/items/9801f30c2fd1a378518d)

# Kaggleのアカウント作成
[Kaggle](https://www.kaggle.com/)にアクセスしてアカウントを作成します。特に難しいことはなかったので説明は省略します。分からないことがあったら以下のようなサイトを参考にしてください。
>(参考)[Kaggle事始め](https://qiita.com/taka4sato/items/802c494fdebeaa7f43b7)

# 参加するコンペを選び参加する。
初心者用のコンペがいくつかあるようです。私が参加した勉強会では[House Prices: Advanced Regression Techniques](https://www.kaggle.com/c/house-prices-advanced-regression-techniques)が初回のテーマとなっていましたので、このコンペにでデータ処理の流れを説明します。
まずはコンペのサイトへ行き右側にあるJoin Competitionを押しましょう。

# コンペの内容を理解する
コンペのOverviewのDescriptionを読んで内容を理解すべきなのですが、英語が得意でない人は詳細は気にせず、雰囲気だけ読み取りましょう。

House Pricesのコンペの概要：
学習用データを用いて、SalePrice（家の価格)　を予測する回帰モデルを作成し、最終検証用データの中に入っている1459件分のSalePriceを予測する。

# コンペの提出物とその評価方法を確認する
提出物のフォーマットと評価方法はOverviewのEvaluationに記載されています。
House Pricesの提出物は最終検証用データの各ＩＤとその値段の予測。また、log(予測価格)とlog(真値)のRoot-Mean-Squared-Error (RMSE) で提出物が評価されるようです。

# データをダウンロードし中身を確認する
コンペのサイトのDataの右下の方のDownload Allボタンを押してダウンロードして解凍します。

#### File descriptions
train.csv：学習用データ、1460件分の目的変数( SalePrice )と79変数のデータが入っている。
test.csv：最終検証用データ、1459件分の79変数のデータ ( SalePriceは入っていない )。
sample_submission.csv : 予測結果を提出するときのフォーマット、test.csvのデータのIDと予測結果(SalePrice)がはいっている。
data_description.txt：各データ項目(column)の説明が記載されています。多すぎて簡単には理解できないので、本格的に解析するときに読みましょう。

#### Data fields
各データ項目(column)の説明が記載されています。多すぎて簡単には理解できないので、本格的に解析するときに読みましょう。

# データ解析を行い提出物を作成してみる。
解析の一連の流れが確認できるように簡単なサンプルを書いておきます。まずはコピペで実行してみてください。警告がでるかもしれませんが、『Submit.csv』が作成されたら問題なく実行されているはずです。
※このプログラムはプログラム(*.ipynb or *.py)とデータが同じフォルダにおいていることを前提に書かれていますので、同じフォルダに入れたくない人は相対パスを書き換えてください。

```python
'''ライブラリの読み込み'''
import pandas as pd #CSV読み込みや変数作成などにつかう
import matplotlib.pyplot as plt #グラフを表示するライブラリ
from sklearn.cross_validation import train_test_split #説明変数と目的変数に分けるためのライブラリ
from sklearn import linear_model #線形回帰のためのモジュール
from sklearn.metrics import r2_score #R2を計算するためのモジュール
import warnings #ワーニング関連のモジュール？
warnings.filterwarnings('ignore') #ワーニングが消える？

%matplotlib inline

'''データの読み込み'''
path = './train.csv' #データの保存場所への相対パスが異なる場合は書き換える
df_train = pd.read_csv(path)

'''目的変数と説明変数を作成しそれぞれ学習用と検証用に分割する'''
# 目的変数
y = df_train['SalePrice']

#説明変数(行列は大文字にするみたい)
X = df_train[['OverallQual', 'YearBuilt', 'TotalBsmtSF', 'GrLivArea']]

# 学習用、検証用データに分割
(X_train, X_test, y_train, y_test) = train_test_split(X, y, test_size = 0.2, random_state = 5)

'''回帰モデルの作成'''
#モジュール読み込み、モデル構築
model = linear_model.LinearRegression()

#モデルの学習
model.fit(X_train, y_train)

#予測値の算出
y_train_pred = model.predict(X_train) #トレーニングデータでの予測
y_test_pred = model.predict(X_test) #検証用データでの予測

'''予測結果の確認'''
#決定係数を表示
print('R2(Train) : % 0.3f' % r2_score(y_train,  y_train_pred))
print('R2(Test) : % 0.3f' % r2_score(y_test, y_test_pred))

#グラフを描画する
plt.scatter(y_train, y_train_pred)
plt.scatter(y_test, y_test_pred)
plt.show()

'''最終検証用データの読み込み'''
path = './test.csv' #データの保存場所への相対パスが異なる場合は書き換える
df_sub = pd.read_csv(path)

# 欠損値を平均で埋める
index = df_sub[df_sub['TotalBsmtSF'].isnull()].index
df_sub['TotalBsmtSF'][index[0]] = df_sub['TotalBsmtSF'].mean()

'''説明変数を作成する'''
#説明変数(行列は大文字にするみたい)
X_sub = df_sub[['OverallQual', 'YearBuilt', 'TotalBsmtSF', 'GrLivArea']]

'''予測値の算出'''
y_sub = model.predict(X_sub)

'''予測結果の提出用ファイルを作成する'''
#IDと予測結果を結合する
df_sub_pred = pd.DataFrame(y_sub).rename(columns={0:'SalePrice'})
df_sub_pred = pd.concat([df_sub['Id'], df_sub_pred['SalePrice']], axis=1)

# CSVファイルの作成 
df_sub_pred.to_csv("Submit.csv", index=False)
```

# "Submit.csv"を提出物を作成してみる。
コンペのページの右の方にあるSubmit Predictionsをクリック。Upload Filesに作成したSubmit.csvをドラッグし、さらに下の方にあるMake Submissionを押すと提出が完了し、評価結果が表示されます。

# 次回の予定
ここまでが、Kaggleにおける初めの一歩（Hello World的なこと）です。私はここまでやって、なんとなく流れが理解出来たような気がします。説明が長くなったので解析プログラムの詳細は[次回](https://qiita.com/1000gou/items/4579de711bed44181057)解説します。