데이터 사전 처리(Preprocessing)

import warnings
warnings.filterwarnings('ignore')
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline

house_df_org = pd.read_csv('')
house_df = house_df_org.copy()
house_df.head(3)

데이터 가공을 많이 수행할 예정이므로 원본 csv 파일 기반의 DataFrame은 보관하고 복사해서 데이터를 가공

 

house_df.shape
house_df.dtypes.value_counts()

isnull_series = house_df.isnull().sum()
isnull_series[isnull_series > 0].sort_values(ascending=False)

 

회귀 모델을 적용하기 전에 타깃 값의 분포도가 정규 분포인지 확인

plt.title('Original Sale Price Histogram')
plt.xticks(rotation=45)
sns.histplot(house_df['SalePrice'], kde=True)
plt.show()

 

original_SalePrice = house_df['SalePrice']
house_df['SalePrice'] = np.log1p(house_df['SalePrice'])

house_df.fillna(house_df.mean(), inplace=True)

null_column_count = house_df.isnull().sum()[house_df.isnull().sum()>0]
house_df.dtypes[null_column_count.index]

 

피처 데이터 세트의 경우 지나치게 왜곡된 피처가 존재할 경우 회귀 예측 성능을 저하시킬 수 있음

skwe()함수의 반환 값이 1 이상인 경우 왜곡 정도가 높다고 판단

이 때 skew()를 적용하는 숫자형 피처에서 원-핫 인코딩된 카테고리 숫자형 피처는 제외해야 한다

from scipy.stats import skew

#object가 아닌 숫자형 피처의 칼럼 index 객체 추출
features_index = house_df.dtypes[house_df.dtypes != 'object'].index

skew_features = house_df[features_index].apply(lambda x : skew())

skew_features_top = skew_features[skew_features > 1]
print(skew_features_top.sort_values(ascending=False))

 

house_df[skew_features_top.index] = np.log1p(house_df[skew_features_top.index])

 

회귀 계수가 높은 피처, 즉 예측에 많은 영향을 미치는 중요 피처의 이상치 데이터의 처리가 중요

plt.scatter(x = house_df_org['GrLivArea'], y = house_df_org['SalePrice'])
plt.ylabel('SalePrice', fontsize=15)
plt.xlabel('GrLivArea', fontsize=15)
plt.show()

 

cond1 = house_df_ohe['GrLivArea'] > np.log1p(4000)
cond2 = house_df_ohe['SalePrice'] < np.log1p(500000)

outlier_index = house_df_ohe[cond1&cond2].index

print(outlier_index.values)

house_df_ohe.drop(outlier_index, axis=0, inplace=True)

 

 

'ML' 카테고리의 다른 글

군집화  (2) 2022.11.20
차원 축소  (0) 2022.11.20
자전거 대여 수요 예측  (0) 2022.11.19
로지스틱 회귀  (0) 2022.11.19
선형 회귀 모델을 위한 데이터 변환  (0) 2022.11.18

+ Recent posts