부동산 가격 예측을 실천하다.

4986 단어 Python3기계 학습

데이터 설명


학습용 데이터: 1460
테스트 데이터: 1459
count      1460.000000
mean     180921.195890
std       79442.502883
min       34900.000000
25%      129975.000000
50%      163000.000000
75%      214000.000000
max      755000.000000
Name: SalePrice, dtype: float64

사전 처리


결손치 처리
행렬에서 부족한 값이 많은 값을 빼고 그 이외의 값은 중값으로 채웁니다.
y_train = train['SalePrice']
X_train = train.drop(['SalePrice'], axis=1)
X_test = test

Xmat = pd.concat([X_train, X_test])
Xmat = Xmat.drop(['LotFrontage','MasVnrArea','GarageYrBlt'], axis=1)
Xmat = Xmat.fillna(Xmat.median())

Label Encoder를 사용하여 object를 태그의 값으로 변환합니다.
from sklearn.preprocessing import LabelEncoder

for i in range(train.shape[1]):
    if train.iloc[:,i].dtypes == object:
        lbl = LabelEncoder()
        lbl.fit(list(train.iloc[:,i].values) + list(test.iloc[:,i].values))
        train.iloc[:,i] = lbl.transform(list(train.iloc[:,i].values))
        test.iloc[:,i] = lbl.transform(list(test.iloc[:,i].values))
비슷한 특징량을 결합하여 새로운 특징량을 생성하여 분석 효율을 높인다.
Xmat["TotalSF"] = Xmat["TotalBsmtSF"] + Xmat["1stFlrSF"] + Xmat["2ndFlrSF"]

데이터 시각화된 데이터 처리라고 볼 수 있다


SalePrice의 분포를 살펴보면 정적 분포가 아님을 알 수 있습니다.

대수 계산을 실시하여 다음과 같이 묘사한 정적 분포로 전환한다.

쌍곡선도

핫 매핑


상기 분석을 토대로 중요한 변수를 추출하다.(또한 유사한 변수는 다중 공선성을 가진 변수 추출 상관수가 큰 측이다.)
・OverallQual:Overall material and finish quality
・YeatBuilt:Original construction date
・YearRemodAdd:Remodeling or additions
・TotalSF:Total square feet
・GrLivArea:Above grade(ground)living area square feet
・FullBath:Full bathrooms above grade
・GarageCars:Size of garage in car capacity
다음 그림에서 각 변수를 표시하여 오프셋 값을 확인하고 삭제합니다.




박스맵으로 특별한 관계가 있을 수 있는 Overall Qual을 분석하면 뚜렷한 선형을 확인할 수 있다.

모델 생성하기


무작위 삼림을 이용하여 분석하다.산포도에서 선형을 확인할 수 없고 비중회귀분석이 더 적합하다는 이유다.
이 밖에 범용성이 높고 조화 파라미터가 적다는 장점도 있다.
from sklearn.model_selection import StratifiedKFold
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestRegressor

# データの分割方法を指定(層化)
kf = StratifiedKFold(n_splits=3, shuffle=True, random_state=0)

# パラメータの設定
param_grid = {'n_estimators': [400, 500, 600],
              'max_depth':  [3, 4]}

# グリッドサーチのモデルのインスタンスを作成
forest_model = GridSearchCV(RandomForestRegressor(), param_grid, cv = kf)

#ランダムフォレストを用いた学習を行う。
forest_model.fit(X, y)
이 학습을 통해 우리는 MSE와 결정 계수를 보았다.
Train   
Test
MSE
840155614.755
850460488.628
결정 계수
0.872
      0.850
예상과 결과의 잔차를 묘사한 도표도 나왔다.

경기의 석차


결과 점수 0.17576, 순위 3261/4748

결과와 향후 전망


예측 정밀도는 85% 로 부진에 빠졌다.또한 잔차를 보면 일정한 편차가 존재하고 특징량으로 추출해야 할 특징량도 존재한다.
이번 결손치와 편리치 처리는 주요한 처리가 되었고 변수 간의 관계성 등에 착안하여 진일보한 처리를 할 수 있는 여지를 남겼다.
앞으로 데이터의 예처리에서 할 수 있는 일을 늘리고 경기의 순서를 높이는 동시에 실무적인 과제 해결에도 힘쓰고 싶다.
코드는 여기 에 있습니다.

좋은 웹페이지 즐겨찾기