LightGBM 고급 주제

LightGBM 고급 주제 (Advanced Topics)

LightGBM의 결측값 처리와 범주형 피처 지원 같은 고급 기능을 다루는 문서예요. 학습·예측 경험을 좌우하는 세부 설정을 살펴볼게요.

출처: LightGBM Advanced Topics

결측값 처리 (Missing Value Handle)

  • LightGBM은 결측값 처리를 기본으로 활성화해요. use_missing=false로 끌 수 있어요.
  • LightGBM은 기본적으로 NA(NaN)로 결측값을 나타내요. zero_as_missing=true로 0을 쓰도록 바꿀 수 있어요.
  • zero_as_missing=false(기본)일 때 희소 행렬(및 LightSVM)의 기록되지 않은 값은 0으로 취급돼요.
  • zero_as_missing=true일 때 NA와 0(희소 행렬·LightSVM의 기록되지 않은 값 포함)이 모두 결측으로 취급돼요.

범주형 피처 지원 (Categorical Feature Support)

  • LightGBM은 정수 인코딩된 범주형 피처로 좋은 정확도를 제공해요.
  • LightGBM은 Fisher(1958)의 방법으로 범주에 대한 최적 분할을 찾아요. 이는 one-hot 인코딩보다 좋은 성능을 내는 경우가 많아요.
  • categorical_feature 파라미터로 범주형 피처를 지정해요.
  • 범주형 피처는 int32로 캐스팅되므로(파이썬 패키지에서 pandas 범주형에서 정수 코드 추출) Int32.MaxValue(2147483647) 미만의 음이 아닌 정수로 인코딩해야 해요. 0부터 시작하는 연속된 정수 범위를 쓰는 게 가장 좋아요. 범주형 피처의 부동소수점 숫자는 0 방향으로 반올림돼요.
  • pandas.DataFrame 입력에서 dtype이 category인 열을 쓰면, LightGBM은 훈련 중 관찰된 범주에 맞춰 정렬한 뒤 정수 값으로 변환해요. 추가 전처리 없이 학습과 예측 사이에 일관된 인코딩을 보장하죠.
  • predict() 시점에 학습 중 보지 못한 범주는 결측값으로 취급돼요.
  • #data가 작거나 #category가 클 때 과적합을 다루려면 min_data_per_group, cat_smooth를 써요.
  • 고차원(#category가 큰) 범주형 피처는 정수 해석을 무시하거나 저차원 임베딩으로 범주를 임베딩해 수치형으로 취급하는 게 가장 잘 작동하는 경우가 많아요.

위치 편향 처리 지원 (Position Bias Treatment)

LightGBM은 "above the fold" 결과에서 오는 위치 편향(position bias)을 고려하도록 positions 배열을 제공할 수 있어요. positions 배열은 0과 1로 인코딩돼요. 학습 데이터 파일 이름이 train.txt라면 위치 파일은 train.txt.position으로 이름 짓고 데이터 파일과 같은 폴더에 두면 자동으로 로드돼요.

Python API에서는 Dataset 생성자로 위치를 지정할 수도 있어요. 두 방식 모두 지정되면 .position 파일은 무시돼요. 현재 구현은 Generalized Additive Models(GAM) 아이디어를 써서 문서 점수 s를 선형 분해하는 방식으로 위치 편향을 모델링해요.

더 알아보기