본문 바로가기
목차
ML

[ML] Dataset: California Housing Dataset

by ds31x 2026. 6. 26.
728x90
반응형

California Housing Data

California Housing Dataset

  • California 지역의 주택 가격과 관련된 정보를 담고 있는
  • Machine Learning 연습용 regression dataset임.

Boston Housing Data와 함께 주택 가격 예측 문제에서 자주 사용되던 dataset이나,
현재는 Boston Housing Data보다 California Housing Data가 더 많이 사용되는 편임.

 

Boston Housing Data는
오래된 dataset (1978)이며,
일부 feature가
인종적 편견과 관련된 문제를 가지고 있음.

반면 California Housing Data는
sample 수가 더 많고,
비교적 더 현대적인 dataset (1990)이며,
regression model을 연습하기에 적합함.

 

2024.04.18 - [Python] - [DL] Dataset: Boston Housing Price

 

[DL] Dataset: Boston Housing Price

Boston Housing Data 1970년 대 보스턴 시의 주택가격 데이터으로California Housing Data 와 함께 기계학습의 연습용 데이터로 많이 애용됨. 현재 California Housing Data로 대체되는 추세임California Housing Data가 1990

ds31x.tistory.com

 

California Housing Dataset은 다음과 같은 특징을 가짐.

  • California district 단위의 주택 관련 정보로 구성됨.
  • target은 해당 district의 median house value임.
  • 전체 sample 수는 20,640개임.
  • input feature의 수는 8개임.
  • target은 10만 달러 단위의 주택 가격임.
  • scikit-learn의 fetch_california_housing() 함수로 쉽게 얻을 수 있음.

Feature Description

California Housing Dataset에서 제공하는 feature는 다음과 같음.

idx Column Name Desc.
1 MedInc 해당 district의 median income (단위: 10,000 달러, 즉 값 1은 10,000달러를 의미함)
2 HouseAge 해당 district의 주택 median age (단위: 년, 해당 지역 주택들의 중간 연식)
3 AveRooms 가구당 평균 방 개수 (총 방 개수를 가구 수로 나눈 값)
4 AveBedrms 가구당 평균 침실 개수 (총 침실 수를 가구 수로 나눈 값)
5 Population 해당 district의 총 인구 수
6 AveOccup 가구당 평균 거주 인원 (총 인구를 가구 수로 나눈 값)
7 Latitude 위도 (지리적 위치를 나타내며 북쪽으로 갈수록 값이 커짐)
8 Longitude 경도 (지리적 위치를 나타내며 서쪽으로 갈수록 값이 작아짐)
9 MedHouseVal median house value, target (단위: 10만 달러, 해당 지역 주택 가격의 중간값)
  • 여기서MedHouseVal은 model이 예측해야 하는 label에 해당함.
  • 단위는 10만 달러임.

데이터 로딩

scikit-learn에서는

  • California Housing Dataset 를 위해
  • sklearn.datasets.fetch_california_housing() 함수를 제공함.

다음 code가 사용법을 보여줌:

from sklearn.datasets import fetch_california_housing

housing = fetch_california_housing()

기본적으로 fetch_california_housing()은 dataset을 Bunch 객체로 반환함.

  • Bunch 객체는 dictionary와 비슷하게 사용할 수 있으며,
  • attribute 방식으로도 내부 데이터에 접근할 수 있음.

Bunch 객체의 주요 구성 요소

fetch_california_housing()으로 얻은 housing 객체는 주로 다음 속성들을 가짐.

Attribute Desc.
data input data, shape은 (20640, 8)
target label data, shape은 (20640,)
feature_names feature 이름 목록
target_names target 이름 목록
DESCR dataset 설명 문자열
frame as_frame=True일 때 제공되는 pandas DataFrame

 

다음 code로 shape을 확인할 수 있음:

print(housing.data.shape)
print(housing.target.shape)

 

출력은 다음과 같음:

(20640, 8)
(20640,)
  • housing.data는 20,640개의 sample과 8개의 feature를 가지는 input data임.
  • housing.target은 각 sample에 대응하는 median house value임.

Feature 이름 및 Target 이름 확인

feature 이름은 feature_names attribute를 통해 확인할 수 있음:

print(housing.feature_names)

 

출력은 다음과 같음:

['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms',
 'Population', 'AveOccup', 'Latitude', 'Longitude']

 

target 이름은 다음과 같이 확인할 수 있음:

print(housing.target_names)

 

출력은 다음과 같음:

['MedHouseVal']

NumPy Array로 사용하기

기본적으로 fetch_california_housing()
input data와 target을 NumPy array 형태로 제공함:

x_raw = housing.data
y_raw = housing.target

print(type(x_raw))
print(type(y_raw))

print(x_raw.shape)
print(y_raw.shape)

 

출력 예시는 다음과 같음:

