Pythonで文京区の不動産価格を分析してみる

# まずはお約束（ディスクレーマー）
私は不動産屋でも土建屋でもなく、ただのゆるふわデータサイエンティストです。
ここに書いてあることは「ふーんそんな考え方もあるのかな」くらいの気持ちでお饅頭でも食べながら読んでください。
本記事は何らかの行動を促すものでは全くありません。
あくまでも、数理モデルとPythonプログラミングに関する資料の一環としてご覧ください。

# モチベーション

## 中古マンション買ったんで。。笑
以前から不動産市場の分析はしてみたいと思ってました。
金融モデルと相性がよいだろうし、何より自分が不動産を買ったり売ったりするときに役に立つんじゃないかと。
でも、網羅的に不動産の取引データをとる手段がわからなくて、今までなんとなく敬遠してました。
で、よくわからないまま、先日江東区のマンションを買ってしまったと。。

## データは国土交通省にあった
ということで、マンション買った話を友人としている中で、適当にぐぐってたら、なんと国土交通省がデータをきれいにまとめてダウンロードできるようにしてくれていることが判明しました。
https://www.land.mlit.go.jp/webland/download.html
APIでJSON形式のデータを落とせる方法もあるようですが、なんやうまくいかなかったので、とりあえずcsvで文京区のデータを落として、文京区不動産マーケットの分析をしてみました。

# 不動産市場と証券市場の違い
不動産と株式市場のような証券市場は共通点も多いですが、相違点もあります。
たとえば、不動産はデータの個別性が高く、たとえばトヨタといえば7203と叩けば日々の株価も出来高、ファンダメンタルズも簡単にとれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409544/a11da232-9fb5-7877-6e90-eb625ff72915.png)
一方、**マンションの個別銘柄は、当然ながら日々取引が約定しているわけでもなく（低い流動性）、取引価格や出来高のデータが非常に少なく、間取りや面積、最寄駅などのファンダメンタルズも必ずしも全てのデータに綺麗に存在しているわけではありません。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409544/cddbd081-793d-1529-6d86-4ef6223f934a.png)
（上図はライオンズマンション千石の過去の中古販売履歴の一部抜粋）
したがって、個別銘柄そのものというより、地区ごとや、（地区, 年）ごとなど、ある程度集約することで、データの不足を補い、ノイズを軽減するといった工夫を適宜行ったほうがよさそうです。

# 数理モデル

## 物件価格を地区ごと、年ごとに中央値をとって（地区, 年）ブロック化する
もちろん、もっと細かくみようとすれば間取りごととか、面積ごととか、いくらでもブロックを細かくすることはできますが、やりすぎるとブロック内のデータの数が少なくなって信ぴょう性が落ちるので、このくらいにしておきます。
もし、パラメーターをもっと増やして特定のパラメーターについて価格を推定したければ、回帰モデル（線形モデル、非線形モデル、etc）を使うことが考えられますが、そのへんはネットで検索すれば既に先行事例がいくつかあるようなので、今回はそこは深掘りません。

```math
P_t^I = {\rm{Median}}_{i \in I}\{ p_t^i \}
```

ここで、ブロックは（地区I, 時点t）のペア、Pはブロック価格中央値、tは時刻（年）、pはブロック内の個別物件価格、iは地区内の個別物件名を指します。
また、平均値でなく中央値をとるのは、外れ値の影響を軽減するためです。

## リターンとボラティリティ、ディスパージョン
リターンとボラティリティ、ディスパージョンは金融モデルならではの概念です。
まず、リターンは以下の通り立式されます。

```math
R_t^I = \frac{P_t^I}{P_{t-1}^I} - 1 \\
r_t^i = \frac{p_t^i}{p_{t-1}^i} - 1 \\
```

ここで、Rやrはブロックまたは個別物件価格のリターン、すなわち変化率を指します。割合なので、％換算したければ100倍します。

次に、ボラティリティはリターンの時系列方向の標準偏差です。

```math
\Sigma_{TS}^i = \sqrt{{\rm{Var}}_t[R_t^I]} \\
\sigma_{TS}^i = \sqrt{{\rm{Var}}_t[r_t^i]}
```

