241012 TIL #513 AI Tech #48 EDA 과정 정리

김춘복·2024년 10월 13일
0

TIL : Today I Learned

목록 보기
515/543
post-custom-banner

Today I Learned

오늘은 EDA 과정을 보기 쉽게 정리해보았다.


EDA

  1. 기술 통계량(평균, 중앙값, IQR, 분산, 표준편차) 파악
    pandas의 df.describe() 사용.
    수치형 변수만 측정하므로 범주형은 수치형으로 변환해야한다.

  2. 히스토그램으로 분포 파악
    pandas의df\['column'].hist()나 matplotlib의 plt.hist()

  3. boxplot으로 이상치 파악
    pandas의 boxplot() 함수나 seaborn의 sns.boxplot(x=df['column'])

  4. 결측치 파악
    pandas의 df.isnull().sum() 사용
    missing_ratio = df.isnull().mean() * 100 를 쓰면 퍼센트로 확인 가능

  1. 상관관계 파악 : 두 변수간 관계의 강도와 방향을 나타낼뿐 인과관계는 x
    pandas의 corr()이나 Seaborn의 heatmap() 사용

  2. 인과관계 파악 : 독립변수 -> 종속변수.
    시간적 선후가 있어야되고 함께 변하는 패터이 있어야하고 다른 변수를 통제해야 한다.


변수 처리

수치형 변수

  • 연속형과 이산형 변수로 나뉜다.

  • 정규화를 통해 데이터를 특정 분포(or 범위)로 바꿀 수 있다.(L1, L2 정규화)

  • 스케일링을 통해 모든 변수의 크기를 일정하게 맞춰 모델이 특정 변수에 의존하지 않게 한다.
    standard, min-max, robust, MaxAbs 방법이 있다.
    트리기반 모델은 데이터를 각 특성값만 비교하기 때문에 큰 영향이 없고,
    선형모델이나 KNN, SVM같은 거리기반 모델에서 중요하다.
    단, 앙상블할꺼면 전체 데이터 일관성 위해서 스케일링을 트리모델에도 하는게 좋다.

  • (중요) 스케일링 사용시 훈련데이터로만 fit 해야한다!!
    이렇게 해야 모델 평가시 편향을 방지할 수 있다.
    훈련 데이터만 scaler.fit_transform(X_train)을 사용해야한다!
    테스트나 검증 데이터는 scaler.transform(X_test)을 사용한다.
    그리고 컬럼별로 할 필요는 없으며 dataframe에 바로 적용하면 된다.

범주형 변수

  • 명목형(순서나 크기 상관 x)과 순서형(숫자가 의미 있음) 변수로 나뉜다.

  • 모델에서 활용하려면 숫자나 모델이 이해할 수 있는 방식으로 전처리(인코딩)이 필요하다.

  • 명목형은 one-hot 인코딩, pandas의 get_dummies() 사용한다.
    단, 클래스 하나당 컬럼이 하나가 더 생성되므로 차원이 너무 늘어날 수 있다.
    일반적으로 10~50개 정도 클래스까진 문제가 없다고는 한다.
    (트리기반모델은 100~200개 피처까진 문제가 크게 없으므로 이정도 까진 괜찮다.)

  • 순서형은 label(각 클래스에 고유 숫자 라벨 할당)이나 순서 인코딩이 좋다.

  • 타겟인코딩 : 범주형변수를 타겟 변수의 평균값으로 변환, 편향과 과적합 위험이있음
    빈도인코딩 : 각 범주를 데이터셋에서 나타나는 횟수로 변환


결측치 이상치 처리

  • 결측치는 삭제하거나 통계값(평균, 최빈값 등), 회귀방식사용, 특수값(-999or-1) 등으로 대체할 수 있다.

  • 이상치는 z-score로 |Z|>=3 넘거나, IQR을 사용하거나, DBSCAN으로 밀도가 낮은 군집을 이상치로 볼 수 있다.

  • 이상치도 삭제, 대체가 가능하고, 추가적으로 극단값은 상-하한값으로 바꾸기도 한다.


파생변수 생성

  • 기존변수를 조합하거나 변환해서 새로 만든 것을 파생변수라 한다.

로그변환

특정 분포의 데이터를 정규(에가까운)분포로 변환하거나 스케일 축소를 위해 사용하는 방법

  • 주로 오른쪽으로 비대칭적(skewed)인 데이터의 분포를 개선하는 데 유용하다.
    대다수가 작은 값이지만 소수의 큰값이 있는 경우를 오른쪽으로 비대칭적이라 한다.
    ex) 대부분 몰려있지만 일부 상품만 판매량이 높거나 비싼 경우

cf. 왼쪽으로 치우친 데이터(대부분 높고 일부만 낮음)는 다른 Yeo-Johnson이나 거듭제곱, 지수변환 등을 사용하는게 좋다.

  • 분포의 왜곡을 완화하고, 이상치 영향을 줄이고, 곱셈관계를 덧셈관계로 변환해주는 효과가 있다.

  • 0이하 값에 적용되지 않으므로 음수는 미리 처리하거나 log(x + 1)변환을 많이 사용한다.

  • 데이터의 스케일이 바뀌므로 해석하려면 지수함수를 적용해야한다.


평가지표

  • 회귀모델에서는 손실함수로 사용되는 MAE, MSE, RMSE도 평가지표로 사용된다.

  • 결정계수(R2R^2) : 1 - (잔차제곱합/전체제곱합)
    모델이 종속 변수의 분산을 얼마나 설명하는지를 나타내는 비율로 1에 가까울수록 좋다.
    1에 가까우면 실제 데이터와 유사하게 출력된다는 뜻.
    하지만 이상치에 민감해서 왜곡될 수 있다.

profile
Backend Dev / Data Engineer
post-custom-banner

0개의 댓글