Chap 1. 유사성과 거리 — 추천 시스템
영화 평점이나 장바구니 데이터를 연필로 직접 계산해 보며 추천 알고리즘의 수학적 원리를 이해합니다.
서론이 남긴 문제 — 세상을 어떻게 비교하고 분류할 것인가
서론은 “지능이라 불리는 것의 정체는 무엇인가”라는 물음을 열어 둔 채 끝났다. 기계 속에서 무언가가 사람처럼 판단하는 듯 보이지만, 그 안을 들여다보면 정체불명의 “난쟁이”가 있을 뿐이었다. 이 책의 첫 발걸음은 그 막연한 물음을 손에 잡히는 형태로 좁히는 데서 시작한다. 지능이 하는 가장 기본적인 일 하나를 골라 보자. 바로 세상의 사물과 취향을 비교하고 분류하는 일이다. 우리는 끊임없이 “이것은 저것과 닮았다”, “이 둘은 같은 부류다”라고 판단하며 산다. 추천이라는 일상적 경험은 이 판단 능력이 기계 안에서 어떻게 구현되는지를 보여 주는 가장 좋은 입구다.
그런데 “닮았다”, “같은 부류다”라는 판단의 근거는 정확히 무엇인가? 이 장이 답해야 할 문제가 바로 이것이다. 미셸 푸코는 “유사성이 어디에 있는지, 어떤 표지로 유사성을 식별할 수 있는지”를 우리에게 되묻는다. 이 장의 대답은 한 문장으로 요약된다 — 모든 것을 숫자(벡터)로 환원한 뒤, 그 숫자들 사이의 거리와 유사도로 닮음을 계산한다. 영화 취향도, 장바구니도, 투자 성향도 일단 숫자의 나열로 바꾸기만 하면, “닮음”은 더 이상 모호한 직관이 아니라 계산 가능한 값이 된다. 이 장은 그 환원과 계산의 여러 변주를 연필로 직접 따라가 보는 여정이다.
알고리즘의 욕망 — 당신이 원하는 것을 기계가 먼저 알고 있다
요즘 넷플릭스를 켜면 내가 고르기도 전에 내가 좋아할 것 같은 영화 목록이 펼쳐진다. 유튜브 피드는 내 취향을 너무 잘 알아서 때로는 불편할 정도다. 쇼핑몰의 “함께 구매한 상품” 목록은 종종 내가 막연히 사려고 했던 바로 그 물건을 집어낸다. 이 모든 것이 추천 시스템(Recommendation System)의 작동이다.
그런데 추천 알고리즘은 단순히 편의를 제공하는 도구일까? 마크 안드레예비치(Mark Andrejevic)는 저서 『미디어 알고리즘의 욕망(Automated Media)』에서 이에 고개를 젓는다. 자동화된 미디어는 우리의 욕망을 반영하는 것이 아니라, 욕망 자체를 형성한다는 것이다. 알고리즘은 우리가 무엇을 보고 싶은지를 파악하는 것을 넘어, 우리가 무엇을 원하게 될지를 만들어 낸다. 그것이 이 챕터의 핵심 긴장이다.
분류한다는 것, 닮았다는 것 — 푸코의 「말과 사물」
추천 시스템의 수학으로 들어가기 전에, 더 근본적인 질문을 던져 보자. 우리는 도대체 무엇을 근거로 “이것과 저것이 닮았다”고 말하는가? 미셸 푸코(Michel Foucault)는 『말과 사물(Les mots et les choses, 1966)』의 서문에서 보르헤스가 인용한 “어떤 중국 백과사전”의 동물 분류를 소개하며 우리의 분류 체계를 뒤흔든다. 그 백과사전에서 동물은 이렇게 나뉜다.
“a) 황제에게 속하는 것, b) 향기로운 것, c) 길들여진 것, d) 식용 젖먹이 돼지, e) 인어(人魚), f) 신화에 나오는 것, g) 풀려나 싸대는 개, h) 지금의 분류에 포함된 것, i) 미친 듯이 나부대는 것, j) 수없이 많은 것, k) 아주 가느다란 낙타털 붓으로 그린 것, l) 기타, m) 방금 항아리를 깨뜨린 것, n) 멀리 파리처럼 보이는 것” (『말과 사물』, 7)
이 분류가 우리를 웃게 만드는 이유는, 그것이 우리의 분류 방식과 너무나 다르기 때문이다. 푸코는 묻는다. 우리가 “고양이와 개가 두 마리의 그레이하운드보다는 서로 덜 닮았다”고 말할 때, “이를 사실로 확증하게 해 주는 토대는 무엇일까?”(14) 분류(classification)와 군집화(clustering)는 자연이 정해 준 것이 아니라, 우리가 어떤 유사성의 축을 선택하느냐에 달려 있다는 것이다.
그리고 푸코는 결정적인 한 문장을 남긴다. 어떤 분류 체계도 “유사성이 어디에 있는지, 어떻게 유사성을 알아볼 수 있는지, 어떤 표지로 유사성을 식별할 수 있는지에 관해서는 말해 주지 않는다.”(58) 바로 이 지점에서 이 챕터의 출발점이 생긴다. 슬라이드의 표현을 빌리면, “Now, we can!” — 유클리드 거리, 코사인, 자카드, 피어슨 같은 알고리즘은 푸코가 던진 “유사성을 어떻게 식별하는가”라는 물음에 수치로 답하려는 현대적 시도다.
세미나 자료는 이 프레임을 더 밀어붙인다. 벨라스케스의 「라스 메니나스(Las Meninas, 1656)」, 세르반테스의 『돈키호테(1605)』를 통해 푸코는 “실재와 재현(representation), 대상과 기호, 물질과 추상화”의 관계가 17세기 중엽과 19세기 초엽이라는 “두 차례의 중대한 불연속”을 거치며 어떻게 바뀌었는지를 보여 준다. 추천 시스템이 하는 일도 결국 재현이다. 한 사람의 취향이라는 실재를 숫자 벡터라는 기호로 추상화하는 것. 그러니 “이미지는 액자의 경계를 넘어서야 한다”(33)는 『말과 사물』의 경고는, 벡터로 환원된 취향이 결코 그 사람의 실재를 다 담을 수 없다는 이 챕터의 마지막 논쟁거리로 그대로 이어진다.
숫자로 취향을 포착하다 — 유사도 알고리즘의 세계
여기서부터 이 장의 해결책이 본격적으로 펼쳐진다. 앞으로 등장하는 모든 기법 — 네 가지 유사도, 행렬 분해와 SVD, 연관 분석, 그래프, A-LLMRec까지 — 은 결국 하나의 같은 해법을 변주한 것이다. 그 해법이란 “사람과 사물을 숫자(벡터)로 환원하고, 그 숫자들 사이의 거리·유사도를 계산해 닮음을 찾는다”는 것이다. 기법마다 다른 것은 단 두 가지다. 무엇을 숫자로 바꾸느냐(평점이냐 구매 여부냐 관계냐), 그리고 닮음을 어떤 잣대로 재느냐(거리냐 방향이냐 교집합이냐)뿐이다. 이 공통의 골격을 염두에 두고 읽으면, 흩어져 보이는 알고리즘들이 한 줄기에서 갈라진 가지임이 드러난다.
추천 시스템의 심장부에는 ‘유사도(similarity)‘라는 개념이 있다. 나와 비슷한 취향을 가진 사람이 좋아하는 것을 나도 좋아할 가능성이 높다는 직관에서 출발한다. 하지만 “비슷하다”는 것을 어떻게 수치로 표현할까?
Euclidean 거리 — 좌표 평면 위의 두 점
가장 직관적인 방법은 두 점 사이의 직선 거리를 재는 것이다. 철수가 액션 영화에 5점, 로맨스에 2점을 줬고, 영희는 액션에 4점, 로맨스에 4점을 줬다면, 이 두 사람을 2차원 좌표 위의 점으로 그릴 수 있다. 두 점 사이의 거리가 가까울수록 취향이 비슷한 것이다. 이것이 유클리디언(Euclidean) 거리다.
단순하지만 약점이 있다. 한 사람이 모든 영화에 전반적으로 후한 점수를 주는 성격이라면, 그 사람의 점수는 좌표 평면에서 멀리 떨어진 곳에 놓이게 된다. 점수의 절대값이 아니라 방향(경향성)을 봐야 한다는 문제가 생긴다.
Cosine 유사도 — 방향의 일치
이를 해결하는 것이 코사인(Cosine) 유사도다. 두 사람의 평점 벡터가 같은 방향을 향하고 있는지를 측정한다. 한 사람이 전반적으로 높게, 다른 사람이 전반적으로 낮게 점수를 줘도, 어떤 영화를 다른 영화보다 더 좋아하는 상대적인 경향이 같으면 코사인 유사도는 1에 가까워진다. 텍스트 분석, 검색엔진, LLM의 임베딩 비교에 이르기까지 가장 널리 쓰이는 유사도 측정법이다.
Jaccard 유사도 — 집합의 교집합
구매 이력처럼 “샀다 / 안 샀다”의 이진 데이터에는 다른 방법이 필요하다. 자카드(Jaccard) 유사도는 두 집합의 교집합을 합집합으로 나눈 값이다. 철수와 영희가 산 물건의 목록에서, 두 사람이 공통으로 산 물건의 비율이 클수록 유사도가 높다. 마트의 장바구니 분석(Market Basket Analysis)에서 “맥주와 기저귀를 함께 사는 사람이 많다”는 패턴을 발견하는 데 쓰이는 원리다.
Pearson 상관계수 — 평균을 고려한 비교
피어슨(Pearson) 상관계수는 통계학의 핵심 도구로, 각자의 평균을 기준으로 얼마나 같은 방향으로 편차가 생기는지를 측정한다. 후한 평가자와 인색한 평가자 사이에서도 취향의 방향성을 공정하게 비교할 수 있다. 코사인 유사도와 비슷한 역할을 하지만, 평균 중심화(mean-centering)라는 전처리 단계를 내포하고 있다. 세미나 자료의 정의를 그대로 옮기면, “피어슨 상관 계수(Pearson Correlation Coefficient)는 두 변수 X와 Y 간의 선형 상관 관계를 계량화한 수치다. +1은 완벽한 양의 선형 상관 관계, 0은 선형 상관 관계 없음, -1은 완벽한 음의 선형 상관 관계를 의미한다.”
연필로 직접 계산 — 영화 평점표로 풀어 보는 네 가지 유사도
세미나에서는 추상적인 설명에 그치지 않고, 실제로 참석자들이 매긴 영화 평점표를 가지고 연필로 직접 계산한다. 12명의 사용자가 7편의 영화(헤어질결심, 어벤저스, 기생충, 라라랜드, 택시운전사, 인터스텔라, 극한직업)에 0–5점을 매긴 표를 출발점으로 삼는다(0은 안 본 영화). 예를 들어 1번 사용자는 (0, 3, 0, 3, 0, 4, 4), 2번 사용자는 (0, 5, 4, 5, 3, 4, 3)처럼 벡터로 표현된다.
유클리드 거리를 두 사용자(user1, user2)에게 적용해 보자. 차이를 제곱해 더하면 0+4+16+4+9+0+1 = 34, 제곱근은 sqrt(34) ≈ 5.83이다. 이를 항목 수 7로 나눈 뒤 제곱근을 취하고(sqrt(34/7) ≈ 2.20), 만점 5로 나누어 1에서 빼면 0–1 사이의 유사도 점수가 된다. 1 - (2.20/5) ≈ 0.56. 거리(distance)를 유사도(similarity)로 뒤집는 이 정규화가 핵심이다.
코사인 유사도는 두 벡터의 내적을 각 벡터 길이의 곱으로 나눈다. user4와 user9를 보면 내적은 0+12+13.5+25+16+20+17.5 = 104, user4의 길이는 sqrt(107.5) ≈ 10.368, user9의 길이는 sqrt(107) ≈ 10.344이므로, 코사인 유사도는 104/(10.368×10.344) ≈ 0.970이다. 방향이 거의 일치한다는 뜻이다. 슬라이드는 직관을 위한 작은 예도 든다. (1,0)과 (0,1)은 공통 항목이 없어 내적 0이므로 유사도 0, (1,0)과 (-1,0)은 정반대 방향이라 -1, (1,0)과 (2,0)은 비례하므로 1이 된다. (4,2,4)와 (2,1,2)처럼 한쪽이 다른 쪽의 정확히 2배면 코사인은 1이다 — 절대값이 달라도 방향이 같으면 1이라는 점을 보여 준다.
자카드 유사도는 평점을 “봤다(1)/안 봤다(0)“의 이진 벡터로 바꾼 뒤(as.numeric(user != 0)) 교집합을 합집합으로 나눈다. user4와 user9는 본 영화 집합이 완전히 같아 6/6 = 1, user8과 user12는 6/7 ≈ 0.857이 나온다. 평점의 크기는 무시하고 “어떤 항목을 공유하는가”만 본다.
피어슨 상관계수는 먼저 각 사용자의 평균을 빼고(중심화) 코사인을 계산하는 것과 같다. 슬라이드의 키 예제는 키-몸무게-기록 데이터다. 키 (140,160,180,200,220)와 몸무게 (40,60,80,100,120)는 편차가 완전히 같은 방향(-40,-20,0,20,40)이라 상관계수 1, 반면 기록 (40,60,80,60,40)은 키와의 공분산이 0이 되어 상관계수 0이 된다. 영화 데이터에서는 cor(user4, user9) ≈ 0.819, cor(user7, user11) ≈ 0.916처럼 계산된다.
이렇게 손으로 구한 값들은 결국 행렬 형태의 유사도 표(예: sim_users = cor(...))로 정리되고, “평점이 비어 있는 영화”에 대해 유사한 사용자들의 평점을 유사도로 가중평균해 예측 점수를 매긴다. 예측 공식의 핵심은 sum(유사도 × 평점) / sum(유사도)다. 실제로 이 절차를 돌리면 대부분의 사용자에게 「헤어질결심」이 추천 1순위로 떠오른다 — 아직 본 사람이 적지만 본 사람들의 평이 좋았기 때문이다.
UBCF와 IBCF — 사용자 기준이냐 아이템 기준이냐
같은 평점표라도 행(사용자)끼리 비교하면 사용자 기반 협업 필터링(UBCF, User-Based Collaborative Filtering)이고, 열(영화)끼리 비교하면 아이템 기반 협업 필터링(IBCF, Item-Based Collaborative Filtering)이다. 슬라이드는 둘을 나란히 보여 준다. 아이템 기준으로 피어슨을 돌리면 “어벤저스↔기생충”, “택시운전사↔인터스텔라”처럼 영화 사이의 상관관계가 드러나고, “어벤저스↔헤어질결심”은 -0.64로 음의 상관이 나온다. 실무에서는 사용자 수보다 아이템 수가 적고 변동이 작아 IBCF가 더 안정적인 경우가 많다.
또 하나 주의할 점은 “공통 항목만 비교(common item)“하느냐 “전체 항목을 비교(all item)“하느냐다. 같은 두 사람이라도 둘 다 평가한 영화만 추리면 유사도가 달라진다. 또 알고리즘에 따라 가장 닮은 사람이 달라진다는 것도 슬라이드의 실험 결과로 확인된다. 예컨대 어떤 사용자에게 코사인 기준으로 가장 닮은 이웃과 피어슨 기준으로 가장 닮은 이웃이 서로 다르게 나온다. “유사하다”는 말에 단 하나의 정답은 없다는 푸코적 통찰이 수치로 재확인되는 셈이다.
도구가 된 LLM — 평점 데이터를 코드로 분석하기
세미나의 또 다른 특징은 LLM 자체를 분석 도구로 쓴다는 점이다. 참석자들이 구글 폼으로 모은 영화 평점 스프레드시트(“AI_ML_101_with_Pencil”)를 구글 드라이브에 마운트하고, “타임스탬프 컬럼을 삭제하고, ‘이름’ 컬럼을 user로, 나머지를 item으로 이용해 전체 사용자 사이(UBCF)의 유클리드/코사인/자카드/피어슨 유사도를 표로 그려 달라”는 프롬프트를 LLM에 던져 파이썬 코드를 생성한다. 흥미로운 것은 그다음의 코드 리뷰·디버깅 과정이다. SpreadsheetNotFound 오류는 pd.read_csv 대신 gc.open()을 써서 해결하고, 한글 폰트 깨짐은 나눔폰트를 설치해 잡으며, 유사도 계산 오류는 “데이터 파일의 row가 이미 user이므로 transpose가 필요 없다”는 점을 알아채야 풀린다. 결론은 분명하다. “UBCF/IBCF 알고리즘과 프로그래밍 언어에 대한 기본적인 이해가 있어야” LLM이 만든 코드를 검증할 수 있다는 것이다. 알고리즘의 원리를 연필로 이해하는 일이 자동화 시대에 오히려 더 중요해진다.
행렬 뒤에 숨은 잠재적 취향 — Matrix Factorization, SVD, PCA
네 가지 유사도 알고리즘은 이미 알고 있는 평점 데이터를 비교한다. 하지만 현실에서는 데이터가 빈 곳이 많다. 넷플릭스에 영화가 수만 편이고 사용자가 수억 명이라면, 대부분의 사람은 대부분의 영화를 보지 않았다. 이 엄청난 빈칸을 어떻게 채울까?
행렬 분해(Matrix Factorization, MF)가 답이다. 이것은 같은 해법 — 숫자로의 환원과 유사도 계산 — 을 한 단계 더 밀어붙인 것이다. 앞 절에서는 사람이 매긴 점수를 그대로 벡터로 썼다면, 이제는 그 점수들 뒤에 숨은 잠재 차원(개념) 자체를 숫자로 끄집어낸다. 사용자-영화 평점 행렬을 두 개의 작은 행렬로 쪼갠다. 하나는 각 사용자의 잠재적 취향 벡터(예: “액션을 좋아하는 정도”, “예술 영화를 좋아하는 정도”)를 담고, 다른 하나는 각 영화의 잠재적 속성 벡터를 담는다. 이 두 벡터의 내적(dot product)이 예측 평점이 된다. 2009년 넷플릭스 프라이즈 대회에서 우승한 팀의 핵심 기법도 이것이었다.
특이값 분해(SVD, Singular Value Decomposition)는 이 과정의 수학적 토대다. 임의의 행렬을 세 행렬의 곱으로 분해하는데, 중간의 대각 행렬에 있는 특이값(singular value)들은 각 잠재 요인이 얼마나 중요한지를 나타낸다. 중요도 순서대로 나열되므로, 상위 몇 개의 잠재 요인만 남기고 나머지를 버리면 노이즈는 줄이면서 핵심 패턴은 보존하는 차원 축소가 된다.
주성분 분석(PCA, Principal Component Analysis)도 같은 원리로, 고차원 데이터를 가장 분산이 큰 방향(주성분)으로 투영하여 핵심 정보만 남긴다. 100가지 영화 장르 취향을 5–10개의 잠재 취향 축으로 압축하는 것이다. 세미나 자료의 정의를 빌리면 “PCA는 분포된 데이터들의 주성분(Principal Component), 즉 데이터들의 분산이 가장 큰 방향의 아이겐벡터를 찾는 알고리즘”이다. 얼굴 인식, 추천 시스템, 생물 정보학 등 수많은 분야에 응용된다.
연필로 직접 계산 — 음식 평점 행렬의 SVD
세미나는 SVD를 작은 음식 평점 행렬로 직접 분해해 보인다. 7명이 5가지 음식(삼계탕, 김치찌개, 육계장, 피자, 파스타)에 매긴 점수를 보면, 어떤 사람들은 한식 세 가지에만 점수를 주고(예: (1,1,1,0,0), (3,3,3,0,0)), 어떤 사람들은 양식 둘에만 점수를 준다(예: (0,0,0,4,4), (0,0,0,5,5)). 이 행렬을 svd()로 분해하면 특이값(diagonal)이 12.37, 9.49, 0, 0, 0으로 나온다. 0이 아닌 특이값이 딱 2개라는 사실은, 이 데이터가 사실상 “한식 취향”과 “양식 취향”이라는 두 개의 잠재 개념(concept)으로 설명된다는 뜻이다. 슬라이드는 이를 “Singular Value, Principal Component → Topic, Concept, Weight(Parameter), latent vector, latent space”라는 키워드로 LLM의 잠재 공간과 연결한다.
상위 2개 차원만 남겨 U(7×2) %*% D(2×2) %*% t(V)(2×5)를 다시 곱하면 원래 행렬이 거의 그대로 복원된다 — 노이즈는 줄이고 핵심 패턴은 보존하는 차원 축소가 실제로 작동함을 손으로 확인하는 것이다. 이때 사용자끼리(cor(t(UD)))·아이템끼리(cor(DV^T)) 상관을 구하면 한식 그룹은 서로 +1, 양식 그룹과는 -1로 깔끔하게 갈린다.
새 팀원에게 무엇을 추천할까 — SVD로 콜드 스타트 풀기
압권은 새 사용자 추가 실험이다. 새 팀원 ㄱㅇㅂ이 들어와 한식·양식을 섞어 (4, 3, 3, 3, 2)로 평가했다(비어 있던 칸은 본인 평균 3점으로 채움). 이 행을 행렬에 덧붙여 다시 SVD를 돌리면, 복원된 그의 평점이 (3.52, 3.26, 3.26, 2.65, 2.38)로 바뀐다. 즉 잠재 공간이 그의 진짜 취향을 한식 쪽으로 살짝 끌어당긴 것이다. 결론은 슬라이드 그대로다. “이 사용자에게는 ‘피자(2.65)‘보다 ‘김치찌개(3.26)‘를 추천한다.” 새로 들어온 특이값 1.35는 새로운 개념처럼 보이지만, 이미 80% 이상을 설명하는 개념이 있으므로 무시할 수 있다는 판단도 함께 보여 준다. 추천이라는 것이 결국 “빈칸을 잠재 요인으로 채워 넣는 일”임을 한눈에 드러내는 예제다.
관계로 추천하기 — 그래프 DB
평점 행렬 대신 데이터를 노드와 관계의 그래프로 보면 또 다른 추천이 가능하다. 세미나는 neo4j 같은 그래프 DB의 모델을 (USER) –[PURCHASE]→ (ITEM), (USER1) –[SIMILARITY]→ (USER2) 형태로 정의한다. 구매 이력 CSV를 로드해 사용자·상품 노드와 hasPurchased 관계를 만든 다음, Cypher 질의로 추천 규칙을 표현한다.
가장 단순한 규칙은 “공통 구매 상품 수 기반”이다. u1과 u2가 같은 상품을 산 횟수(count(i1))가 일정 수 n을 넘고, u1이 아직 사지 않은 상품 i2를 u2가 샀다면 그 i2를 추천한다. 여기에 유클리드·코사인 유사도를 관계의 속성으로 저장하고(s.COSSIM = xyDotProduct / (xLength*yLength)), 공통 구매 상품 수의 제곱근을 곱한 가중 코사인(W_COSSIM = COSSIM * SQRT(CommonITEMs))으로 신뢰도를 보정할 수도 있다. 미구입 상품의 예상 구매량은 유사 사용자들의 평균(SUM(QTY)/size(QTY))이나 유사도로 정규화한 값(SUM(SIM×QTY)/SUM(SIMs))으로 예측한다. 행렬 연산으로는 번거로운 “친구의 친구가 산 물건” 같은 다단계 관계 탐색이 그래프에서는 자연스럽게 표현된다. 슬라이드는 이를 “Graph → Graph NN”으로 연결하며 그래프 신경망으로의 확장을 예고한다.
함께 사는 물건 찾기 — 연관 분석(Apriori, FP-growth)
협업 필터링이 “비슷한 사람”을 찾는다면, 연관 분석(Association Analysis)은 “함께 일어나는 일”을 찾는다. 장바구니 분석(Market Basket Analysis, MBA)이라 불리는 이 기법은 “맥주를 사면 와인도 산다” 같은 연관 규칙(Association Rule)을 데이터에서 캐낸다.
세 가지 지표가 핵심이다. **지지도(support)**는 전체 거래 중 X와 Y를 함께 산 비율 P(X∩Y) = n(X∩Y)/n(total), **신뢰도(confidence)**는 X를 산 사람 중 Y도 산 비율 P(X∩Y)/P(X) = n(X∩Y)/n(X), **향상도(lift)**는 P(X∩Y)/(P(X)·P(Y)) = confidence/P(Y)로, 1보다 크면 두 상품이 우연 이상으로 함께 팔린다는 뜻이다.
Apriori — 빈발 항목집합을 한 단계씩 키우기
마리오라는 고객의 4건의 거래 [[beer,wine,rum], [beer,rum,vodka], [beer,vodka], [beer,wine,rum]]로 최소 지지도 50%(2건)를 적용해 보자. 1단계에서 단일 품목을 센다(beer:4, wine:2, rum:3, vodka:2) — 모두 기준을 넘는다. 2단계에서 쌍을 만들어 세면 {beer,wine}:2, {beer,rum}:3, {beer,vodka}:2, {wine,rum}:2, {wine,vodka}:0, {rum,vodka}:1이 되어 뒤의 두 쌍은 탈락한다. 3단계 삼중쌍에서는 {beer,wine,rum}:2만 기준을 통과하므로, 이미 그 안에 포함된 부분집합({beer,wine}, {beer,rum}, {wine,rum})을 제거하고 {{beer,wine,rum}, {beer,vodka}}가 최종 결과가 된다. “부분집합이 빈발하지 않으면 그 상위집합도 빈발할 수 없다”는 아프리오리 원리 덕분에 탐색이 가지치기되지만, 슬라이드의 지적대로 “매번 모든 거래를 다시 훑어야 해서 메모리 소비가 크다(Huge memory consumption)“는 약점이 있다.
FP-growth — 트리로 한 번에 압축하기
FP(Frequent Patterns)-growth는 이 약점을 보완한다. 마리오의 거래 [[beer,bread,butter,milk], [beer,milk,butter], [beer,milk,cheese], [beer,butter,diapers(기저귀),cheese], [beer,cheese,bread]]에서, 먼저 각 품목 빈도를 세고(beer:5, butter:3, cheese:3, milk:3, bread:2, diapers:1) 빈도순으로 정렬한 뒤, 거래들을 하나의 FP-Tree로 압축한다. 그다음 각 품목의 조건부 패턴 기반(Conditional Pattern-Base)을 따라 트리를 거슬러 올라가며 연관을 추출한다. 예컨대 milk의 조건부 패턴 기반은 {(butter,beer:2), (cheese,beer:1)}이 되어 조건부 FP-Tree {beer:3, butter:2}를 만든다. 거래를 단 두 번만 훑으면 되므로 대규모 데이터에서 Apriori보다 훨씬 효율적이다. 슬라이드에 등장하는 “기저귀(diapers)와 맥주”는 장바구니 분석의 전설적 사례이기도 하다.
실전 응용 — 건물 상가 데이터
세미나는 R의 arules 패키지로 실제 “건물-상가” 데이터(예: 하이퍼몰)에 Apriori를 돌린다. 20개 거래, 12개 품목에 지지도 0.2·신뢰도 0.6을 적용하니 46개의 규칙이 나온다. 대표 규칙은 {일반음식점} ⇒ {패밀리레스토랑}으로 지지도 0.40, 신뢰도 1.0, 향상도 2.22다(8건이 함께 등장). 더 인상적인 규칙은 {보습학원, 은행} ⇒ {카페}(신뢰도 1.0, 향상도 4.0)나 {카페, 보습학원} ⇒ {은행}(향상도 5.0)처럼, 어떤 업종 조합이 들어오면 어떤 업종이 함께 들어올 가능성이 높은지를 알려 준다는 점이다. 추천 시스템의 원리가 상권 분석이라는 전혀 다른 영역에 그대로 쓰이는 것이다.
추천 시스템의 지도 — 알고리즘 계보
지금까지의 기법들을 세미나는 하나의 큰 분류표로 정리한다. 추천 시스템은 크게 협업 필터링(CF), 콘텐츠 기반 필터링(CBF), 데이터 마이닝, 그래프 DB, 하이브리드로 나뉜다.
- 협업 필터링(Collaborative Filtering, CF): 다시 메모리 기반(kNN 기반: UBCF/IBCF)과 모델 기반(베이지안 모델, 군집 기반 모델, SVD, 행렬 분해)으로 갈린다. 넷플릭스, 아마존, 트위터, 유튜브(YouTube), 11번가 등이 대표적이다.
- 콘텐츠 기반 필터링(Content-Based Filtering, CBF): 사용자 프로필과 아이템의 속성/특징을 직접 비교한다. 판도라(Pandora)의 음악 추천이 예다.
- 데이터 마이닝: 앞서 본 연관 분석/장바구니 분석(Apriori, FP-growth)이 여기 속한다.
- 그래프 DB: 노드/관계 구조(neo4j)로 추천한다. 월마트, 이베이, 카카오 등의 사례가 언급된다.
- 하이브리드(Hybrid): CF + CBF에 소셜 미디어 데이터 등을 앙상블하거나, ML 알고리즘과 결합한 공동 학습 최적화(Joint Training)로 묶는다. 다음의 TOROS/RUBICS, 네이버 AiRS 등이 예다.
위키피디아의 정의도 함께 인용된다(2017년 기준). 추천 시스템이란 “사용자의 행동 이력, 사용자-아이템 관계/유사도, 사용자 컨텍스트에 기반하여 사용자의 관심 아이템을 자동으로 예측하고 제공하는 시스템”이다.
LLM이 협업 필터링을 만나다 — A-LLMRec
전통적 협업 필터링은 강력하지만 치명적 약점이 있다. 상호작용 데이터가 거의 없는 신규 사용자·신규 아이템(콜드 스타트, cold scenario)에서 무력해진다는 것이다. 최근에는 사전 학습된 대규모 언어 모델(LLM)을 끌어와 이 문제를 풀려는 시도가 활발한데, 거꾸로 이런 LLM 기반 방식은 협업 지식이 부족해 데이터가 충분한 웜 시나리오(warm scenario)에서는 전통 CF보다 못한 경우가 많았다.
세미나가 소개하는 A-LLMRec(2024)은 양쪽의 장점을 합친다. 슬라이드의 요약을 옮기면, “A-LLMRec은 최신 CF-RecSys에서 사전 학습된 협업 지식을 직접 활용하여 LLM의 능력과 고품질 사용자/아이템 임베딩을 결합”하며, “LLM 기반 추천 시스템에서 일반적으로 필요한 광범위한 파인튜닝을 제거하여 효율성을” 높인다. 그 결과 “콜드/웜, 퓨샷, 콜드 사용자, 크로스 도메인 시나리오 등에서 우수한 성능”을 보였고, “협업 지식을 이해하여 자연어 출력을 생성하는 잠재력”과 “좋아하는 장르 예측 작업”에서도 강점을 입증했다. 이 챕터의 유사도·행렬 분해가 LLM 시대의 추천 시스템으로 이어지는 다리인 셈이다. (원논문: Large Language Models meet Collaborative Filtering, arXiv:2404.11343)
추천이 돈을 굴릴 때 — 로보 어드바이저
추천 시스템의 논리가 가장 첨예하게 작동하는 또 다른 현장은 금융이다. 로보 어드바이저(Robo-Advisor, RA)는 투자 성향을 진단해 고객 유형을 분류하고, 시장/섹터를 분석하며, 상품·포트폴리오를 추천하고, 리밸런싱과 사후관리까지 자동화한다. 본질적으로 “고객 프로파일에 맞는 금융 상품을 추천하는” 시스템이라는 점에서 영화 추천과 구조가 같다.
국내에서는 2016년부터 도입되어 신한은행(초개인화 포트폴리오 설계), 키움증권(맞춤형 자산 배분), 미래에셋증권(글로벌 ETF·펀드·리츠·채권) 등이 서비스한다. 해외에서는 뱅가드(Vanguard)가 2015년부터 종합 자산관리형 자문을 제공하고(2023년 말 기준 일임 1,438억 달러·비일임 1,893억 달러 운영), JP모건은 GPT-4로 테마별 인덱스를 자동 생성하는 IndexGPT 등을 내놓았다. 슬라이드가 든 시장 규모(2024년 10월 기준)는 인상적이다. 국내는 계약자 32만 명·운용액 8,967억 원·심사 통과 RA 250여 개인 반면, 미국은 계약자 2,059만 명·1,940조 원, 일본은 40만 명·31조 원이다.
로보 어드바이저의 구성도 역시 이 챕터의 모든 기법을 압축한다. 데이터 수집/처리 → 빅데이터 플랫폼(데이터 레이크·마트) → 비정형 데이터 분석(NLP로 뉴스·보고서·전문가 SNS 크롤링, 약 5천만 건) → AI/ML 모델링(국면 분석, 시장 예측, 상품 추천, 퀀트·강화학습 기반 자산 배분) → 시각화/대시보드로 이어진다. 다만 슬라이드는 냉정한 단서도 단다. “국내 적극투자형 RA의 5년 평균 수익률이 35% 높은 경우도 있지만, 기간이나 모델에 따라 편차가 크다”는 것. 추천이 곧 정답은 아니라는 경고다.
필터 버블이라는 신화, 혹은 역설
이 시점에서 가장 많이 들리는 우려가 ‘필터 버블(Filter Bubble)‘이다. 알고리즘이 내가 이미 좋아하는 것만 보여줌으로써, 나는 점점 내 생각과 비슷한 정보만 접하게 되고, 결국 좁고 편협한 ‘버블’ 안에 갇히게 된다는 것이다. 2011년 일라이 파리저(Eli Pariser)가 제시한 이 개념은 이제 사회적 통념이 됐다.
세미나 자료는 이와 얽힌 네 개념을 정확히 구분한다.
- 에코 체임버 효과(Echo-Chamber Effect): “뉴스 미디어에서 전하는 정보가 해당 정보의 사용자가 갖고 있던 기존의 신념만으로 구성된 커뮤니케이션에 의해 증폭 및 강화되고, 같은 입장을 지닌 정보만 지속적으로 되풀이하여 수용하는 현상.”
- 필터 버블(Filter Bubble): “사용자에 맞추어 필터링한 정보를 제공함으로써, 이미 필터링된 정보만을 접하게 되는 것.”
- 확증편향(Confirmation Bias): “자신의 가치관이나 기존의 신념 혹은 판단 따위와 부합하는 정보에만 주목하고 그 외의 정보는 무시하는 (의식적인) 사고 방식과 태도.”
- 선택적 인지(Selective Perception): “인지 능력의 한계로 인해 모든 것을 수용할 수 없기 때문에 특정한 조건에 부합되는 사안들만 선별적으로 수용하는 것.” 즉 보고 싶은 것만 보고 듣고 싶은 것만 듣는 것으로, 이때의 인지 기준은 개인의 특성·신념·욕구·경험이며 의식적일 뿐 아니라 무의식적으로도 일어난다.
핵심 구분은 이렇다. 필터 버블이 알고리즘이 만드는 정보 환경의 문제라면, 확증편향과 선택적 인지는 그 환경에 놓인 인간 마음의 문제다. 둘이 맞물려 에코 체임버를 증폭시킨다.
그런데 안드레예비치는 이 통념에 정면으로 의문을 제기한다. 연구 결과들을 살펴보면, 소셜 미디어는 오히려 사용자가 자신이 선호하지 않는 정치적 스펙트럼의 뉴스에 더 많이 노출되게 만드는 경향이 있다. 오프라인에서 살던 시절보다 반대 의견을 접할 기회가 늘어난 것이다. 즉, 필터 버블은 정보 접근의 문제라기보다는 소통 방식의 문제다.
진짜 문제는 무엇을 보느냐가 아니라 어떻게 소통하느냐다. 자신과 다른 의견을 보더라도 그것을 인정하지 않고, 배척하고, 욕설로 반응하는 태도 — 이것이 에코 체임버를 만든다. 버블이 문제가 아니라, 버블에서 나오려 하지 않는 마음이 문제다. 물리적 벽이 아니라 심리적 문이 진짜 장벽이다.
조직 안의 사일로 현상
이 통찰은 개인의 정보 소비를 넘어 조직 문화에도 그대로 적용된다. 회사 내 부서들이 정보를 공유하지 않고 각자의 영역에서만 최적화하는 사일로(silo) 현상도 기술적 문제가 아닌 소통의 문제다. 안드레예비치의 말을 빌리면, 서로 다른 이해관계를 가진 구성원들 사이에서 수평적 네트워킹과 자발적 커뮤니티(CoP, Community of Practice)를 활성화하는 것이 디지털 혁신의 전제 조건이다. 데이터를 아무리 잘 쌓아도, 공유하지 않으면 쓸모없다.
알고리즘이 욕망을 만드는 방법
안드레예비치가 더 깊이 파고드는 지점은 여기다. 추천 시스템은 취향을 반영하는 데 그치지 않는다. 추천 시스템은 취향을 형성한다.
사용자가 무엇을 클릭하고, 얼마나 오래 보고, 어디서 멈추고, 무엇을 건너뛰는지 — 이 모든 행동 데이터가 모델의 학습 신호가 된다. 그런데 클릭과 체류 시간을 극대화하도록 최적화된 알고리즘은 분노, 공포, 충격이 담긴 콘텐츠를 더 많이 노출하는 경향이 있다. 자극적인 것이 반응을 더 많이 이끌어내기 때문이다. 이렇게 알고리즘은 인간의 심리적 약점을 착취하며 특정 욕망을 키워나간다.
여기서 “자동화된 미디어는 인간의 개입 없이 스스로 작동하는 것이 아니다”라는 안드레예비치의 지적이 중요해진다. 알고리즘을 설계하는 인간, 그 알고리즘이 작동하는 플랫폼의 경제적 논리, 광고주의 이해관계, 정치적 세력의 활용 — 이 모든 것이 얽혀 있다. 자동화는 중립적이지 않다. 그것은 철저하게 사회적이고 정치적인 행위다.
참고 논문
세미나에서 직접 인용·참고한 자료는 다음과 같다.
- Kim et al., “Large Language Models meet Collaborative Filtering: An Efficient All-round LLM-based Recommender System” (A-LLMRec), 2024. arXiv:2404.11343 — 협업 필터링과 LLM을 결합해 콜드/웜 시나리오를 모두 잡은 추천 시스템.
- “Social influence and unfollowing accelerate the emergence of echo chambers”, Journal of Computational Social Science, 2020.9 — 언팔로우 같은 사회적 행동이 에코 체임버 형성을 가속한다는 실증 연구.
- 미셸 푸코(Michel Foucault), 『말과 사물(Les mots et les choses)』, 1966 — 분류·유사성·재현의 인식론적 토대를 다룬 철학 저작. 이 챕터의 철학적 뼈대.
- 마크 안드레예비치(Mark Andrejevic), 『미디어 알고리즘의 욕망(Automated Media)』 — 자동화된 미디어가 욕망을 형성한다는 비판 이론.
- 비트겐슈타인(Wittgenstein)의 언어철학(wittgenstein-1953-philosophical-investigations) — 의미가 맥락과 삶의 양식에서 나온다는 통찰은, 숫자로 환원된 취향의 한계를 비추는 거울이다.
위 자료들의 정식 PDF를 제공해 주시면 reference/ 위키 페이지로 정리해 상호 링크하겠습니다.
논쟁거리
세상의 모든 취향을 숫자로 완벽히 환원할 수 있을까? 알고리즘이 낳는 에코 체임버(Echo-Chamber)와 필터 버블 현상은 어떻게 극복해야 할까?
유클리디언 거리, 코사인 유사도, 행렬 분해 — 이 모든 기법은 인간의 취향을 수치 벡터로 변환할 수 있다고 가정한다. 좋아하는 영화를 5개의 숫자로, 정치적 성향을 3개의 차원으로, 구매 욕구를 수백 개의 특징 값으로 표현하는 것이다.
하지만 과연 가능할까? 내가 왜 어떤 영화에 깊이 감동했는지, 그 순간의 기분과 기억과 관계가 숫자에 담길 수 있을까? 철학자 비트겐슈타인이 말했듯(wittgenstein-1953-philosophical-investigations), 언어의 의미는 맥락과 삶의 양식(form of life)에서 나온다. 숫자로 환원된 취향은 그 맥락을 잃는다. 평점 5점을 받은 영화가 두 사람에게 전혀 다른 이유로 5점일 수 있다.
이 물음은 챕터의 출발점이었던 푸코의 「말과 사물」로 되돌아간다. 추천 시스템은 취향이라는 실재를 벡터라는 기호로 재현(representation)하는 장치다. 그런데 푸코가 보여 주었듯 어떤 재현도 대상을 완전히 담지 못하며, “이미지는 액자의 경계를 넘어서야 한다.” 평점 5점이라는 같은 기호 뒤에는 결코 같지 않은 두 개의 실재가 숨어 있을 수 있다. 「중국 백과사전」의 분류가 우리를 웃게 했던 그 자의성은, 우리의 5차원 취향 벡터에도 똑같이 깃들어 있다. 우리가 고른 유사성의 축이 곧 우리가 보는 세계를 결정한다.
에코 체임버 극복의 방법 역시 기술보다 태도에 있다. 다양한 의견을 보여주는 피드를 설계하는 것(다양성 알고리즘)은 도움이 되지만, 그것만으로는 충분하지 않다. 반대 의견이 눈앞에 있어도, 그것을 진지하게 듣고 내 생각을 수정할 의지가 없다면 에코 체임버는 계속된다. 결국 문제는 알고리즘 설계가 아니라, 다름을 마주할 수 있는 시민적 역량이다. 그리고 그 역량을 기르는 환경 — 수평적 대화, 안전한 반대 의견 표현, 신뢰 기반의 토론 문화 — 을 만드는 것은 기술이 아니라 인간의 몫이다.
다음 장으로 — 그 계산은 ‘무엇이’ 수행하는가
대표성과 편향, 에코 체임버는 모두 “숫자로 환원해 계산한다”는 이 장의 해법이 남긴 그늘이다. 하지만 그 그늘을 따져 묻기 전에, 더 앞선 물음이 하나 슬그머니 숨어 있었다. 우리는 이 장 내내 “거리를 계산한다”, “내적을 구한다”, “행렬을 분해한다”고 아무렇지 않게 말해 왔다. 그런데 그 계산을 ‘무엇이’ 수행하는가? 연필을 든 우리의 손이 평점표 한 귀퉁이를 더하고 나눌 수는 있다. 그러나 수억 명의 사용자와 수만 편의 영화로 이루어진 행렬을 분해하는 일은 사람의 손을 까마득히 넘어선다. 취향을 숫자로 바꾸는 환원이 가능하다 해도, 그 숫자들을 실제로 굴려 답을 내놓는 무언가가 없다면 추천도, 잠재 차원도, 유사도 표도 한낱 종이 위의 약속에 그친다.
바로 이 지점에서 다음 장의 문제가 열린다. 계산이란 무엇이며, 그것은 어디까지, 무엇으로 수행될 수 있는가. 숫자로 환원된 세계를 떠받치는 것은 결국 ‘계산하는 기계’다. 서론의 난쟁이가 했던 일이 실은 거대한 계산이었다면, 우리는 이제 그 계산을 담을 그릇을 들여다봐야 한다. 다음 장, 「계산하는 기계」에서 튜링 머신과 컴퓨터를 만나게 되는 이유가 여기에 있다.