안녕하세요 배도리입니다. 이제 넘파이, 판다스 이후 데이터 전처리에 대해서 배워보겠습니다. 데이터 전처리는 데이터 분석 또는 기계 학습 모델에 데이터를 입력하기 전에 데이터를 정리, 변환 및 조작하는 과정을 말합니다. 이는 원본 데이터의 품질을 향상시키고 분석 또는 모델링 작업의 정확성과 신뢰성을 향상시키는 데 도움을 줍니다. 데이터 분석 또는 기계 학습 작업의 성공을 결정짓는 중요한 요소입니다. 데이터가 적절하게 전처리되지 않으면 모델이 잘 작동하지 않거나 부정확한 결과를 제공할 수 있습니다. 따라서 데이터 전처리는 분석 과정에서 필수적인 단계로 여겨집니다. 저 또한 프로젝트 및 공모전을 준비하면서 데이터 전처리가 상당히 중요하다는것을 몸소 깨달았습니다. 머신러닝 모델을 학습하기 이전에 꼭 데이터 전처리에 대해 공부합시다!
1. 데이터 전처리란
▪ 데이터 전처리는 데이터의 품질을 올리는 과정이며 데이터의 품질은 데이터 분석의 90%를 좌우한다.
▪ ML 모델에 훈련 데이터를 입력하기 전에 데이터를 가공합니다.
▪ 넘파이나 판다스 같은 머신러닝의 핵심 도구, 맷플롯립과 시본 같은 데이터 시각화 도구를 활용하여 실제 데이터를 정리합니다.
▪ 데이터 전처리 과정
▪ 데이터 실수화: 컴퓨터가 이해할 수 있는 값으로의 변환
▪ 불완전한 데이터 제거: NULL, NA, NAN 값의 제거 (혹은 특정 값으로 채움)
▪ 잡음 섞인 데이터 제거
- 가격 데이터에 있는 (-) 값 제거
- 연령 데이터 중 과도하게 큰 값 제거 예) 나이 값으로 200, 300, 400 등의 값이 존재하는 경우
▪ 모순된 데이터 제거
- 남성 데이터 중 주민번호가 ‘2’로 시작하는 경우
▪ 불균형 데이터 해결
-과소표집(undersampling), 과대표집(oversampling)
2. 데이터 전처리 방법
① 데이터 실수화(Data Vectorization) ▪ 범주형 자료, 텍스트 자료, 이미지 자료 등을 실수로 구성된 형태로 전환하는 것
② 데이터 정제(Data Cleaning) ▪ 없는 데이터는 채우고, 잡음 데이터 제거하고, 모순 데이터를 올바른 데이터로 교정하는 것
③ 데이터 통합(Data Integration) ▪ 여러 개의 데이터 파일을 하나로 합치는 과정
④ 데이터 변환 (Data Transformation) ▪ 데이터를 정규화 하거나, 로그를 씌우거나, 평균값을 계산하여 사용하거나, 사람 나이 등을 10대, 20대, 30대 등으로 구간화 하는 작업
⑤ 데이터 균형 (Data Balancing) ▪ 특정 클래스의 관측치가 다른 클래스에 비해 매우 낮을 경우 샘플링을 통해 클래스 비율을 맞추는 작업
① 데이터 실수화
▪ 범주형 자료, 텍스트 자료, 이미지 자료 등을 실수로 구성된 형태로 전환
▪ 2차원 자료의 예시
- [n_sample, n_features]
- 2차원 자료는 행렬 혹은 2차원 텐서(2-dimensional tensor)라 불림
▪ 자료의 유형에는 연속형 자료 (Continuous data), 범주형 자료 (Categorical data), 텍스트 자료 (Text data)
범주형 자료
▪ One-hot encoding을 이용한 데이터 실수화입니다.
▪ 범주형 데이터의 개수(집합의 크기)를 벡터의 차원으로 하고, 오직 하나의 차원에만 1을 부여함으로써 데이터를 구별하는 인코딩 방식입니다.
• 표현하고 싶은 집합 원소의 인덱스에만 1의 값을, 나머지 인덱스에는 0을 부여하는 벡터 표현 방식입니다.
• 차원의 저주(curse of dimensionality)라는 단점이 있습니다.
1. 데이터의 희소성: 원핫인코딩은 대부분의 열에 0 값을 가지는 희소한 데이터를 생성합니다. 이는 많은 0 값을 가진 열이 있고 실제로 중요한 정보를 가진 열은 매우 적은 값을 가지는 경우를 의미합니다.
2. 계산 비용 증가: 고차원 데이터에서는 데이터 처리 및 분석 작업에 필요한 계산 비용이 증가합니다.
3. 과적합 가능성: 고차원 데이터에서는 모델이 훈련 데이터에 과도하게 적합되어 일반화 성능이 저하될 수 있습니다.
다음은 Scikit-Learn 라이브러리를 이용하여 범주형자료를 전처리하는 과정입니다.
▪ Scikit-Learn의 DictVectorizer 함수(Python 딕셔너리 형태의 데이터를 벡터 형태로 변환해주는 기능을 제공)
• sparse = True (디폴트옵션: 메모리 공간의 낭비를 줄임)
• sparse = False (범주형 자료의 수량화 결과를 눈으로 확인할 수 있음)
• sparse = False 로 한다면 밀집배열로 바꿔주는 겁니다. 밀집 배열(Dense Array)은 배열의 모든 원소가 메모리에 연속적으로 저장되는 데이터 구조를 말합니다. 대부분의 원소가 0이 아닌 값을 가지며, 메모리 사용량이 상대적으로 높습니다.
• sparse = True 로 한다면 희소행렬(Sparse Matrix)로 변환됩니다. 희소행렬 행렬의 원소 값이 대부분 0으로 채워진 행렬이며 불필요한 0 값이 대부분이므로 메모리 낭비가 심합니다. 행렬의 크기가 클수록 연산 시 많은 시간이 소요됩니다.
텍스트 자료
▪ 단어의 출현 횟수를 이용한 데이터 실수화가 적용됩니다. 간단한 그림으로 살펴보겠습니다.

