[파이썬] xgboost로 추천 시스템 구축

xgboost-logo

소개

추천 시스템은 사용자의 행동 패턴 및 기타 요소를 분석하여 사용자에게 맞춤화된 추천을 제공하는 시스템입니다. 이 글에서는 xgboost 알고리즘을 사용하여 추천 시스템을 구축하는 방법에 대해 알아보겠습니다.

xgboost란?

xgboost는 Gradient Boosting 알고리즘을 기반으로 한 머신러닝 라이브러리입니다. Gradient Boosting은 약한 예측 모델들을 조합하여 더 강력한 예측 모델을 만드는 앙상블 기법입니다. xgboost는 다양한 분야에서 높은 예측 성능을 보여주고 있으며, 추천 시스템에도 적용될 수 있습니다.

데이터 준비

추천 시스템을 구축하기 위해선 사용자와 아이템 간의 상호작용 데이터가 필요합니다. 예를 들어, 사용자가 상품을 구매한 이력이나 영화를 시청한 이력 등이 입력 데이터로 사용될 수 있습니다.

import pandas as pd

# 사용자 상호작용 데이터를 로드합니다.
interactions_data = pd.read_csv('interactions_data.csv')

# 데이터 확인
print(interactions_data.head())

특성 공학

데이터를 xgboost 모델에 입력하기 위해서는 적절한 특성 공학이 필요합니다. 예를 들어, 사용자 정보, 아이템 정보, 시간 정보 등을 활용하여 특성을 추출할 수 있습니다.

import numpy as np
from datetime import datetime

# 사용자 특성 추출
users_data = interactions_data[['user_id', 'age', 'gender']]
users_data = pd.get_dummies(users_data, columns=['gender'])  # 범주형 변수를 one-hot encoding
users_data = users_data.groupby('user_id').agg({'age': np.mean, 'gender_M': np.mean, 'gender_F': np.mean}).reset_index()

# 아이템 특성 추출
items_data = interactions_data[['item_id', 'category', 'price']]
items_data = pd.get_dummies(items_data, columns=['category'])  # 범주형 변수를 one-hot encoding
items_data = items_data.groupby('item_id').agg({'category_A': np.mean, 'category_B': np.mean, 'price': np.mean}).reset_index()

# 날짜 특성 추출
interactions_data['timestamp'] = pd.to_datetime(interactions_data['timestamp'])
interactions_data['hour'] = interactions_data['timestamp'].dt.hour
interactions_data['day_of_week'] = interactions_data['timestamp'].dt.weekday

# 특성 테이블 병합
interactions_data = interactions_data[['user_id', 'item_id', 'hour', 'day_of_week']]
interactions_data = pd.merge(interactions_data, users_data, on='user_id', how='left')
interactions_data = pd.merge(interactions_data, items_data, on='item_id', how='left')

# 데이터 확인
print(interactions_data.head())

모델 학습 및 예측

데이터가 준비되면, xgboost 모델을 학습시킬 수 있습니다. 사용자와 아이템 간의 상호작용을 예측하는 모델을 학습시킨 뒤, 새로운 사용자나 아이템에 대한 추천을 수행할 수 있습니다.

import xgboost as xgb

# 훈련 데이터와 레이블 생성
X = interactions_data.drop(['user_id', 'item_id'], axis=1)
y = interactions_data['item_id']

# xgboost 모델 학습
model = xgb.XGBClassifier()
model.fit(X, y)

# 새로운 사용자에 대한 추천
new_user_features = np.array([[30, 1, 0, 1, 0, 100]])
recommendations = model.predict(new_user_features)

# 추천 결과 출력
print(recommendations)

결과 및 결론

xgboost를 사용하여 추천 시스템을 구축하는 방법을 알아보았습니다. xgboost는 강력한 예측 성능을 제공하는 알고리즘으로, 다양한 산업 분야에서 활용될 수 있습니다. 위의 예시 코드를 활용하여 사용자에게 맞춤화된 추천 시스템을 구현해보세요.


참고 자료