"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Scikit-learn을 사용한 주택 가격 예측: 완전한 가이드

Scikit-learn을 사용한 주택 가격 예측: 완전한 가이드

2024-11-02에 게시됨
검색:457

Predicting House Prices with Scikit-learn: A Complete Guide

머신러닝은 부동산을 포함한 다양한 산업을 변화시키고 있습니다. 일반적인 작업 중 하나는 침실 수, 욕실 수, 면적, 위치 등 다양한 특성을 기반으로 주택 가격을 예측하는 것입니다. 이 기사에서는 scikit-learn을 사용하여 주택 가격을 예측하는 기계 학습 모델을 구축하는 방법을 살펴보고 데이터 전처리부터 모델 배포까지 모든 측면을 다룹니다.

목차

  1. Scikit-learn 소개
  2. 문제 정의
  3. 데이터 수집
  4. 데이터 전처리
  5. 기능 선택
  6. 모델 교육
  7. 모델 평가
  8. 모델 튜닝(초매개변수 최적화)
  9. 모델 배포
  10. 결론

1. 사이킷런 소개

Scikit-learn은 Python의 기계 학습에 가장 널리 사용되는 라이브러리 중 하나입니다. 데이터 분석 및 모델링을 위한 간단하고 효율적인 도구를 제공합니다. 분류, 회귀, 클러스터링 또는 차원 축소를 처리하는 경우 scikit-learn은 강력한 기계 학습 모델을 구축하는 데 도움이 되는 광범위한 유틸리티 세트를 제공합니다.

이 가이드에서는 scikit-learn을 사용하여 주택 가격을 예측하는 회귀 모델을 구축하겠습니다. 프로세스의 각 단계를 살펴보겠습니다.


2. 문제 정의

당면 과제는 다음과 같은 특성을 기반으로 주택 가격을 예측하는 것입니다.

  • 침실 수
  • 욕실 수
  • 면적(평방피트)
  • 위치

이것은 대상 변수(주택 가격)가 연속적이어서 회귀 작업이 되는 지도 학습 문제입니다. Scikit-learn은 이 프로젝트에서 사용할 선형 회귀Random Forest와 같은 다양한 회귀 알고리즘을 제공합니다.


3. 데이터 수집

Kaggle 주택 가격 데이터 세트와 같은 실제 데이터 세트를 사용하거나 공개 API에서 자체 데이터를 수집할 수 있습니다.

다음은 데이터가 어떻게 보일지에 대한 샘플입니다.

침실 욕실 면적(평방피트) 위치 가격($)
3 2 1500 보스턴 300,000
4 3 2000 시애틀 500,000

여기서 대상 변수는 가격입니다.


4. 데이터 전처리

머신러닝 모델에 데이터를 공급하기 전에 사전 처리가 필요합니다. 여기에는 누락된 값 처리, 범주형 특성 인코딩, 데이터 크기 조정이 포함됩니다.

누락된 데이터 처리

실제 데이터세트에서는 데이터 누락이 흔히 발생합니다. 중앙값과 같은 통계 측정값으로 누락된 값을 채우거나 누락된 데이터가 있는 행을 삭제할 수 있습니다.

data.fillna(data.median(), inplace=True)

범주형 기능 인코딩

머신러닝 모델에는 숫자 입력이 필요하므로 위치와 같은 범주형 특성을 숫자로 변환해야 합니다. 라벨 인코딩은 각 카테고리에 고유 번호를 할당합니다.

from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
data['Location'] = encoder.fit_transform(data['Location'])

기능 스케일링

면적 및 가격과 같은 특성의 크기를 조정하여 동일한 크기를 유지하는 것이 중요합니다. 특히 특성 크기에 민감한 알고리즘의 경우 더욱 그렇습니다. 스케일링을 적용하는 방법은 다음과 같습니다.

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

5. 기능 선택

모든 기능이 대상 변수에 동일하게 기여하는 것은 아닙니다. 특징 선택은 가장 중요한 특징을 식별하는 데 도움이 되어 모델 성능을 향상시키고 과적합을 줄입니다.

이 프로젝트에서는 SelectKBest를 사용하여 대상 변수와의 상관 관계를 기반으로 상위 5개 기능을 선택합니다.

from sklearn.feature_selection import SelectKBest, f_regression
selector = SelectKBest(score_func=f_regression, k=5)
X_new = selector.fit_transform(X, y)

6. 모델 훈련

이제 데이터를 사전 처리하고 최상의 기능을 선택했으므로 모델을 학습할 차례입니다. 우리는 두 가지 회귀 알고리즘을 사용합니다: 선형 회귀Random Forest.

선형 회귀

