GraphSAGE 수식 완벽 해부: 이커머스 추천 시스템으로 쉽게 이해하기

시나리오 설정: '사용자 A'에게 딱 맞는 상품 추천하기
우리의 목표는 '사용자 A'의 취향을 완벽하게 반영하는 최종 임베딩 벡터 zA를 만드는 것입니다. 이 벡터가 잘 만들어지면, A가 좋아할 만한 다른 상품을 아주 정확하게 추천할 수 있습니다.
- 그래프 구성 요소:
- 노드(Node): 사용자(A, E, F), 상품(B:노트북, C:키보드, D:마우스)
- 엣지(Edge): '사용자'가 '상품'을 구매했다는 연결 고리
[Step 0] 초기 상태: 모든 노드는 '주민등록증'을 가지고 있다
모든 학습의 시작점입니다. 아직 그래프의 연결 관계를 고려하지 않은, 각 노드 고유의 정보입니다.
수식:
hv0=xv
| 기호 | 의미 | 이커머스 예시 |
|---|
| hv0 | 0번째 단계(초기)의 노드 v의 임베딩 | 아직 주변 정보를 받지 않은 순수한 상태 |
| xv | 노드 v의 고유한 특징(Raw Feature) | 사용자 A의 [나이, 성별, 거주지] 또는 상품 B의 [가격, 카테고리, 브랜드] |
- 예시: 사용자 A의 초기 벡터 hA0는
[25세, 여성, 서울]이라는 정보만 담고 있습니다.
[Step 1] 첫 번째 정보 수집 (k=1): "내 이웃은 누구인가?"
이제 각 노드는 자신과 직접 연결된 1-Hop(한 칸 거리) 이웃들의 정보를 수집하여 한 단계 업그레이드됩니다. 이 과정은 Aggregation(집계)과 Update(업데이트)로 나뉩니다.
1-1. Aggregation: 이웃들의 정보를 하나로 요약하기
상품 '키보드(C)'의 입장에서 생각해 봅시다. 키보드 C는 자신을 구매한 사용자들(A, E, F)의 정보를 모읍니다.
수식 개념:
hN(C)1←AGGREGATE1({hA0,hE0,hF0})
가장 간단한 평균(Mean)을 사용한다고 가정해 봅시다.
- 행동: 키보드 C는 사용자 A, E, F의 초기 정보(h0)를 가져와 평균을 냅니다.
- 의미: 이렇게 요약된 정보는 "이 키보드를 구매하는 사람들의 평균적인 프로필"이 됩니다. (예: '주로 수도권에 거주하는 20대 후반')
1-2. Update: 이웃 정보와 내 정보를 합쳐 '새로운 나' 만들기
이제 요약된 이웃 정보와 키보드 C 본연의 스펙 정보를 합칩니다. (GraphSAGE의 Mean Aggregator 변형 예시)
수식:
hC1=σ(W1⋅Mean({hC0}∪{hA0,hE0,hF0}))
| 기호 | 역할 |
|---|
| {hC0}∪{...} | '나의 원래 정보'와 '이웃들의 정보'를 모두 합침 |
| W1 | 가중치 행렬 (학습 대상). 어떤 정보가 중요한지 판단하는 필터 역할 |
| σ | 활성화 함수 (ReLU 등). 데이터를 더 풍부하게 표현하도록 도움 |
| hC1 | 1단계로 업데이트된 키보드 C의 임베딩 |
- 결과(hC1)의 의미: 이제 키보드 C의 벡터는 단순한 상품 스펙이 아닙니다. "어떤 사람들이 주로 구매하는 상품인지"에 대한 문맥(Context) 정보까지 포함하게 되었습니다.
[Step 2] 두 번째 정보 수집 (k=2): "내 친구의 친구는 누구인가?"
이제 우리의 주인공 '사용자 A'의 최종 임베딩을 만들 차례입니다. GraphSAGE의 강력함은 여기서 나옵니다. Step 1에서 이미 한 번 업데이트된 정보(h1)들을 가져와 사용하기 때문입니다.
2-1. Aggregation: '업데이트된 이웃 정보' 모으기
사용자 A는 자신이 구매한 상품들(노트북 B, 키보드 C, 마우스 D)의 1단계 임베딩(h1)을 모읍니다.
수식 개념:
hN(A)2←Mean({hB1,hC1,hD1})
- 핵심: hB1,hC1,hD1에는 이미 이 상품들을 구매한 '다른 사용자들(E, F 등)'의 정보가 녹아들어 있습니다.
- 의미: 사용자 A는 자신이 산 물건들을 통해, 자신과 취향이 비슷한 다른 사람들의 특성까지 간접적으로 파악하게 됩니다. (친구의 친구 정보를 얻는 셈이죠!)
2-2. Final Update: '사용자 A'의 최종 임베딩 zA 완성
마지막으로 사용자 A의 정보와 집계된 상품들의 정보를 합칩니다.
최종 수식:
zA=hA2=σ(W2⋅Mean({hA1}∪{hB1,hC1,hD1}))
이렇게 완성된 최종 임베딩 벡터 zA는 엄청난 정보를 압축하고 있습니다.
- A의 원래 프로필 (나이, 성별 등)
- A가 구매한 상품들의 특성
- 그 상품들을 구매한 다른 사용자들의 특성 (A와 유사한 집단의 특성)
이 zA 벡터를 이용하면, A가 아직 구매하지 않았지만 좋아할 법한 '모니터' 같은 상품을 매우 정교하게 추천할 수 있게 됩니다.
💡 요약: GraphSAGE의 철학
GraphSAGE 수식의 핵심은 "나를 제대로 알기 위해선, 내 주변을 살펴봐야 한다"는 것입니다.
- Sample: 내 이웃을 찾는다.
- Aggregate: 이웃들의 정보를 요약한다.
- Update: 내 정보와 합쳐서 나를 업그레이드한다.
이 과정을 반복(Layer를 쌓음)할수록, 노드는 그래프 전체에서 자신이 어떤 위치와 문맥을 가지는지 깊이 있게 이해하는 똑똑한 벡터로 거듭나게 됩니다.