🤖

不動産データと考える回帰分析

に公開

こんにちは。スマサテでデータサイエンティストをしている大村です。
生成AIの台頭により夢と虚構が氾濫する昨今ですが、今日はあえて古典的な統計的モデリングについて考えてみたいと思います。

スマサテには賃貸物件の査定機能が備わっており、裏側にはさまざまな統計的な処理が組み合わされています。近年高度かつ複雑な機械学習モデルが日進月歩で登場していますが、ロジックの高い解釈性・透明性が求められるプロダクトにおいては古典的な統計的手法も重宝されます。今回は賃貸不動産のデータを例にとって回帰分析について考えてみます。

とりあえず重回帰、をやってみる

家賃を目的変数、物件の幾つかの特性を説明変数とした回帰分析をしてみましょう。
とあるエリアの賃貸物件データを使います。以下のようなデータです。(今回は簡単のために最低限の説明変数を使用します)

     rent   area  age  floor_number
1  102000  25.75   10           5.0
2   90000  24.91   14           5.0
3   83500  23.74   14           1.0
4   85000  24.82   12           2.0
5   84000  24.82   12           3.0

変数の定義は以下のとおりです。

  • rent : 賃料
  • area : 専有面積
  • age : 築年数
  • floor_number : 階数

早速モデリングしてみましょう。

features_1 = ["area", "age", "floor_number"]
target_1 = "rent"

y = df[target_1]
X = df[features_1]
X = sm.add_constant(X)
model_1 = sm.OLS(y, X).fit()
print(model_1.summary())

結果はこんな感じになりました。
係数を見るとそれっぽいし、ピー値?も小さいし、いい感じですね!
他にも何やらいろいろ書いてあるけどまあ大丈夫でしょう!

                            OLS Regression Results                            
==============================================================================
Dep. Variable:                   rent   R-squared:                       0.811
Model:                            OLS   Adj. R-squared:                  0.811
Method:                 Least Squares   F-statistic:                 2.288e+04
Date:                             xxx   Prob (F-statistic):               0.00
Time:                             xxx   Log-Likelihood:            -1.7494e+05
No. Observations:                 xxx   AIC:                         3.499e+05
Df Residuals:                     xxx   BIC:                         3.499e+05
Df Model:                           3                                         
Covariance Type:            nonrobust                                         
================================================================================
                   coef    std err          t      P>|t|      [0.025      0.975]
--------------------------------------------------------------------------------
const         3.158e+04    499.850     63.180      0.000    3.06e+04    3.26e+04
area          3026.6616     14.811    204.354      0.000    2997.631    3055.693
age           -970.1366     10.317    -94.035      0.000    -990.359    -949.915
floor_number  1999.7885     43.837     45.619      0.000    1913.864    2085.713
==============================================================================
Omnibus:                     3826.173   Durbin-Watson:                   1.209
Prob(Omnibus):                  0.000   Jarque-Bera (JB):            19941.641
Skew:                           1.059   Prob(JB):                         0.00
Kurtosis:                       8.050   Cond. No.                         143.
==============================================================================

...とはせずに、以降では理論的な背景を復習しつつ、モデルの良し悪しについて検討してみたいと思います。

重回帰分析における仮定と性質

回帰分析にはどのような仮定が設定されているのかを整理します。
モデルを数式で表すと以下のようになります。確率変数は目的変数(家賃)y_iと誤差項\epsilon_iです。インデックスiはデータ上のレコードを、インデックスkは説明変数に振られた番号と考えてください。

y_i = \sum_{k=1}^p \beta_k x_{i,k} + \epsilon_i

ただし、1つ目の説明変数については、常にx_{1, i} = 1とします。これは切片に対応する係数を推定するために必要なダミー変数です。これを含めない場合は、暗にすべての説明変数が0であるときに目的変数も0となることを仮定していることになります。
先ほどの

X = sm.add_constant(X)

は用意した変数群に定数項を追加してモデリングしますよ、という意味になります。

ベクトル、行列を使った表記

