Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Hivemallで始める不動産価格推定サービス

4.619 Aufrufe

Veröffentlicht am

Hivemallを利用した回帰分析の始め方と不動産事業への応用事例の紹介です。

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

Hivemallで始める不動産価格推定サービス

  1. 1. page 1
  2. 2. page 1. 自己紹介 2. 新事業紹介 3. 回帰分析とは 4. 不動産価格推定の知見 5. まとめ 本日の流れ 2
  3. 3. page 1. 自己紹介 3
  4. 4. page 4
  5. 5. page 公開中のFluentdプラグイン 5 rewrite-tag-filter geoip mysql-replicator munin twitter anonymizer mysql-query gamobile watch-process twilio sentry feedly
  6. 6. page 執筆書籍 6 サーバ/インフラエンジニア養成読本
 ログ収集∼可視化編 [現場主導のデータ分析環 境を構築!] (Software Design plus) 出版社/メーカー: 技術評論社 定価: 本体1,980円+税
  7. 7. page 2. 新事業紹介 7
  8. 8. サービスへの思い • 取引慣習が戦後から変わらないブラックボックスな不動産業界 • この問題を解決すべく、ビッグデータを活用した公平な情報を 利用者に提供することで、不動産市場を活性化する • 建物の中立評価や部屋毎の市場価格とその価格推移履歴を公開 • 適正価格が分かることで、安心したマンション選びを実現する • 消費者が気軽に住み替えられる循環型社会を実現する
  9. 9. イエシルが提供するもの • ビッグデータを活用した、売買判断に必要な情報を提供! • 部屋ごとの市場価格をリアルタイム査定(特許出願中)! • 価格推移の可視化! • 物件に関する中立なレイティングデータ公開! • 利便性・治安・地盤情報など8項目! • 不動産の売買仲介サービスを提供
  10. 10. イエシルが解決する課題 • 値付けの不透明性! • 現在売りに出ている物件だけを見て判断せざるを得ないため、
 相場より少し高めなのか安めなのか分かりにくい不透明性! • 中古住宅流通の促進! • マンションの市場価値を知る敷居を下げることでの促進! • 売り時や買い時の判断材料を提供
  11. 11. 特許出願中の価格査定システムの概要 既知の価格査定システム 特許出願中の価格査定システム 手法 取引事例比較法や収益還元法、原価法を用い、 物件の価格を1件ごとに算出していた。 そのため、該当マンションにおける相対価値は ミクロな形でしか知り得ない。 クロールした部屋情報を所在階ごとに
 まとめ、部屋ごとに値付けを行う。
 その結果、該当マンションにおける相場を
 含めて、マクロに一望できる形で可視化する 係数 価格算出に用いる係数が少ない
 (所在階、広さ、方位等) 価格算出に影響する係数群が
 オープンデータ含め多岐にわたる 過去価格の
 可視化 現在の価格査定用に作られているため難しい 先進的な時間軸における価格形成モデルを構築 することで、過去価格の変動も可視化できる 高級物件の
 査定 周辺・類似事例も少ない場合には、
 大きく外れることもある パンフレット等から収集した新築価格も利用 することで、納得感のある値付けを実現 査定モデルの 安定性 ○ ○ 不動産鑑定士 の評価 ○ ○
  12. 12. page 3. 回帰分析とは 18
  13. 13. page 単回帰分析とは 19 x y y=ax+b ) b: intercept(切片) 線形に1つの変数を用い て値を予測すること。 散布図にプロットし、 その点からの距離が最 小となるように描ける 線を求めることが、単 回帰分析の基本
  14. 14. page 単回帰分析とは 20 単回帰分析は右記の散 布図とおり、それぞれ の点からの距離が最小 となるように描ける線 を求めることです。 計算には通常、最小二 乗法を利用します。
  15. 15. page 単回帰分析とは 21 iPhone 6sの価格査定モデルを作成してみましょう iPhone 6s 16GB:86,800円 iPhone 6s 64GB:98,800円 iPhone 6s 128GB:110,800円 iPhone 6s Plus 16GB:98,800円 iPhone 6s Plus 64GB:110,800円 iPhone 6s Plus 128GB:122,000円
  16. 16. page まずは散布図にプロットします 22
  17. 17. page 23 128GBモデルがお得
  18. 18. page SQLで線形回帰モデルを作成します (PostgreSQL/Presto互換) 24
  19. 19. page 25 -- WITH句を使って、recordsという一時テーブルを用意 WITH records AS ( -- size(x), price(y) SELECT * FROM ( VALUES (16, 86800), (64, 98800), (128, 110800) ) AS t (x_value, y_value) )
  20. 20. page 26
  21. 21. page 27 -- 先ほどの結果を用いて、最小二乗法の事前計算を行う SELECT SUM(x_value) as sumx, SUM(y_value) as sumy, SUM(x_value*x_value) as sumxx, SUM(y_value*y_value) as sumyy, SUM(x_value*y_value) as sumxy, COUNT(1) as cnt FROM records
  22. 22. page 28
  23. 23. page 29 -- 最小二乗法の事前計算で求めた値を用いて、モデルを求める SELECT bunshi_a / bunbo as slope, bunshi_b / bunbo as intercept FROM ( SELECT (cnt * sumxx - pow(sumx, 2)) AS bunbo, (cnt * sumxy - sumx * sumy) AS bunshi_a, (sumxx * sumy - sumxy * sumx) AS bunshi_b FROM prepare ) calc
  24. 24. page 30 iPhone 6s price estimate model price = 212.83*size + 84043
  25. 25. page 31 -- linear regression (y=ax+b) -- estimate price from size. WITH records AS ( -- size(x), price(y) SELECT * FROM ( VALUES (16, 86800), (64, 98800), (128, 110800) ) AS t (x_value, y_value) ), prepare AS ( SELECT SUM(x_value) as sumx, SUM(y_value) as sumy, SUM(x_value*x_value) as sumxx, SUM(y_value*y_value) as sumyy, SUM(x_value*y_value) as sumxy, COUNT(1) as cnt FROM records ) SELECT bunshi_a / bunbo as slope, bunshi_b / bunbo as intercept FROM ( SELECT (cnt * sumxx - pow(sumx, 2)) AS bunbo, (cnt * sumxy - sumx * sumy) AS bunshi_a, (sumxx * sumy - sumxy * sumx) AS bunshi_b FROM prepare ) calc 標準的なSQLで求める線形回帰分析
  26. 26. page price = 212.83*size + 84043 32 iPhone 6sの回帰モデルを用いた価格査定 iPhone 6s 16GB:86,800円 87,448円(誤差0.7%) = 212.83*16 + 84043 iPhone 6s 64GB:98,800円 97,664円(誤差1.1%) = 212.83*64 + 84043 iPhone 6s 128GB:110,800円 111,272円(誤差0.4%) = 212.73*128 + 84043
  27. 27. page 33 線形回帰モデルは、点との距離が最小となるような線 128GBのみ少し値付けが違う
  28. 28. page Prestoの標準UDFを利用する例 34
  29. 29. page Prestoでも単回帰分析が出来る 35 Presto v0.104より対応
 https://prestodb.io/docs/current/functions/aggregate.html regr_intercept() … 傾きを計算する regr_slope() … 切片を計算する 驚くほどシンプルに書ける ORACLEと同じ関数名なので分かりやすい
  30. 30. page 36 -- (Presto) y = intercept + x * slope
 WITH records AS ( SELECT * FROM ( VALUES (16, 86800), (64, 98800), (128, 110800) ) AS t (x_value, y_value) ) SELECT regr_intercept(y_value, x_value) as intercept, regr_slope(y_value, x_value) as slope FROM records
  31. 31. page 37 -- (Presto UDF) y = intercept + x * slope
 WITH records AS ( SELECT * FROM ( VALUES (16, 86800), (64, 98800), (128, 110800) ) AS t (x_value, y_value) ) SELECT regr_intercept(y_value, x_value) as intercept, regr_slope(y_value, x_value) as slope FROM records -- linear regression (y=ax+b) -- estimate price from size. WITH records AS ( -- size(x), price(y) SELECT * FROM ( VALUES (16, 86800), (64, 98800), (128, 110800) ) AS t (x_value, y_value) ), prepare AS ( SELECT SUM(x_value) as sumx, SUM(y_value) as sumy, SUM(x_value*x_value) as sumxx, SUM(y_value*y_value) as sumyy, SUM(x_value*y_value) as sumxy, COUNT(1) as cnt FROM records ) SELECT bunshi_a / bunbo as slope, bunshi_b / bunbo as intercept FROM ( SELECT (cnt * sumxx - pow(sumx, 2)) AS bunbo, (cnt * sumxy - sumx * sumy) AS bunshi_a, (sumxx * sumy - sumxy * sumx) AS bunshi_b FROM prepare ) calc たったこれだけ!
  32. 32. page 精度向上をさらに図るには 38 iPhone6sの価格推定モデルを単回帰分析で作りました 価格 = 212.83*容量 + 84043 単回帰分析で求められた式では、まだ誤差がある 128GBモデルのみ少し値付けが安くなっている 128GBモデルのみ効くダミー変数を追加すると良さそう 説明変数が1つ:単回帰分析 説明変数が2つ以上:重回帰分析
  33. 33. page 重回帰分析をHadoopでしたい! 39 y = a1x1 + a2x2 + a3x3 + a4x4 ・・・+ b
  34. 34. page そこでHivemallの出番です 40
  35. 35. page Hivemallを用いた回帰分析 41 hivemallはHiveQLのUDFとしてTreasureDataでも使える 回帰分析 (Regression) で使えるアルゴリズムは次の5種類 Logistic Regression AdaGrad / AdaDelta (with Logistic Loss) Passive Aggressive Regression (PA1, PA2) AROW (Adaptive Regularization of Weight Vectors) Regression Polynomial Regression まず使うならAROWか、AdaGrad / AdaDeltaを使うと良い
  36. 36. page Hivemall Regressionの使い道 42 ロジスティック回帰 (0/1 or -1/+1) 線形回帰 多項式回帰 Logistic Regression ✓ AdaGrad / AdaDelta (with Logistic Loss) ✓ Passive Aggressive Regression (PA1, PA2) ✓ AROW (Adaptive Regularization of Weight Vectors) Regression ✓ Polynomial Regression ✓ 過学習を防げるので汎用的
  37. 37. page AROWeを利用した実例を紹介 43
  38. 38. page 44 -- hivemallを用いた回帰分析 WITH records AS ( SELECT 16 as x_value, 86800 as y_value UNION ALL SELECT 64 as x_value, 98800 as y_value UNION ALL SELECT 128 as x_value, 110800 as y_value ) SELECT * FROM records
  39. 39. page 45
  40. 40. page 46 SELECT row_number() over () AS rowid, y_value AS target, array_remove(Array( 'bias', CONCAT('size:', x_value), IF(x_value=128, '128GB', NULL) ), NULL) as features FROM records
  41. 41. page 47 128GBモデルのみに効く質的変数を追加(ダミー変数)
  42. 42. page 48 SELECT arowe_regress(features, target) AS (feature, weight, covar) FROM train このままですと反復学習数が不足して 精度が出ないためamplifyを使います
  43. 43. page 49 SELECT arowe_regress(features, target) AS (feature, weight, covar) FROM ( select * from ( select amplify(20000, rowid, target, features) AS (rowid, target, features) from train ) t CLUSTER BY rand(1) ) train_amplify
  44. 44. page 50
  45. 45. page 51 -- regressionの結果から係数を求める SELECT feature, argmin_kld( weight, covar ) AS weight FROM regression GROUP BY feature
  46. 46. page 52
  47. 47. page 53 -- Hivemall AROWe regression WITH records AS ( SELECT 16 as x_value, 86800 as y_value UNION ALL SELECT 64 as x_value, 98800 as y_value UNION ALL SELECT 128 as x_value, 110800 as y_value ), train AS ( SELECT row_number() over () AS rowid, y_value AS target, array_remove(Array( 'bias', CONCAT('size:', x_value), IF(x_value=128, '128GB', NULL) ), NULL) as features FROM records ), regression AS ( SELECT arowe_regress(features, target) AS (feature, weight, covar) FROM ( select * from ( select amplify(20000, rowid, target, features) AS (rowid, target, features) from train ) t CLUSTER BY rand(1) ) train_amplify ), model AS ( SELECT feature, argmin_kld( weight, covar ) AS weight FROM regression GROUP BY feature ) SELECT * FROM model Hivemallを用いた回帰分析
  48. 48. page AROWe以外の手法も使い精度を比較 54
  49. 49. page 55
  50. 50. page 【結論】 今回の推定対象に採用する手法には PA2a (Passive Aggressive II)との 相性が最も良い 56
  51. 51. page 回帰分析手法ごとの精度 57 iPhone 6s 16 GB iPhone 6s 64 GB iPhone 6s 128 GB 実価格 ¥86,800 ¥98,800 ¥110,800 単回帰分析 ¥87,448 (誤差0.7%) ¥97,664 (誤差1.1%) ¥111,272 (誤差0.4%) 重回帰分析 (AROWe) ¥80,980 (誤差6.7%) ¥104,373 (誤差5.6%) ¥110,037 (誤差0.7%) 重回帰分析 (PA2a) ¥85,820 (誤差1.1%) ¥99,784 (誤差1.0%) ¥111,055 (誤差0.2%)
  52. 52. page しかしここに 学習データの過学習という問題と、 内挿と外挿の問題が隠れている ケースもあります。 58
  53. 53. page 59 学習データに無い外挿となる推定の正しさは未知数
  54. 54. page オンライン学習する際のTips 60 データの種類次第だが、学習回数によって精度が変わる サンプル数が少ない時は反復学習が必要 レコードを重複させる(サンプリング手法の1つ) 綺麗なデータを数倍に重複(増幅)させておくと、
 データ密度が高い方にモデルが補正される 結果的に精度が向上する 過学習に注意 学習データと予測データを分けて精度検証を行う
  55. 55. page 4. 不動産価格推定の知見 61
  56. 56. page 中古不動産価格査定の難しさ 62 中古マンションの価格査定 地域によって事例がほとんど存在しない 同じ部屋が市場に何度も出回ることはまず無い 築年数を重ねると値幅が広くなる 建物と部屋の修繕度合いに左右される 賃貸マンションの価格査定 どの地域にも事例が密集して存在する 同じ部屋が市場に何度も出回るので値動きが掴みやすい
  57. 57. page 中古不動産価格査定の難しさ 63 物件の価格は広さだけでは説明出来ません 立地(駅徒歩・眺望・バルコニー面積) 所在建物階数 建物規模・構造 販売会社やブランドのネームバリュー 土地権利 etc…
  58. 58. page 地域によって駅徒歩距離の価値が違う 64
  59. 59. page 65 引用元: http://www.fudousan.or.jp/topics/1011/11_3.html
  60. 60. page 中古不動産価格査定の難しさ 66 購入者は何を評価し、何を評価しないかを考える 車社会の地域なら駅からの距離はあまり気にならない 1人暮らし物件は値段と立地重視で方位は二の次 朝出かけて夜に帰ってくる事が多いですよね? ファミリー向け物件は駅近はそれほど重要では無い etc…
  61. 61. page 価格推定を行うときの知見 67 データ前処理の重要性 まるっとデータを入れれば綺麗なモデルが作れる事は無い 価格推定は経済原理を元に仮説を立てる力が必要 なるべく内挿となるように分類・集計等の前処理を行う 不足しているデータは欠損値補完をする オープンデータを組み合わせるのも1つの手段 名寄せ処理スゴク大事 自然言語処理やスコアリングなどの各種手法を応用する
  62. 62. page 価格推定を行うときの知見 68 R2決定係数のまやかし 説明変数を増やせば、R2決定係数は1.0に近づきがち 過学習となっているケースもあるのでモデルの精査が大事 学習データの範囲で正と負が逆転するような係数は怪しい ! 予測データから各パーセンタイルでの誤差率を出すと良い 50/60/70/80/90/95 Percentileにて誤差率が○%になる 等 MAEやRMSEの他、MER (Median Error Rate) も有用
  63. 63. page 価格推定を行うときの知見 69 価格査定は割と外挿となる未知の物件価格予測となる 査定モデル次第では価格が0円を割ることもある 量的変数と質的変数(ダミー変数)の使い分け 量的変数のスケーリングも大事 Z-ScoreやMin-Max normalization、対数を取るなど 量的変数であっても駅徒歩と同様に線形に推移しない場合 交差項を用いて、ある程度の範囲のみの係数を用意する いわゆる層別化
  64. 64. page 5. まとめ 70
  65. 65. まとめ • Hadoopで動くHivemallにより、機械学習利用の敷居が下がった • SQLで機械学習を操れるメリットはかなり大きい • 学習データ作りが肝なので、データ前処理(正規化)は超大事 • データに関するビジネス的な知識は欠かせない • モデルを作る際には過学習と境界線問題などに気をつけたい
  66. 66. page Thanks! 72 ご清聴ありがとうございました。

×