이번 대회는 'Zestimate'라는 기관에서 지난 11년간 각 재산에 대한 데이터를 활요하여 통계 및 머신러닝
보통 부동산 집값 예측이라고 하면, 집과 관련된 여러변수들로 모델을 구축하여 집값을 예측하는 것 같지만,
이번 대회의 주제는 잔차 오차를 개선하기 위한 모델을 구축하는 것이 목표다.
여기서 잔차는 에러 즉, 실제 부동산값 - 예측 부동산 값을 의미한다.
SRK 님의 Simple Exploration Notebook - Zillow Prize 커널을 참고하여
target value와 관련있는 변수들 중심으로 데이터를 살펴보았다.
목록
[kaggle][필사] Zillow Prize: Zillow’s Home Value Prediction (1)
1.train data
1) Logerror
2) Transaction Date
3) ParceId
2. properties data
1) missing value
2) longitude, latitude
[kaggle][필사] Zillow Prize: Zillow’s Home Value Prediction (2)
3. all data
1) 일변량 분석
- 상관분석
- Finished SquareFeet 12
- Calculated finished square feet
- Bathroom
- Bedroom
- taxamount
- YearBuilt
2) 비선형 모델 구축
- ExtraTreesRegressor
- 변수 중요도
- xgboost
Zillow's Home Value Prediction
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
color = sns.color_palette()
%matplotlib inline
pd.options.mode.chained_assignment = None
pd.options.display.max_columns = 999
pd.options.display.float_format = lambda x: f'{x:.3f}'
1. train data
# train file exploration
train_df = pd.read_csv("../data/zillow-prize-1/train_2016_v2.csv", parse_dates=["transactiondate"])
train_df.shape
train_df.head()
Logerror
- 이번 대회의 목표값인 "logerrr" 변수를 보자. 이것이 분석의 첫걸음이다.
plt.figure(figsize=(8,6))
plt.scatter(range(train_df.shape[0]), np.sort(train_df.logerror.values))
plt.xlabel('index', fontsize=12)
plt.ylabel('logerror', fontsize=12)
plt.show()
양쪽 끝에 이상치 값들이 보인다. 이상치 값을 제고하고 histogram plot을 보자.
# 값의 99%에 해당하는 값을 upper limit 값으로 지정
ulimit = np.percentile(train_df.logerror.values, 99)
# 값의 1%에 해당하는 값을 lower limit 값으로 지정
llimit = np.percentile(train_df.logerror.values, 1)
# ulimit 보다 큰 logerror는 ulimit 값으로 대체
train_df['logerror'][train_df['logerror'] > ulimit] = ulimit
# llimit 보다 작은 logerror는 llimit 값으로 대체
train_df['logerror'][train_df['logerror'] < llimit] = llimit
plt.figure(figsize=(12,8))
sns.distplot(train_df.logerror.values, bins=50, kde=False)
plt.xlabel('logerror', fontsize=12)
plt.show()
normal한 분포가 되었다.
Transaction Date
- date 변수를 알아보자. 매월 발생한 trascations 수를 체크한다.
train_df['transaction_month'] = train_df['transactiondate'].dt.month
cnt_srs = train_df['transaction_month'].value_counts()
plt.figure(figsize=(12,6))
sns.barplot(cnt_srs.index, cnt_srs.values, alpha=0.8, color=color[3])
plt.xticks(rotation='vertical')
plt.xlabel('Month of transaction', fontsize=12)
plt.ylabel('Number of Occurrences', fontsize=12)
plt.show()
차트를 보면, train 데이터는 2016년 10월 15일 이전의 모든 거래와 2016년 10월 15일 이후 일부 거래가 포함된다. 그래서 우리는 3개월 동안 짧은 bar를 가지고 있다.
train_df['parcelid'].value_counts().reset_index()
ParceId
(train_df['parcelid'].value_counts().reset_index())['parcelid'].value_counts()
대부분의 parcelid 는 한번씩 나타난다.
2. properties data
# 2016년도의 특징
prop_df = pd.read_csv("../data/zillow-prize-1/properties_2016.csv")
prop_df.shape
prop_df.head()
많은 NaN 값이 보인다. 우선 missing value 분포부터 보자.
missing value
missing_df = prop_df.isnull().sum(axis=0).reset_index()
missing_df
missing_df.columns= ['column_name', 'missing_count']
missing_df = missing_df[missing_df['missing_count']>0]
missing_df = missing_df.sort_values(by='missing_count')
ind = np.arange(missing_df.shape[0])
width=0.9
fig, ax = plt.subplots(figsize=(15,20))
rects = ax.barh(ind, missing_df.missing_count.values, color='r')
ax.set_yticks(ind )
ax.set_yticklabels(missing_df.column_name.values, rotation= 'horizontal', fontsize=15)
ax.set_xlabel("Count of missing values", fontsize=15)
ax.set_title("Number of missing values in each column", fontsize=20)
plt.show()
missing value가 많은 변수는 유의미한지 따져보고, drop을 고민해본다.
longitude, latitude
이젠 위도와 경도별 데이터의 분포를 보자.
plt.figure(figsize=(12,12))
sns.jointplot(x=prop_df.latitude.values, y=prop_df.longitude.values, size=10)
plt.ylabel('Longitude', fontsize=12)
plt.xlabel('Latitude', fontsize=12)
plt.show()
위의 지도를 보면, 2016년 3개의 counties(Los angeles, Orange and Ventura, California)의 부동산 전체 목록을 제공한다.
우리는 trian에서 90,275개의 행과 properties file에는 2,985,217 행을 가지고 있다.
코드를 따라하시다가, 궁금한점은 언제든 댓글이나 이메일로 문의주세요 :)
'Competition > Kaggle' 카테고리의 다른 글
[kaggle][필사] Zillow Prize: Zillow’s Home Value Prediction (2) (0) | 2020.10.19 |
---|---|
[kaggle][필사] TensorFlow Speech Recognition Challenge (2) (0) | 2020.10.09 |
[kaggle][필사] TensorFlow Speech Recognition Challenge (1) (0) | 2020.10.08 |