데이터 분석의 일반적인 순서
- 데이터 수집
- 데이터 전처리
- 탐색적 데이터 분석(EDA)
- 특성 공학(Feature Engineering)
+머신러닝
Feature Engineering을 위한 기초 개념
Feature 종류
৹ Categorical
- Nominal: 여러 가지로 나뉘고 자연적인 순서가 없는 범주형 변수
- Ordinal: 여러 가지로 나뉘고 자연적인 순서가 있는 범주형 변수
৹ Numerical
- Discrete: 유한하거나 개수를 헤아릴 수 있는 숫자형 변수
- Continuous: 무한하거나 개수를 헤아릴 수 없는 숫자형 변수
Feature Engineering의 분류
৹ 특성 선택 (Feature Selection)
- 해당 도메인 전문가의 지식이, 특성의 중요도에 따라 일부 특성을 버리거나 선택
- 과대적합을 방지하기 위해 비교적 중요하지 않은 Feature 제외
- 특성들의 조합으로 아예 새로운 특성 생성
ex. 주성분 분석(PCA)
৹ 범위 변환(Scaling)
- 변수의 분포가 편향되어 있을 경우, 이상치가 많이 존재할 경우 등 변수의 특성이 잘 드러나지 않고 활용하기 어려울 경우 변수의 범위를 바꾸어준다.
- 변수와 분산의 편차를 바꾸어 변수간 규모 차이를 줄인다.
- 기존에 존재하는 변수의 성질을 이용하여 새로운 변수 생성
৹ 범주화(Binning)
- 연속형 변수를 범주형 변수로 변환
- Numerical Feature만으로는 경향을 보기 어려울 때
৹ 숫자화(Dummy)
- 범주형 변수를 연속형 변수로 변환
- Categorical Feature는 조작이 어렵기 때문
데이터 전처리 & EDA
데이터 탐색
- info()
- 데이터프레임에 대한 요약 정보 출력
- Dtype => Feature의 자료형 확인
- select_dtypes()
- 데이터프레임의 Feature를 자료형에 따라 나눠준다.
- Categorical Features와 Numerical Features의 개수를 알 수 있다.
결측치
- 결측치: Feature가 적절한 값을 갖지 못하고 무의미한 값을 갖는 경우
- 데이터 조작 시 오류를 일으키거나 데이터에 대해 잘못된 결론을 내릴 수 있다.
- None, Null, NaN(Not a Number), “ “(공백), “-” 등
이상치
- Numerical Feature에서 일반적인 값 분포에서 벗어난 값
- 데이터 해석이나 머신러닝 모델의 학습을 방해한다.
- 찾는 방법
- 값의 범위를 지정하여 범위에서 벗어나는 값 찾기
- 비교적 기준이 명확하고 과정이 간결
- 데이터 비전문가에게 설명하기 어려울 수 있다.
- 데이터를 시각화하여 그래프에서 눈에 띄는 값 찾기
- 어떤 데이터가 왜 이상치인지 한눈에 들어온다.
- 기준이 다소 주관적일 수 있다.
희소값
- Categorical Feature에서 빈도가 낮은 값
- 데이터 해석을 어렵게 하고 머신러닝 성능을 낮출 수 있다.
- 전체 데이터의 경향을 파악하기 어렵게 한다.
Feature Scaling
- 트리기반 모델은 정보 균일도를 기반으로 되어 있기 때문에 피처스케일링이 필요 없다.
- 트리기반 모델은 데이터의 절대적인 크기보다 상대적인 크기에 영향을 받기 때문에 스케일링을 해도 상대적 크기관계는 같다.
중요성
- 서로 다른 변수끼리 비교하기 편리하다.
- Feature Scailing 없이 작동하는 알고리즘에서 더 빨리 작동한다.
- 머신러닝 성능이 상승한다.
- (Robust scaling) 사분위수를 기준으로 값을 스케일링하여 이상치가 매우 큰 값이나 매우 작은 값을 갖는 경우 이를 완화시켜주는 효과가 있다.
스케일링 기법
① 표준화 (Z-score scaling)
- 정의: 평균을 빼주고 표준편차로 나눠준다.
- 장점: 표준편차가 1, 중심을 0으로 하는 표준 정규 분포를 갖도록 조정
- 단점: 평균을 이용하여 계산 ⇒ 이상치에 영향을 받는다.
- 공식:
z = (X - X.mean) / std
② Min-Max scaling
- Feature를 지정된 범위로 확장하여 기능 변환 (기본: 0~1 사이 값으로 만든다.)
- 단점: 이상치를 포함하고 있으면 범위설정에 영향이 가기 때문에 이상치에 의해 영향을 많이 받는다
- 공식:
X_scaled = (X - X.min) / (X.max - X.min)
③ Robust scaling
- 정의: 중간값을 빼주고 분위수 범위(기본: IQR)로 나눠준다 => 이상치에 덜 민감
- 장점: 변수의 분산을 더 잘 보존, 이상치 제거에 효과적
- 공식:
X_scaled = (X - X.median) / IQR
트랜스포메이션
- Feature Scaling이 잘 되었어도 아직 표준정규분포 형태가 아니다.
- 표준정규분포 형태로 만들기 위해 Log Transformation 필요
⇒ log함수: x값에 대해 상대적으로 작은 스케일에서는 키우고. 큰 스케일에서는 줄여주는 효과
정규분포와 트랜스포메이션
- Scaling은 Feature의 범위를 조정하지만, Feature의 분포 자체는 유지되기 때문에 일반적으로 Feature Scaling은 편향된 분포나 이상치에 취약
⇒ Transformation을 적용한 이후 Feature Scaling을 적용하면 표준정규분포를 얻는다.
- 정규분포가 중요한 이유?
- log함수는 x값이 커질수록 기울기가 완만해진다.
= x값이 작을수록 y의 변화량이 크고, x값이 클수록 y의 변화량이 작다.
- 작은 숫자들 사이의 차이는 벌어지고 큰 숫자들 사이의 차이는 줄어든다.
- 편향된 Feature에 log를 적용하면 더 고르게 분포되어 y값을 예측하는데 더 유용하다.
이산화
- Numerical Feature를 일정 기준으로 나누어 그룹화하는 것
필요성
- 우리의 사고방식과 부합하는 측면이 있어 직관적이다.
ex) 한 그룹의 구성원을 나이가 다양하다.
→ 10살 단위로 나누어 20대, 30대, … 분석하면 경향이 뚜렷해지고 이해하기 쉬워진다.
- 데이터 분석과 머신러닝 모델에 유리하다.
- 유사한 예측 강도를 가진 유사한 속성을 그룹화하여 모델 성능을 개선하는데 도움
- Numerical Feature로 인한 과대적합 방지
종류
① Equal width binning
- 범위를 기준으로 나누는 것
- 한 분할 안에 몇 개가 들어가는지와 무관하게 전체 수치 범위에 대해 n분할하는 것
- 단점: 편향된 분포에 민감
ex) 절대평가, 히스토그램, pd.cut(), 고객을 구매 금액 구간에 따라 나눌 때
② Equal frequency binning
- 빈도를 기준으로 나누는 것
- 개수를 기준으로 n분할하는 것
- 장점: 알고리즘의 성능을 높이는데 도움
- 단점: 대상과의 관계를 방해할 수 있다.
ex) 상대평가, pd.qcut(), 고객을 나눌 때 고객의 수를 기준으로 등급을 나눌 때
Pandas에서의 이산화
- 메서드로 지원
- Equal width binning : pd.cut()
- Equal frequency binning : pd.qcut()
인코딩
- Categorical Feature를 Numerical Feature로 변환하는 과정
필요성
- 데이터 시각화에 유리하다.
ex) 변화의 추이 관찰(lineplot), 산점도(scatterplot)
- 머신러닝 모델에 유리하다.
ex) 선형회귀 모델, 딥러닝모델 등
종류
① Ordinal-Encoding
- Categorical Feature의 고유 값들을 Ordinal Feature, 임의의 수샂러로 변환
- 장점: 직관적이다. 개념적으로 복잡하지 않고 간단하다.
- 단점: 데이터에 추가적인 가치를 더해주지 않는다.
- Ordinal-Encoding은 표현 방식을 바꿀 뿐 데이터의 정보 자체는 동일하다.
② One-Hot-Encoding
- Categorical Featuref를 다른 Bool 변수로 대체하여 해당 관찰에 대해 특정 레이블이 참인지 여부를 나타낸다.
- 장점: 해당 Feature의 모든 정보를 유지한다.
- 단점: 해당 Feature에 너무 많은 고유값이 있는 경우 Feature를 지나치게 많이 사용한다.