결합 피쳐란?
데이터 사이에 존재하는 복잡한 관계를 좀 더 잘 fit하기 위해서 피쳐 엔지니어링 단계에서 일차원의 불연속 특성을 쌍으로 조합시켜 만든 고차원 피쳐를 의미한다.
즉, 두 개의 피쳐를 결합하여 새로운 피쳐를 만드는 피쳐 엔지니어링 방법의 한 종류이다.
그러나 결합 피쳐를 만들 경우 feature explosion현상이 일어날 수 있으므로 주의해야 한다.
고차원 결합 피쳐의 피쳐 엔지니어링
-차원 축소 방법을 이용해 결합 피쳐의 학습 파라미터 수를 줄이는 방법
위 표는 성별과 뉴스 유형에 따른 클릭 여부를 정리한 표이다.
성별과 뉴스 유형을 묶어 결합 피쳐로 만들면 다음과 같다.
위 표에서의 차원은 성별(남/여) 뉴스 유형(스포츠/연예)로 2X2=4이다.
위 표는 간단하기 때문에 차원의 크기가 문제가 되지 않지만
추천 알고리즘과 같은 경우에는 사용자 ID와 상품 ID를 결합하여 결합 피쳐를 만든다고 가정해보겠다.
사용자 수를 m, 상품 수를 n이라고 하면 학습해야 할 파라미터의 규모는 mXn이다.
사용자 수와 상품수가 몇 백만이라고 한다면 차원의 규모는 어마어마할 것이다.
이러한 경우 해결 방법은 사용자와 상품을 각각 k차원의 저차원 벡터로 표현하는 것이다. (k<m, k<n)
그렇게 되면 학습해야 할 파라미터의 규모는 m x k + n x k개 이다.
(이 방법은 행렬 분해와 같다.)
효율적인 결합 피쳐를 찾는 방법
의사결정 트리를 예로 들겠다.클릭 여부에 대해서 초기 입력 피쳐가 '나이','성별','사용자 유형','뉴스 유형'이 있다고 가정한다.
루트 노드에서 리프 노드로 가는 각각의 길을 일종의 피쳐 결합으로 볼 수 있다.
위 트리의 경우 4 가지 결합 방식이 존재한다.
- 1) '사용자 유형=카톡 로그인' and '나이 < 40'
- 2) '사용자 유형=카톡 로그인' and '뉴스 유형 = 스포츠'
- 3) '나이 < 35' and '뉴스 유형 = 연예'
- 4) '나이 < 35' and '성별 = 여자'
input값이 나이:25, 성별:여자, 사용자 유형:구글 로그인, 뉴스 유형:연예 라고 한다면
3), 4) 조건만 만족시키므로 (0,0,1,1)로 인코딩 될 것이다.
그렇다면 이렇게 초기 데이터가 정해진 상태에서 어떻게 효과적으로 의사결정 트리를 구성하는 방법은
그래디언트 부스트 의사결정 트리를 사용하는 것이다.
이 방법의 핵심은 각 트리가 이전 트리들의 잔차를 학습해 다음 트리를 구성하는 것이다.
❓ 그래디언트 부스팅 결정 트리란 ❓
콘텐츠 플랫폼의 사용자 페르소나 분석의 경우 광고를 지정된 연령의 사용자에게 노출시키기 위해 플랫폼은 각 사용자의 나이를 예측해야 한다고 가정하자.
각 샘플은 이미 성별/나이를 알고 있는 사용자 데이터이고 피쳐는 방문한 시간, 시청한 콘텐츠 유형 등이 있다.
사용자 1의 실제 나이는 25세인데 첫 번째 트리가 예측한 나이가 22살이면 잔차는 3살이다.
두번째 트리에서 사용자 1의 나이를 3살로 설정하고 학습하여 만약 두번째 트리가 사용자 1을 -3살의 잎 노드로 분류한다면 두 트리의 결과를 더했을 때 사용자 1의 실제 나이를 얻을 수 있게 된다.
만약 두번째 트리의 결론이 5살이라면 여전히 -2살의 잔차를 갖기 때문에
세번째 트리에서 사용자 1의 나이는 -2살로 설정되고 계속 학습을 진행한다.
이렇게 잔차를 사용해 계속 학습하는 것이 그래디언트 부스팅 결정 트리이다.