입력 데이터의 Feature들 중 유의미한 결과를 이끌 가능성이 높은 Feature를 찾기 위해 연관 자료를 조사했습니다.
Notes
Feature Engineering
데이터에 새로운 변수를 추가해 머신러닝 모델의 성능을 극대화시키는 기술
데이터 변환의 단순화/가속화 및 모델의 성능 향상 목표
데이터의 오류를 찾는 방법
도메인 지식
시각화
통계분석
구성 요소
Feature Creation: 모델에 도움이 될 새로운 변수를 추가하는 것. 추가하거나 삭제하는 것 포함.
Transformation: feature 표현을 다른 형태로 바꾸는 것.
Feature Extraction: 원본 데이터의 상관관계나 중요한 정보를 왜곡하지 않고, 알고리즘이 처리할 수 있는 양의 데이터로 압축시키는 것.
EDA: 데이터의 패턴을 분석하는 것.
Benchmark: 비교 대상이 되는 모델. 새로운 모델의 성능을 상대적으로 판단해볼 수 있는 모델.
인공적인 특징을 알고리즘이 사용할 수 있도록 설계하는 작업
최종 목표는 결과 데이터셋의 최적화를 통해 비즈니스 문제에 영향을 미치는 모든 중요 요소를 반영하는 것
Feature Engineering Techniques for ML
Missing Value
Imputation
Removal: 결측치가 있는 entry를 삭제함.
데이터 셋이 적은 경우 전체 학습가능 데이터 셋이 적어지는 문제
임계치를 정해서 넘어갈 경우 제거
threshold = 0.7
#Dropping columns with missing value rate higher than threshold
data = data[data.columns[data.isnull().mean() < threshold]]
#Dropping rows with missing value rate higher than threshold
data = data.loc[data.isnull().mean(axis=1) < threshold]
Numerical Imputation: 특정 값으로 결측치를 채우는 방식.
default value를 정하는 문제. 못 정할경우 median 추천함.
#Filling all missing values with 0
data = data.fillna(0)
#Filling missing values with medians of the columns
data = data.fillna(data.median())
Categorical Imputation: 카테고리형 feature일때, 최빈값으로 하는게 좋음. 하지만 균등 분포인경우 other 등으로 별도로 빼는 것도 괜찮음.
#Max fill function for categorical columns
data['column_name'].fillna(data['column_name'].value_counts()
.idxmax(), inplace=True)
Handling Outliers: 모델에 따라 영향이 클수도/작을수도 있음(예를 들어, 선형 회귀인 경우, 굉장히 민감함)
Detection with Standard Deviation
x * standard deviation 보다 높은 평균까지의 거리인 경우, Outlier 로 치부할 수 있음
x 는 2 ~ 4 사이 정도
#Dropping the outlier rows with standard deviation
factor = 3
upper_lim = data['column'].mean () + data['column'].std () * factor
lower_lim = data['column'].mean () - data['column'].std () * factor
data = data[(data['column'] < upper_lim) & (data['column'] > lower_lim)]
- Detection with Percentiles
- 상 하단 경계에서 특정 비율 내의 대상들을 이상치로 치부
``` python
#Dropping the outlier rows with Percentiles
upper_lim = data['column'].quantile(.95)
lower_lim = data['column'].quantile(.05)
data = data[(data['column'] < upper_lim) & (data['column'] > lower_lim)]
data['Continent'] = np.select(conditions, choices, default='Other')
Country Continent
0 Spain Europe
1 Chile South America
2 Australia Other
3 Italy Europe
4 Brazil South America
Log Transform: skewed distribution을 normal혹은 less-skewed distribution으로 변경하는 방법
크기를 정규화해 이상치의 효과를 줄여줌
양수 데이터에만 사용해야 함
#Log Transform Example
data = pd.DataFrame({'value':[2,45, -23, 85, 28, 2, 35, -12]})
data['log+1'] = (data['value']+1).transform(np.log)
#Negative Values Handling
#Note that the values are different
data['log'] = (data['value']-data['value'].min()+1) .transform(np.log)
value log(x+1) log(x-min(x)+1)
0 2 1.09861 3.25810
1 45 3.82864 4.23411
2 -23 nan 0.00000
3 85 4.45435 4.69135
4 28 3.36730 3.95124
5 2 1.09861 3.25810
6 35 3.58352 4.07754
7 -12 nan 2.48491
One-hot Encoding: 유한한 set의 요소를 각각의 인덱스로 표현하는 방식. 해당하는 인덱스 값만 1로 나타냄.
Background
Notes
Feature Engineering
Feature Engineering Techniques for ML
Missing Value
Imputation
임계치를 정해서 넘어갈 경우 제거
Handling Outliers: 모델에 따라 영향이 클수도/작을수도 있음(예를 들어, 선형 회귀인 경우, 굉장히 민감함)
data = data[(data['column'] < upper_lim) & (data['column'] > lower_lim)]
choices = ['Europe', 'Europe', 'South America', 'South America']
data['Continent'] = np.select(conditions, choices, default='Other') Country Continent 0 Spain Europe 1 Chile South America 2 Australia Other 3 Italy Europe 4 Brazil South America
Tools
Ideas
Reference
Related Issues