<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
(20640, 8)
(20640,)

 

ML에서 일반적으로 model의 input은 2차원 array 형태를 가짐:

(n_samples, n_features)

 

반면 target은 각 sample마다 하나의 실수값을 가지며 다음의 값을 가짐:

y_raw.shape = (20640,)

참고: Pandas DataFrame으로 변환하기 (수동변환)

NumPy array만으로도 model 학습은 가능하지만,

  • feature 이름과 함께 데이터를 확인하려면
  • pandas의 DataFrame으로 변환하는 것이 편함.
import pandas as pd
from sklearn.datasets import fetch_california_housing

housing = fetch_california_housing()

x_raw = housing.data
y_raw = housing.target

features = housing.feature_names
target_name = housing.target_names[0]

df = pd.DataFrame(x_raw, columns=features)
df[target_name] = y_raw

df.head()

위의 코드를 통해 input features와 target을 하나의 DataFrame으로 합칠 수 있음.

 

다음을 통해 각 column의 dtype과 missing value 여부를 확인할 수 있음.

df.info()

2025.05.16 - [Python/pandas] - [ML] pandas.DataFrame 에서 EDA에 적합한 메서드 요약

 

[ML] pandas.DataFrame 에서 EDA에 적합한 메서드 요약

Pandas DataFrame에서 탐색적 데이터 분석(EDA)에 사용할 수 있는 주요 메서드들은 다음과 같음:2024.05.18 - [분류 전체보기] - [ML] Exploratory Data Analysis (EDA) [ML] Exploratory Data Analysis (EDA)Exploratory Data Analysis (

ds31x.tistory.com


as_frame=True 사용하기

fetch_california_housing()

  • as_frame 옵션을 제공하며,
  • 지정하지 않을 경우 기본값은 False임.
  • 이때 frame 속성은 None이며, 데이터는 NumPy array 형태로 datatarget에 각각 저장됨.

as_frame=True를 사용하면 처음부터 pandas DataFrame 형태로 dataset을 얻을 수 있음.

 

as_frame=True인 경우와 as_frame=False(default)인 경우를 나누어 설명하면 다음과 같음.

  • as_frame=True인 경우
    • scikit-learn에서 데이터를 pandas 형태로 제공함.
      housing.data는 pandas DataFrame, housing.target은 pandas Series, housing.frame은 feature와 target이 모두 포함된 하나의 pandas DataFrame으로 제공됨.
  • as_frame=False인 경우 (기본값)
    scikit-learn에서 데이터를 NumPy array 형태로 제공함.
    housing.data는 NumPy ndarray, housing.target도 NumPy ndarray이며, housing.frame은 제공되지 않음.

다음의 코드 확인:

from sklearn.datasets import fetch_california_housing

housing = fetch_california_housing(as_frame=True)

print(type(housing.data))
print(type(housing.target))
print(type(housing.frame))

 

출력 예시는 다음과 같음:

<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.series.Series'>
<class 'pandas.core.frame.DataFrame'>

 

따라서 데이터를 살펴보는 단계에서는 as_frame=True를 사용하는 것이 편리함.


return_X_y=True 사용하기

return_X_y=True 옵션을 사용하면

  • Bunch 객체가 아니라
  • input data와 target을 바로 tuple 형태로 받을 수 있음.
from sklearn.datasets import fetch_california_housing

x_raw, y_raw = fetch_california_housing(return_X_y=True)

print(x_raw.shape)
print(y_raw.shape)

 

출력은 다음과 같음:

(20640, 8)
(20640,)

참고: 시각화, 전처리 및 회귀모델 훈련

간단한 시각화

California Housing Dataset은

  • 위도와 경도 정보를 포함하고 있으므로,
  • 위치 기반으로 target 분포를 간단히 살펴볼 수 있음.
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_california_housing

housing = fetch_california_housing(as_frame=True)
df = housing.frame

plt.figure(figsize=(8, 6))

plt.scatter(
    df["Longitude"],
    df["Latitude"],
    c=df["MedHouseVal"],
    s=5,
    alpha=0.5
)

plt.xlabel("Longitude")
plt.ylabel("Latitude")
plt.title("California Housing Data")
plt.colorbar(label="MedHouseVal")

plt.show()

이 code는

  • 각 district를 위도와 경도에 따라 점으로 표시하고,
  • 주택 가격인 MedHouseVal을 색으로 나타냄.


Train/Test Dataset 나누기

Machine Learning model을 학습하려면

  • 전체 dataset을 training dataset과
  • test dataset으로 나누는 것이 일반적임.
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split

housing = fetch_california_housing()

x_raw = housing.data
y_raw = housing.target

x_train, x_test, y_train, y_test = train_test_split(
    x_raw,
    y_raw,
    test_size=0.2,
    random_state=42
)

print(x_train.shape)
print(x_test.shape)
print(y_train.shape)
print(y_test.shape)

출력 예시는 다음과 같음:

(16512, 8)
(4128, 8)
(16512,)
(4128,)

Feature Scaling 및 LinearRegression 모델 훈련

California Housing Dataset의 feature들은
서로 scale이 다름.

예를 들어,

  • MedInc는 소득 관련 값임.
  • Population은 인구 수임.
  • Latitude, Longitude는 위치 좌표임.
  • AveRooms, AveBedrms는 평균 방 개수임.

이처럼 feature마다 값의 범위가 다르기 때문에,
일부 model에서는 feature scaling이 중요함.

예를 들면 다음과 같음:

  • LinearRegression
  • Ridge
  • Lasso
  • SVR
  • KNeighborsRegressor
  • Neural Network 기반 regression model

https://dsaint31.tistory.com/720

 

[ML] Feature Scaling

Feature ScalingML에서 feature scaling이란 다음을 의미함.input data의 각 feature들의 값이 일정한 범위(a consistent range)나 표준화된 척도(standardized scale)로 변환하는 과정. Feature Scaling은 ML에서모든 feature가

dsaint31.tistory.com

 

다음은 StandardScalerLinearRegressionPipeline으로 묶어 사용하는 예임.

from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

housing = fetch_california_housing()

x_raw = housing.data
y_raw = housing.target

x_train, x_test, y_train, y_test = train_test_split(
    x_raw,
    y_raw,
    test_size=0.2,
    random_state=42
)

# StandardScaler로 feature를 정규화한 뒤 LinearRegression 모델을 적용하는 Pipeline 생성
model = make_pipeline(
    StandardScaler(),  # 각 feature를 평균 0, 분산 1로 스케일링
    LinearRegression()  # 선형 회귀 모델
)

model.fit(x_train, y_train)

y_pred = model.predict(x_test)

mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print("MSE:", mse)
print("R2 Score:", r2)

 

Pipeline을 사용하면 scaling과 model 학습 과정을 하나의 객체로 묶을 수 있음:

https://dsaint31.tistory.com/829

 

[ML] scikit-learn: Pipeline 사용법

Scikit-learn의 Pipeline은 여러 데이터 처리 과정을 하나로 묶어 효율적으로 실행할 수 있게 해주는 Class.(일반적인) Pipeline 이란?Pipeline은 일반적으로 (데이터) 처리 과정 또는 기계학습 등에서 “여러

dsaint31.tistory.com

https://dsaint31.me/mkdocs_site/ML/ch01/ch01_41/?h=elastic#1-linear-regression

 

BME

bagging boosting ensemble machine-learning ml random-forest regression rf scikit-learn support-vector-machine svm [ML] Classic Regressor (Summary) DeepLearning 계열을 제외한 Regressor 모델들을 간단하게 정리함. ​ 분류 Instance Based Alg

dsaint31.me

https://dsaint31.tistory.com/710

 

[Statistics] coefficient of determination (결정계수 ~ R squared)

Coefficient of Determination데이터에 대한 현재 regression 모델의 성능(or 적합도)를 평가함 ▷ 1에 가까울수록 좋은 모델임: [0,1]통계 (linear model 한정, 더 정확하게는 OLS w/ intercept 한정)에서 사용되는 경

dsaint31.tistory.com


정리

fetch_california_housing()
scikit-learn에서 제공하는
대표적인 regression dataset loading 함수임.

California Housing Dataset은

  • regression 문제 연습에 적합함.
  • sample 수가 20,640개로 Boston Housing Dataset보다 큼.
  • input feature는 8개임.
  • target은 district 단위의 median house value임.
  • target 단위는 10만 달러임.
  • Bunch, NumPy array, pandas DataFrame 형태로 모두 사용할 수 있음.
  • 위도와 경도를 포함하므로 위치 기반 시각화도 가능함.

같이 보면 좋은 자료들

2024.05.18 - [Python] - [ML] Dataset: Wisconsin Breast Cancer Dataset

 

[ML] Dataset: Wisconsin Breast Cancer Dataset

Wisconsin Breast Cancer Dataset (WBCD):Wisconsin Breast Cancer Dataset (WBCD)은오늘날 Machine Learning 및 Data Science 분야에서binary classification 교육용으로 자주 사용되는 Dataset임. Wisconsin 대학의 병리학자인 Dr. William H.

ds31x.tistory.com

https://dsaint31.tistory.com/960

 

Linear Regression (Summary)

0. Linear Regression 분류Linear Regression ├── 1. Error model 기준 │ ├── OLS 계열 │ │ ├── X: fixed or error-free │ │ ├── y: noise 있음 │ │ └── $\text{Var}(\varepsilon) = \sigma^2\mathbf{I}$│ │ │ ├

dsaint31.tistory.com

 

728x90