🛠️ 開発裏話・しくじり録

押上駅で検索したら、墨田区の7,715件が全部「駅徒歩1分」になった話

⏱ 約5分物件目利きリサーチ 開発チーム

押上駅付近の相場を調べたら、墨田区の成約データ7,715件すべてが「駅徒歩1分」になっていた開発の失敗談。国交省の成約価格情報(XIT001)に潜む位置情報の仕様と、全国47都道府県の町丁目ごとに代表地点(内部点)から徒歩分を算出して解決した裏側を紹介します。

1. まさかの現象:墨田区の物件7,715件が、すべて「駅徒歩1分」の大都会に

「いや、全部徒歩1分って。どんな超密集都市だよ!」

思わず画面にツッコミを入れてしまいました。物件目利きリサーチの開発チームです。私たちは日々、不動産データと格闘しながらサービスを作っています。今回は、私たちがやらかした少し恥ずかしい「しくじり」をお話しします。

事件が起きたのは、トップページの「相場調査」機能でした。ここには、Proプラン(月額980円)で使える​「徒歩時間」フィルタ​があります。駅から近い取引だけに絞って相場を見られる便利な機能のはずでした。

ところが、押上駅の近くを検索してみたときのことです。画面に出てきた東京都墨田区の取引データ7,715件を見ると、すべての物件の徒歩分が「1」になっていたのです。1件残らず、全部「駅徒歩1分」です。

もし本当なら、墨田区の住人は全員、改札を出て60秒で自宅の玄関にたどり着けることになります。んなわけあるかい、という話です。

さらに困ったことに、徒歩時間のフィルタを切り替えても、取引データが​「7,715件すべて残る」か「全件消える」か​の2択にしかなりませんでした。「徒歩5分以内」を選ぶと7,715件すべてが残り、「フィルタの意味とは?」と哲学的な問いに直面する事態になっていたのです。

2. 原因調査の沼:国交省データには「駅からの徒歩分」が入っていなかった

なぜ、こんな「全件徒歩1分事件」が起きてしまったのでしょうか。原因を探るため、私たちはデータの取得元である国土交通省の「不動産情報ライブラリ」の仕様を改めて確認しました。

物件目利きリサーチの相場調査は、国交省が公開している成約価格情報(APIのエンドポイント名で言うとXIT001)を、四半期ごとにバッチ処理で取得してBigQuery(大量のデータを高速に扱えるデータベース)に保存しています。それを市区町村ごとの静的ファイルにして配信する仕組みです。

調査を始めてすぐ、根本的な事実にぶつかりました。なんと、この​成約価格情報(XIT001)は、最寄り駅や徒歩分を返さない​のです。

「えっ、じゃあ画面に出ていた『徒歩1分』はどこから来たの?」と思いますよね。当時のプログラムを追いかけてみて、開発チームは頭を抱えました。

当時の処理では、ユーザーが地図上で検索した地点(この場合は押上駅のすぐ近く)から最寄り駅までの徒歩分を計算していました。そして、データ側に徒歩分が入っていないため、その​「検索した地点の徒歩分(=1分)」を、取得した7,715件すべての取引データに同じ値でぺたりと貼り付けていた​のです。

つまり、押上駅の目の前を検索したら、墨田区内のどこの取引であっても「検索地点は駅から1分だから、全部1分!」と判定していたわけです。雑にもほどがあります。

では、それぞれの取引データの場所から駅までの距離を測り直せばいいのでは? そう思ってデータの中身を覗いた私たちは、さらなる沼にハマりました。

国交省の成約データには、プライバシー保護のため、物件ごとの細かい住所や緯度経度(地図上の正確な位置を表す数字)が入っていません。データから分かるのは​「市区町村コード」と「地区名(町丁目)」だけ​なのです。個々の物件が町内のどこにあるのか、データからは誰も知り得ない構造になっていました。

3. こうして解決した:全国47都道府県の「内部点」から徒歩分を計算する

個別の物件の位置が分からないなら、「地区(町丁目)」ごとに代表の地点を決めて、そこから最寄り駅までの時間を計算するしかありません。私たちはこの方針で作り直すことにしました。

ここで1つ、地理データならではの工夫が必要になります。町丁目の「真ん中」を決めるとき、単純な「重心(図形のバランスが取れる中心点)」を使うと、三日月のような形やL字型の町丁目では、代表点が​町の境界線の外にはみ出してしまう​ことがあるのです。隣の町や、場合によっては川の上を代表地点にしてしまうわけにはいきません。

