어제 결측값이랑 이상값 정리하고 나서 오늘은 예고했던 대로 파생변수 만들기랑 변수 선택 쪽을 봤다. 전처리 파트가 생각보다 길다.

파생변수부터. 말은 거창한데 결국 기존 변수를 가공해서 새로운 의미를 담은 변수를 만드는 거다. 생년월일에서 나이를 뽑아내거나, 구매 날짜에서 요일·계절 같은 시간 관련 변수를 만드는 게 제일 기본적인 형태고, 연속형 변수를 구간으로 나누는 구간화(binning)도 여기 들어간다. 예를 들어 나이를 그대로 쓰지 않고 10대/20대/30대로 묶어버리는 식이다. 그리고 여러 변수를 요약해서 하나로 합치는 요약변수라는 것도 있는데, 한 달치 구매 횟수를 다 더해서 “월평균 구매빈도” 같은 변수를 만드는 게 그 예다. 처음엔 그냥 “새 열 하나 추가하는 거네” 정도로 가볍게 생각했는데, 실제로는 도메인 지식이 있어야 제대로 된 파생변수가 나온다는 걸 느꼈다. 기계적으로 조합만 한다고 의미 있는 변수가 되는 게 아니더라.

변수 선택은 오늘 좀 헷갈렸던 부분이다. 변수가 많다고 무조건 좋은 게 아니라, 오히려 불필요한 변수가 많으면 차원의 저주 때문에 모형 성능이 떨어지고 계산량도 늘어난다는 게 핵심 이유였다. 그래서 필요한 변수만 골라내는 게 변수 선택인데, 방법이 크게 세 가지로 나뉜다. 필터(filter) 방법은 상관관계나 카이제곱 검정처럼 통계적 지표로 변수를 미리 걸러내는 방식이고, 래퍼(wrapper) 방법은 실제로 모형을 반복해서 돌려보면서 성능이 좋아지는 조합을 찾는 방식이다. 전진선택법, 후진제거법, 단계적선택법이 다 여기 속한다. 그리고 임베디드(embedded) 방법은 모형을 학습하는 과정 자체에 변수 선택이 녹아있는 경우인데, LASSO처럼 페널티를 줘서 불필요한 변수의 계수를 아예 0으로 만들어버리는 게 대표적이다.

문제는 래퍼랑 임베디드 방법이 자꾸 헷갈린다는 거다. 둘 다 모형 성능을 기준으로 삼는 것 같은데, 래퍼는 변수 선택과 모형 학습이 별개의 반복 과정으로 분리되어 있고 임베디드는 학습 과정 안에 아예 포함되어 있다는 차이라고 한다. 말로 정리하니 구분이 가는데, 막상 문제로 “다음 중 임베디드 방법에 해당하는 것은?” 이렇게 나오면 또 헷갈릴 것 같다.

변수 변환도 잠깐 짚었다. 값의 범위가 너무 다른 변수들을 표준화나 정규화로 맞춰주는 스케일링, 그리고 분포가 한쪽으로 치우친 변수에 로그를 씌워서 좀 더 정규분포에 가깝게 만드는 로그변환. 둘 다 이름만 알고 있었는데 오늘 보니 “왜” 하는지도 같이 물어볼 것 같아서 이유까지 챙겨봤다.

내일은 본격적으로 데이터 탐색, EDA 쪽으로 넘어갈 예정이다. 오늘 배운 필터/래퍼/임베디드 구분은 예제 문제 몇 개 더 풀어보면서 감을 잡아야 할 것 같다.