Feature Engineering
모델 정확도를 높이기 위해서 주어진 데이터를 예측 모델의 문제를 잘 표현할 수 있는 features로 변형시키는 과정
- 머신러닝 모델을 위한 데이터 테이블의 컬럼을 생성하거나 선택하는 작업을 의미
- 모델 성능에 영향을 많이 미치기 때문에 머신러닝 응용에 있어서 굉장히 중요한 단계
- 전문성과 시간이 많이 드는 작업
머신러닝 알고리즘을 작동하기 위해 데이터의 도메인 지식을 활용해 특징(feature)를 만드는 과정
- Feature Engineering is a Representation Problem
- Feature: A valuable attribute for your modeling task
Importance of Feature Engineering
- Better features mean flexibility.
- Better features mean simpler models.
- Better features mean better results.
Feature Extraction (특징 추출)
The automatic construction of new features from raw data
- 원본 특징들의 조합으로 새로운 특징을 생성하는 것
- 고차원의 원본 feature 공간을 저차원의 새로운 feature 공간으로 투영
- 새롭게 구성된 feature 공간은 보통은 원본 feature 공간의 선형 또는 비선형 결합
PCA(Principle Component Analysis)
- 각 변수(feature)를 하나의 축으로 투영시켯을 때 분산이 가장 큰 축을 첫번째 주성분으로 선택하고 그 다음 큰 축을 두번째 주성분으로 선택하고 데이터를 선형 변환하여 다차원을 축소하는 방법
unsupervised clustering methods
Dimension Reduction(차원 축소)
Machine Learning] 차원축소 (Dimensionality Reduction)
관측 데이터를 잘 설명할 수 있는 잠재 공간(latent space) 찾기
- 관찰 대상들을 잘 설명할 수 있는 잠재 공간(latent space)은 실제 관찰 공간(observation space)보다 작을 수 있다고 하고 이렇게 관찰 공간 위의 샘플들에 기반으로 잠재 공간을 파악하는 것
Feature Selection (특징 선택)
From many features to a few that are useful
특징 랭킹(feature ranking) 또는 특징 중요도(feature importance)라고도 함
특징 선택의 목적은 모든 특징의 부분 집합을 선택하거나, 불필요한 특징을 제거하여 간결한 특징 집합을 만드는 것
- 분석자가 사전의 배경 지식을 이용해서 진행
- 자동 특징 선택(automatic feature selection methods)을 사용
Decision Tree의 경우는 트리의 상단에 있을수록 중요도가 높음
회귀모델의 경우 forward selection과 backward elimination 같은 알고리즘을 통해 특징을 선택
Feature Importance
An estimate of the usefulness of a feature
- Correlation coefficients and other univariate 사용할 수 있음
- 복잡한 예측 모델의 경우 모델 생성하면서 같이 생성할 수도 있음
Feature Construction (특징 구축/생성)
The manual construction of new features from raw data
초기에 주어진 데이터로부터 모델링 성능을 높이는 새로운 특성을 만드는 과정
어렵고 시간이 많이 걸리지만 가장 큰 효과를 얻음
- 흔히 이 방법을 Feature Engineering이라고 부름
- 모델의 성능을 높이는 새로운 특성 만들기
- 데이터 합치기, 쪼개기 등의 작업
Feature Learning
The automatic identification and use of features in raw data
autoencoders and restricted Boltzmann machines, an unsupervised/semi-supervised way
Feature Engineering Process
다음의 과정을 반복!
Brainstorm features
- 문제확인
- 많은 데이터 보기
- 다른 문제들에서 어떻게 feature engineering했는지 보고 필요한 것을 가져옴
Devise features
- 문제에 따라 automatic feature extraction, manual feature construction 또는 두 개를 섞은 방법을 사용하여 features를 변형
Select features
- feature importance scorings, feature selection 사용
Evaluate models
- 선택한 features가 적용된 새 데이터(unseen)에 대한 모델 정확도를 추정
Revise features
- 필요한 경우 feature 개선
Feature Engineering Techniques
1. Imputation (산입)
데이터 중에 missing value(결측치)를 대체값으로 채움
- Numeric Imputation: 숫자 컬럼에서는 Default 값(0이나 중앙값)으로 대체
- Categorical Imputation: 가장 빈번히 나타나는 값으로 채움, 만약 많이 발생한 값이 없다면 'Other'로 대체
- Random Imputation: 데이터셋에서 임의로 뽑은 값으로 결측치 대체
- End of Distrivution Imputation: 결측치를 mean + 3*std로 대체
missing value(결측치)
- 머신러닝 모델 성능에 영향을 준다
- 70% 이상의 결측치가 있는 행과 열은 지워주는 것이 좋다
2. Handling Outliers (이상치 처리하기)
outliers 때문에 학습이 왜곡되는 경우가 있어 제거 필요
outliers는 시각적으로 확인 필요
표준편차를 이용한 이상치 탐지
- 표준편차에서 예외적으로 나타내는 값들을 제거
- 값과 평균까지의 거리 > x*표준편차(x: 2~4 사이의 값)라면 이상치
백분위수(percentile)를 이용한 이상치 탐지
- 특정 percent외에 있는 값들을 삭제(상위 5%, 하위 5% 등)
3. Binning (Bin으로 묶기)
통계에서 Bin은 히스토그램의 하나의 막내 정도를 나타냄
근처의 값들을 하나의 범주로 묶게되면 좀 더 Robust한 모델을 얻을 수 있다.
단, 주요 정보를 잃을수도 있기 때문에 얼만큼을 하나의 Bin으로 묶을지 주의해야 한다.
categorical / numeric data에 모두 적용 가능
Bininig을 하는 이유는 모델을 더 robust하게 만들고 오버피팅을 방지하기 위함
비용이 비쌈(the trade-off b/w performance and overfitting)
숫자로 이루어진 열의 경우에는 별 필요가 없지만, 범주형 열에는 필요할 수 있다.
- 예, 100,000개의 열로 구성된 데이터셋의 경우, 100개 이하로 구성된 카테고리들은 하나로 합치는 것이 나을 수 있음
4. Log Transform (로그 변형)
한 쪽으로 편향된(skewed) 데이터를 분포가 정규 분포에 가깝에 만들어 주는 것
이상치의 영향을 줄여주고 모델이 보다 robust하게 만들어 준다.
주의: 데이터가 양수로 이루어져야 한다. 때로 1을 더해줄 수도 있다 (log(x+1))
- 예, 나이와 재산 관계에서, 나이는 1~100까지의 범주를 갖지만, 재산은 0원에서 수조원까지 아주 넓게 분포할 수 있다.
- 특정 영역(이를 테면 1억원)에 치우쳐 있다면, 그 외의 값들은 왜곡되어 해석될 가능성이 높다.
5. One Hot Encoding
텍스트로 된 범주형 데이터를 학습에 이용하기 위해서는 숫자 타입으로 변형 필요
단순 숫자 부여할 경우 순서를 넘어 크기로 인식할 수 있기 때문에,
각각의 데이터를 하나의 컬럼으로 만들고, 해당값이 있는지를 0과 1로 표현하는 것
6. Group Operation (그룹 연산)
Tidy
- 데이터셋의 변수가 열, 관측값이 행으로 이루어진 데이터
- 조작, 모델링, 시각화가 쉬움
현실에서는 Tidy 데이터가 아닌 경우가 많다.
- 여행사의 DB의 경우 한 사용자가 여러번의 transaction을 일으킬 수 있음
- 공자의 센서데이터는 의미없는 유사한 데이터를 지속적으로 발생시킬 수 있음
모든 행들 각각이 하나의 사건 혹은 의미를 담는다면 분석이 용이해진다.
일반적으로 데이터는 변수가 행으로 이루어져 있으므로 변수에 의해 데이터를 그룹화하여 한 행으로 변수가 표현되게 만든다.
그룹화할 때 features의 병합 함수를 사용해야 한다.
- 예, 숫자로 이루어진 features는 평균과 합으로 그룹화
범주형 데이터의 경우는 pivot 테이블을 이용하거나 one-hot encoding을 한다.
7. Feature Split
유용한 방법. 여러 가지 방법이 존재
- 예, 이름과 성을 따로 분리
8. Scaling
대부분의 데이터가 range가 다른기 때문에 scaling을 해주어야 한다.
Normalization (min-max normalization)
- 데이터를 0과 1사이의 값으로 변환
- 데이터 분포도 변하지 않고 표준 편차가 줄어들어 outlier의 영향이 커질 수 있으므로 이를 미리 제거해야 한다.
Standardization (z-score normalization)
- 데이터마다 range가 다름
- outlier를 효과적으로 제거해 주지만, 정확히 동일한 척도로 데이터를 만들어 주지는 않는다.
9. Extracting Data
날짜를 다른 행으로 분리: 년도, 월, 요일 등
특정 날짜에 대한 feature를 뽑아냄: 주간의 이름(1주, 2주 등) 주말인지 아닌지, 공휴일인지 아닌지
References
'Machine Learning > Machine Learning' 카테고리의 다른 글
Ensembler (a python package) (0) | 2022.11.04 |
---|---|
[Machine Learning] Fairness (공정성) (0) | 2022.11.01 |
AutoML (Automated Machine Learning) (0) | 2022.11.01 |
Cross Validation(CV, 교차검증) (2) | 2022.10.31 |
[Machine Learning] Pattern Recognition (패턴인식) (1) | 2022.10.11 |