끄적끄적
2025.08.19 추천시스템 & LLM 2회차 본문
사용자와 아이템의 상호작용 데이터를 사용하는 협업 필터링에 대해 알아보자.
행렬 연산과 추천 시스템 평가 지표에 대해서 알아보자
💻️ 실습 코드
1️⃣ 협업 필터링
협업 필터링이란 비슷한 취향(상호작용 기록)을 가진 사람은 비슷한 것을 좋아할 가능성이 높다는 가정에 기반한 추천방식이다.
아이템의 콘텐츠를 보지 않고, 사용자-아이템 상호작용 데이터만으로 추천하는 방식으로 상호작용 데이터가 많을수록 추천의 정확도가 향상될 수 있다.
협업 필터링과 콘첸트 기반 필터링의 차이점은 아래와 같다.
| 협업 필터링 | 콘텐츠 기반 필터링 | |
| 추천 방식 | 유사한 사용자 또는 아이템 기반 추천 | 사용자가 선호하는 아이템의 특징에 기반한 추천 |
| 주요 데이터 | 사용자-아이템 간의 상호작용 데이터 (평점, 클릭, 구매 이력 등) |
아이템 메타데이터(장르, 키워드, 설명 등) |
| 사용자 콜드스타트 | 상호작용 이력이 없으면 추천 어려움 | 콜드스타트 문제가 상대적으로 적음 |
| 아이템 콜드스타트 | 아이템이 충분한 평가를 받아야 가능함 | 아이템의 특징만 있으면 바로 추천 가능 |
| 추천의 다양성 | 인기 아이템 추천 경향 | 유사한 콘텐츠만 추천되는 문제 발생 (의외성 부족) |
| 설명 가능성 | 추천 이유를 설명하기 어려움 | 추천 근거를 설명하기 용이함 |
⇒ 콘텐츠 기반 필터링은 아이템의 속성(메타데이터)에 의존한 추천이고, 협업 필터링은 사용자가 직접적으로 선호를 표현한 인터랙션 데이터를 기반으로 잠재된 유사성을 파악하는 방식
사용자-아이템 상호작용 데이터란?
- 전체 사용자 ID = 행 인덱스, 전체 아이템 ID = 열 인덱스
- 상호작용 여부, 평점, 횟수/빈도 등의 값으로 구성할 수 있음

💡 희소 행렬 (Sparse Matrix)
|
📌 협업 필터링 분류

🔹 기업 기반 협업 필터링 = 최근접 이웃 방식
상호작용 데이터를 그대로 활용하여 유사한 사용자나 아이템을 찾아 추천하는 협업 필터링
- 대표 방식
- 사용자 기반(User-based): 나와 취향이 비슷한 사용자가 좋아한 아이템 추천
- 아이템 기반(Item-based): 내가 좋아한 아이템과 유사한 아이템 추천
- 학습 없이 추천이 필요할 때마다 실시간으로 유사도를 계산 혹은 일/주 단위로 상호작용 데이터 업데이트 해서 미리 계산한 결과를 사용
🔹 모델 기반 협업 필터링
상호작용 데이터를 학습하여 일반화된 예측 모델을 만든 뒤 추천
- 대표 방식 : 잠재 요인 분해(Latent Factor Model)
- 사용자와 아이템을 벡터로 표현하고, 이들 간의 내적으로 선호도를 예측
- 사용자의 취향과 아이템 특성을 잠재적으로 추정
- 사용자가 평점은 주지 않았지만 좋아할 가능성이 높은 아이템을 예측 가능
- 협업 필터링은 기본적으로 상호작용 데이터만 사용하지만, 실무에서는 정확도를 높이기 위해 사용자/아이템 피처도 함께 사용하는 확장 모델들로 발전됨
📌 최근접 이웃 방식 협업 필터링
과거 데이터를 그대로 활용하여 유사한 사용자나 아이템을 찹아 추천 방식으로 사용자 기반 협업 필터링과 아이템 기반 협업 필터링이 있다.

🔹 사용자 기반 협업 필터링 (User-Based CF)
나와 비슷한 취향을 가진 가까운 사용자(이웃)을 찾아 그들이 좋아한 다른 아이템을 추천 받음
Q.
위 그림은 4명의 사용자가 각각의 6개 아이템에 대한 평점 데이터이다. 평점 데이터를 바탕으로 사용자 A와 가장 가까운 사람은?

정답은 B
- 코사인 유사도 : (A, B) = 0.804, (A, C) = 0.54, (A, D) = 0.51
- A와 취향이 비슷한 B에게 A가 본 영화 중 평점이 좋은 영화를 추천해주는 방식
🔹 아이템 기반 협업 필터링 (Item-Based CF)
내가 좋아한 아이템과 유사한 아이템을 찾아 추천
⁉️콘텐츠 기반 필터링과 비슷한 것 아닌가요?
- 콘텐츠 기반 필터링 : 슬램덩크를 좋아하는 사용자에게 똑같이 ‘스포츠’ 만화인 테니스의 왕자를 추천
→ 유사함의 기준이 아이템의 속성
- 아이템 기반 협업 필터링 : 슬램덩크를 본 ‘사용자가 많이 본’ 강철의 연금술사를 추천
→ 유사함의 기준이 해당 아이템을 본 사용자가 인터랙션 했는가
Q.
위 그림을 통해 사용자 B에게 아이템을 추천한다고 합시다. 사용자 B가 가장 좋은 평점을 매긴 아이템 다과 유사한 어떤 아이템을 추천하면 될까요?

