Recommendation System

LightGBM Ranker

Dan-k 2024. 8. 4. 21:38
반응형

LightGBM Ranker: 고급 랭킹 모델을 활용한 순위 예측

- 랭킹 문제는 검색 엔진, 추천 시스템, 광고 시스템 등 다양한 분야에서 중요

- 데이터 포인트의 순서를 예측하는 이 문제는 분류나 회귀와는 다른 접근이 필요함

 

LightGBM Ranker

- LightGBM은 Microsoft가 개발한 고성능 그라디언트 부스팅 프레임워크로, LightGBM Ranker는 그 중에서도 랭킹 문제를 해결하기 위해 설계된 모델

- 랭킹 문제는 데이터 포인트를 특정 기준에 따라 정렬하는 문제로, 검색 결과 정렬, 추천 시스템, 클릭 예측 등 다양한 분야에서 활용

 

랭킹 문제 정의

  • 쿼리: 순위를 예측하고자 하는 개별 그룹을 의미합니다. 예를 들어, 검색 쿼리나 사용자 세션 등이 될 수 있습니다.
  • 아이템: 각 쿼리에 속하는 개별 데이터 포인트를 의미합니다. 예를 들어, 검색 결과 페이지의 개별 문서나 추천 상품 등이 될 수 있습니다.

랭킹 문제는 보통 학습 데이터에 쿼리와 아이템, 그리고 각 아이템의 점수(랭크)를 포함

 

LightGBM Ranker 사용법

1. 데이터 준비

- LightGBM Ranker를 사용하려면 데이터를 쿼리 그룹으로 나누어야 함

- 각 쿼리는 그룹 ID를 가져야 하며, 아이템들은 해당 그룹 내에서 순위가 매겨짐

import lightgbm as lgb
import pandas as pd

# 예시 데이터 준비
data = {
    'query_id': [1, 1, 1, 2, 2, 3, 3, 3, 3],
    'feature1': [0.1, 0.2, 0.3, 0.2, 0.1, 0.4, 0.5, 0.6, 0.7],
    'feature2': [1, 3, 2, 3, 2, 4, 5, 1, 2],
    'label': [3, 2, 1, 3, 1, 2, 3, 1, 4]
}
df = pd.DataFrame(data)

# 특성 및 라벨
X = df[['feature1', 'feature2']]
y = df['label']
group = df.groupby('query_id').size().to_frame('size')['size'].to_numpy()

2. 모델 학습

- LightGBM Ranker는 rank_objective를 사용하여 랭킹 문제를 해결

# Dataset 생성
lgb_train = lgb.Dataset(X, y, group=group)

# 파라미터 설정
params = {
    'objective': 'lambdarank',
    'metric': 'ndcg',
    'boosting': 'gbdt',
    'num_leaves': 31,
    'learning_rate': 0.05,
    'feature_fraction': 0.9
}

# 모델 학습
gbm = lgb.train(params, lgb_train, num_boost_round=100)

 

3. 예측

- 학습된 모델을 사용하여 새로운 데이터의 랭킹을 예측

# 예측 데이터 준비
X_test = pd.DataFrame({
    'feature1': [0.15, 0.25, 0.35],
    'feature2': [1, 2, 3]
})

# 예측 수행
y_pred = gbm.predict(X_test)
print("Predicted ranks:", y_pred)

4. 평가

- 랭킹 모델의 성능을 평가하기 위해 NDCG (Normalized Discounted Cumulative Gain)와 같은 지표를 사용

- LightGBM은 이러한 지표를 기본적으로 제공

 

728x90
반응형
LIST