Esc
← 모든 글

그래프 기반 추천 시스템: 협업 필터링부터 그래프·지식 그래프 추천까지

추천 시스템의 기본 구조를 짚고, 사용자-아이템 그래프와 지식 그래프를 추천 시스템 문제에 활용하는 방법과 교육 도메인 적용 예시.

알고리즘이라는 단어가 흔히 쓰이는 단어가 됐을만큼 추천 알고리즘, 추천 시스템은 현시대에 일상적으로 접하게 되는, 어쩌면 소비자가 가장 많이 접하게 되는 AI 서비스다. 그만큼 나도 업무적으로 추천 시스템을 많이 손에 잡게 되는데, 이번에 그래프 기반의 추천 시스템을 다루게 되면서 한번 정리해보자 싶었다.

추천 시스템은 사용자의 행동과 아이템 정보를 바탕으로 사용자가 다음에 관심을 가질 후보를 찾고 순서를 정하는 시스템이다.

추천을 단순히 “비슷한 상품 찾기”라고 생각하기 쉽지만, 실제 시스템은 조금 더 복합적이다. 수백만 개의 아이템에서 후보를 빠르게 줄이고, 사용자별 선호를 예측하고, 중복·다양성·최신성·비즈니스 규칙까지 반영해야 한다.

그래프는 이 과정에 관계 정보를 더한다. 사용자가 클릭한 아이템만 보는 데서 그치지 않고, 아이템이 어떤 개념·속성·사람·카테고리와 연결되는지까지 표현한다. 특히 교육처럼 개념의 선후 관계와 추천 근거가 중요한 도메인에서 그래프는 단순한 성능 개선 수단 이상의 의미가 있다.

추천 시스템의 기본 구조#

추천 시스템의 입력은 크게 세 종류다.

  • 사용자 정보: 연령대, 지역, 가입 경로처럼 명시적으로 수집한 특성
  • 아이템 정보: 제목, 카테고리, 설명, 가격, 난이도처럼 아이템 자체가 가진 특성
  • 상호작용: 클릭, 조회, 구매, 평점, 시청 시간, 정답·오답과 같은 사용자 행동

평점처럼 사용자가 직접 선호를 표시한 데이터는 명시적 피드백이다. 클릭이나 체류 시간처럼 행동에서 선호를 추론해야 하는 데이터는 암묵적 피드백이다. 실무에서는 양이 많은 암묵적 피드백을 주로 사용하지만, 클릭하지 않았다는 사실이 곧 싫어한다는 뜻은 아니라는 주의가 필요하다. 사용자에게 노출되지 않은 아이템은 선택할 기회조차 없었기 때문이다.

대규모 추천은 보통 다음 세 단계로 나뉜다.

전체 아이템
-> 후보 생성: 관련 있을 만한 수백~수천 개 추출
-> 랭킹: 사용자별 선호 점수 예측
-> 재랭킹: 다양성·최신성·정책·중복 제거 반영
-> 최종 추천 목록

후보 생성은 빠른 탐색이 중요하고, 랭킹은 정교한 예측이 중요하다. 그래프는 후보 생성에서 이웃 아이템을 찾는 데 쓸 수도 있고, 그래프에서 학습한 임베딩을 랭킹 모델의 입력 특성으로 넣을 수도 있다.

전통적인 추천 방법#

콘텐츠 기반 필터링#

콘텐츠 기반 필터링은 사용자가 과거에 좋아한 아이템과 속성이 비슷한 아이템을 추천한다. 사용자가 그래프 신경망 관련 글을 많이 읽었다면 같은 주제나 키워드를 가진 글을 찾는 방식이다.

신규 아이템도 속성만 있으면 추천할 수 있지만, 이미 본 것과 비슷한 아이템에 추천이 치우치기 쉽다. 또한 “같은 감독”, “같은 개념” 정도를 넘어 여러 관계가 연결된 의미 구조를 다루기 어렵다.

협업 필터링#

협업 필터링은 비슷한 행동을 보인 사용자 또는 함께 소비된 아이템을 이용한다.

사용자 A: 콘텐츠 1, 2, 3을 학습
사용자 B: 콘텐츠 1, 2를 학습
결론: 사용자 B에게 콘텐츠 3을 추천