\mathbf{y} = \begin{pmatrix} y_1 \\ y_2 \\ \vdots \\ y_n \end{pmatrix}, \quad \mathbf{X} = \begin{pmatrix} x_{1,1} & x_{1,2} & \cdots & x_{1,p} \\ x_{2,1} & x_{2,2} & \cdots & x_{2,p} \\ \vdots & \vdots & \ddots & \vdots \\ x_{n,1} & x_{n,2} & \cdots & x_{n,p} \end{pmatrix}, \quad \boldsymbol{\beta} = \begin{pmatrix} \beta_1 \\ \beta_2 \\ \vdots \\ \beta_p \end{pmatrix}, \quad \boldsymbol{\epsilon} = \begin{pmatrix} \epsilon_1 \\ \epsilon_2 \\ \vdots \\ \epsilon_n \end{pmatrix}

を導入すれば先ほどの式は

\mathbf{y} = \mathbf{X}\boldsymbol{\beta} + \boldsymbol{\epsilon}

と書くことができます。

さて、回帰分析によって効果的にモデリングを行うには、いくつかの仮定を満たす必要があるらしい...という話は誰もが聞いたことのある話でしょう。古典的名著[1]を参考に整理してみます。

  • [A0] 線形関係 : \mathbf{y} = \mathbf{X}\boldsymbol{\beta} + \boldsymbol{\epsilon}
  • [A1] フルランク性 : \mathrm{rank}(\mathbf{X}) = p
  • [A2] 誤差項の不偏性 : E(\boldsymbol{\epsilon}) = \boldsymbol{0}
  • [A3] 誤差項の等分散性+無相関性 : V(\boldsymbol{\epsilon}) = \sigma^2 \boldsymbol{I}

あれ、誤差項って正規分布に従うんじゃなかっけ...?という声が飛んできそうですが、詳しくは後述します。

これらの仮定は「すべて成り立っていないとすべてがおしまい!」というものではありません。それぞれの仮定が回帰分析の結果(特に回帰係数)のさまざまな良い性質と対応しています。現実世界のデータは往々にして綺麗に仮定を満たしてくれないことばかりなので、それぞれの仮定がどの性質と結びついていて、仮定が崩れたときに何が起きてしまうのか?について理解を深める必要があります。

回帰分析の仮定と性質

それぞれの仮定がどんな意味を持つのかについて、1つずつ考えてみましょう。

[A0] 線形関係 :

\mathbf{Y} = \mathbf{X}\boldsymbol{\beta} + \boldsymbol{\epsilon}

回帰分析(= 回帰係数の推定、誤差分析...)において、前提となる変数間の構造を仮定するものです。線形関係とは、換言すれば「説明変数(専有面積や築年数など)が1単位変化したときの目的変数(賃料)の変化量が一定」であることを意味します。
この仮定は現実的なデータではなかなか成り立たない(非線形的な構造が含まれる)わけですが、結果の解釈性や手法の安定性などの観点でシンプルな構造を仮定することにも利点があります。発展としては目的変数・説明変数を変数変換をしたり、スプライン曲線を使ったり、はたまたOLSの枠組みを超えてGLMや階層ベイズに拡張したり...と色々な道が考えられます。

[A1] フルランク性 :

\mathrm{rank}(\mathbf{X}) = p

いわゆる多重線形性の問題です。回帰係数を一意に(現実的には安定的に)算出するための仮定、と解釈できます。

まず前提として、回帰分析では最小二乗推定量によって回帰係数を推定します。

\hat{\boldsymbol{\beta}} = (\mathbf{X}^\top \mathbf{X})^{-1} \mathbf{X}^\top \mathbf{y}

\mathbf{y}は目的変数(家賃)のデータ、\mathbf{X}は説明変数(専有面積や築年数など)のデータなので、投入されたデータから線形的な演算のみで機械的に算出できることがわかりますね。

問題となるのは逆行列の計算が混ざっていることです。
仮に\mathbf{X}がフルランクでない、つまり何か2つの変数が定数倍を除いて全く同じ場合逆行列が計算できず、最小自乗推定量が一意に計算できません。
現実のデータでは、2つの変数が定数倍を除いて全く同じということは(意図的に仕込まない限り)ほぼありませんが、強く相関している可能性に注意が必要です。この場合でも計算自体はできてしまうものの、計算結果が不安定になります(より詳細に言えば、算出過程で現れる割り算の計算において、分母が0に近い値となって結果が不安定になります)。結果、データが少し変わるだけで回帰係数の推定値が大きくブレることになり、結果の信頼性が疑わしくなってしまうのです。