▪ Scikit-Learn의 CountVectorizer(텍스트 데이터를 단어 빈도수를 기반으로 벡터화할 때 사용)

▪ toarray() 함수를 사용하여 희소 행렬을 밀집 배열 형태로 변환하는 주된 이유는 데이터 처리 및 분석에 따라 밀집 배열 형태가 더 적합한 경우가 있기 때문입니다. 하지만 주의할 점은, 희소 행렬을 밀집 배열로 변환할 때 메모리 사용량이 급격히 증가할 수 있으므로, 데이터의 크기와 메모리 제한을 고려해야 합니다. 특히 대규모 데이터를 다룰 때는 밀집 배열로 변환하는 것이 불가능할 수도 있습니다. .
▪ 출현 횟수가 정보의 양과 비례하는 것이 아니므로, TF-IDF 기법을 이용해야 합니다.
• TF-IDF(Term Frequency Inverse Document Frequency): 자주 등장하여 분석에 의미를 갖지 못하는 단어의 중요도를 낮추는 기법입니다. (예: The, a 등의 관사)
– 가중치 재계산: 높은 빈도의 단어가 여러 문서에 등장할 수록 가중치가 낮아집니다.

다음 게시글에는 나머지 전처리방법에 대해 다루겠습니다.
'Machine Learning_모델설계_Python' 카테고리의 다른 글
| 데이터 전처리_3 (0) | 2023.05.07 |
|---|---|
| 데이터 전처리_2 (1) | 2023.05.05 |
| Pandas_3 그룹별 집계 (2) | 2023.05.03 |
| Pandas_2 데이터 추출 (1) | 2023.05.02 |
| Pandas_1 개요 (3) | 2023.05.01 |