Kaggle에서 진행하는 House Prices: Advanced Regression Techniques 데이터셋을 분석하였다.
Regresssion을 통한 집값 예측하기 위해 그전에 아래 4가지 단계로 나누어 데이터 탐색을 진행하였다.
출처 : https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data
상관관계, 정규 분포
In [22]:
# 면적과 가격의 상관관계 분석
corrMatt_area = house_train[["LotArea","MasVnrArea","BsmtFinSF1","BsmtFinSF2","BsmtUnfSF","TotalBsmtSF","1stFlrSF","2ndFlrSF","LowQualFinSF","GrLivArea","GarageArea","WoodDeckSF","OpenPorchSF","EnclosedPorch","3SsnPorch","ScreenPorch","PoolArea","SalePrice"]]
corrMatt_area = corrMatt_area.corr()
print(corrMatt_area)
mask = np.array(corrMatt_area)
mask[np.tril_indices_from(mask)] = False
In [23]:
# 면적과 가격의 상관관계 그래프
fig, ax = plt.subplots()
fig.set_size_inches(20,10)
sns.heatmap(corrMatt_area, mask=mask,vmax=.8, square=True,annot=True)
Out[23]:
- 1층의 평방피트(1stFlrSF)와 지하실 면적의 총 평방피트(TotalBsmtSF)는 0.82로 상관관계가 가장 높다.
- 가격과 가장 연관이 높은건 지상층의에서 살수 있는 면적의 평방 피트(GrLivArea)이다. (0.71)
- 평방 피트(면적)과 관련된 컬럼은 가격과 거의 연관 관계가 없다.
In [25]:
# 주택구성과 가격의 상관관계 그래프
# corrMatt_area = house_train[["Bedroom","Kitchen","TotRmsAbvGrd","Functional","Fireplaces","GarageCond","GarageType","GarageYrBlt","BldgType","HouseStyle","OverallQual","OverallCond","HeatingQC","Neighborhood","Condition1","Condition2","RoofMatl","SalePrice"]]
corrMatt_area = house_train[["TotRmsAbvGrd","Functional","Fireplaces","GarageCond","GarageType","GarageYrBlt","BldgType","HouseStyle","OverallQual","OverallCond","HeatingQC","Neighborhood","Condition1","Condition2","RoofMatl","SalePrice"]]
corrMatt_area = corrMatt_area.corr()
print(corrMatt_area)
mask = np.array(corrMatt_area)
mask[np.tril_indices_from(mask)] = False
In [26]:
# 주택구성과 가격의 상관관계 그래프
fig, ax = plt.subplots()
fig.set_size_inches(20,10)
sns.heatmap(corrMatt_area, mask=mask,vmax=.8, square=True,annot=True)
Out[26]:
- 전체 재료 및 마감 품질(OverallQual)이 0.79로 상관관계가 가장 높게 나왔다.
- 나머지 변수들은 별로 상관이 없어 보인다.
In [27]:
# trainWithoutOutliers
house_trainWithoutOutliers = house_train[np.abs(house_train["SalePrice"] - house_train["SalePrice"].mean()) <= (3*house_train["SalePrice"].std())]
print(house_train.shape)
print(house_trainWithoutOutliers.shape)
In [28]:
# saleprice 가격 분포도 파악(정규분포 적용, 중심 극한 정리)
figure, axes = plt.subplots(ncols=2, nrows=2)
figure.set_size_inches(12, 10)
sns.distplot(house_train["SalePrice"], ax=axes[0][0])
stats.probplot(house_train["SalePrice"], dist='norm', fit=True, plot=axes[0][1])
sns.distplot(np.log(house_trainWithoutOutliers["SalePrice"]), ax=axes[1][0])
stats.probplot(np.log1p(house_trainWithoutOutliers["SalePrice"]), dist='norm', fit=True, plot=axes[1][1])
Out[28]:
- 판매가격(SalePrice)의 이상치(Outlier) 제거 전후의 차트 비교 결과, 이상치를 제거한 케이스가 정규분포에 더 가까워진다.
참고¶
- Q-Q(Quantile-Quantile) 플롯은 분석할 표본 데이터의 분포와 정규분포의 분포 형태를 비교하여 표본 데이터가 정규분포를 따르는지 검사하는 간단한 시각적 도구이다.
- 사이파이 패키지의 stats 서브패키지는 Q-Q 플롯을 계산하고 그리기 위한 probplot() 명령을 제공한다.
관련 글 모아보기
[kaggle] House Prices: Advanced Regression Techniques (1) 데이터형태
[kaggle] House Prices: Advanced Regression Techniques (2) 범주형 데이터 인코딩
[kaggle] House Prices: Advanced Regression Techniques (3) 그래프
[kaggle] House Prices: Advanced Regression Techniques (4) 상관관계, 정규 분포
'Competition > Kaggle' 카테고리의 다른 글
[kaggle] Titanic: Machine Learning from Disaster (1) (0) | 2020.08.31 |
---|---|
[kaggle] House Prices: Advanced Regression Techniques (3) 그래프 (0) | 2020.04.28 |
[kaggle] House Prices: Advanced Regression Techniques (2) 범주형 데이터 인코딩 (0) | 2020.04.27 |