多重共線性やVIFの話題は多くの記事で頻繁に議論されるところなので、それらに譲ってこの記事ではあえてこれ以上は深掘りしないこととします。

[A2] 誤差項の不偏性

E(\boldsymbol{\epsilon}) = \boldsymbol{0}

誤差項の不偏性は推定された回帰係数の不偏性を保証するために必要な仮定です。
この仮定が満たされないとき、得られた回帰係数が本当に欲しかった値でない懸念があります。

先ほど登場した最小自乗推定量の期待値を計算してみると

% 最小二乗推定量の不偏性の証明 \begin{align*} E(\hat{\boldsymbol{\beta}}) &= (\mathbf{X}^\top \mathbf{X})^{-1} \mathbf{X}^\top E\left[\mathbf{y}\right] \\ &= (\mathbf{X}^\top \mathbf{X})^{-1} \mathbf{X}^\top (\mathbf{X}\boldsymbol{\beta} + E(\boldsymbol{\epsilon})) \\ &= \boldsymbol{\beta} + (\mathbf{X}^\top \mathbf{X})^{-1} \mathbf{X}^\top E(\boldsymbol{\epsilon}) \end{align*}

となり、[A2]が満たされるならE(\hat{\boldsymbol{\beta}}) = \boldsymbol{\beta}となります。
大雑把に言えば「最小自乗推定量で回帰係数を推定すると、上下にブレることはあれど平均的には求めたかった係数を当てにいけている!」と解釈できます。逆にこの仮定が成り立たない場合、求めたかった回帰係数よりも上下に偏った状態で推定されてしまうことになります。

この仮定はどのようなときに敗れてしまう恐れがあるでしょうか?一例として挙げられるのは、重要なのにモデルに含めていない変数があるときです。
今、本当はモデルに含めるべきだったのに含めなかった説明変数Zと対応する回帰係数\gammaが存在し、これを含めれば誤差項の不偏性が成り立つと仮定します。するとモデルは以下のように書けます。

\begin{align*} \mathbf{Y} &= \mathbf{X}\boldsymbol{\beta} + \boldsymbol{\epsilon} \\ &= \mathbf{X}\boldsymbol{\beta} + \mathbf{Z}\boldsymbol{\gamma} + \boldsymbol{\epsilon}^\prime \end{align*}

ただしE(\boldsymbol{\epsilon^\prime}) = \boldsymbol{0}です

この状況下で不偏性を調べると

% 最小二乗推定量の不偏性の証明 \begin{align*} E(\hat{\boldsymbol{\beta}}) &= (\mathbf{X}^\top \mathbf{X})^{-1} \mathbf{X}^\top E\left[\mathbf{y}\right] \\ &= (\mathbf{X}^\top \mathbf{X})^{-1} \mathbf{X}^\top (\mathbf{X}\boldsymbol{\beta} + \mathbf{Z}\boldsymbol{\gamma} + E(\boldsymbol{\epsilon^\prime})) \\ &= \boldsymbol{\beta} + (\mathbf{X}^\top \mathbf{X})^{-1} \mathbf{X}^\top \boldsymbol{Z} \boldsymbol{\gamma} \end{align*}

となり、最小自乗推定量の平均値は求めたい係数から(\mathbf{X}^\top \mathbf{X})^{-1} \mathbf{X}^\top \boldsymbol{Z} \boldsymbol{\gamma}だけずれてしまうことになります。これは欠落変数バイアス(Omitted-variable bias)と呼ばれ、その正負はモデルに含めていた変数と欠落した変数の相関関係によって決定されます。

上記では誤差項の不偏性が破れる例として欠落変数が存在する場合を挙げましたが、そもそも線形的な関係が実態に則していない場合などにおいても不偏性が破れる懸念があります。

[A3] 誤差項の等分散性+無相関性

V(\boldsymbol{\epsilon}) = \sigma^2 \boldsymbol{I}

誤差項の等分散性+無相関性は([A2]と合わせて)最小自乗推定量がBLUE(最良線形不偏推定量: best linear unbiased setimator)であることを保証するための仮定です。本来、回帰係数の推定量はさまざまな設計方針がありうるわけですが、その中で最小自乗推定量が線形不偏推定量の枠組みでベストである(=分散が小さい)ことが保証されます。

正規分布の仮定は何に必要?

