LightGBM 고급 주제
LightGBM 고급 주제 (Advanced Topics)
LightGBM의 결측값 처리와 범주형 피처 지원 같은 고급 기능을 다루는 문서예요. 학습·예측 경험을 좌우하는 세부 설정을 살펴볼게요.
결측값 처리 (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를 선형 분해하는 방식으로 위치 편향을 모델링해요.
더 알아보기
- LightGBM 파라미터 튜닝 — 튜닝 지침
- LightGBM 파라미터 — 전체 파라미터 문서
- LightGBM 특징 — 내부 동작 방식