Retrieval 단계에서 선정된 후보 아이템들 중에서 클릭(Click)이 발생한 아이템은 True(1), 클릭이 발생하지 않은 아이템은 False(0)로 라벨링하여 이진 분류(Binary Classification) 문제로 접근합니다. 이는 랭킹 모델이 사용자가 특정 아이템을 클릭할지 여부를 예측하도록 학습시키는 데 사용됩니다.
Retrieval과 Ranking의 관계
-
Retrieval 단계:
- 전체 아이템 풀(수백만~수십억 개)에서 사용자에게 추천할 수 있는 후보 아이템을 선정합니다.
- 예: 사용자 A에게
[item_456, item_789, item_101]
를 후보로 선정.
-
Ranking 단계:
- Retrieval 단계에서 선정된 후보 아이템들을 대상으로 랭킹을 수행합니다.
- 클릭이 발생한 아이템은
1
, 발생하지 않은 아이템은 0
으로 라벨링합니다.
- 이진 분류 모델을 사용해 각 아이템의 클릭 확률을 예측합니다.
이진 분류를 위한 라벨링 예시
사용자 A의 후보 아이템 및 클릭 여부
아이템 ID | 클릭 여부 | 라벨 |
---|
item_456 | 클릭함 | 1 |
item_789 | 클릭하지 않음 | 0 |
item_101 | 클릭하지 않음 | 0 |
학습 데이터 구성
-
입력 (Input):
- 사용자 데이터, 아이템 데이터, 컨텍스트 정보를 포함한 다양한 피처.
- 예:
[연령=30, 가격=1,000,000원, CTR=0.1, ...]
.
-
출력 (Output):
- 아이템에 대한 예측 점수 (0에서 1 사이의 값).
- 예:
item_456
→ 0.95
(클릭할 확률).
-
라벨 (Label):
- 클릭이 발생한 아이템:
1
.
- 클릭이 발생하지 않은 아이템:
0
.

Negative Sampling
- 문제: 클릭이 발생한 아이템(Positive Sample)에 비해 클릭이 발생하지 않은 아이템(Negative Sample)이 훨씬 많습니다.
- 해결: Negative Sampling을 통해 클릭이 발생하지 않은 아이템 중 일부만을 샘플링합니다.
- 예: Positive Sample 1개당 Negative Sample 100개를 샘플링.
결론
- Retrieval 단계에서 선정된 후보 아이템들 중에서 클릭이 발생한 아이템은
1
, 발생하지 않은 아이템은 0
으로 라벨링합니다.
- 이를 통해 이진 분류 모델을 학습시켜 사용자가 특정 아이템을 클릭할지 여부를 예측합니다.
- 이 접근법은 추천 시스템에서 널리 사용되며, 개인화된 추천을 제공하는 데 효과적입니다.
예시
네, 맞습니다! Retrieval 단계에서 각 사용자당 10개의 후보 아이템이 선정되고, 사용자가 1억 명이라면 1억 x 10의 테이블 크기가 됩니다. 이는 매우 큰 규모의 데이터셋이며, 효율적인 데이터 처리와 모델 학습이 필요합니다. 아래에서 이 데이터셋의 크기와 이를 어떻게 관리하는지 설명드리겠습니다.
데이터셋 크기 계산
- 사용자 수: 1억 명.
- 후보 아이템 수: 사용자당 10개.
- 테이블 크기: 1억 x 10 = 10억 행.
예시 테이블 구조
사용자 ID | 아이템 ID | 클릭 여부 | 피처 1 | 피처 2 | ... | 피처 N |
---|
user_1 | item_456 | 1 | 0.5 | 0.3 | ... | 0.7 |
user_1 | item_789 | 0 | 0.4 | 0.2 | ... | 0.6 |
user_1 | item_101 | 0 | 0.6 | 0.1 | ... | 0.8 |
... | ... | ... | ... | ... | ... | ... |
user_100M | item_999 | 0 | 0.7 | 0.4 | ... | 0.9 |
데이터 관리 및 처리 방법
대규모 데이터셋을 효율적으로 처리하기 위해 다음과 같은 방법을 사용합니다.
1. 분산 처리
- 분산 파일 시스템: 데이터를 여러 서버에 분산 저장합니다 (예: HDFS, Amazon S3).
- 분산 컴퓨팅: 분산 컴퓨팅 프레임워크(예: Apache Spark, Hadoop)를 사용해 데이터를 병렬 처리합니다.
2. 데이터 샘플링
- Negative Sampling: 클릭이 발생하지 않은 아이템(Negative Sample) 중 일부만을 샘플링합니다.
- 예: Positive Sample 1개당 Negative Sample 100개를 샘플링.
- 이를 통해 데이터셋의 크기를 크게 줄일 수 있습니다.
3. 배치 처리
- 미니 배치 학습: 전체 데이터를 한 번에 처리하지 않고, 작은 배치(batch) 단위로 나누어 처리합니다.
- 예: 배치 크기 = 10,000 → 10억 행을 100,000개의 배치로 나눔.
4. 데이터 압축
- 컬럼 기반 저장: 컬럼 기반 데이터베이스(예: Parquet, ORC)를 사용해 데이터를 압축 저장합니다.
- 인코딩: 범주형 데이터를 정수로 인코딩하여 저장 공간을 절약합니다.
5. 온라인 학습
- 스트리밍 데이터 처리: 실시간으로 들어오는 데이터를 처리하고 모델을 업데이트합니다.
- 예: Apache Kafka, Apache Flink를 사용해 실시간 데이터를 처리.
모델 학습
대규모 데이터셋을 효율적으로 학습하기 위해 다음과 같은 방법을 사용합니다.
1. 분산 학습
- 분산 머신러닝 프레임워크: TensorFlow, PyTorch, Horovod 등을 사용해 분산 학습을 수행합니다.
- 데이터 병렬화: 데이터를 여러 서버에 나누어 병렬로 학습합니다.
2. 증분 학습
- 온라인 학습: 새로운 데이터가 들어올 때마다 모델을 점진적으로 업데이트합니다.
- 전이 학습: 기존 모델을 새로운 데이터에 맞게 미세 조정(fine-tuning)합니다.
3. 효율적인 알고리즘
- 트리 기반 모델: LightGBM, XGBoost는 대규모 데이터셋에서도 효율적으로 동작합니다.
- 딥러닝 모델: Two-Tower Model, DIN 등은 분산 학습과 배치 처리를 통해 대규모 데이터를 처리합니다.
예시: 분산 학습 파이프라인
-
데이터 수집:
- 사용자와 아이템의 상호작용 데이터를 수집합니다.
- 예: 클릭, 구매, 장바구니 추가.
-
데이터 전처리:
- 데이터를 분산 파일 시스템에 저장하고, 분산 컴퓨팅 프레임워크를 사용해 전처리합니다.
- 예: Negative Sampling, 피처 엔지니어링.
-
모델 학습:
- 분산 머신러닝 프레임워크를 사용해 모델을 학습합니다.
- 예: TensorFlow, PyTorch.
-
모델 배포:
- 학습된 모델을 실시간 추천 시스템에 배포합니다.
- 예: TensorFlow Serving, ONNX.
결론
- 1억 x 10의 테이블 크기는 매우 큰 데이터셋이지만, 분산 처리, 데이터 샘플링, 배치 처리, 분산 학습 등의 방법을 통해 효율적으로 관리하고 학습할 수 있습니다.
- 이러한 기술을 활용하면 대규모 추천 시스템에서도 실시간으로 개인화된 추천을 제공할 수 있습니다.