Interactive Demo Algorithm

LinUCB Interactive Simulation

Experience how the Contextual Bandit algorithm learns user preferences in real-time. Click on ads to simulate user engagement and watch the model update its beliefs.

Status: Ready to learn...

색깔 막대 (예측 점수): 현재 모델이 이 유저에게 이 광고가 얼마나 적합하다고 판단하는지.

회색 막대 (탐색 보너스): 아직 충분히 학습되지 않은 광고에 주는 가산점.

Simulate User Action

광고를 클릭해 유저 반응을 시뮬레이션하세요. 모델이 클릭 결과를 학습하여 다음 추천에 반영합니다.

Activity Log

Model Internals (Real-time)

클릭할 때마다 모델의 가중치(θ)와 점수가 어떻게 변하는지 실시간으로 확인하세요.

Related: Disjoint LinUCB MAB Collection UCB vs TS

작동 원리

이 데모는 LinUCB (Linear Upper Confidence Bound) 알고리즘을 브라우저에서 직접 실행합니다.

Disjoint LinUCB 모델 상세 해석

보내주신 JS 코드와 이 스크린샷 화면은 Disjoint LinUCB 모델이 작동하는 모습을 완벽하게 시각화한 것입니다.

"이 그래프가 도대체 무엇을 의미하는지", 그리고 "왜 Ad A가 추천되었는지"를 AdTech 전문가 관점에서 명쾌하게 해석해 드릴게요.


1. 코드 확인: "네, Disjoint LinUCB입니다."

작성하신 코드에서 this.A = [] 배열을 만들어 광고(Arm)마다 별도의 행렬을 관리했었죠?
이 화면에서도 4개의 막대그래프가 서로 남남처럼 각자의 점수를 계산하고 있습니다.


2. 그래프 완벽 해석 (The Anatomy of UCB)

이 그래프는 LinUCB의 핵심 공식인 "최종 점수 = 예측(Exploitation) + 불확실성(Exploration)"을 눈으로 보여줍니다.

① 전체 막대 높이 (Total Height) = 최종 UCB 점수

② 색깔 있는 부분 (Bottom Bar) = "실력 점수" (Prediction / Exploitation)

③ 회색 부분 (Top Bar) = "호기심 점수" (Uncertainty / Exploration)


3. 상황별 시나리오 분석

스크린샷의 상황을 점쟁이(모델)의 속마음으로 읽어보겠습니다.

4. 요약

이 시각화는 Disjoint LinUCB가 어떻게 "확실한 이득(색깔 막대)""미래를 위한 투자(회색 막대)" 사이에서 줄타기를 하는지 보여줍니다.

AdTech 실무 적용

LinUCB가 해결하는 문제

기본 Thompson Sampling은 유저 정보 없이 광고의 평균 CTR만으로 판단합니다. LinUCB는 유저의 Context(검색어, 성별, 시간대 등)를 Feature Vector로 입력받아 "이 유저에게 이 광고가 얼마나 적합한가"를 개인화된 수준에서 예측합니다.

Feature Vector 설계

이 데모에서는 3개의 Feature(Matching Score, User Gender, Seasonality)를 사용합니다. 실무에서는 훨씬 다양한 Feature를 사용합니다:

Disjoint vs Hybrid LinUCB

이 데모는 Disjoint LinUCB를 구현합니다. 각 광고가 독립적으로 학습하므로 광고 A의 학습 결과가 광고 B에 전이되지 않습니다. 신규 광고가 빈번한 환경에서는 Hybrid LinUCB로 확장하여 광고 간 공통 지식을 공유하는 것이 효과적입니다.

데모 실험 가이드