そこで私たちは、町丁目の境界データの内側に必ず入る代表点である​「内部点」​を使いました。そして、以下のような手順で全国47都道府県の徒歩分マスター表を作ったのです。

  • ステップ1:町丁目の境界データから、必ず境界の内側に収まる「内部点」を作る
  • ステップ2:国土数値情報の駅データ(S12)を使い、その内部点から一番近い「最寄り駅」を探す
  • ステップ3:内部点から最寄り駅までの直線距離に1.3を掛けて道のりの距離に直し、不動産の表示ルールと同じ「分速80m」で割って徒歩分を出す(直線距離×1.3÷80m/分)
  • ステップ4:この計算を全国47都道府県のすべての町丁目で行い、都道府県ごとの対応表にする
  • ステップ5:実際の取引データは「市区町村コード+地区名」をキーにしてこの表を引き、徒歩分を割り当てる(表に無い地区は除外する)

こうして修正した結果、墨田区の7,715件はどう変わったでしょうか。修正前後の違いを表にまとめました。

徒歩時間フィルタの条件修正前(全件1分事件)修正後(地区の代表点から算出)
徒歩5分以内7,715件(全件)2,878件
徒歩10分以内7,715件(全件)6,794件
徒歩15分以内7,715件(全件)7,715件

ご覧のとおり、フィルタを切り替えると件数が段階的に絞り込まれるようになりました。「徒歩5分以内」なら2,878件、「10分以内」なら6,794件と、​実務の肌感覚に合う絞り込み​ができるようになったのです。いやあ、一時はどうなることかと思いました。

ただ、この方法にも正直にお伝えしなければならない「限界」があります。

国交省の成約データに入っている地区名は、「一丁目」「二丁目」のように丁目まで分かれておらず、​「押上」のように町名までしか入っていない​ことがあります。その場合は、町全体の内部点を1つだけ取って計算するため、町全体で1つの徒歩分になります(ちなみに「押上」は7分になります)。

そのため、同じ「押上」の中の取引でも、駅の目の前の物件と少し離れた物件が同じ「徒歩7分」として扱われます。サービスの画面にも、使う方が誤解しないよう​「地区の代表地点からの目安」​と注記を入れています。

4. 物件目利きリサーチでどう便利になったか

今回の失敗から私たちが学んだのは、「位置情報のないオープンデータに、安易にそれっぽい値を付けると大事故になる」という教訓です。そして、国交省データにおける「駅徒歩◯分」は、個別物件の正確な値ではなく、​「その地区(町丁目)が駅からどれくらい離れているかの目安」​として付き合うのが正しい使い方だということです。

とはいえ、実務においてこの「地区単位の徒歩時間フィルタ」はなかなかの威力を発揮します。

たとえば、広い市区町村でマンションや戸建ての相場を調べるとき、市区町村全体の平均だけを見ても、駅前の商業エリアと郊外のバス便エリアが混ざってしまい、価格のピントがぼやけてしまいます。そこでProプラン(月額980円)の​徒歩時間フィルタ​を使い、「徒歩5分以内」「徒歩10分以内」と絞り込むことで、「駅に近い地区の取引だけ」を取り出して平均取引価格や中央値、四半期ごとの価格推移を確認できるようになります。

さらに、物件種別や地区名の絞り込み(これらはFreeプランを含む全プランで使えます)と組み合わせれば、「この区の、中古マンションで、駅から10分圏内の地区だけの相場」といった一歩踏み込んだ分析も簡単です。絞り込んだ画面の結果は、Proプランなら選んだセクションごとにPDF出力して、そのまま社内資料やお客様への説明資料にも使えます。

「全件徒歩1分」という珍事件を乗り越えて、ようやくまともに動くようになった徒歩時間フィルタ。まずは無料の​相場調査(トップページ)​で、気になるエリアの成約データがどう見えるか、ぜひ地図から選んで試してみてください。

関連する機能とマニュアル

よくある質問

相場調査の「徒歩時間」フィルタは、どの料金プランから使えますか?
徒歩時間フィルタは、月額980円(税込)のProプラン、および月額3,980円(または年額39,800円・税込)のBusinessプランでご利用いただけます。なお、物件種別や地区名での絞り込みは、無料のFreeプランを含む全プランでご利用可能です。
表示される徒歩分が、実際の物件のチラシ(マイソク)の徒歩分と違うのはなぜですか?
国土交通省の成約価格情報には個別物件の正確な位置情報や徒歩分が含まれていないため、物件目利きリサーチでは「地区(町丁目)の代表地点(内部点)」から最寄り駅までの直線距離×1.3÷80m/分で算出した目安を表示しています。また、国交省データの地区名が「押上」のように丁目まで分かれていない場合は町全体で1つの値(押上は7分)となるため、個別物件の徒歩分とは異なります。
徒歩時間フィルタは全国のエリアに対応していますか?
はい、全国47都道府県のすべてに対応しています。各都道府県の町丁目の境界データから内部点を作成し、国土数値情報の駅データ(S12)と照合した対応表をもとに、市区町村コードと地区名で徒歩分を割り当てています。