행렬 분해(matrix factorization)는 사용자-아이템 상호작용 행렬을 저차원 벡터로 바꾸는 대표적인 방법이다. 사용자 벡터 p_u와 아이템 벡터 q_i를 학습한 뒤 내적으로 선호 점수를 계산한다.

score(u, i) = p_u · q_i

로그가 충분하면 강력하지만 잘 알려진 한계도 있다.

한계의미
콜드스타트신규 사용자·아이템의 행동 기록이 부족하다
희소성가능한 사용자-아이템 조합 대부분에 관측값이 없다
의미 관계 부족두 아이템이 왜 관련 있는지 행동 행렬만으로 알기 어렵다
설명의 어려움잠재 벡터의 유사도를 사람이 이해할 근거로 바꾸기 어렵다

실제 서비스에서는 한 방법만 고집하기보다 콘텐츠 정보, 협업 신호, 문맥 정보를 함께 쓰는 하이브리드 추천이 일반적이다. 그래프 기반 추천도 기존 추천을 모두 대체하는 별도 세계라기보다, 관계 정보를 이용해 후보와 특성을 보강하는 하이브리드 접근으로 보는 편이 정확하다.

왜 그래프로 표현하는가?#

사용자-아이템 행렬은 사실 이분 그래프(bipartite graph)로 바꿔 그릴 수 있다. 사용자는 한 종류의 노드, 아이템은 다른 종류의 노드이고 클릭이나 구매가 두 노드를 잇는 엣지가 된다.

사용자 A ─[시청]─> 영상 1 <─[시청]─ 사용자 B
사용자 A ─[시청]─> 영상 2
사용자 B ─[시청]─> 영상 3

여기에 아이템의 속성과 외부 지식을 더하면 지식 그래프로 확장된다.

학생 A ─[오답]─> 문항 12 ─[평가]─> 약분
약분 ─[선수 개념]─> 배수
콘텐츠 7 ─[설명]─> 배수
콘텐츠 7 ─[난이도]─> 기초

이 표현에서는 학생과 콘텐츠가 직접 연결되어 있지 않아도 학생 -> 오답 문항 -> 결손 개념 -> 선수 개념 -> 콘텐츠라는 경로를 찾을 수 있다. 추천 결과뿐 아니라 어떤 관계를 거쳐 후보가 되었는지도 보존된다.

다만 모든 그래프 추천이 지식 그래프 추천인 것은 아니다.

그래프노드와 엣지주로 얻는 신호
사용자-아이템 그래프사용자, 아이템, 클릭·구매집단의 행동 패턴
아이템-아이템 그래프상품, 콘텐츠, 공동 소비아이템 간 근접성
소셜 그래프사용자, 팔로우·친구사회적 영향과 유사성
지식 그래프아이템, 개념, 속성, 인물과 관계 유형의미·도메인 지식

그래프를 추천에 쓰는 네 가지 방식#

1. 경로 탐색과 규칙#

가장 직관적인 방법은 그래프에서 의미 있는 경로를 직접 찾는 것이다.

영화: 사용자 -> 좋아한 영화 -> 감독 -> 다른 영화
쇼핑: 사용자 -> 구매 상품 -> 브랜드 -> 같은 브랜드 상품
교육: 학생 -> 오답 문항 -> 결손 개념 -> 선수 개념 -> 보충 콘텐츠

경로 자체가 추천 근거이므로 설명하기 쉽고, 도메인 규칙을 정확히 적용할 수 있다. 로그가 적은 초기 서비스의 PoC에도 적합하다. 반면 경로와 가중치를 사람이 계속 관리해야 하고, 그래프가 커지면 탐색 비용과 규칙 충돌이 증가한다. 관찰하지 못한 미묘한 취향을 자동으로 학습하는 능력도 제한적이다.

2. 그래프 임베딩#

그래프 임베딩은 노드와 관계를 저차원 벡터로 바꾼다. 연결 구조가 비슷하거나 의미적으로 가까운 노드는 벡터 공간에서도 가까워지도록 학습한다.

지식 그래프 임베딩인 TransE는 (머리 엔티티, 관계, 꼬리 엔티티)로 이루어진 트리플에서 다음 관계가 성립하도록 벡터를 학습한다.