정답은 아이템 나
- 유사도 : (다, 가) = 0.982 / (다, 나) = 0.563 / (다, 라) = 0.572 / (다, 마) = 0.291 / (다, 바) = 0.39
- 유사도는 가 → 라 → 나 순으로 높으나 가와 라는 이미 본 영화이기 때문에 나를 추천
장점
- 도메인 지식과 아이템의 메타데이터가 필요 없음
- 단순하고 직관적이라 빠르게 적용 가능함
- 비슷한 사용자 A가 이 영화를 좋아했기 때문에 추천 가능하다 등 설명이 가능함
한계
- 데이터 희소성 문제 : 실제 데이터는 대부분 비어 있는 경우가 많아서 유사도를 계산할 데이터가 부족함
- 콜드스타트 문제 : 사용자, 아이템 모두 상호작용 기록이 없는 경우 사용할 수 없음
- 확장성 문제 : 사용자 수와 아이템 수가 많아질수록 유사도 계산 비용이 기하급수적으로 증가함
- 유사도 기반 추천의 한계 : 추천 이유를 설명할 수 없음
⇒ 데이터가 커지거나 복잡해지면 모델 기반으로 넘어가는 것이 일반적
📌 잠재 요인 협업 필터링
- 전통적인 협업 필터링인 최근접 이웃 기반 협업 필터링의 한계점을 극복하기 위해 등장했으며, Netflix Prize 대회에서 처음 등장한 방법으로도 유명함
- 행렬 분해(Matrix Factorization) 기법을 사용해서 사용자와 아이템의 숨겨진 특징(Latent Factors)을 학습하는 방법

이때 행렬 분해란 행렬 A를 2개 이상의 작은 행렬 B, C로 분해하는 것으로 희소 행렬을 해결할 수 있다.

🔹 동작 방식
- 사용자-아이템 행렬 데이터 생성 (희소 행렬 형태)
- 행렬 분해(Matrix Factorization)
- 사용자-아이템 행렬을 두 개의 잠재 행렬로 분해

- 사용자 잠재 행렬(U) : 각 사용자의 잠재 요인을 나타내며, 사용자가 특정 특징에 얼마나 관심이 있는지를 나타내는 값들이 포함됨
- 아이템 잠재 행렬(V) : 각 아이템의 잠재요인을 나타내며, 아이템의 특정 특징에 얼마나 관련되어 있는지를 나타내는 값들이 포함됨 (*T : 전치 행렬을 의미함)
- 사용자 잠재 행렬 * 아이템 잠재 행렬을 최대한 기존 상호작용 데이터와 유사하게 복원하는 것이 목표

- 사용자-아이템 행렬을 두 개의 잠재 행렬로 분해
- 학습 과정
- 초기에는 U와 V를 무작위 값으로 설정한 뒤, 예측값과 실제값의 차이(오차)를 줄이기 위해 최적화를 반복 (ex. 경사 하강법)
- 학습이 진행될수록 사용자 잠재 행렬과 아이템 잠재 행렬의 값이 업데이트 되면서 예측 정확도가 높아짐 → 숨겨진 패턴 반영
- 예측값 계산
- 학습이 완료되면 U × Vᵀ 를 계산해 비어 있던 셀에 대한 예측 평점을 생성
- 이 예측 평점은 "사용자 A는 아이템 B를 얼마나 좋아할 가능성이 높은가?"를 의미함 → 실제값과 똑같아 지는 게 아니라 전체 패턴을 잘 근사하는 것을 목표로 함