ここで、Σやσはブロックまたは個別物件価格のボラティリティ、Var_xはx方向の分散を指します。TSはTime Series（時系列）の略です。
ボラティリティが小さいということは、値上がりや値下がりが穏やかで、価格が安定しているということ、逆にボラティリティが大きいということは、値上がりや値下がりが激しく、価格が不安定ということです。
**不動産業界ではしばしば「資産価値が下がりにくい地域」などという表現を散見しますが、実際それはどの程度なのか？一年で±5％？10％？はたまた20％？それを見ていきたいと思います。**

最後に、ディスパージョンは価格やリターンの空間方向の標準偏差です。

```math
\tau_t^I = \sqrt{{\rm{Var}}_{i \in I}[p_t^i]} \\
\sigma_t^I = \sqrt{{\rm{Var}}_{i \in I}[r_t^i]} \\
```

たとえば（文京区, 2020）の価格ディスパージョンτとは、2020年における文京区内の個別物件価格の広がり（平均に対する1標準偏差）であり、リターンディスパージョンσとは同ブロックにおける個別物件価格リターンの広がりを指します。

## 物件価格を説明するファクター・モデル
物件価格は、およそ以下の変数が重要なファクターになってくるものと予想されます。

- 建築年数
- 改装されたか否か（ダミー変数）
- 面積
- 間取り（ダミー変数）
- 最寄駅（ダミー変数）

```math
P = f(建築年数, \cdots, 最寄駅)
```

南向きとかどうかなども大事とは思いますが、国土交通省のデータには残念ながら収録されていませんでした。
今回は、ランダムフォレスト回帰という決定木に基づく回帰モデルを用いてファクターモデルを構築しました。

# 実際にやってみた。
今回は、**文京区内の50㎡〜70㎡の中古マンション**のデータを対象にしました。治安が良く学力も高い文京区内でお子様を育てたいファミリーを想定してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409544/530ef458-112e-4701-3f47-1945065e5796.png)

## 文京区内の各地区における物件価格の中央値の推移
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409544/c8a33259-37cb-0616-ce11-51ddc1a26a8e.png)
左は全地区にわたりプロットしていて、ちょっとごちゃついているので、右に後楽と湯島だけピックアップしてみました。
不動産屋のサイトでもこの手のグラフはよく見ますが、2005年からという超長期のグラフはなかなか見ないので、リーマンショックや民主党政権時（未曾有の円高・株安）のときにどうだったかも確認することができるので、国土交通省のデータは有益ですね。

## ボラティリティ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409544/f4eddbcb-6f22-3d5a-ee50-a88d44d94545.png)
ボラティリティが小さいのは、小石川や千駄木、本郷など、年率10％〜15％程度で、逆にボラティリティが大きいのは、西片や大塚など、年率45％程度の地区もあるようですが、さすがに異常値くさいので、次点の水道や目白大、小日向、音羽などの年率25％〜30％程度。
**さて、これは皆さんの想像通りの水準でしょうか？**

不動産価格は、たしかに株などと比べれば相対的に安定的でしょうが（株の個別銘柄のボラティリティは年率30％〜40％程度）、比較的安定している地区であっても年率10％〜15％ですから、リターンの平均を保守的に0％（上りも下りもしない）と見積もったとして、**4000万円の物件が、翌年4400万円（＋10％）になることもあれば、逆に3600万円（▲10％）になることくらいザラだということです。**
実際にデータでみて、「安定的な資産性」がどの程度安定しているのか定量的に理解しておくことは非常に重要だと思います。

ボラティリティが小さい5地区と大きい5地区の各ブロック価格中央値の推移はこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409544/d0165395-386b-cc3c-bedc-14ab6742036f.png)
ビジュアル的にも、安定／不安定の見分けがつきますね。

## ボラティリティと物件価格、リターンの関係性
物件価格の安定性は、物件価格そのものの水準や平均リターン（価格変動によるキャピタルゲイン）とどのような関係があるのでしょうか。
地区ごとに、ボラティリティ、平均ブロック価格（時系列方向の平均）および平均リターン（〃）を計算し、散布図にプロットしてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409544/9295cfd6-76fd-77a2-ecc6-bc1142c8aafb.png)

左は、横軸にボラティリティ、縦軸に平均ブロック価格をプロットしていますが、ボラティリティが高いほど、平均ブロック価格が安いこと（右肩下がり）が確認できます。言い換えれば、**価格が安定していると、高値で買われる傾向にある**ということですね。なんとなく、そんな気がしますね。