head + relation ≈ tail
약분 + 선수개념 ≈ 배수

추천에서는 사용자가 상호작용한 아이템과 연결 엔티티의 임베딩을 모아 사용자 표현을 만들고, 후보 아이템과의 유사도나 예측 점수를 계산한다. 신규 콘텐츠에 행동 로그가 없어도 개념·브랜드·카테고리 같은 연결 정보가 있으면 후보에 포함할 수 있다는 장점이 있다.

그러나 가까운 벡터가 자동으로 좋은 설명이 되는 것은 아니다. 학습된 차원의 의미는 사람이 직접 읽기 어렵고, 그래프에 잘못된 관계가 많으면 그 오류도 임베딩에 섞인다.

3. 사용자-아이템 그래프의 GNN#

GNN(Graph Neural Network)은 한 노드의 표현을 만들 때 주변 이웃의 정보를 반복해서 모은다. 사용자 노드는 상호작용한 아이템에서, 아이템 노드는 이를 소비한 사용자에서 정보를 받는다.

사용자 표현 <- 클릭한 아이템들의 표현을 집계
아이템 표현 <- 클릭한 사용자들의 표현을 집계

LightGCN은 추천에 필요한 핵심을 이웃 임베딩의 선형 전파로 단순화한 대표 모델이다. 복잡한 비선형 변환을 덜어내고, 여러 전파 층에서 얻은 사용자·아이템 임베딩을 합쳐 최종 표현을 만든다.

GNN은 한 단계 너머의 협업 신호까지 반영할 수 있지만, 층을 무작정 깊게 쌓는다고 좋아지지 않는다. 너무 많은 이웃을 섞으면 노드 표현이 비슷해지는 over-smoothing이 생기고, 인기 아이템의 신호가 과도하게 전파될 수 있다. 대규모 그래프에서는 이웃 샘플링과 증분 학습, 임베딩 갱신 비용도 설계해야 한다.

4. 지식 그래프와 GNN의 결합#

지식 그래프 GNN은 이웃을 모두 같은 관계로 취급하지 않는다. 출연, 감독, 장르, 선수 개념처럼 관계의 종류를 고려해 메시지를 집계한다.

  • RippleNet은 사용자가 과거에 클릭한 아이템에서 시작해 지식 그래프 바깥쪽으로 관심을 전파한다.
  • KGCN은 아이템 주변의 다중 홉 엔티티를 표본 추출하고, 사용자별 편향을 반영해 이웃 정보를 모은다.
  • KGAT은 사용자-아이템 상호작용과 지식 그래프를 하나의 그래프로 결합하고, attention으로 이웃 관계의 중요도를 다르게 반영한다.

이 계열은 행동 패턴과 의미 관계를 함께 학습할 수 있지만 복잡도도 높다. attention 가중치가 높다는 사실만으로 사람에게 충실한 설명이라고 단정할 수도 없다. 설명이 필요한 시스템이라면 모델 점수와 별도로 실제 추천 경로, 반사실적 검증, 사용자에게 제시할 설명 규칙을 설계해야 한다.

산업 사례로 보는 그래프 추천#

Pinterest의 PinSage#

PinSage 논문은 Pin과 Board로 구성된 그래프에서 random walk로 중요한 이웃을 표본 추출하고 graph convolution으로 Pin 임베딩을 학습했다. 논문이 보고한 학습 규모는 30억 개 노드, 180억 개 엣지, 75억 개 학습 예제다. 모든 이웃을 읽지 않고 중요한 이웃을 표본 추출했기 때문에 웹 규모 그래프에 적용할 수 있었다.

이 사례는 정교한 온톨로지가 없어도 서비스 행동에서 만들어진 대규모 그래프 자체가 강력한 추천 자원이 된다는 점을 보여준다.

Taobao의 상품 그래프 임베딩#

Alibaba의 Billion-scale Commodity Embedding은 사용자 행동 이력으로 상품 그래프를 만들고 상품 임베딩을 학습해 아이템 간 유사도 계산에 사용했다. 상품의 부가 정보를 함께 반영해 희소성과 콜드스타트를 완화했으며, 논문은 Taobao 운영 환경의 온라인 A/B 테스트에서 기존 방법 대비 CTR 개선을 보고했다.

