- 프로젝트 : California Housing Prices
- 주최 : 울산대학교 산업경영공학부 수업 '산업인공지능'
캐글에 업로드 되어 있는 California Housing Prices 데이터셋을 이용하여 본교 수업에서 진행한 프로젝트입니다.
데이터는 아래와 같이 정형데이터이며, 7개의 column으로 이루어져 있습니다.
target 값 : MedVal
각 column들의 Correlation matrix
위도와 경도가 target 값과 크게 영향을 미치지 않는 것을 볼 수 있습니다.
하지만 아래 지도 사진을 보면 '특정 지역에 고가의 집들이 몰려있다' 라는 것을 눈으로 볼 수 있었습니다.
따라서 이와 같은 가설을 세울 수 있었습니다. "집값은 샌프란시스코와 같은 특정 지역을 주변으로 높게 형성 되어 있다."
이 가설을 시험해보고자 다음과 같은 순서를 따라 전처리를 진행하였습니다.
# San Francisco Bay의 좌표
center_lat_sf = 37.7749
center_lon_sf = -122.4194
# seal beach의 좌표
center_lat_sb = 33.65
center_lon_sb = -118.06
# Lake Tahoe의 좌표
center_lat_tahoe = 39.0968
center_lon_tahoe = -120.0324
# More Mesa의 좌표
center_lat_mesa = 34.4348
center_lon_mesa = -119.7910
# Pismo Beach의 좌표
center_lat_pb = 35.1428
center_lon_pb = -120.6413
(위도, 경도 출처 : Google)
👉 총 5곳의 위치가 선정되었습니다.
# San Francisco Bay의 좌표
center_lat_sf = 37.7749
center_lon_sf = -122.4194
def sanfrancisco_bay(df):
df['sanfrancisco_bay'] = np.sqrt((df['Latitude'] - center_lat_sf)**2 + (df['Longitude'] - center_lon_sf)**2)
return df
x_train = sanfrancisco_bay(x_train)
x_test = sanfrancisco_bay(x_test)
# seal beach의 좌표
center_lat_sb = 33.65
center_lon_sb = -118.06
def Seal_Beach(df):
df['Seal_Beach'] = np.sqrt((df['Latitude'] - center_lat_sb)**2 + (df['Longitude'] - center_lon_sb)**2)
return df
x_train = Seal_Beach(x_train)
x_test = Seal_Beach(x_test)
# Lake Tahoe의 좌표
center_lat_tahoe = 39.0968
center_lon_tahoe = -120.0324
def Lake_Tahoe(df):
df['Lake_Tahoe'] = np.sqrt((df['Latitude'] - center_lat_tahoe)**2 + (df['Longitude'] - center_lon_tahoe)**2)
return df
x_train = Lake_Tahoe(x_train)
x_test = Lake_Tahoe(x_test)
# More Mesa의 좌표
center_lat_mesa = 34.4348
center_lon_mesa = -119.7910
def More_Mesa(df):
df['More_Mesa'] = np.sqrt((df['Latitude'] - center_lat_mesa)**2 + (df['Longitude'] - center_lon_mesa)**2)
return df
x_train = More_Mesa(x_train)
x_test = More_Mesa(x_test)
# Pismo Beach의 좌표
center_lat_pb = 35.1428
center_lon_pb = -120.6413
def Pismo_Beach(df):
df['Pismo_Beach'] = np.sqrt((df['Latitude'] - center_lat_pb)**2 + (df['Longitude'] - center_lon_pb)**2)
return df
x_train = Pismo_Beach(x_train)
x_test = Pismo_Beach(x_test)
그 결과 모델의 성능은
0.44 -> 0.41(RMSE, 평균 : priviate, public)
로 상승하였습니다. (전체 2등)
실제로 만든 파생변수는 모델이 예측하는데 큰 도움을 주었음을 feature importance
를 통해 확인하였습니다.