Search

feature engineering

자동 연산에 의한 피처 생성도메인 지식을 활용한 피처 생성 방법을 비교하고, 두 접근 방식이 모델 성능에 미치는 영향을 이해
1.
도메인 지식 활용
특정 분야의 지식을 사용하여 데이터의 새로운 피처를 발굴합니다. 이는 데이터에 내재된 정보를 풍부하게 만들어 예측력을 높일 수 있습니다.
: 집계 및 변환
데이터 내의 다양한 변수들을 조합하고 변환하여, 새로운 정보를 담은 피처를 생성합니다. 이러한 기법은 복잡한 데이터 구조를 단순화하여 모델이 더 쉽게 정보를 학습할 수 있도록 돕습니다.
2.
통계 기법
숨겨진 패턴과 관계를 찾아내는 데 중요한 역할을 합니다. 통계 기법의 예로는
상관 분석: 변수 간의 상관관계를 파악하여 새로운 피처를 생성
주성분 분석(PCA): 데이터를 주요 특징으로 축소하여 새로운 피처를 생성
기타 다양한 통계 기법을 활용하여 새로운 피처를 생성할 수 있습니다.
3.
시각화 도구
데이터의 시각적 분석을 통해 패턴을 발견하고 이를 기반으로 피처를 생성합니다.

LabelEncoder

문자열 데이터를 수치형 데이터로 변환해주는 함수
알파벳 순으로 높은 값을 부여함
요일 문자 데이터를 수치형 데이터로 변환하기
X_human = X.copy() # 요일 정보 추가 X_human['week_day']= pd.to_datetime(bicycle['date_time']).dt.weekday() # 0:월요일, 6:일요일
Python
복사
# 위의 코드와 비슷한 다른 코드 week_day = pd.to_datetime(bicycle['date_time']).dt.day_name() # Monday, Tuesday, ... le = LabelEncoder() le.fit(week_day) X_human['week_day'] = le.transform(week_day)
Python
복사
dt.weekday : 월 ~일요일까지 숫자가 고정되어 있다(0 ~ 6) dt.day_name : Monday, Tuesday , … 로 먼저 바뀐뒤, 이 문자의 알파벳 순서에 따라 순서가 부여된다. 따라서 금요일이 월요일보다 알파벳 순서상 앞에 있기 때문에 더 작은 숫자가 지정된다.
온도 정보 피처 데이터 추가하기
일교차가 너무 큰 날씨
너무 덥고 습한 날씨
춥고 바람부는 날씨
위 3가지 날씨에 따릉이 이용자 수가 적을 것이라는 가정을 세운다고 가정했을 때
# 1. 일교차 정보를 담고 있는 피처 생성 X_human['temp_diff_info'] = X_human['high_temp'] - X_human['low_temp'] # 2. 덥고 습한 날씨 정보를 담고 있는 피처 생성 X_human['sweat_info'] = X_human['high_temp'] * X_human['humidity'] # 3. 춥고 바람부는 날씨 정보를 담고 있는 피처 생성 X_human['cold_info'] = X_human['low_temp'] * X_human['wind_speed'] X_human.head()
Python
복사

Feature Engineering by Computer

사람의 주관이 아닌, 컴퓨터의 단순 계산만을 이용해서 feature를 추가하는 방식이다.
sklearn 등에서 제공하는 자동 feature engineering이 이런 방식으로 작동한다.
자기 자신의 제곱 변수를 포함해서 변수들끼리의 곱을 계산한 변수들을 추가해준다.
# 2번은 컴퓨터로 만든 feature들을 사용합니다. X_computer = X.copy() col_list = X_computer.columns # 이중 for문을 사용하여 feature 자기 자신의 제곱과 두 feature간의 곱이라는 새로운 feature를 추가합니다. for i in range(len(col_list)): for j in range(i, len(col_list)): X_computer[f'{col_list[i]}*{col_list[j]}'] = X_computer[col_list[i]] * X_computer[col_list[j]] X_computer.head()
Python
복사
각 컬럼별 자기자신의 제곱과, 각 컬럼별 간의 곱으로 계산된 피처를 추가함 총 77개의 컬럼이 되는데, 처음에 11개의 컬럼이었고 추가된 컬럼개수 (11 + 10 + 9 + … + 1 = 66)을 더하면 77이 된다.

단순 연산에 의한 피처 생성이 왜 모델의 성능을 향상시킬까?

이 개념은 본질적으로 기계 학습 모델이 데이터의 비선형 관계를 더 잘 이해할 수 있도록 돕는 방법 중 하나다. 사이킷런의 PolynomialFeatures 같은 도구를 사용하는 것도 데이터 내 숨겨진 패턴이나 관계를 모델이 더 잘 포착하게 하려는 시도와 같다. - 더하기 : 피처 간의 선형 조합을 생성 - 빼기 : 피처 간의 차이를 강조 - 곱하기 : 피처 간의 상호작용 - 제곱 : 피처의 중요도를 증가 - 나누기 : 비율 생성
사이킷런의 PolynomialFeatures 같은 도구를 사용하여 새로운 피처를 생성하는 것은 데이터 내 숨겨진 패턴이나 관계를 모델이 더 잘 포착하게 하려는 시도
더하기 (Addition)
두 피처를 더하는 것은 피처 간의 선형 조합을 생성합니다.
예를 들어, "저축 계좌 잔액"과 "체크 계좌 잔액"을 더해 "총 계좌 잔액"이라는 새로운 피처를 만들 수 있습니다. 이는 모델이 전체 자산 규모를 더 잘 이해하는 데 도움이 됩니다.
빼기 (Subtraction)
한 피처에서 다른 피처를 빼는 것은 피처 간의 차이를 강조합니다.
예를 들어, "판매 가격"과 "제조 비용"을 빼 "순이익"을 계산할 수 있으며, 이는 이윤이 얼마나 발생하는지를 모델에게 알려줍니다.
곱하기 (Multiplication)
두 피처의 곱은 종종 피처 간의 상호작용을 나타냅니다.
예를 들어, "시간당 광고 노출 수"와 "클릭률"을 곱하여 "총 클릭 수"를 얻을 수 있습니다. 이는 광고의 효과를 평가할 때 유용합니다.
제곱 (Squaring)
피처의 제곱은 해당 피처의 중요도를 증가시킬 수 있습니다.
예를 들어, "거리"를 제곱하여 "거리의 제곱"을 만들면, 단순한 거리보다 멀리 있는 지점의 중요도를 더 크게 만들어줍니다. 이는 거리에 따른 효과가 비선형적일 때 유용합니다.
나누기 (Division)
한 피처를 다른 피처로 나누는 것은 비율을 생성합니다.
예를 들어, "총 판매 수익"을 "방문자 수"로 나누어 "방문자 당 평균 수익"을 계산할 수 있습니다. 이는 방문자의 품질이나 가치를 평가하는 데 중요할 수 있습니다. 자동 연산에 의한 피처 생성은 데이터의 원본 구조를 확장하고, 모델이 선형 관계와 비선형 관계를 모두 이해할 수 있게 해주지만, 항상 주의 깊게 적용해야 합니다. 각각의 연산이 실제로 데이터에 어떤 의미를 가지는지, 그리고 생성된 피처가 모델에 어떤 영향을 미칠지를 평가하는 것이 중요합니다. 또한, 무작위로 피처를 생성하고 이를 모델에 적용하기 보다는 피처가 가지는 의미와 모델의 목적을 이해하고, 이에 기반하여 피처를 선택하는 것이 효과적입니다.
비선형 피처 변환의 목적
특정 변수의 크기에 따른 영향력을 다르게 설정할 수 있음.