중요한 지점은 모델 하나보다 시스템 구조다. 대규모 행동 로그에서 그래프를 만들고, 오프라인에서 임베딩을 계산한 뒤, 온라인 추천이 빠르게 조회할 수 있는 형태로 제공했다.

뉴스 추천의 DKN#

뉴스는 기사 안에 인물, 기관, 장소, 사건 같은 엔티티가 풍부하다. DKN은 뉴스 제목의 단어 표현과 지식 그래프의 엔티티·문맥 표현을 결합하고, 후보 기사에 따라 사용자의 과거 클릭 기사 중요도를 attention으로 계산한다.

이 구조는 교육 콘텐츠로 옮겨 생각하기 쉽다. 뉴스의 인물·기관·사건을 교육의 개념·성취기준·단원·선수학습으로 바꾸면, 텍스트 유사도만으로는 놓치기 쉬운 지식 수준의 연결을 추천에 넣을 수 있다.

교육 콘텐츠 추천에 적용하기#

교육 추천에서는 “사용자가 좋아할 콘텐츠”만 찾으면 충분하지 않다. 학습 목표에 맞고, 현재 수준에서 학습 가능하며, 다음 학습으로 이어져야 한다. 따라서 다음과 같은 그래프가 유용하다.

학생
├─[정답/오답]─> 문항
└─[학습]─> 콘텐츠
문항
├─[평가]─> 개념
├─[근거]─> 성취기준
└─[난이도]─> 난이도 수준
개념
├─[선수 개념]─> 다른 개념
└─[포함]─> 단원
콘텐츠
├─[설명]─> 개념
├─[대응]─> 성취기준
└─[형식]─> 영상/문항/활동지

예를 들어 학생이 공배수 문항을 반복해서 틀렸다고 하자. 시스템은 오답만 보고 공배수 문제를 더 주는 대신, 그래프에서 공배수의 선수 개념인 배수를 찾고 기초 난이도의 배수 콘텐츠를 후보로 만들 수 있다.

학생 A
-> 공배수 문항 오답
-> 결손 개념: 공배수
-> 선수 개념: 배수
-> 후보: 배수 기초 콘텐츠
-> 학년·난이도·최근 학습 이력으로 재랭킹

추천 설명도 경로에서 만들 수 있다.

공배수를 이해하는 데 필요한 선수 개념인 배수를 보충하기 위해 이 콘텐츠를 추천했습니다.

여기서 그래프 경로는 추천 후보를 만든 근거다. 학생의 실제 결손을 확정하는 진단 근거와는 구분해야 한다. 한 번의 오답만으로 개념 미숙을 단정하지 말고, 정답률·풀이 시간·문항 난이도·반복 패턴을 함께 사용해야 한다.

현실적인 구축 순서#

초기부터 복잡한 GNN을 도입하는 것보다 데이터 성숙도에 맞춰 단계적으로 확장하는 편이 안전하다.

  • 1단계: 규칙과 그래프 탐색

먼저 콘텐츠, 문항, 개념, 성취기준, 선수 관계의 식별자와 품질을 정리한다. 검증 가능한 경로로 후보를 만들고 전문가가 추천 타당성을 확인한다. 이 단계에서 관계 정의가 불안정하다면 GNN을 붙여도 문제가 해결되지 않는다.

  • 2단계: 임베딩으로 후보 확장

그래프 임베딩이나 콘텐츠 임베딩으로 직접 연결되지 않은 유사 콘텐츠를 추가한다. 기존 규칙 후보와 임베딩 후보의 비율을 조절하고, 신규 콘텐츠가 실제로 노출되는지 확인한다.

  • 3단계: 행동 로그 기반 개인화

충분한 노출·클릭·학습 완료·정오답 로그가 쌓이면 사용자-아이템 GNN이나 지식 그래프 GNN을 실험한다. 이때 단순한 popularity, 행렬 분해, LightGCN 같은 강한 기준 모델과 비교해야 복잡한 모델의 실제 이득을 판단할 수 있다.

  • 4단계: 설명과 운영 정책 분리

