검색어와 문서에 대한 유저 피드백 데이터를 사용해 특정 검색어로 노출되는 문서의 품질을 알기 위해 클릭율을 예측한다고 가정해 봅시다. 상위에 노출된 문서는 유저가 더 많이 클릭하기 때문에 클릭율이 좋다고 착각할 수 있습니다. 하지만 클릭 데이터에는 위치 편향(Position Bias)이 내포되어 있습니다.
사용자는 상단에 노출된 문서를 더 자주 보게 되고, 그만큼 더 클릭하며, 실제 품질보다 높은 클릭 전환율을 보일 가능성이 있습니다. 이런 편향을 제거하지 않으면 문서 품질에 대한 정확한 평가가 어렵습니다.
우리의 목표는 위치 편향을 보정하여 문서 자체 품질의 순수한 평가를 수행하는 것입니다. 본 글은 이를 해결하기 위해 인과추론 분야에서 주로 사용되는 Propensity Score 개념을 중심으로 한 편향 보정 방법에 대해 소개합니다.
Propensity Score
Propensity Score(성향 점수)는 특정 처치를 받을 확률을 나타냅니다. 본 글에서는 문서가 노출될 확률로 계산해 보겠습니다.
성향 점수의 수학적 정의
수학적으로, 성향 점수 e(x)는 다음과 같이 정의됩니다. 처치의 조건부 확률이라고도 말할 수 있습니다.
- T: 처치 변수 (문서가 노출되었는지 여부, 1: 노출됨, 0: 노출되지 않음)
- X: 설명 변수 (문서와 사용자, 쿼리의 특성)
- P(T=1∣X=x): 설명 변수를 기반으로 한 처치 확률
실제 검색 엔진 사례에서의 성향 점수
검색 데이터에서 성향 점수를 계산하기 위해 문서의 텍스트 연관성 점수, 유저 기기 종류 등을 변수로 사용할 수 있습니다.
이 데이터를 바탕으로 로지스틱 회귀(Logistic Regression) 모델을 사용해 성향 점수를 계산할 수 있습니다.
다음은 Python 코드로 성향 점수를 구해보는 예제입니다.
import pandas as pd
from sklearn.linear_model import LogisticRegression
# 예제 데이터
data = pd.DataFrame({
'doc_score': [0.8, 0.6, 0.9, 0.3, 0.5],
'user_device': [1, 0, 1, 0, 0], # 1: 모바일, 0: 데스크톱
'exposure': [1, 0, 1, 0, 0] # 처치 여부 (1: 노출, 0: 노출되지 않음)
})
# 설명 변수(X)와 처치 여부(T)
X = data[['doc_score', 'user_device']]
T = data['exposure']
# 로지스틱 회귀 모델로 성향 점수 계산
model = LogisticRegression()
model.fit(X, T)
propensity_scores = model.predict_proba(X)[:, 1] # 성향 점수
# 성향 점수 출력
data['propensity_score'] = propensity_scores
print(data)
만약 위 모델로 계산한 문서 0번의 성향 점수는 0.87이라고 한다면, 0번 문서가 노출될 확률이 87%라는 뜻입니다.
우리는 이제 이 성향 점수를 활용해 위치 편향을 보정할 수 있습니다.
Propensity Score를 활용한 편향 보정
1. Matching (매칭)
매칭(Matching)은 성향 점수가 유사한 처치군과 비처치군을 쌍으로 묶어 비교하는 방법입니다. 이 과정은 교란 변수의 영향을 최소화하고, 처치의 순수한 효과를 추정하는 데 유용합니다.
매칭 방법의 단계는 다음과 같습니다.
- 각 문서의 성향 점수를 계산합니다.
- 처치군에서 비처치군과 가장 가까운 성향 점수의 문서를 매칭합니다.
- 매칭된 문서 쌍 간 클릭율 차이를 비교합니다.
다음은 예시입니다.
문서 | Propensity Score | 노출 | 클릭율 |
A | 0.87 | 1 | 0.88 |
B | 0.85 | 0 | 0.79 |
C | 0.42 | 1 | 0.56 |
D | 0.40 | 0 | 0.23 |
문서 A와 B, 문서 C와 D를 각각 매칭하고, 매칭된 쌍(A-B, C-D)의 클릭율 차이를 비교해 위치의 영향을 제거한 문서 클릭율 차이를 평가합니다.
이 방법의 장점은 직관적이고 성향 점수가 잘 맞는 경우 편향 제거에 효과적입니다. 다만, 매칭되지 않는 데이터(예: 성향 점수가 너무 차이나는 문서들)이 분석에서 제외될 수 있다는 단점이 있습니다.
2. Weighting (가중치 부여)
가중치 부여(Weighting)는 성향 점수를 활용해 각 데이터에 적절한 가중치를 할당하여 분석하는 방법입니다.
이 방법은 모든 데이터를 활용하면서 편향을 보정하는 데 유용합니다.
역확률 가중치 (Inverse Probability Weighting, IPW) 라고 부르는 가중치는 다음과 같이 계산됩니다.
- : 문서 i의 가중치
- e(x_i): 문서 i의 성향 점수
이때, 처치 받지 않은 데이터에 대해서는 다음과 같이 계산합니다.
역확률 가중치 적용 방법의 단계는 다음과 같습니다.
- 각 문서의 성향 점수를 계산합니다.
- 각 문서 성향 점수의 역수를 가중치로 할당합니다.
- 가중치를 적용하여 데이터를 조정합니다.
다음은 예시입니다.
문서 | Propensity Score | 노출 | 클릭율 | 가중치 |
A | 0.87 | 1 | 0.88 | 1/0 |
B | 0.85 | 0 | 0.79 | 1/(1−0.851)≈6.67 |
C | 0.42 | 1 | 0.56 | 1/0.421≈2.38 |
D | 0.40 | 0 | 0.23 | 1/(1−0.401)≈1.67 |
위 데이터 예시에서 클릭율 계산 시, 노출이 안 된 문서(B, D)에 더 높은 가중치를 부여해 처치에 대한 균형을 맞추게 됩니다.
이렇게 되면, 데이터 손실 없이 모든 문서를 활용 가능하고, 보통 처리군과 비처리군의 불균형이 클 때 유용합니다. 단점은 성향 점수가 극단값(0 또는 1)에 가까운 경우 가중치가 매우 커져 분석에 왜곡이 발생할 수 있습니다.
본 글에서는 검색 엔진의 위치 편향 사례를 통해 Propensity Score를 기반으로 한 기본적인 편향 보정 기법을 살펴보았습니다.
다음 글에서는 이어서 역확률 가중치를 활용한 Doubly Robust Method 방법에 대해서 알아볼 예정입니다.
'데이터 분석 (DA)' 카테고리의 다른 글
서비스 대시보드 제작기 1편 (0) | 2025.01.05 |
---|---|
[SQL] 유저 데이터 분석에서 유용한 ROW_NUMBER, LAG 함수 (0) | 2024.01.21 |