では、価格が安定していると、物件価格はさらに上がるのか否か？それが右図で、横軸にボラティリティ、縦軸に平均リターンをプロットしています。ボラティリティが高いほど、平均リターンが高いこと（右肩上がり）が確認できます。言い換えれば、**ハイリスク・ハイリターンの傾向にある**ということですね。
この点は、期間にもよりますが、株の場合とは少し違うようです。株の世界では、ハイリスク・ハイリターンではなく、ハイリスク・ローリターンであるという「低ボラティリティ効果」という現象が確認されていますが、少なくとも2005年から2021年まで17年間における文京区の不動産マーケットでは、低ボラティリティ効果は確認されなかった、ということになります。

（参考：ロベコ「低ボラティリティ効果の存在を1873年まで遡る」）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409544/93bba0f2-3334-9771-3788-9d11ffffe0b1.png)
https://www.robeco.com/jp/insights/2016/02/low-volatility-evidence-dating-back-to-1873.html

## 物件価格の分布
2020年における文京区内の地区ごとの物件価格の分布を計算しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409544/507a6bcb-a974-ccc8-e430-b530635d5d56.png)
目白台は、文京区内では価格の中央値が安めですが、ディスパージョンはそこそこ大きい（文京区内全体でも高い部類の物件もある）ことなどが確認できます。
**とくに、千石は物件価格のディスパージョンが非常に大きいことが見てとれます。**いったい、千石地区内で何が起きているのでしょうか。詳しく調べてみましょう。

## 千石地区内の物件価格を決定づけるもの
千石地区内のデータについてランダムフォレスト回帰を実施したところ、それぞれの変数の変数重要度は以下の通りでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409544/5d0f12d0-e4f6-36f7-1480-58dd7aad735c.png)
**圧倒的に建築年数が重要なようです。**次点で面積、最寄りが新大塚であるかないか、などによって、千石地区内の物件価格の高低は決まるようです。

とはいえ、建築年数や面積が重要なのは、千石に限らずどこも同じであるはず。では次に、文京区内全体のデータに対して同様にランダムフォレスト回帰を実施しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409544/c0e981b2-974e-1be2-43a2-bb5dcae9b89a.png)
やはり、建築年数、面積が最も重要である点には変わりません。

そこで、千石モデルと、文京区内全体モデルの変数重要度の差をとってみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409544/02affd2f-9f70-5a6b-0810-ccffdb503204.png)
左は、それぞれの千石モデル、文京区内全体モデル、千石モデルー文京区内モデルの差をプロットし、右には、差だけを取り出して値をソートしました。
これを見ると、千石地区内では、文京区内全体よりもさらに建築年数の重要度が高く、逆に面積の重要度が低いことがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409544/5ddb3601-c143-0ff9-8712-838b86d31160.png)
2020年の地区ごとの建築年齢のディスパージョンをみてみると、千石は建築年齢自体の広がりが大きい（文京区の地区内で3番目に大きい）ことがわかります。要は、古い物件もあれば新しい物件もある、その分布の散らばりが大きいということですね。

以上から、千石地区は、文京区内の他の地区よりも築年数がさらに重視され、かつ、築年数の分布のバラつきが大きいことにより、千石地区の物件価格が相対的に大きく散らばっているということになります。

最後はかなりスペシフィックな話になりましたが、ここまで深く分析できるのも、定性的な議論の限界を超えた定量モデルの利点の１つですね！

# まとめ

- 文京区内の50㎡〜70㎡の中古マンションについて、様々な観点から市場データ分析を行いました。
- 資産価値が安定的だといわれる文京区であっても、物件価格の変動は最低でも年間±10％〜15％は見積もっておいたほうがよさそうなことがわかりました。
- 2005年〜2021年の17年間、文京区においては、物件価格の変動が激しいと物件価格の水準自体が安い一方、ハイリスク・ハイリターンが成立していたことがわかりました。
- 文京区の中でも千石は物件価格のばらつきが多く（安い物件も非常に高い物件もある）、その原因は、千石は文京区内でも特に築年数が重視され、かつ、千石にある物件の築年数自体のばらつきが大きいことであることがわかりました。

# Pythonコード
Google Colabで作ったので適宜ご覧ください。

https://colab.research.google.com/drive/1UJLziQ_Tgc_AMTIi_2fJI16yNPa3DZmF?usp=sharing