これまでの議論は誤差項が正規分布に従うという仮定抜きで成立する内容でした。
誤差項が正規分布に従う仮定、すなわち([A2][A3]を包含して)

\boldsymbol{\epsilon} \sim N(\boldsymbol{0}, \sigma^2 \mathbf{I})

なる仮定を加えると、最小自乗推定量に対してBLUEよりも強い性質(最尤推定量との一致など)が保証されます。また、p値、信頼区間、分散分析といった要素は正規分布を前提としているため、これらのアウトプットが必要な場合にも必要な仮定になります。

回帰分析の結果を見直してみる

理論部分の概略を振り返ったところで、先ほどの結果をもう一度見てみます。

                            OLS Regression Results                            
==============================================================================
Dep. Variable:                   rent   R-squared:                       0.811
Model:                            OLS   Adj. R-squared:                  0.811
Method:                 Least Squares   F-statistic:                 2.288e+04
Date:                             xxx   Prob (F-statistic):               0.00
Time:                             xxx   Log-Likelihood:            -1.7494e+05
No. Observations:                 xxx   AIC:                         3.499e+05
Df Residuals:                     xxx   BIC:                         3.499e+05
Df Model:                           3                                         
Covariance Type:            nonrobust                                         
================================================================================
                   coef    std err          t      P>|t|      [0.025      0.975]
--------------------------------------------------------------------------------
const         3.158e+04    499.850     63.180      0.000    3.06e+04    3.26e+04
area          3026.6616     14.811    204.354      0.000    2997.631    3055.693
age           -970.1366     10.317    -94.035      0.000    -990.359    -949.915
floor_number  1999.7885     43.837     45.619      0.000    1913.864    2085.713
==============================================================================
Omnibus:                     3826.173   Durbin-Watson:                   1.209
Prob(Omnibus):                  0.000   Jarque-Bera (JB):            19941.641
Skew:                           1.059   Prob(JB):                         0.00
Kurtosis:                       8.050   Cond. No.                         143.
==============================================================================

この出力結果はざっくり

  • 1段目左 : モデルの概要に関する情報
  • 1段目右 : モデルの適合度に関する情報
  • 2段目 : 回帰係数に関する情報
  • 3段目 : 誤差分析やその他診断に関する情報

となっています。
いろいろとみるべきところはありますが、今回は[A2]誤差項の不偏性に関連するところに注目してみると...

  • Skew: 1.093 → 誤差分布が左に偏っていそう
  • Prob(Omnibus), Prob(JB): 0.000 → 誤差分布は正規分布ではない分布になっていそう

といったことがわかります。具体的に誤差プロットを見てみると
alt text

全体としてはややマイナス側に偏っています。予測値別にみると、低賃料帯ではやや高めに、それ以外では若干低めにずれが生じており、誤差項の不偏性および等分散性に破れが懸念されます。前述のとおり、欠損変数が存在や、そもそも線形的なモデルが適当でない場合などが要因として考えられます。

モデル構造を再検討してみる

ここまで見てきたモデルは目的変数(賃料)に対して説明変数が線形に作用することを仮定していました。これは各々の説明変数が1単位変化する時の目的変数の変化量が一定であることを意味します。一方、専有面積については乗法的な関係性を仮定した方が良い可能性があります。実際の賃料設定で平米単価をベースとして平米単価 × 専有面積として賃料が決定されると仮定することもできるためです。実際、不動産分野のヘドニック分析においては対数変換による回帰分析(または平米単価を目的変数として対数変換)を行うケースは非常に多いです[2] [3]

そこで、以下のような対数変換モデルを考えます。
一例として、賃料yと専有面積x_{2}を対数変換してみました。

\log{y} = \beta_1 + \beta_2 \log{x_{ 2}} + \beta_3 x_{ 3} + \beta_4 x_{ 4} + \epsilon

両辺のexpを取って変形すると

y = e^{\beta_1} \cdot x_{ 2}^{\beta_2} \cdot e^{\beta_3 x_{ 3}} \cdot e^{\beta_4 x_{ 4}} \cdot e^{\epsilon}

