機械学習で家の値段の決定要因を調べてみた
こんにちは。
今回は、機械学習プログラムを用いて重回帰分析を実際にやってみました。
こういうのって一度それなりのプログラム書けばあとはおんなじようなプログラムでマイナーチェンジで済むので財産としてローカルに残しておく次第です。
さて、今回はKaggleにあるDatasetsのうちのこちらを用いました
CSVファイルをダウンロードして、いざスタート。
その都度プログラムを確認したかったので今回はJupyter Notebookを使って一行一行確認しながらやっていきました。
ひとまずデータの中身を確認しましょう
import pandas as pd house = pd.read_csv('train.csv' ) house.head()
すると、
こんな具合でどんなデータが揃ってるか見れます。
次に、こんな便利な関数があることも記しておきます。
house.describe()
なんとこの一言だけで平均、最大最小、標準偏差などなど一気に出してくれます。
とりあえず必要なモジュールをインポート
import pandas as pd import matplotlib.pyplot as plt from sklearn.cross_validation import train_test_split from sklearn import linear_model from sklearn.metrics import r2_score import warnings warnings.filterwarnings('ignore') %matplotlib inline
データを訓練用と検証用にわける
path = 'train.csv' house= pd.read_csv(path) # 目的変数と説明変数を作成 y = house['SalePrice'] X = house[['OverallQual', 'YearBuilt', 'TotalBsmtSF', 'GrLivArea']] # 学習用、検証用データに分割 (X_train, X_test, y_train, y_test) = train_test_split(X, y, test_size = 0.2, random_state = 5)
今回のデータでは、全部の項目を上げると煩わしいので
目的変数はSalePriceとして、
説明変数は
'OverallQual':Overall material and finish quality
'YearBuilt' :Original construction date
'GarageCars':Size of garage in car capacity
'GrLivArea':Above grade (ground) living area square feet
の4要素を説明変数としてみて、どれが一番家の値段を引き上げる要因なのかを検討してみました。
#回帰モデル model = linear_model.LinearRegression() #モデルの学習 model.fit(X_train, y_train)
fit関数でサクッと学習です
ではどの要素が相関が強いかみてみましょう
print(pd.DataFrame({"Name":['OverallQual', 'YearBuilt', 'GarageCars', 'GrLivArea'],"Coefficients":model.coef_}).sort_values(by = 'Coefficients').round(4))
この表示結果がこちら
どうやらOverallQual:Overall material and finish qualityが主要因で、今回選択した中だとGrLivArea:Above grade (ground) living area square feetが家の値段引き上げ要因にはもっともならないという結論に至りました
ちなみにバリデーションデータとの比較を最後にきちっとやって
#予測値の算出 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()
トレーニングデータと検証用データでそんなに相違はないようです
こんな感じで重回帰分析をぶん回して今後も遊んでいこうと思います!