首都圏 不動産データレポートを作りました:実取引・公示地価・競売結果をヘドニック回帰で読み解く
東京・神奈川・埼玉・千葉の不動産価格を、実取引・地価公示・競売の落札結果から読み解く統計サイト「首都圏 不動産データレポート」を公開しました。
この記事では、
- なぜ作ったのか(開発の経緯)
- どんなデータを使ったのか
- そのデータを数学的・統計学的にどう扱ったのか
- 公開するうえで気をつけたこと、そして限界
を、できるだけ具体的に書いていきます。数式も出てきますが、考え方を先に文章で説明してから式を示すので、式を飛ばして読んでも流れは追えるはずです。
このサイトは、日本の政府・裁判所・不動産流通機関とは無関係の非公式な統計サイトです。特定の物件の価値や取引の可否を判断するものではなく、投資・法律・税務の助言でもありません。
開発の経緯
きっかけは、不動産競売の落札結果を社内で分析していたことでした。
裁判所の競売物件情報サイト(BIT)には、過去の売却結果が公開されています。ここから「競売の落札価額は、相場と比べてどれくらい安いのか」を知りたくなりました。ところが、相場そのものが一つの数字では決まらないという壁にぶつかります。
- 同じ区でも、築5年の広い部屋と築40年の狭い部屋では㎡単価がまったく違う
- 取引価格の中央値は、その四半期にたまたま取引された物件の「顔ぶれ」で上下する
- 競売の落札物件は、築年・面積・地域の構成が年ごとに変わる
つまり「落札価額 ÷ 相場」を出すには、築年・面積・駅距離をそろえた相場を物件ごとに推定する必要があります。そこで、国土交通省の「不動産取引価格情報」(実取引)を蓄積し、市区町村・種別ごとに統計モデルを当てはめる仕組みを作りました。
そのモデルを使うと、競売だけでなく、
- 地域別の相場と、築年・面積・駅徒歩が価格に与える影響
- 品質をそろえた相場の10年分の推移
- 最寄り駅ごとの㎡単価
- 公示地価の水準と25年分の変動
も同じ土台で計算できます。社内の分析で使っていた集計のうち、個別の物件や住所を特定できない形に集計したものだけを、誰でも読める統計サイトとして整えたのが今回のサイトです。
使ったデータ
| データ | 出典 | 規模 | 使い道 |
|---|---|---|---|
| 不動産取引価格情報(実取引) | 国土交通省 不動産情報ライブラリ | 東京・神奈川・埼玉・千葉、2005年〜、約194万件(うち2016年以降は約116万件) | 相場・推移・駅別・要因・競売の「相場」の推定 |
| 地価公示(標準地) | 国土交通省 国土数値情報 | 1995年〜、約16万件(標準地×年) | 地価の水準と25年の変動指数 |
| 競売の売却結果 | 裁判所 不動産競売物件情報サイト(BIT) | 約8,100件のうち、集計に使えた2023〜2026年度の落札6,809件 | 落札価額 ÷ 相場、落札価額 ÷ 基準価額 |
実取引と地価公示は、国の公開データ(公共データ利用規約に沿った出典・加工の表記が条件)です。競売の結果は、落札価額・売却基準価額・面積・建築年・市区町村だけを使い、物件の文書・写真・住所・事件の情報は使いません。
数学的・統計学的な中身
ここからが本題です。サイトの数字は、おおむね次の部品でできています。
- 中央値と四分位(頑健な要約)
- ヘドニック回帰(時間ダミー型)による品質補正
- 平滑化とリッジ(罰則付き最小二乗)
- 外れ値の除去(ロバストな標準偏差)
- 部分プーリング(取引が少ない地域の推定)
- 予測精度の検証(ローリング・オリジン)
- 競売の割引率の定義と、公開する際の最小標本数
- 連鎖指数(公示地価)と、係数の重み付き中央値(価格の要因)
- 入札者数との関係と、ブートストラップ
1. まず「平均」ではなく中央値と四分位
不動産の価格には、極端に高い取引が混ざります。平均はそれに引きずられるので、サイトの代表値はすべて中央値です。ばらつきは四分位範囲(25%点〜75%点、真ん中半分が入る区間)で示します。
分位点は、データを小さい順に並べ、位置を線形補間して求めます(PostgreSQL の percentile_cont と同じ定義)。
「前年比」は、直近4四半期の中央値と、その前の4四半期の中央値の比です。ただしこの比較には落とし穴があります。次の節で説明します。
2. 中央値は「構成」で動く:ヘドニック回帰で品質をそろえる
ある四半期に新築に近い広い物件が多く取引されれば、中央値は上がります。古くて小さい物件が多ければ下がります。価格が変わったのではなく、取引された物件の構成が変わっただけかもしれません。
そこでヘドニック回帰を使います。価格を「物件の特性の足し合わせ」で説明するモデルで、国土交通省の不動産価格指数も同じ骨格です。サイトでは、市区町村 × 種別(中古マンション等・戸建て・土地)ごとに、直近40四半期(10年)の取引へ次のモデルを当てはめています。
\[\ln(p_i) = \delta_{t(i)} + \sum_{k} \beta_k\, x_{ik} + b_{d(i)} + \varepsilon_i\]- \(p_i\):取引 \(i\) の㎡単価(円/㎡)。対数を取るので、係数は「何%変わるか」の意味になります
- \(\delta_{t}\):四半期 \(t\) の時間ダミー。この値が、そのまま「基準物件の価格水準の推移」になります
- \(x_{ik}\):物件の特性(下表)
- \(b_{d}\):町域(丁目や大字単位)ごとの格差
- \(\varepsilon_i\):誤差
特性は、基準物件のとき全部ゼロになるように作っています。基準物件はマンションなら専有60㎡・築20年・駅徒歩8分です。
| 特性 | 変換 | 意味 |
|---|---|---|
| 面積 | \(\ln(\text{面積}/60)\) | 広いほど㎡単価は下がる傾向 |
| 築年数 | \(x=(\text{築年数}-20)/10\) の1次と2次 | 古いほど下がるが、下がり方は一定でない |
| 駅徒歩 | \(\ln\bigl((1+\text{徒歩分})/(1+8)\bigr)\) | 近いほど高く、遠くなるほど効き方が小さくなる |
| 改装 | 改装済み/未改装のダミー | |
| 用途地域 | 市街化調整区域・都市計画区域外・商業系・工業系のダミー | 調整区域は同じ町でも大きく安い |
築年数を1次と2次の項で入れているのは、「新築から10年で大きく下がり、築40年を超えると下げ止まる」ような曲がった形を表現するためです。駅徒歩に \(1+\) を足した対数を使うのは、徒歩0分でも値が定義できるようにするためと、近い駅ほど1分の差が大きく効くという感覚に合わせるためです。
このモデルで推定した \(\delta_t\) を、町域格差の取引件数による加重平均 \(\bar b\) で補正して、
\[\text{基準物件の㎡単価}_t = \exp\bigl(\delta_t + \bar b\bigr)\]とします。これが、サイトの「相場の推移」に出てくる線です。構成が変わっても、同じ条件の物件の価格がどう動いたかが見えます。都県の線は、市区町村の推定を取引件数で重みづけして合成しています。
3. 平滑化とリッジ:薄い四半期・小さい町域に引きずられない
四半期ごとの \(\delta_t\) を自由に動かせると、取引が少ない四半期でガタガタになります。町域格差 \(b_d\) も、取引が数件しかない町域が極端な値を出してしまいます。そこで、最小二乗法に罰則を足します。
\[\min_{\delta,\beta,b}\ \sum_i \bigl(y_i - \hat y_i\bigr)^2 + \lambda_t \sum_{t} \bigl(\delta_{t+1}-\delta_t\bigr)^2 + \lambda_d \sum_{d} b_d^2\]ここで \(y_i=\ln p_i\)。第2項は隣り合う四半期の差を小さくする平滑化(ランダムウォーク事前分布)、第3項は町域格差をゼロに引き寄せるリッジ(縮小)です。取引が多い四半期や町域ではデータが勝ち、少ないところでは自動的に滑らかさ・ゼロに近づきます。
罰則の強さは、ベイズ的に「事前の標準偏差」から決めます。
\[\lambda_t = \frac{\sigma^2}{\tau_t^2}, \qquad \lambda_d = \frac{\sigma^2}{\tau_d^2}\]ここでは、隣り合う四半期の水準差の標準偏差 \(\tau_t = 3\%\)、町域格差の標準偏差 \(\tau_d = 15\%\) という事前の値を置き、\(\sigma\) は残差から推定しています。つまり「四半期ごとの水準は3%程度しか飛ばないはず」「町域差は15%程度のはず」という常識を、数式に埋め込んでいるわけです。
解は、正規方程式を解けば得られます。
\[\bigl(X^\top X + P\bigr)\,\hat\beta = X^\top y\]\(P\) が罰則を表す行列です。これはコレスキー分解で解いています。列数は数百以下なので、密行列で十分に速く、外部ライブラリは不要でした。実装は Ruby の標準機能だけで数百行です(プロジェクトは「自動化は Ruby」を方針にしています)。
4. 外れ値を除く:ロバストな標準偏差
入力ミスや特殊な物件(極端に安い・高い取引)は、そのまま入れると回帰直線を引っ張ります。そこで、1回目の当てはめの残差 \(r_i\) からロバストな標準偏差を作ります。
\[\hat\sigma_{\text{rob}} = 1.4826 \cdot \operatorname{median}\bigl(\lvert r_i\rvert\bigr)\](MAD:中央絶対偏差を、正規分布の標準偏差に合わせる定数1.4826で換算したもの)。
\[\lvert r_i\rvert > 3.5\,\hat\sigma_{\text{rob}}\]を満たす取引を外れ値として除き、改めて当てはめます。平均と標準偏差で外れ値を決めると、その外れ値自身が基準を歪めてしまうので、中央値ベースの基準を使うのがポイントです。国土交通省の「特殊な事情あり」の取引(私道・関係者間・調停/競売など、約5%)も、最初から除いています。
5. 取引が少ない地域は「部分プーリング」
市区町村によっては、直近10年の取引が少なく、単独のモデルを作れません。全部まとめて都県全体で推定すると、地域差(数十%)を無視してしまいます。
そこで、同じ都県・種別の全取引でいっぺんに当てはめ、市区町村ごとの効果だけを個別に推定して、ゼロの方向へ縮小する方法を使っています(部分プーリング)。市区町村効果の事前標準偏差は35%と、町域格差より大きく取ってあります。
検証として、取引が多い市区町村24か所の取引を30件だけ残して人為的に「薄く」し、最近6四半期の取引を予測してみました。
| モデル | マンション | 戸建て | 土地 |
|---|---|---|---|
| 部分プーリング(取引30件のみ) | 19.8% | 17.0% | 34.7% |
| その市区町村の全取引で作った単独モデル | 20.1% | 16.5% | 33.1% |
| 都県モデルだけ(市区町村効果なし) | 41.5% | 29.0% | 56.7% |
数字は予測の中央誤差(予測と実際の価格の差の絶対値を実際で割った値の中央値)です。取引がわずか数十件でも、単独モデルとほぼ同じ精度が出ました。ただし、それでも少ない件数に頼った推定なので、分析側では「精度が低いモデル」として扱っています。現在のモデルは合計650個(単独549個+部分プーリング101個)です。
6. 「当たっているか」をどう確かめるか
統計モデルは、当てはまりの良さだけでは信用できません。まだ見ていないデータでどれだけ当たるかを確かめます。
使ったのはローリング・オリジン(時間を進めながらの検証)です。
- 最近6四半期の各四半期について、その四半期より前の取引だけでモデルを作る
- そのモデルで、その四半期の実際の取引を予測する
- 予測と実際のずれ(残差)を集める
ランダムに一部を取り分けて検証する方法(ホールドアウト)は、価格の時間的な変動によるずれを見逃します。実際の使い方(最新までのデータで「今」を推定する)に合わせて、時間の順序を守った検証にしています。
指標は次のとおりです。
- 中央誤差(PPE):\(\operatorname{median}\bigl(\lvert \text{予測}-\text{実際}\rvert/\text{実際}\bigr)\)
- 20%以内に入る割合
さらに、モデルが推定した相場に対して、同じ町域の最近の似た取引が平均でどれだけ高かったか・安かったか(残差の平均)を加える「近隣補正」(重み0.8、近隣8件)も試しました。1件ずつ取り除いて評価する leave-one-out では、マンションの中央誤差が 13.5% → 12.0% に改善しました。一方、土地は 23.4% → 24.2% と悪化したため、採用していません。「効かなかったものは入れない」ことも、検証の大事な結果です。
7. 競売の割引率:「落札価額 ÷ 相場」の作り方
いよいよ競売です。サイトで示す値は2つです。
\[r^{\text{相場}}_j = \frac{\text{落札価額}_j}{\widehat{M}_j}, \qquad r^{\text{基準}}_j = \frac{\text{落札価額}_j}{\text{売却基準価額}_j}\]- \(\widehat{M}_j\):その物件と同じ市区町村・種別・面積・築年の物件の推定相場(モデルの中央推定値)を、落札年度の中間時点で評価したもの
- 売却基準価額:裁判所が評価書をもとに定める価額(観測値そのもの。モデルは入りません)
結果として、マンションの落札価額の中央値は相場の約73%・基準価額の約134%でした。築年別には、築20年以下で相場の83%、築36年以上で62%と、古いほど低くなります。
| マンション | 件数 | 落札価額 ÷ 相場(中央値) | 落札価額 ÷ 基準価額(中央値) |
|---|---|---|---|
| 全体 | 2,959 | 73% | 134% |
| 築20年以下 | 775 | 83% | 142% |
| 築21〜35年 | 1,119 | 71% | 133% |
| 築36年以上 | 1,065 | 62% | 125% |
ここで注意したいのは、「落札価額 ÷ 相場」が低いのは純粋な割引ではないことです。競売物件は、内部を見られない・占有者がいる・管理状態が分からないなど、モデルが説明できない不利な条件を抱えています。その分が「割引」に見えているだけかもしれません。サイトでは、この解釈上の注意を本文に明記しています。
公開する数字は「標本が十分にあるもの」だけ
「同じ地域の標本を無作為に半分に分けて、それぞれの中央値を比べる」という点検をしたところ、標本が少ないと半分ずつで中央値がかなり変わることが分かりました。偶然の影響が大きいということです。そこで、
- 築年区分(都県×種別)は標本10件以上
- 市区町村別は30件以上(マンション・全築年)
のものだけを公開しています。この下限は、データから決めたもので、サイトのビルド時にも検査で強制しています。
年度別の推移は、あえて載せない
もう一つの落とし穴が、構成の変化です。競売の元データには落札日がなく、年度しかありません。さらに、年度ごとに落札物件の顔ぶれが変わります。たとえばマンションの平均築年数は2023年度の約27年から2026年度の約32年に増えていました。
その結果、全体の中央値の年度推移をそのまま描くと下がっているように見えます。ところが、同じ市区町村の中で比べると、変化は2024→2025年でわずか−0.6ポイントでした。見かけの傾向が、構成の変化から生じた錯覚だったわけです(統計学では、全体の傾向と層別の傾向が食い違う「シンプソンのパラドックス」の一種です)。
そこで、競売の年度別の推移グラフは、あえて公開していません。数字を出す前に、その数字が何を意味するかを確かめる、という判断です。
8. 地価と「価格の要因」
公示地価の連鎖指数
公示地価は、毎年1月1日時点の標準地の価格です。ただし、標準地は年によって入れ替わるため、単純に「中央値の推移」を見ると入れ替えの影響を受けます。そこで、地点ごとの前年比変動率の中央値を毎年つないだ連鎖指数にしています。
\[I_0 = 100, \qquad I_t = I_{t-1}\times\Bigl(1+\frac{m_t}{100}\Bigr)\]\(m_t\) は年 \(t\) の前年比変動率(%)の中央値です。水準の比較には向かない代わりに、入れ替わりに強い指数です。住宅地・商業地・工業地ごとに、都県別の25年分を描いています。
築年・面積・駅徒歩の効き方
各市区町村のヘドニックモデルの係数を、モデルの標本数で重みづけした加重中央値で都県ごとにまとめ、基準物件を1.0とした倍率の曲線にしました。たとえば築年数の曲線は、
\[f(a) = \exp\Bigl(\beta_1\,\frac{a-20}{10} + \beta_2\Bigl(\frac{a-20}{10}\Bigr)^2\Bigr)\]です(\(a\) は築年数、築20年で \(f=1\))。同じ都県・種別で単独モデルが3つ以上あるときだけ描きます。「他の条件を同じにしたときの平均的な傾向」であって、個別の物件の価格を示すものではありません。
9. 入札者数との関係と、ブートストラップ
競売では、入札者が多いほど落札価額が上がります。当方が収集した落札結果の範囲では、落札価額 ÷ 基準価額の中央値は次のとおりでした。
| 入札者数 | 件数 | 落札価額 ÷ 基準価額(中央値) |
|---|---|---|
| 1〜2名 | 15 | 102% |
| 3〜5名 | 27 | 123% |
| 6〜9名 | 19 | 142% |
| 10名以上 | 33 | 173% |
ただし標本が94件と小さく、相関は因果ではありません(人気のある物件に入札が集まり、価格も上がる)。
標本が小さいときに「その差が偶然ではないか」を見る道具がブートストラップです。標本から重複を許して同じ大きさの標本を何度も取り直し(復元抽出)、そのたびに統計量(たとえば2つのグループの中央値の差)を計算します。
\[\hat\theta^{*}_b = \operatorname{median}\bigl(A^{*}_b\bigr) - \operatorname{median}\bigl(B^{*}_b\bigr), \qquad b = 1,\dots,1000\]1000回分の \(\hat\theta^{*}_b\) の5%点〜95%点を90%信頼区間とし、区間が0をまたいだら「方向が分からない」と判定します。社内の分析では、物件明細書に書かれた権利関係などの「リスク要因」が付いた物件とそうでない物件の落札価額の差を、この方法で見ています。いまの標本では、どの要因も区間が0をまたぎ、「有意な差は言えない」という結果でした。分からないことを分からないと言えるのは、統計の大事な役割だと思います。
公開するうえで気をつけたこと
公開サイトでは、数字の信頼性と個人・事件の特定を避けることを両立させる必要がありました。
- 集計値だけを渡す:個別の物件・住所・事件の情報は、分析側の集計の段階で落とします。公開側が受け取るのは集計済みの JSON だけです
- 最小標本数を下回る数字は出さない:前述の10件・30件の下限を、集計側と公開側の両方で検査します
- 禁止項目の検査:事件番号・住所・内部の識別子など、出してはいけない項目が含まれていたら、ビルドが失敗します
- 出典と加工の表記:各ページに、国土交通省のデータをもとに加工・集計した旨と、国が作成したものではない旨を明記します
- 自動更新も検査の対象:週1回、集計 → コミット → CI(検査とビルド) → 公開の流れで自動更新しますが、検査に通らなければ公開されません(前の公開版のままになります)
サイト自体は、サーバーやデータベースを持たない静的サイト(Jekyll)です。攻撃面を最小にし、Cloudflare Pages から配信しています。チャートも、JavaScript のライブラリを使わず、SVG を自前で生成しています。色は、色覚に配慮して色だけに頼らない(線の端のラベルと、点の形のちがい)作りにし、すべての数値は表としても読めるようにしました。
限界と、これからのこと
最後に、このサイトの限界を書いておきます。
- 相場は推定値です。占有の有無、管理状態、階・向き、修繕の必要度といった、モデルが説明できない要因は反映されません
- 戸建ての競売の集計は参考値です。過去の落札データに建物面積がなく、土地面積と築年だけで推定しているため、1件ごとの誤差は大きくなります
- 競売の時間解像度が低いです。落札日がなく年度だけで、構成も年ごとに変わるため、年度別の推移は出していません
- 落札価額は総取得費用ではありません。税金、明渡し費用、修繕費は含まれません
今後は、データが溜まるほど信頼性が高まる部分(入札者数との関係、リスク要因別の落札価額の差)を、標本が十分になった時点で更新していく予定です。数式やコードは決して難しいものではなく、「何を比べているのか」をきちんと定義することが、統計では一番むずかしくて大切だ、というのが作ってみての実感です。
サイトは fudosan-report.tyis.co.jp で公開しています。数値の作り方は方法と限界、出典は出典・ライセンスに、集計結果はデータページから CSV・JSON でダウンロードできます。ご意見や誤りのご指摘は、サイトのお問い合わせ先までお寄せください。
コメントする