선형 회귀는 데이터를 직선으로 연결하여 예측 값과 실제 값 간의 차이를 최소화합니다.

from sklearn.linear_model import LinearRegression
linear_model = LinearRegression()
linear_model.fit(X_train, y_train)

랜덤 포레스트

랜덤 포레스트(Random Forest)는 여러 의사결정 트리를 사용하고 그 결과를 평균화하여 정확도를 높이고 과적합을 줄이는 앙상블 방법입니다.

from sklearn.ensemble import RandomForestRegressor
forest_model = RandomForestRegressor(n_estimators=100)
forest_model.fit(X_train, y_train)

훈련-테스트 분할

모델이 얼마나 잘 일반화되는지 평가하기 위해 데이터를 학습 세트와 테스트 세트로 분할합니다.

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_new, y, test_size=0.2, random_state=42)

7. 모델 평가

모델을 훈련한 후 평균 제곱 오차(MSE)R 제곱(R²)

과 같은 측정항목을 사용하여 모델 성능을 평가해야 합니다.

평균 제곱 오차(MSE)

MSE는 예측 값과 실제 값 간의 평균 제곱 차이를 계산합니다. MSE가 낮을수록 성능이 향상됩니다.

from sklearn.metrics import mean_squared_error
mse = mean_squared_error(y_test, y_pred)

R 제곱(R²)

R²는 모델이 목표 변수의 분산을 얼마나 잘 설명하는지 알려줍니다. 값이 1이면 완벽한 예측을 의미합니다.

from sklearn.metrics import r2_score
r2 = r2_score(y_test, y_pred)

이러한 측정항목을 사용하여 선형 회귀 및 랜덤 포레스트 모델의 성능을 비교합니다.


8. 모델 튜닝(하이퍼파라미터 최적화)

모델 성능을 더욱 향상시키기 위해 하이퍼파라미터를 미세 조정할 수 있습니다. Random Forest의 경우 n_estimators(트리 수) 및 max_length(트리의 최대 깊이)와 같은 하이퍼 매개변수가 성능에 큰 영향을 미칠 수 있습니다.

초매개변수 최적화를 위해 GridSearchCV를 사용하는 방법은 다음과 같습니다.

from sklearn.model_selection import GridSearchCV

param_grid = {
    'n_estimators': [50, 100, 200],
    'max_depth': [None, 10, 20]
}

grid_search = GridSearchCV(RandomForestRegressor(), param_grid, cv=5)
grid_search.fit(X_train, y_train)

best_model = grid_search.best_estimator_

9. 모델 배포

모델을 훈련하고 조정한 후 다음 단계는 배포입니다. Flask를 사용하여 예측을 제공하는 간단한 웹 애플리케이션을 만들 수 있습니다.

다음은 주택 가격 예측을 제공하는 기본 Flask 앱입니다.

from flask import Flask, request, jsonify
import joblib

app = Flask(__name__)

# Load the trained model
model = joblib.load('best_model.pkl')

@app.route('/predict', methods=['POST'])
def predict():
    data = request.json
    prediction = model.predict([data['features']])
    return jsonify({'predicted_price': prediction[0]})

if __name__ == '__main__':
    app.run()

joblib:
를 사용하여 훈련된 모델을 저장합니다.

import joblib
joblib.dump(best_model, 'best_model.pkl')

이렇게 하면 API에 요청을 보내 예측을 할 수 있습니다.


10. 결론

이 프로젝트에서는 주택 가격을 예측하기 위해 scikit-learn을 사용하여 머신러닝 모델을 구축하는 전체 프로세스를 탐색했습니다. 데이터 전처리 및 기능 선택부터 모델 학습, 평가, 배포까지 각 단계를 실제 코드 예제로 다루었습니다.

머신러닝을 처음 접하는 사람이든 실제 프로젝트에 scikit-learn을 적용하려는 사람이든 이 가이드는 다양한 회귀 작업에 적응할 수 있는 포괄적인 워크플로를 제공합니다.

모델의 성능과 정확성을 향상시키기 위해 다양한 모델, 데이터세트, 기술을 자유롭게 실험해 보세요.

회귀 #AI #데이터 분석 #데이터 전처리 #MLModel #RandomForest #LinearRegression #Flask #APIDevelopment #RealEstate #TechBlog #Tutorial #DataEngineering #DeepLearning #PredictiveAnalytics #DevCommunity

릴리스 선언문 이 기사는 https://dev.to/amitchandra/predicting-house-prices-with-scikit-learn-a-complete-guide-2kd7?1에 복제되어 있습니다. 침해가 있는 경우에는 [email protected]으로 문의하시기 바랍니다. 그것을 삭제하려면
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3