- 추천리스트 생성
- 예측된 평점 중에서 사용자가 아직 보지 않은 아이템들 중 점수가 높은 순으로 정렬하여 추천 리스트를 생성
🔹 주요 행렬 분해 기법
어떻게 나누느냐에 따라 다양한 기법이 있다.
1. SVD (Singular Value Decomposition)
- 모든 정방행렬 또는 직사각 행렬을 세 개의 행렬의 곱으로 분해하는 방법 (=선형 대수 기반의 행렬 분해 기법)
- 장점
- 수학적으로 가장 정확한 행렬 분해 방법
- 정방행렬뿐만 아니라 직사각 행렬에도 적용 가능
- 차원 축소 효과를 가지며 최적의 근사값 제공
- 한계
- 결측값(missing values)이 있으면 적용 불가능 (희소 행렬에서는 적용 어려움)
- 계산량이 많아 대규모 데이터에서는 사용 어려움
- 보완방법으로 Truncated SVD 사용
2. 교대 최소제곱법(ALS, Alternating Least Squares)
- 행렬을 직접 최적화하는 방법
- 장점
- 결측값이 있는 데이터에도 적용 가능
- 추천시스템에서 대규모 행렬 분해에 최적화
- 한계
- 하이퍼 파라미터(잠재 요인 개수 k)에 따라 성능이 달라짐
- 계산량이 많아 병렬 연산이 필요할 수 있음
장점
- 성능 우수 : 희소한 데이터에서도 사용자의 잠재적인 선호를 파악하여 높은 추천 정확도 낼 수 있음
- 압축 표현 가능 : 사용자와 아이템의 특성을 소수의 잠재 요인으로 표현함으로써 계산 효율성이 높아짐
- 비선형 관계 학습 가능 : 단순 유사도 기반 접근보다 더 복잡한 사용자-아이템 간의 관계 포착 가능
- 대규모 데이터에 적합 : SGD, ALS 등의 최적화 알고리즘을 사용하여 대규모 데이터도 학습 가능
- 예측 기반 추천 : 아직 상호작용하지 않은 아이템에 대한 예측 평점 생성 가능
한계
- 해석의 어려움 : 잠재 요인이 추상적이기 때문에 추천 이유 설명 어려움
- 콜드 스타트 문제 : 신규 사용자나 아이템은 상호작용 정보가 없어서 추천 불가능
- 학습 및 튜닝 필요 : 최적화 과정, 하이퍼파라미터 튜닝 등 모델 개선에 리소스가 많이 필요함
- 과적합 필요 : 적절한 정규화를 하지 않으면 특정 사용자나 아이템에 과적합 될 수 있음
최근 추천 시스템의 발전 방향
- 하이브리드 추천 시스템 : 콘텐츠 기반 + 협업 필터링을 결합하여 장점을 극대화
- LLM, 강화학습, 멀티모달 추천 등 발전된 형태의 추천 모델 등장
2️⃣ 추천 시스템 평가 지표
💡
오프라인 평가 vs. 온라인 평가
- 오프라인 평가 : 미리 수집된 데이터(과거 사용자 행동 데이터)를 기반으로 모델의 성능을 측정하는 방식. 추천시스템이 제공되기 전에 미리 성능을 테스트하는 데 사용됨
- 온라인 평가 : 실제 사용자 반응(클릭, 구매 등 실시간 행동 데이터)을 바탕으로 추천 시스템의 효과를 측정하는 방식
추천 품질 관련 지표
1. 정확도 기반 지표
- 추천된 아이템이 실제로 사용자가 선호하는지 측정하는 평가 방법
- Confusion Matrix (혼동행렬) 사용
2. 랭킹 기반 지지표
- 추천된 아이템의 순서가 얼마나 적절한지 평가하는 방법
- MAP (Mean Average Precision)
- 여러 사용자에 대해 평균 정밀도를 계산한 지표
- 추천 순서의 앞부분에 정답이 있을수록 높은 점수
- MRR (Mean Reciprocal Rank)
- 정답 아이템이 처음 등장한 순위의 역수 (MRR = 1 / 첫 번째 정답 아이템의 순위)
- 높은 순위에 정답이 있으면 좋은 점수
- NDCG (Normalized Discounted Cumulative Gain)
- 추천 순위에서 정답 아이템의 위치를 중요하게 보는 지표
- 높은 순위에 중요한 아이템이 있을수록 높은 점수
- 랭킹의 품질 평가에 적합
3. 다양성 기반 지표 (Coverage)
- 추천시스템을 통해 얼마나 다양한 종류의 아이템을 추천했는가
- Coverage : 전체 아이템 중에서 추천에 사용된 아이템의 비율 (추천 아이템 수 / 전체 아이템 수)
- Novelty : 사용자에게 새로운 아이템을 얼마나 추천했는가
- Diversity : 추천된 아이템 간의 유사도가 얼마나 낮은가
⇒ 추천 시스템은 단순히 사용자 취향만 만족하는 것이 아니라 안 팔리는 혹은 신규 아이템 판매를 유도하는 등 비즈니스적 접근도 필요함!
추천 효율성 (시스템 성능 중심)
- 추천 품질뿐 아니라 얼마나 빠르고 효율적으로 추천했는가도 추천 시스템에서 핵심 지표
- Latency (응답 속도) : 추천 리스트 생성에 걸리는 시간
- Throughput (처리량) : 초당 몇 개의 요청을 처리할 수 있는지
- Memory usage, Scalability 등
💡
실제 기업에서 추천 알고리즘을 선택할 때 정확도가 아주 조금 더 높은 모델보다, 속도나 자원 사용 측면에서 운영 가능한 모델이 선택되는 경우도 많음
'[스파르타]내일배움캠프 데이터 분석 트랙 > Session' 카테고리의 다른 글
| 2025.08.21 추천시스템 & LLM 3회차 (0) | 2025.08.21 |
|---|---|
| 2025.08.18 추천시스템 & LLM 1회차 (과제) (1) | 2025.08.18 |
| 2025.08.18 추천시스템 & LLM 1회차 (7) | 2025.08.18 |
| 2025.07.09 Pandas 실무 기초 세션 4 (5) | 2025.07.09 |
| 2025.07.09 머신러닝 세션 4 (3) | 2025.07.09 |