となります。このモデルでは以下のような構造を仮定したことになります。

  • x_{2}(専有面積)は 乗法的 に関係し、\beta_2 = 0.5なら面積が2倍→家賃は\sqrt{2} \approx 1.41倍。\beta_2 = 1の時、家賃と専有面積は比例関係となります。
  • x_{3}, x_{4}(築年数、階数)は 指数関数的 に関係し、\beta_3 = -0.01なら築年数が+1年→家賃はe^{-0.01} \approx 0.99倍。

築年数や階数が指数関数的関係であるという仮説は議論の余地がありそうですが、専有面積については加法的な関係よりも合理性がありそうです。
この構造でモデリングした結果も見てみましょう。

                            OLS Regression Results                            
==============================================================================
Dep. Variable:               log_rent   R-squared:                       0.838
Model:                            OLS   Adj. R-squared:                  0.838
Method:                 Least Squares   F-statistic:                 2.758e+04
Date:                             xxx   Prob (F-statistic):               0.00
Time:                             xxx   Log-Likelihood:                 11633.
No. Observations:                 xxx   AIC:                        -2.326e+04
Df Residuals:                     xxx   BIC:                        -2.323e+04
Df Model:                           3                                         
Covariance Type:            nonrobust                                         
================================================================================
                   coef    std err          t      P>|t|      [0.025      0.975]
--------------------------------------------------------------------------------
const            9.1687      0.012    758.579      0.000       9.145       9.192
log_area         0.7493      0.004    210.197      0.000       0.742       0.756
age             -0.0098   8.78e-05   -111.189      0.000      -0.010      -0.010
floor_number     0.0178      0.000     48.294      0.000       0.017       0.018
==============================================================================
Omnibus:                     1252.438   Durbin-Watson:                   1.245
Prob(Omnibus):                  0.000   Jarque-Bera (JB):             2645.243
Skew:                           0.519   Prob(JB):                         0.00
Kurtosis:                       4.703   Cond. No.                         262.
==============================================================================

このモデルでも直感に近しい回帰係数が得られていそうです。誤差は正規分布にはまだ遠そうですが、Skew(歪度)は先ほどのモデルより改善していますね。誤差プロットも見てみます。
alt text
線形モデルよりも歪みが少なく、対数スケールにおいては不偏性が向上すると言えそうです。
念のため、予測値を元のスケールに戻した場合と元の結果も比較してみます。

alt text
線形モデル

alt text
対数変換モデル(の予測値を元のスケールに戻したもの)

元のスケールに戻しても違和感のない結果になっていていい感じですね!
最終的に普通の線形モデルと対数変換モデルのどちらを採用すべきかは、仮定したいモデル構造や得たい解釈によって決定することになります。(R-squaredは対数変換モデルの方が高いですが、スケールが異なるため単純な比較はできません)

...このような形でモデル構造を工夫することで「理論が要請する仮定を満たしつつ」「有用な解釈を得られる」ようなモデルを探索していくことになります。例えば内閣府ディスカッションペーパーでは平滑化関数を用いた回帰分析についても紹介されており[2:1]、さまざまな工夫が検討できるところです。

おわりに

今回は不動産データを例として回帰分析の仕組みやモデリングの工夫などについて概説しました。
今回は触れませんが、回帰分析の発展として

  • より柔軟な構造を設定できるGLMや階層ベイズ[4]
  • 地理空間情報を組み合わせた空間回帰モデル[5]

など、不動産データと親和性が高い領域がたくさんありますので、またの機会に触れてみたいと思います。今後も統計・AIに関する取り組みを発信していきますのでお楽しみに!

採用情報
弊社ではWebフルスタックエンジニア、AIエンジニアなどを積極的に採用しています。
ご興味のある方はぜひWantedlyをご覧ください!
https://www.wantedly.com/projects/2099580

脚注
  1. 佐和隆光「回帰分析」 ↩︎

  2. 内閣府経済社会総合研究所「募集家賃ビッグデータを用いた新たな家賃指数の分析」
    https://www5.cao.go.jp/keizai3/discussion-paper/menu.html ↩︎ ↩︎

  3. 刈屋武昭, 小林裕樹, 清水千弘「賃貸・分譲住宅の価格分析法の考え方と実際 ヘドニック・アプローチと市場ビンテージ分析」 ↩︎

  4. 久保拓也「データ解析のための統計モデリング入門」 ↩︎

  5. 村上大輔「地理空間データの統計解析入門」 ↩︎

スマサテ Tech Blog

Discussion