6
13

More than 3 years have passed since last update.

PyCaretでをボストン不動産価格を予測してみた

Posted at

はじめに

先日、リリースされた機械学習ライブラリーPyCaretを使ってみました。
データの特徴量分析や複数のモデルとの性能比較作業が自動化され、これまでのデータサイエンティストの作業時間がだいぶ減ると思います。

今回は、回帰問題のボストン不動産問題をPyCaretでかけてみます。

*前回の記事:
1. PyCaretでワインの品質を分類してみた *

*2. PyCaretでタイタニック生存予想をしてみた *

1. PyCaretのインストール

下記のコードを実行しインストールします。
Anacondaを使っていますが、PyCaret専用の仮想環境を立ち上げてインストールしました。
既存のCondaで管理されてる仮想環境では、エラーが発生する場合があります。(恐らくpipとcondaとの衝突が原因)

pip install pycaret

2.データの取得

PyCaretはいくつのオープンソースデータセットをget_data()で提供しています。
提供しているデータセットの一覧は、下記のリンクで確認可能です。
https://pycaret.org/get-data/#datasets

今回はボストン不動産価格データセットを使います。

from pycaret.datasets import get_data
dataset = get_data('boston')

結果
image.png

Pandasのprofile_report()を使い、データの中身を見てみます。

import pandas_profiling
dataset.profile_report()

結果
image.png

データの説明です。

ボストン不動産のデータサイズは、506行X14列です。
このデータには、説明変数の説明です。

  1. crim: 町ごとの一人当たりの犯罪率
  2. zn: 25,000平方フィートを超える区画に分けられた住宅地の割合。
  3. indus: 町あたりの非小売業の割合(面積比)
  4. chas: Charles River dummy variable (= 1 路が川と接している場合; 0 その他).
  5. nox: 窒素酸化物濃度(1000万分の1)
  6. rm: 住居あたりの部屋の平均数
  7. age: 1940年より前に建てられた所有者が居住するユニットの割合。(データセットの調査年度が1978年)
  8. dis: 5つのボストン雇用センターまでの距離の加重平均
  9. rad: 環状高速道路へのアクセシビリティのインデックス
  10. tax: 10,000ドルあたりの固定資産税率
  11. ptratio: 町別の生徒-教師比率
  12. black: =1000(Bk-0.63)^ 2, ここでBkは、町の黒人の割合。
  13. lstat: 人口の低いステータス(%)

  14. medv(目的変数):所有者が居住する住宅の中央値(\ $ 1000s)

3.データの前処理

sample()を利用し、データセット90%を学習データに、10%をテストデータに分けます。

data = dataset.sample(frac=0.9, random_state=786).reset_index(drop=True)
data_unseen = dataset.drop(data.index).reset_index(drop=True)

print('Data for Modeling: ' + str(data.shape))
print('Unseen Data For Predictions: ' + str(data_unseen.shape))

結果 (10項目まで表記)

Data for Modeling: (455, 14)
Unseen Data For Predictions: (51, 14)

setup()を利用して、データの前処理を行います。その時、目的変数を引数target=medvと指定します。

from pycaret.regression import *
exp_reg101 = setup(data = data, target = 'medv',session_id=12) 

結果 (10項目まで表記)
image.png

4.モデルの比較

compare_models()で、データセットを複数の回帰モデルを用いて分析を行い、その結果を表にまとめます。どの回帰モデルを使うか検討の時、かなり役に立つ機能です。

Pycaretが提供する回帰モデルは10種類以上で、下記のリンクで確認が可能です。

compare_models()

catBoost RegressorのRMSE=3.1399で、R^2=0.859でした。今回は、PyCaretの性能評価ということで、8位のLinear Regression(R^2=0.6739)で話を進めます。

結果
image.png

5.分析モデルの生成

分類モデルを選択して、モデリングを行います。create_model()を使います。
今回は、Linear Regressionモデルを利用します。

lr = create_model('lr')

R-2の平均が0.6739でした。(k-fold法、n_fold=10)
結果
image.png

6.分析モデルのチューニング

tune_modelを用いて、モデルのチューニングも行います。

tuned_lr = tune_model('lr')

結果
image.png

チューニング前のR^2の平均が0.6739、チューニング後の平均が0.6739と改善されませんでした。Linear Regressionの場合、tuned_model()は、あまり期待できないかもしれません。

7.分析モデルの可視化

plot_modelを用いて、分析結果を可視化します。

plot_model(tuned_lr)

結果
image.png

8.分析モデルの評価

evaluate_model()を使い、複数の評価を同時に行うことが可能です。

evaluate_model(lr)

黄色い枠の中のボタンを押すと、各々の評価結果が表示されます。

結果
image.png

9.予測

finalize_model()でモデルをFinalizeした後、predict_model()で予測を行います。
予測の時には、テストデータ(ここでは、unseen_data)を使います。

final_lr = finalize_model(tuned_lr)
unseen_predictions = predict_model(final_lr, data=data_unseen)
unseen_predictions.head()

Label列は、予測の結果を意味します。medv列は正解です。

結果
image.png

10.まとめ

  1. PyCaretで回帰問題を分析を行いました。

10.1 分析に使用したPycaret関数一覧

  1. データの前処理: setup()
  2. モデルの比較: compare_models()
  3. 分析モデルの生成: create_model()
  4. チューニング: tune_model()
  5. 可視化: plot_model()
  6. 評価: evaluate_model()
  7. 予測: finalize_model(), predict_model()

11.参考資料

1.PyCaret Home Page , http://www.pycaret.org/
2.PyCaret Classification, https://pycaret.org/classification/
3. 最速でPyCaretを使ってみた, https://qiita.com/s_fukuzawa/items/5dd40a008dac76595eea
4.PyCaretでワインの品質を分類してみた。 https://qiita.com/kotai2003/items/c8fa7e55230d0fa0cc8e
5. PyCaretでタイタニック生存予想をしてみた。https://qiita.com/kotai2003/items/a377f45ddee9829ed2c5

6
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
13