멋사 ai 스쿨 TIL - (29)

eve·2022년 11월 14일
0

likeLion

목록 보기
27/45

EDA

1. df.hist()

시각화 하여 정규분포 여부를 확인 (피쳐 전처리 고민)

2. train.isnull().sum()

변수가 너무 많을 경우 결측치 요약을 확인한다.
train_null = train.isnull().sum()
train_sum = train_null[train_null > 0].sort_values(ascending=False)

3. 이상치 처리

  • 평균, 중앙값 등으로 대체
  • 데이터 왜곡에 주의할 것 (ex. 연예인 집값 != 일반인 집값)
  • 현실 데이터에서의 큰 문제.

4. 희소값 탐색

  • 범주형 데이터에서 빈도가 적게 등장하는 값
  • 단점:
    - 원핫인코딩 시, 범주가 적은 값을 피처로 만들어주면 연산 시간 증가
    - 과대적합의 우려가 있음
  • 대체 방안
    - ‘기타’ 로 희소값들을 묶어 binning 해주기
    - 아예 결측치로 처리하여 인코딩하지 않기

5. Feature Scaling

  • 트리기반 모델은 피처 스케일링이 필요하지 않음.

6. Transformation

  • 표준 정규분포 형태로 만들기 위해서는 로그 변환이 먼저.
  • hist를 그려서 시각적으로 확인한다.
train[['SalePrice_log1p_ss']].hist()
  • 꼭 표준 정규분포형태가 아니라 일반 정규분포 형태로 만들어주어도 머신러닝, 딥러닝에서 더 나은 성능을 낸다.
  • 음수 값이 많을 경우
    - 1을 더한 후 로그 변환을 해준다.
    - 최소값이 -1000처럼 1보다 작을 경우 1001 등의 값으로 |최솟값|+1을 해준다.
    - np.exp()를 해주면 로그 변환 이전 원래 값으로 되돌려줌
    - inverse

7. 이산화

(1) 절대평가 (Equal Width Binning)

  • 가능한 값의 범위를 동일한 너비의 N개의 bins로 나누게 된다.
  • 편향치에 민감
    (2) 상대평가 (Equal Frequency Binning)
  • (3) cut, qcut
  • RFM(Recency, Frequencey, Monetary) 기법에서도 종종 사용되는 방법으로, 비즈니스 분석에서 다룰 예정.

8. Label Encoder

(1) 범주형 데이터를 수치형 데이터로 바꾼다.
(2) Ordinal Encoding은 0-N, One-Hot-Encoding은 0, 1
(3) fit 기준은 train으로 해준다.
(4) unknown 컬럼 트러블슈팅: (handle_unknown = 'ignore')

ohe = OneHotEncoder(handle_unknown = 'ignore')
train_ohe = ohe.fit_transform(train[["MSZoning", "Neighborhood"]]).toarray()
test_ohe = ohe.transform(test[['MSZoning', 'Neighborhood']])
pd.DataFrame(train_ohe, columns=ohe.get_feature_names_out())

변환 중 알수 없는 범주가 발생하면, 그 결과로 생성되는 원-핫 인코딩된 열이 종종 존재하는 범주에 매핑되는 경우가 있음. 이러한 컬럼은 자주 발생하지 않음.

----- 오후 수업 ------

9. Dataset 가져오기

(1) shape, head 등으로 데이터 컬럼과 수치에 대한 간략한 확인 필수.
(2) set(train.columns) - set(test.columns) = labelname (구하고자 하는 정답값, 종속변수)
(3) sns.displot(aspect): plotly의 width처럼 bin의 너비를 조정하는 파라미터.
(4) kde, rug
(5) 왜도(skewness)와 첨도(kurtosis)

print("왜도(Skewness):", train["SalePrice"].skew())
print("첨도(Kurtosis):", train["SalePrice"].kurtosis())
profile
유저가 왜 그랬을까

0개의 댓글