連載
» 2022年01月31日 05時00分 公開

California Housing:カリフォルニアの住宅価格(部屋数や築年数などの8項目)の表形式データセットAI・機械学習のデータセット辞典

データセット「California Housing」について説明。2万640件のカリフォルニアの住宅価格の「表形式データ(部屋数や築年数などの8項目)」+「ラベル(住宅価格)」が無料でダウンロードでき、回帰問題などのディープラーニングや統計学/データサイエンスに利用できる。scikit-learnにおける利用コードも紹介。

[一色政彦,デジタルアドバンテージ]
「AI・機械学習のデータセット辞典」のインデックス

連載目次

データセット解説

 California Housingデータセット(houses.zip)カリフォルニアの住宅価格データ)は、「1990年の米国国勢調査から得られたカリフォルニア州の住宅価格」の表形式データセット(=構造化データセット)である(図1)。

図1 California Housingデータセットの内容例 図1 California Housingデータセットの内容例
データセットの配布元: 「カーネギー・メロン大学のStatLibデータセットアーカイブ」内にある「houses.zipデータセット(houses.zipファイル内に含まれるcadata.txtファイル)」。ライセンス指定なし。

 California Housingは、主に回帰(数値予測、つまり「住宅価格の予測」)を目的としたディープラーニング/機械学習/統計学などで活用できる。

 California Housingで注意してほしいのは、データセットの各行が「個別の家の値」ではなく「国勢調査のブロックグループごとにまとめた値(中央値や総数など)」になっていることだ。ブロックグループとは、米国国勢調査局が1つの標本データとして扱う「最小の地理的単位」のことである。1つのブロックグループに含まれる個人の人数は、通常は600〜3000人で、California Housing(以下、「データセット」という表記は省略する)では平均して1425.5人となっている。

 California Housingの元データ(houses.zip内に含まれるcadata.txt)は具体的には、

  住宅価格(中央値)、所得(中央値)、築年数(中央値)、総部屋数、総寝室数、人口、総世帯数、緯度、経度

という順の9属性で構成されている。ただし総部屋数や総寝室数、総世帯数は、ブロックグループ全体の合計値であり、それに含まれる個々の家(厳密には世帯)を代表する平均値ではない(「世帯:household」とは、住居と生計を同じくする人の集まりを指す)。そこでこれら3属性を、

  「総部屋数」よりも「1世帯当たりの部屋数」(=総部屋数÷総世帯数)
  「総寝室数」よりも「1世帯当たりの寝室数」(=総寝室数÷総世帯数)
  「総世帯数」よりも「1世帯当たりの世帯人数」(=人口÷総世帯数)

という形で数値計算して置き換えると、より機械学習などで使いやすくなるだろう。この計算をPythonなどで行っても大した手間ではないが、後述するライブラリscikit-learnでは既に上記の数値変換により属性を置き変えた状態でデータセットを提供してくれている。その結果、

  所得(中央値)、築年数(中央値)、部屋数(平均値)寝室数(平均値)、人口、世帯人数(平均値)、緯度、経度

という8属性が説明変数(descriptive variable、特徴量、入力データ)として、

  住宅価格(中央値)

1属性が目的変数(target variable、ラベル=正解を示す教師データ)として提供されている。各属性(列項目)の意味を以下にまとめておく(「」を付けたものは置き換えた属性)。

  • MedInc(median income): 各ブロックグループ内にある世帯ごとの「所得」の中央値。明示されていないが、1990年のカリフォルニアの世帯収入の中央値が3万ドル台であるため、恐らく1万ドル(=10,000ドル)単位だと推定される
  • HouseAge(median house age): ブロックグループの「築年数」の中央値
  • AveRooms(avarage number of rooms): 各ブロックグループ内にある世帯ごとの「部屋数」の平均値(=1世帯当たりの部屋数。元は総部屋数)
  • AveBedrms(avarage number of bedrooms): 各ブロックグループ内にある世帯ごとの「寝室数」の平均値(=1世帯当たりの寝室数。元は総寝室数)
  • Population: ブロックグループの「人口」(=居住する人の総数)
  • AveOccup(average occupancy rate): 各ブロックグループ内にある世帯ごとの「世帯人数」の平均値(=1世帯当たりの世帯人数。元は総世帯数)
  • Latitude: ブロックグループの中心点の「緯度」。値が方向に大きいほど、そのブロックグループは北にある
  • Longitude: ブロックグループの中心点の「経度」。値が方向に大きいほど、そのブロックグループは西にある
  • MedHouseVal(median house value):「住宅価格」(100,000ドル=10万ドル単位)の中央値。通常はこの数値が目的変数として使われる

 なお、別荘地や空家が多いなどの理由で世帯数が少ないブロックグループでは、当然ながら平均部屋数や平均寝室数が非常に大きな値になっているので注意してほしい。

 California Housingデータセット全体は、以下のようになっている。欠損値はない。

  • データ数は、合計2万640個(つまり、20,640行×8列の表形式データと、20,640行×1列のラベル)

引用のための情報

 このデータセットは、基本的に自由に使用できる(ライセンスは指定されていない。データの取得元を明記する場合は、以下を参考にしてほしい)。

  • 論文著者: R. Kelley Pace and Ronald Barry
  • タイトル: Sparse Spatial Autoregressions, Statistics and Probability Letters, 33, 291-297.
  • 公開年: 1997(下記リンク先に、Kelley Paceによりデータセットが提出されたのは1999年11月9日との記載がある)
  • URL: http://lib.stat.cmu.edu/datasets配下の、houses.zip内に含まれるcadata.txt

利用方法

 実際にCalifornia Housingを使うには、ライブラリscikit-learnが提供する機能を利用することをお勧めする。ムダな作業を省いて、効率的に使えるためだ。なお、TensorFlow /Keras/PyTorchにはCalifornia Housingは用意されていなかった。

 以下に、scikit-learnで「どのようなコードを書くとCalifornia Housingが使えるか」の典型的なコードを簡単に示しておく(コードの詳細は解説しない)。

scikit-learn

# !pip install scikit-learn  # ライブラリ「scikit-learn」をインストール

from sklearn.datasets import fetch_california_housing

housing = fetch_california_housing(as_frame=True)

リスト1 scikit-learnでCalifornia Housingを利用する基本的なコード

 sklearn.datasets.fetch_california_housing()関数を呼び出せばよい。戻り値として辞書オブジェクトを返す。その配下のdataにデータが、targetにラベルが、feature_namesに特徴名が、リスト1の例のように関数の引数にas_frame=Trueを含めた場合はframeに全9列のpandasデータフレーム(target列は最後の列)が格納されている。

 ちなみに、scikit-learnのバージョン1.0からはBoston Housingデータセットが倫理的な問題から非推奨となり、その代替として本稿で説明したCalifornia Housingデータセットを利用することが推奨されている。Boston Housingは、バージョン1.2で削除される予定である(2022年1月26日時点のバージョンは1.0.2であるため、かなり先の話だと思われる)。そのため今後は、California Housingが広く使われるようになっていく可能性が高い(ため、本稿を執筆した)。

「AI・機械学習のデータセット辞典」のインデックス

AI・機械学習のデータセット辞典

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。