추천 점수, 교육적 제약, 설명 생성을 한 모델에 모두 맡기지 않는다. 모델은 관련도를 예측하고, 재랭킹 계층은 난이도·중복·학습 순서를 보장하며, 설명 계층은 검증된 그래프 경로만 문장으로 바꾸는 구조가 관리하기 쉽다.

학습 이력
-> 개념 진단
-> 그래프 기반 후보 생성
-> 임베딩/GNN 관련도 점수
-> 교육 규칙 기반 재랭킹
-> 경로 기반 추천 설명

추천 시스템에서 사용하는 평가 지표#

오프라인에서는 보통 Recall@K, NDCG@K, MRR처럼 상위 K개 추천의 적중률과 순서를 평가한다. 하지만 그래프를 도입한 목적이 콜드스타트와 설명 가능성이라면 전체 평균만 봐서는 안 된다.

  • 신규 사용자와 신규 아이템을 분리해 평가했는가?
  • 인기 아이템 외의 카탈로그도 충분히 노출되는가?
  • 같은 주제만 반복하지 않고 적절한 다양성을 제공하는가?
  • 추천 경로가 실제 데이터와 일치하는가?
  • 교육 추천이라면 클릭이 아니라 학습 성취나 결손 해소로 이어지는가?
  • 모델과 그래프 갱신 비용이 운영 가능한 수준인가?

특히 클릭률은 추천의 최종 품질과 같지 않다. 교육에서는 자극적인 콘텐츠의 클릭보다 학습 완료, 후속 문항의 성취도, 장기적인 개념 유지가 더 중요한 목표일 수 있다.

그래프 추천의 한계#

그래프를 사용한다고 콜드스타트와 설명 문제가 자동으로 사라지는 것은 아니다.

첫째, 그래프 품질이 모델 품질의 상한을 정한다. 콘텐츠와 개념의 연결이 빠졌거나 선수 관계가 잘못되면 추천도 잘못된다. 관계의 출처, 버전, 검수 상태를 관리해야 한다.

둘째, 신규 사용자 콜드스타트는 여전히 남는다. 아이템 지식은 신규 아이템에 도움이 되지만, 행동이 전혀 없는 사용자의 취향은 알 수 없다. 온보딩 질문, 문맥, 탐색 전략이 함께 필요하다.

셋째, 다중 홉이 항상 좋은 것은 아니다. 멀리 갈수록 후보는 많아지지만 의미가 약해지고 잡음이 커진다. 도메인별 허용 경로와 홉 수를 제한해야 한다.

넷째, 설명 가능성과 모델 정확도는 별도 검증 대상이다. 모델이 높은 점수를 준 이유와 사람이 읽기 좋은 그래프 경로가 일치하는지 fidelity를 확인해야 한다. 그럴듯한 문장을 만드는 것만으로 설명 가능성이 확보되지는 않는다.

정리#

추천 시스템은 사용자에게 맞는 아이템 후보를 찾고 순서를 정하는 기술이다. 협업 필터링은 행동 패턴을 잘 포착하지만 희소성, 콜드스타트, 의미 관계와 설명에서 한계가 있다.

그래프 기반 추천은 이 한계를 네 가지 방식으로 보완한다.

  1. 경로 탐색으로 명시적인 관계와 규칙을 적용한다.
  2. 그래프 임베딩으로 연결 구조를 벡터화해 유사 후보를 넓힌다.
  3. 사용자-아이템 GNN으로 다중 홉 협업 신호를 학습한다.
  4. 지식 그래프 GNN으로 행동과 관계 유형을 함께 반영한다.

교육 도메인에서는 특히 학습 이력 -> 개념 진단 -> 선수 관계 -> 콘텐츠로 이어지는 근거 체계를 만들 수 있다는 장점이 크다. 다만 시작점은 GNN 모델이 아니라 정합성 있는 개념 체계와 관계 데이터다. 그만큼 지식 그래프 자체를 설계할 때 도메인 전문성이 중요해지는 것 같다. 검증 가능한 그래프 탐색으로 출발하고, 로그가 쌓일 때 임베딩과 GNN을 추가하는 순서가 현실적이다.

참고 자료#