보스턴 주택가격 예측
- 1970년대 미국 인구조사 서비스 (US Census Service)에서 보스턴 지역의 주택 가격 데이터를 수집한 데이터를 기반으로 모델 빌딩
- 해당 링크에서 다운로드 : https://www.kaggle.com/datasets/vikrishnan/boston-house-prices
- 개별 주택가격의 예측이 아니라 지역별 중간 주택가격 예측임
- Regression 알고리즘 사용 예정
- 연속적인 주택가격을 예측이기에 Classification 알고리즘은 사용불가
- 총 506개의 레코드로 구성되며 13개의 피쳐와 레이블 필드(주택가격) 로 구성
- 506개 동네의 주택 중간값 데이터임 (개별 주택이 아님에 유의)
- 14번째 필드가 바로 예측해야하는 중간 주택 가격
- Python OLS 회귀분석은 아래 링크 참고
모델링
1. SparkSession 생성 및 데이터 읽어오기
from pyspark.sql import SparkSession
spark = SparkSession \
.builder \
.appName("Boston Housing Linear Regression example") \
.getOrCreate()
data = spark.read.csv('./boston_housing.csv', header=True, inferSchema=True)
data.printSchema()
2. 피쳐 추출과 변환 (Feature Vector 만들기)
from pyspark.ml.feature import VectorAssembler
feature_columns = data.columns[:-1]
assembler = VectorAssembler(inputCols=feature_columns, outputCol="features")
data_2 = assembler.transform(data)
data_2.show()
- VectorAssembler : input이 되는 컬럼들을 하나로 묶음
- inputCols는 target 컬럼을 제외한 독립변수들을 묶으며, 이를 묶은 컬럼이 outputcol 이다.
- assembler는 위 역할을 진행할 object 이다.
- Transform : 하나의 input을 받아서 새로운 컬럼을 생성
3. Train / Test Set 분리 및 Linear Regression Modeling
- 2번에서 만든 features 컬럼을 featuresCol을 지정하고, lableCol은 예측해야하는 label값을 넣는다.(종속변수)
train, test = data_2.randomSplit([0.7, 0.3])
from pyspark.ml.regression import LinearRegression
algo = LinearRegression(featuresCol="features", labelCol="medv")
model = algo.fit(train)
4. 모델 성능을 측정한다.
- Test 데이터로 측정
- evaluate라는 함수를 사용한다.
- MAE, RMSE, R2값등을 확인할 수 있다.
evaluation_summary = model.evaluate(test)
print(evaluation_summary.meanAbsoluteError) # 3.078919367841893
print(evaluation_summary.rootMeanSquaredError) #3.934134704246837
print(evaluation_summary.r2) # 0.7596516870936096
5. 모델 예측값과 실제값 비교
predictions = model.transform(test)
predictions.select(predictions.columns[13:]).show()
6. 모델 저장
model.save("boston_housing_model")
model.save(path) #path를 지정하여 저장할 수 있다.
7. 모델 load 및 재사용
from pyspark.ml.regression import LinearRegressionModel
loaded_model = LinearRegressionModel.load(path) # "boston_housing_model"
위 포스팅은 [파이썬으로 해보는 Spark 프로그래밍 with 프로그래머스] 강의를 듣고 정리한 내용입니다
728x90
반응형