archive
[1주차 (3)] 정형 데이터 전처리 본문
1. 데이터 전처리
-머신러닝 모델에 데이터를 입력하기 위해 데이터를 처리하는 과정
-EDA에 따라 달라지는 데이터 전처리
-모델, 목적에 따라 달라지는 데이터 전처리 ---> 선형모델? 트리? 딥러닝?
-연속형, 범주형 처리 / 결측치 처리 / 이상치 처리
2. 연속형 변수 처리
-Scaling
: 데이터의 단위 혹은 분포를 변경
:선형 기반 모델 (선형회귀, 딥러닝 등)인 경우 변수들 간의 스케일을 맞추는 것이 필수적
(1) Scale
- 보통 Robust Scaling 이 이상치의 영향을 받지 않는다.
(2) Scale + Distribution
-로그 변환은 변수의 분포가 왼쪽으로 많이 치우쳐져 있는 경우 이를 정규 분포의 모양으로 변환시켜준다
-지수 변환의 경우 이와 반대의 효과를 내게 된다
2. Quantile transformation
- 값을 uniform하게 변환시켜주거나 정규분포로 바꾸어주게 된다.
-log 변환과 다른 점은어떠한 분포가 들어와도 uniform 혹은 정규분포로 모델을 변환할 수 있다는 점
- 값을 나열한 다음 해당 분포에서 그 값이 위치하는 분위수를 가지고 변환하기 때문에 유용
** 분포의 변환을 하는 장점
-타겟과의 관계가 더 가깝게 변환될 수 있다 -> 더 명확히 파악 가능
++ Binning
- 연속형 변수를 범주형 변수로 바꾸는 방법
-넓고 얇은 다봉 분포에 유용하게 사용된다
-다봉 분포의 경우 봉우리 사이사이의 무의미한 정보가 존재하게 되는데, Overfitting을 유발하기 때문에 이를 예방 가능
3. 범주형 변수 처리
-범주형 변수 : 일종의 카테고리를 가지게 되는 변수를 의미
-범주형 변수는 대개 문자열로 되어있어서, 머신러닝 모델의 입력 데이터로 사용할 수 없기 때문에 수치형 변수로 인코딩 해주는 작업이 필수적이라고 할 수 있다.
(1) One hot encoding
- 0과 1로 인코딩하는 방법, 해당 피쳐가 존재하지 않으면 0, 해당 피쳐가 존재한다면 1로 인코딩
-장점 : 모델이 변수의 의미를 정확히 파악함 (변수가 존재함, 존재하지 않음)
-단점 : 변수의 종이 엄청나게 많다면, 변수의 갯수가 종의 갯수만큼 늘어나 엄청나게 복잡한 행렬이 구성된다 -> 차원의 저주 문제가 발생 (메모리 측면에서 좋지 않음)
(2) Label encoding
- 컬럼의 수는 한 개로 유지하되, 각각 다른 값을 가지고 다른 의미를 부여하게 되는 것
- 레이블이 2개가 아니라 무한대로 늘어날 수 있음
- 각각의 값에 숫자를 부여하게 되는 것, 차원의 저주의 문제에서 벗어날 수 있음
- 모델이 이 숫자의 순서를 특징으로 인식할 수도 있다는 것이 단점이다
(3) Frequency encoding
-해당 변수의 값이 몇 번 등장하였는지 변수의 빈도수를 레이블로 사용하는 방식이다.
-의미 있는 값을 모델에 전달할 수 있다. (범주형 변수의 빈도)
(4) Target Encoding
- 각각의 종이 가지는 타겟 변수의 평균으로 인코딩
-의미 있는 값을 모델에 전달할 수 있다. (범주형 변수의 연관)
-타겟 변수와 레이블이 직접적으로 연관되기 때문에 오버피팅의 발생 가능성이 높음 -> 적절한 후처리가 필
-(3)과 (4)의 경우 각각의 값을 수치로 바꾸며 하나의 컬럼의 모든 값을 표현할 수 있게 되는 장점을 보존
- 또 순서의 영향을 받지 않는다는 장점을 가지고 있다
- 그러나 (3)의 경우 종이 다르지만 인코딩 값이 같을 수도 있는 문제점을 가지고 있음 (고양이와 거위)
- 또 (4)의 경우에도 1, 3, 4, 5의 인코딩처럼 종이다르나 값이 같을 수 있고, 새로 들어오는 종 데이터에 대해 대응하지 못 하는 단점을 가지고 있다.
(5) Embedding
-Word2Vec을 활용하여 description 과 같이 긴 데이터를 벡터라이징하여 처리하는 것이 가능하다
4. 결측치 처리
(1) 제거
- 제거 방법 2가지
: 해당 데이터포인트 제거 (모델에 사용할 데이터가 줄어들기 때문에 데이터가 충분히 많을 때 사용, 테스트데이터에도 같은 결측치가 존재할 경우 테스트데이터는 삭제할 수 없다는 문제점을 가지고 있다)
: 변수 제거 -> 해당 데이터에서 해당 변수의 결측치 비율이 너무 크다면 크게 도움이 되지 않기 때문
(2) 평균값 삽입
(3) 중위값 삽입
(4) 상수값 삽 -------> (2), (3), (4)의 경우 해결하기 쉬운 방법이나 데이터의 결측치가 많은 경우 오류가 될 수 있다
이와 같이 기존 x와 타겟의 분포가 망가지게 되는 문제점을 가진다
-머신러닝을 이용하여 결측치를 채우는 방법을 모델링할 수 있음, 주변값들을 보고 결측치를 채움
-회귀분석, KNN nearest 방신을 채택해서 결측치를 채운다면 평균, 중위, 상수값 삽입보다 더 효과적일 수 있다
(5) Multivariate (합리적 접근법)
-행정구역인구는 각 연도의 평균값으로 대체, 강수량은 0으로 대체, 토지 이용 상황명은 각 항목의 최빈값으로 대체 ...
-단순히 전체 통계량으로 채워넣고 일련의 값으로 대체하는 것보다 더 좋을 것
5. 이상치 제거
-조심스럽게 처리, 잘못하면 모델의 성능에 큰 영향을 끼칠 수 있음
-이상치란 : 일반적인 데이터와 크게 다른 데이터, 즉 일반적인 데이터 분포와 크게 동떨어진 데이터
- 이상치 탐색 방법 : Z-Score, IQR
-이상치 처리 관점 : 정성적인 측면에서는 이상치의 발생 이유와 이상치가 의미하는 바를 파악하는 것이 좋고, 성능적인 측면에서는 Train Test Distribution을 고려하는 것이 좋다.
- Train Test Distribution -> Test 셋에서도 발견이 된 이상치가 Train 셋에도 존재한다면 이 데이터를 지우거나 따로 처리하여 모델의 예측력을 올릴 수 있다, 목적에 따라 다르게 접근하는 것이 중요하다
본 포스트의 학습 내용은 부스트클래스 <AI 엔지니어 기초 다지기 : 부스트캠프 AI Tech 준비과정> 강의 내용을 바탕으로 작성되었습니다.
'ML_AI > 네이버 부클 AI 엔지니어 기초 다지기 : AI Tech 준비과정' 카테고리의 다른 글
[2주차 (2)] 피쳐 엔지니어링 - 2 (0) | 2024.05.06 |
---|---|
[2주차 (1)] 피쳐 엔지니어링 - 1 (0) | 2024.05.06 |
[1주차 (5)] 트리 모델 (0) | 2024.05.02 |
[1주차 (4)] 머신 러닝 기본 개념 (0) | 2024.05.02 |
[1주차 (2)] EDA, 탐색적 자료 분석 (0) | 2024.05.01 |