[ML] 실습 - 집 값 예측 (feat. Linear Model)

Minjeong Kim·2025년 11월 28일

인공지능

목록 보기
11/50

Linear 모델을 활용하여 집값을 예측해보자!

1. 문제 정의

Linear 모델을 활용하여 집값을 예측해보자!

2. 데이터 수집

# 데이터 불러오기
data = pd.read_csv('./data/melb_data(price).csv')
data.head()

3. 데이터 전처리

3.1. Car 데이터 결측치 채우기

  1. 결측치 확인

    data.isnull().sum().sort_values(ascending=True)
    data['Car'].isnull().sum()
  2. 상관관계 확인

    data.corr(numeric_only=True)['Car'].abs().sort_values(ascending=True)
  3. 결측치 채우기

    # 1. 피못테이블 만들기
    pt = data.pivot_table(values = 'Car',
                          aggfunc = 'mean',
                          index = ['Rooms','Type'])
    
    # 2. 채우기
    def getCar(data):
    	if pd.isnull(data['Car']):
    		return pt.loc[(data['Rooms'], data['Type']), 'Car']
    	else:
    		return data['Car']
    
    data['Car'] = data.apply(getCar, axis=1)

3.2. 컬럼 선정

  • 모델링 진행을 위하여 집 값에 영향을 많이 미치는 컬럼을 선택하여 학습
  • 수업 시간 제한으로 강사님이 임의로 컬럼 선정하심
  • 나중에 시간 될 때 다른 컬럼들도 살펴보고 넣을지 말지, 그리고 특성공학 해보기
# 정답 데이터에 영향을 많이 미치는 컬럼 선택
feature_name =['Rooms', 'Type', 'Distance', 'Bedroom2', 'Bathroom', 'Car', 'Lattitude', 'Longtitude']
X = data[feature_name]
y = data['Price']

3.3. 인코딩

X_onehot = pd.get_dummies(X)

3.4. 데이터 분리

# train / test 분리
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_onehot, y, train_size=0.7, random_state=42) # 회귀라서 stratify X

4. 모델링

4.1. linear model

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

4.2. SGDRegressor

from sklearn.linear_model import SGDRegressor
sgd_model = SGDRegressor()
sgd_model.fit(X_train, y_train)
  • 경사하강법 이용하는 모델

5. W, b 구하기

# 선형 모델의 파라미터(W,b) 확인
# y = wx + b
# y = w1x1 + w2x2 + ... + w10x10 + b <- 입력 특성의 개수만큼 나옴!
w = lr_model.coef_
b = lr_model.intercept_
print(w,b)

6. 평가 지표

  • MSE(Mean Squared Error)
  • RMSE(Root Mean Squared Error)
  • MAE(Mean Absolute Error)
  • R2 Score
# mse
mse_sgd = mean_squared_error(y_test, pred)

# rmse
rmse_sgd = root_mean_squared_error(y_test, pred)

# mae
mae_sgd = mean_absolute_error(y_test, pred)

# r2score
r2score_sgd = sgd_model.score(X_test, y_test)

7. 성능 개선 작업

7.1. Scaling

  • 선형회귀 모델은 거리 계산 기반 모델이기 때문에 Scaling 작업 필요!
    X_train.columns
    float_cols = ['Rooms', 'Distance', 'Bedroom2', 'Bathroom', 'Car', 'Lattitude', 'Longtitude']
    
    X_train[float_cols] = sc.fit_transform(X_train[float_cols])
    X_test[float_cols] = sc.transform(X_test[float_cols])

7.2. SGDRegressor hyperparameter 조정

sgd_model_scaling = SGDRegressor(eta0=0.001, max_iter=5000)
sgd_model_scaling.fit(X_train, y_train)
  • eta0: learning rate (default=0.01)
  • max_iter: 에포크(학습횟수) 설정 (default=1000)
  • 드라마틱한 변화는 없음

0개의 댓글