확률 & 유사도 기반 1:1 매칭 엔진
매칭 시스템은 단순히 “조건이 일치하면 매칭”하는 정적인 방식을 넘어,
연속적 유사도 점수를 통해 후보 간 차이를 세밀하게 반영하는 확률 기반 매칭 알고리즘을 도입하려고 한다.
평점, 스터디 분야, 선호시간대 등 다양한 조건을 동시에 고려하며,
누적분포(CPD)와 가중치 기반 랜덤 선택(Weighted Random Selection)을 활용하여 자동매칭을 수행한다.
1. 매칭 알고리즘의 핵심 개념
📌1.1 평점 유사도와 α의 영향
- 평점 유사도는 요청자와 후보자의 평점 차이에 따라 계산된다.
아래와 같은 지수 함수로 표현한다.
$$
S_{rating}=e^{−α⋅∣rating_{req}−rating_{cand}∣}
$$
여기서 α값은 평점 차이에 대한 민감도를 조절한다.
- α가 높으면, 조금만 차이가 나도 유사도가 급격히 낮아진다.
- α가 낮으면, 평점 차이가 커도 유사도가 크게 떨어지지 않는다.
📌1.2 정규화 제곱 (Normalized Squared)
- 평점 유사도의 미세한 차이를 더욱 극대화하기 위해, 정규화 제곱을 적용한다.
$$
S_{rating}^∗=(S_{rating})^2
$$ - 이 방식은 평점이 정확히 일치하는 후보와 차이가 있는 후보 사이의 격차를 더 명확하게 보여준다.
- 단순히 α 값을 2배 늘린 것과 같은 결과가 나올 것이다.
- 평점에게만 정규화 제곱을 적용하는 식으로 평점 우선 매칭 기능에서 사용할 수 있다.
📌1.3 연속적 유사도 점수
- 평점뿐 아니라, 스터디 분야 유사도와 선호시간대 유사도도 연속적 또는 이진(0 또는 1) 값으로 산출할 수 있다.
- 스터디 분야: 같은 분야면 1, 다르면 0 (또는 두 분야 간의 연속적 유사도 점수)
- 선호시간대: 같은 시간대면 1, 다르면 0 (또는 시간 간격에 따른 연속적 점수)
📌1.4 가중치 기반 매칭: 8:1:1 가중치 적용
- 사용자 요구에 따라 각 조건의 중요도를 반영하는 가중치를 부여한다. 예를 들어, 평점 우선 매칭의 경우 가중치를 다음과 같이 설정한다.
- 평점: 8
- 스터디 분야: 1
- 선호시간대: 1
최종 Total Score는 아래와 같이 계산된다.
$$
Total Score=8×S_{rating}^∗+1×S_{field}+1×S_{time}
$$
📌1.5 누적분포(CPD)와 가중치 기반 랜덤 선택
- 각 후보자의 Total Score를 기반으로 누적분포(Cumulative Probability Distribution, CPD)를 생성한다.
- 0과 1 사이의 난수를 생성하고, 이 난수가 CPD의 어느 구간에 속하는지를 판별하여 가중치 기반 랜덤 선택을 수행한다.
- 이 방식은 단순히 최고 점수를 가진 후보를 선택하는 것이 아니라, 확률적으로 높은 Total Score를 가진 후보가 선택될 가능성을 극대화할 수 있다.
예시 시나리오: 평점 우선 매칭 (8:1:1 가중치 적용)
📌요청자 프로필
- 평점: 5.0
- 스터디 분야: Backend
- 선호시간대: Evening
📌후보자 프로필
후보자 | 평점 | 스터디 분야 | 선호시간대 |
---|---|---|---|
A | 5.0 | Backend | Evening |
B | 3.0 | Backend | Morning |
C | 5.0 | Frontend | Evening |
D | 4.0 | Backend | Evening |
E | 4.5 | AI | Afternoon |
📌알고리즘 계산 (평점 우선: 가중치 8:1:1 적용)
(1) 평점 유사도 계산
평점유사도는 다음과 같이 정의된다.
$$
S_{rating}=e^{−α⋅∣rating_{요청자}−rating_{후보자}∣}
$$
α 는 민감도를 조절하는 파라미터이다.
이 수치가 높으면 조금만 차이가 나도 유사도가 급격히 낮아진다.
rating 차이가 작을수록 S는 1에 가까워진다.
$$
S^∗_{rating}=(Srating)^2
$$
(2) 스터디 분야 및 선호시간대 유사도
- 스터디 분야
- 동일하면 1, 다르면 0
- 선호시간대
- 동일하면 1, 다르면 0(3) 최종 Total Score 계산$$
Total Score=8×S^∗{rating}+1×S{field}+1×S_{time}
$$📌후보별 점수 계산
- 동일하면 1, 다르면 0(3) 최종 Total Score 계산$$
총 5명의 후보가 있다고 가정하면,
후보 A
- 평점 차이 : $∣5.0−5.0∣=0.0$
- 평점 유사도 : $S_{rating}=e^{−0.5×0}=1,\quad S^∗_{rating}=1^2=1$
- 스터디 분야 유사도: 1 (Backend 동일)
- 선호시간대 유사도: 1 (Evening 동일)
- Total Score : $8×1+1+1=10$
후보 B
- 평점 차이: $∣5.0−3.0∣=2.0$
- 평점 유사도:
$$
S_{rating}=e^{−0.5×2.0}=e^{−1}≈0.3679,\quad S_{rating}^∗≈(0.3679)^2≈0.1353
$$ - 스터디 분야 유사도: 1 (Backend 동일)
- 선호시간대 유사도: 0 (Morning vs Evening 다름)
- Total Score:
$$
8×0.1353+1+0≈1.0824+1=2.0824
$$후보 C, D, E이전과 완전히 같은 방식으로 계산
📌누적분포(CPD)와 최종 선택
Total Score 합:
$$
10+2.0824+9+4.9432+4.852≈30.8776
$$
후보별 비율 및 누적분포 (CPD 생성):
후보자 | Total Score | 비율 (Total Score / 30.8776) | 누적분포 (CPD) |
---|---|---|---|
A | 10 | 0.3239 | 0.3239 |
B | 2.0824 | 0.0674 | 0.3913 |
C | 9 | 0.2915 | 0.6828 |
D | 4.9432 | 0.1601 | 0.8429 |
E | 4.852 | 0.1571 | 1.0000 |
최종 매칭 후보 선택
- 0~1 사이의 난수 r을 생성하여 CPD에 따라 후보 선택
- A가 선택될 확률이 가장 높고(32.39%), 그다음으로 C (29.15%)와 D (16.01%)가 높은 확률을 가짐.
📌시나리오 요약
✔ 평점이 가장 중요하게 반영되도록(8:1:1 가중치) 설계됨
✔ CPD를 기반으로 확률적으로 매칭될 가능성을 조절
✔ 후보 A(완벽한 평점 매칭)가 가장 높은 점수를 받아 매칭될 가능성이 가장 높음
✔ 후보 C(완벽한 평점이지만 스터디 분야 불일치), 후보 D(비슷한 평점)가 차선 후보로 매칭될 가능성 있음
✔ 후보 B(평점이 낮음)와 후보 E(스터디 분야 및 시간대 불일치)는 낮은 점수를 받아 매칭될 가능성이 거의 없음
'ZERO-TO-ONE-프로젝트' 카테고리의 다른 글
자동 매칭 기능 (2차 매칭 알고리즘 : K-means clustering 도입) (0) | 2025.02.27 |
---|