SUUMOにて割安賃料物件を見つけよう_モデル作成編

![suumo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664262/abb34c4e-889e-71ee-7a36-257fedaa8146.png)
 # 概要
SUUMOにて割安な賃料物件を探しました。

####  調査の流れ
調査は以下の3つに分割しました。
1. [データ基盤構築編](https://qiita.com/delta_K/items/9b8b09d44e352c728f90)
2. [モデル作成編](https://qiita.com/delta_K/items/ed61b64048cfb86083b5)(今回の記事)
3. [アプリ作成編](https://qiita.com/delta_K/items/2579d99966d3d7bc7df2)

# モデル作成

### 使用データ
1. SUUMOからスクレイピングしたデータ
2. [地価公示データ](https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-L01-v3_1.html)
3. [駅別乗降客数](https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-S12-2021.html)

### データ探索
被説明変数である賃料と、説明変数である建物種別、築年数、総戸数、階建て、公示地価、駅関連の情報、間取り、専有面積、階数のデータを探索する。
(説明数変数についてすべて記事にすると長くなってしまうので代表的なものに絞った。)
(同様の理由で今回探索するのは三軒茶屋のデータである。)
#### 賃料
![rent.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664262/8eab7925-2854-0418-3837-ee8e1cff54c9.png)

賃料の分布は右裾の長いものであった。
変動係数を計算すると0.491であった。
そこで分布の散らばりを抑えるためにlog(賃料/専有面積)という変換を施す。

#### log(賃料/専有面積)
![log_rent_s.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664262/9bffb0e2-11a9-a24b-c604-37be4172679a.png)
log(賃料/専有面積)の分布の形状は正規分布のようになった。
変動係数を計算すると0.0232となり、賃料に比べるとデータの散らばりを小さくすることができた。
今回のモデルの被説明変数はlog(賃料/専有面積)(以下log_平米単価と表記)に設定する。

#### 建物種別
![kind.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664262/89d5888a-b4ec-aea0-2166-0679f2135f7d.png)
マンションとアパートでlog_平米単価の分布を比較した。
マンションは8.3あたりに、アパートは8.1あたりに集中しておりマンションの方が平均して賃料が高いことということがわかる。

#### 築年数
![built_on.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664262/d822c4cf-34bf-0aff-70b0-09a8651ea160.png)
横軸が築年数で、縦軸をlog_平米単価として散布図を描画した。
見ての通り、右肩下がりであり築年数が大きいほどlog_平米単価は下がるということがわかる。
相関係数を計算すると-0.58であった。


#### 総戸数
![total_rooms.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664262/b34e9adb-cf33-a864-9bda-813b820858b7.png)

横軸が総戸数で、縦軸をlog_平米単価として散布図を描画した。
外れ値があり、両者の関係が見えづらくなっていたので総戸数<100という制約を加えている。
傾きは小さいが、若干右肩上がりになっている。(相関係数は0.381)
建物の規模が大きくなれば部屋の大きさも比例して大きくなり、その分賃料が上がるのは自然である。

#### 階建て
![stoires_high.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664262/a6b6886c-d724-52d9-ab0a-43304ec7f9ac.png)

横軸が階建てで、横軸をlog_平米単価として散布図を描画した。
こちらも総戸数と同様の理由で若干賃料と比例することが推測できる。(相関係数は0.265)

#### 公示地価
![advertial_price.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664262/d1e11b76-26a5-b52a-23e2-ff850f4336c0.png)

町村以前の住所ごとの公示地価とlog_平米単価の平均を求めた。
横軸が公示地価で、横軸をlog_平米単価として散布図を描画した。
両者は右方上がりの関係であり、公示地価は賃料に影響を与えることがわかる。
土地の価格が高ければその上に立つ建物の賃料が上がるのも自然である。
相関係数は0.534であった。

#### 最寄り駅の一日の平均乗客数
![number_rider.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664262/983dfc86-63c6-6324-3f04-03a15f581c21.png)
横軸が最寄り駅の一日の平均乗客数で、縦軸をlog_平米単価として散布図を描画した。
図を見るとばらつきが大きく、一日の平均乗客数と賃料とはあまり関係ないように見える。
相関係数は0.062であった。


#### 最寄り駅と新宿駅との距離
![shinjyuku.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664262/974632b0-5ce9-03f7-9736-16c52c0b7efa.png)
横軸が最寄り駅と新宿駅との距離で、縦軸をlog_平米単価として散布図を描画した。
図を見ると最寄り駅の一日の平均乗客数と同様に、ばらつきが大きく賃料とはあまり関係ないように見える。
相関係数は-0.128であった。


#### 間取り
![layout.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664262/d241f5f5-8cc5-0c9c-1828-5882c0bca778.png)

間取りごとの平米単価賃料を棒グラフで可視化した。
グラフから部屋数に応じて平米単価賃料は下がる傾向が読み取れる。特にワンルームとベッドルームが4つ以上のものを比較すると明らかである。

#### 階数
![floor.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664262/bf7d5761-d484-2d0c-de10-5f99d489e79a.png)
横軸が階数で、縦軸をlog_平米単価として散布図を描画した。
ばらつきが大きく、あまり両者に関係性は見受けられない。
相関係数は0.169であった。


### 予測

- 使用モデル
    - catboost
- 全データ数
    - 22339件

- 学習データ
    - 14296件
- 検証データ
    - 4468件
- テストデータ
    - 3575件


#### 特徴量重要度
![feature_importance.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664262/2c2a9b2b-97c2-a1b6-d114-2735070e3c5e.png)

散布図や相関係数から被説明変数との強い関係が読み取れるものが上位にランクインしていたので納得のできるものとなった。

#### 学習曲線
![learning_curv.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664262/662e45f5-f877-e9dd-9040-403e8fcb6919.png)

イテレーション数に応じて学習データと検証データでの誤差が縮まっているので過学習は起こしていないと考えられる。

#### テストデータによるモデル評価
- MAPE
    - 0.0036
        - ばらつきが小さくなるように変換した影響もあると思うが、かなり誤差の小さいモデルが作成できた。

 - 決定係数
    - 0.92
        - 説明変数が57個ある影響もあると思うが、誤差も小さいので説明力の高いモデルが作成できた。


#### 被説明変数の変換を解いて再度テストデータによるモデル評価
- MAPE
    - 0.029
        - 変換前の10倍となっているが依然高い精度を出した。

 - 決定係数
    - 0.98
        - MAPE同様に依然高い精度を出した。


 - 誤差率のプロット

![残差プロット.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664262/f54822a7-65ad-98e4-3e4a-c623fa67f970.png)

- 予測値が大きくになるにつれて、誤差率は減少しているように見える。
    - 特徴量と誤差率が負の相関関係にある可能性がある。

- 誤差率が0.029以下である割合：82%

 # 次回の記事
 モデルの予測根拠を可視化するアプリを作成します。