멋쟁이 사자처럼 AI 스쿨 TIL-34

김영민·2022년 11월 14일
0

QnA

범주가 적은 값을 피처로 만들어 주면 어떤 문제가 또 있을 수 있을까요?

  • 과대적합의 우려

너무 희소한 값이라면 one-hot-encoding 할 때 어떤 전처리를 할 수 있을까요?

  • 기타로 묶는 방법도 있고 아예 결측치로 처리하고 pd.get_dummies 혹은 OneHotEncoder를 사용했을 때 인코딩 하지 않습니다.

왜 데이터를 정규분포 형태로 만들어주면 머신러닝이나 딥러닝에서 더 나은 성능을 낼까요?

  • 너무 한쪽에 몰려있거나 치우쳐져 있을 때보다 고르게 분포되어 있다면 데이터의 특성을 더 고르게 학습할 수 있습니다.

너무 큰 음수값이 있을때! 음수인 값이 너무 뾰족하거나 치우쳐져 있어서 로그를 취하기 위해서는 어떻게 전처리 해야 할까요? 예를 들어 –1000 이라면?

  • 최소값 + 1을 해줍니다

1000 에 1001 을 더해서 로그변환을 해주었습니다. 원래 값으로 다시 복원하려면 어떻게 해야 할까요?

  • np.exp(x) -1001

  • np.expm1 을 보면 exp를 먼저 하고 m1 으로 1을 나중에 빼주게 됩니다.

  • cut, qcut은

  • 이 방법은 RFM 기법에서도 종종 사용되는 방법으로 비즈니스 분석에서 다룰 예정입니다.

  • Recency, Frequency, Monetary => 고객이 얼마나 최근에, 자주, 많이 구매했는지를 분석할 때 사용합니다.

  • SalePrice - cut, qcut

  • 이 방법은 RFM 기법에서도 종종 사용되는 방법으로 비즈니스 분석에서 다룰 예정입니다. Recency, Frequency, Monetary => 고객이 얼마나 최근에, 자주, 많이 구매했는지를 분석할 때 사용합니다.

  • 연속된 수치 데이터를 구간화합니다. => 머신러닝 알고리즘에 힌트를 줄 수도 있습니다.

  • 트리모델이라면 너무 잘게 데이터를 나누지 않아 일반화 하는데 도움이 될 수도 있습니다.

  • 그렇다면 데이터는 나누는 기준이 중요한데, EDA를 통해 어떻게 나누는 것이 예측에 도움이 될지 확인합니다.

  • 연속된 수치데이터를 나누는 기준에 따라 모델의 성능에 영향을 주게 됩니다.

  • 오히려 잘못나누면 모델의 성능이 떨어질 수도 있습니다.

LabelEncoder, OrdinalEncoder 의 입력값의 차이?

  • Ordinal Encoding은 Label Encoding과 달리 변수에 순서를 고려한다는 점에서 큰 차이를 갖는다. Label Encoding이 알파벳 순서 혹은 데이터셋에 등장하는 순서대로 매핑하는 것과 달리 Oridnal Encoding은 Label 변수의 순서 정보를 사용자가 지정해서 담을 수 있다.
  • LabelEncoder 입력이 1차원 y 값, OrdinalEncoder 입력이 2차원 X값

X와 y의 차이점

feature_names : 학습(훈련), 예측에 사용할 컬럼을 리스트 형태로 만들어서 변수에 담아줍니다.

label_name : 정답값

X_train : feature_names 에 해당되는 컬럼만 train에서 가져옵니다.

학습(훈련)에 사용할 데이터셋 예) 시험의 기출문제
X_test : feature_names 에 해당되는 컬럼만 test에서 가져옵니다.

예측에 사용할 데이터셋 예) 실전 시험문제
y_train : label_name 에 해당 되는 컬럼만 train에서 가져옵니다.

학습(훈련)에 사용할 정답 값 예) 기출문제의 정답

구분이 잘 안 되는 값에 대해 power transform 을 해주기도 하는데 반대로 너무 차이가 많이 나는 값을 줄일 때 사용할 수 있는 방법?

  • 꼭 정답이 있다기 보다는 EDA를 해보고 어떤 스케일링을 하면 머신러닝 모델이 값을 학습하는데 도움이 될지 고민해 보면 좋습니다

histplot

  • 수치데이터의 분포 확인, 첨도를 통해 너무 뾰족하지 않은지 => 한쪽에 데이터가 몰려있는지 확인

concat

  • 장점 : 전처리를 한번만 해도 됩니다.
  • 단점 : test에만 등장하는 데이터를 피처에 사용하면 안 되는 대회 정책이 있을 때 정책 위반이 될 수 있습니다.

또 어떤 단점이 있을 수 있을까요?

  • 현실에서는 불가능한 방법

결측치 확인

# 결측치 확인
# 결측치 수와 비율을 함께 보고 싶다면 합계와 비율을 구해서 concat으로 합쳐줍니다.
# concat 에서 axis=0 은 행, axis=1은 열을 의미합니다.
# 메서드체이닝을 할 때는 도움말 보기가 잘 동작하지 않기 때문에 도움말을 보기 위해서는 변수에 할당하고 사용하는 것도 좋습니다.

isna_sum = df.isnull().sum()
isna_mean = df.isnull().mean()

pd.concat([isna_sum, isna_mean], axis=1).nlargest(10, 1)
profile
배운걸 다 흡수하는 제로민

0개의 댓글