추천 시스템을 기획하고 구현하기에 앞서, 추천 시스템이 무엇인지 이해하고 이를 위해 기존에 사용하던 고전적 추천 알고리즘을 학습해본다. 대표적인2가지 필터링 방식을 이해해보도록 하자.
추천 시스템이란?
추천 시스템의 개념과 기능을 이해하고, 추천시스템에서 중요한 요소, 데이터들 추천시스템에 활용하는 방법을 알아본다.
![](https://velog.velcdn.com/images/b-jayu/post/e0368a9d-29d5-4bc1-a5e5-1ee891bbc0d7/image.png)
- 추천 시스템은 사용자와 아이템의 주변 정보와 상호작용 기록을 바탕으로 사용자가 선호할 아이템을 예측하고 사용자의 의사결정을 돕는 인공지능 서비스이다.
- 여기서 사용자, 아이템, 상호작용 3가지 컴포넌트가 추천시스템에서 중요한 역할을 한다
- 사용자는 서비스를 이용하는 주체
- 아이템은 서비스에서 판매 및 제공되는 대상 물품
- 상호작용은 서비스 내에서 사용자가 남기는 일련의 행동 기록을 의미
추천 시스템의 필요성
- 오늘날에는 기술 발전과 인터넷의 보급으로 개인에게 노출되는 정보의 양이 소화할 수 있는 범위를 넘어서게 되었다.
- 정보 유입의 채널이 다양화되고 이러한 증상이 심화되었는데, 과도하게 많은 정보에 압도당해, 판단을 내리기 어려운 현상을 information overload 라고 한다.
- 사용자가 뒤쳐지는 것에 대한 두려움을 느끼지 않고, 의사결정을 도울 수 있도록 도와주는 역할을 하는 것이 추천시스템이다.
![](https://velog.velcdn.com/images/b-jayu/post/1c7c9d2d-5dba-469f-9dbd-3ef97bb7be29/image.png)
추천 시스템은 Filtering 추천을 제공하여, 특정 유저에게 가장 연관있는 정보를 제안한다. 유관한 정보 필터링을 위해, 예측 시 머신러닝 알고리즘을 사용할 수 있다.
![](https://velog.velcdn.com/images/b-jayu/post/b2a375ef-56c5-4ced-ab81-59d20e58f33d/image.png)
앞서 추천시스템의 가장 중요한 3요소는 유저, 아이템, 상호작용 이라 하였다. 그러나 때로는 맥략정보를 통해 유저에게 더 관련성이 높은 정보를 제공할 수 있다.
![](https://velog.velcdn.com/images/b-jayu/post/a995bf9e-55ac-4638-9de8-4978b6b06efa/image.png)
검색 시스템과 추천 시스템은 서로 유사한 것 같지만, 추천시스템의 큰 특징은 사용자의 별도 입력을 필요로 하지 않고 정보를 전달해주는 일방적인 방식을 취하고 있으며, 사용자 입력이 필요없다는 점에서 찾고 싶어하는 정보를 암묵적으로 제공한다고 볼 수 있다.
비즈니스 적용 사례
비즈니스의 의미 파악하여 왜 추천시스템을 적용해야하는가? 추천시스템이 비즈니스에 가져다 주는 효과를 이해해본다.
- E-Commerce
- 사용자의 기록을 기반으로 다음 구매할 상품을 추천해준다
- 사용자의 이탈이 쉽고 빈번한 e-commerce에서 적절한 추천을 통해 매출 신장 뿐만 아니라 플랫폼에 소비자를 lock-in 시켜 오래 머무르도록 유도한다.
- 비슷한 패턴을 보이는 다른 사용자가 구매한 상품을 추천해준다(협업필터링)
- 함께 본 상품을 대체재, 함께 산 상품을 보완재로 분류하기도 한다.
- 컨텐츠 추천
- 넷*릭스에 따르면, 사용자 컨텐츠 시청의 약 75%는 사용자 선택이 아닌 추천 알고리즘에 의해 발생한 컨텐츠의 시청으로 밝혀짐
- 추천 알고리즘은 플랫폼의 확장과 유저의 lock-in에 중요한 요인으로 작용하고 있다.
- 추천하는 컨텐츠의 종류에 따라 시계열정보 및 시간적인 특성을 고려해야하는 경우도 존재함. 이 때 활용하는 데이터와 추천 접근법이 달라질 수 있다.
- 뉴스 추천의 경우, 아무리 유사 관련성이 높다하더라도 최신의 뉴스를 신속하게 전달하지 못한다면 좋은 추천시스템이라 할 수 없다.
- 텍스트를 추천하는 시스템의 경우, 자연어 처리의 어려움으로 인해 다른 추천 시스템 대비 기술적 어려움이 많을 수 있다.
- POI(Point Of Interest)
![](https://velog.velcdn.com/images/b-jayu/post/fb8d94c0-afe4-4a79-a6c5-e8c017010b48/image.png)
다른 사용자의 interaction 정보를 활용하여, 사용자가 다음에 방문할 만한 장소를 추천한다.
이 때, 위치적 요소와 시간적 요소를 고려해야한다.
추천 시스템의 어려움들
![](https://velog.velcdn.com/images/b-jayu/post/90419ab7-333a-426d-a4fa-f1e7aaa29c4a/image.png)
1. 확장 가능성
- 추천 시스템은 기존 시스템에서 분리되어 독립적으로 운영될 수 없고, 기존 서비스의 한 파이프라인으로 적용될 수 있다. 따라서 서비스특성, 자원의 제약으로부터 자유로울 수 없다는 의미이다.
- 사용자, 아이템 수가 증가함에 따라 확장성의 큰 제약이 발생하게 된다.
- 도메인 종속성
- 서비스 도메인에 따라 추천 대상이 되는 아이템의 특성이 달라 수 있다.
데이터 타입, 아이템과 유저관계 등이 달라질 수 있다
- 이를 위해, 추천 아이템의 특징과 도메인 특성에 따라 적용되는 알고리즘과 시스템 구조가 적절히 고안되어야 한다.
- 비즈니스 목표의 다양성
- 비즈니스 종속성이 큰 추천 시스템의 특성 상, 다양한 비즈니스 목표가 존재할 수 있다.
- CTR(Clock-Through Rate) : 클릭률
- CVR(ConVersion Rate) : 전환률(사용자가 광고이후에 행동으로 전환했는가?)
- Diversity : 정보의 다양성
클릭율과 전환율 또는 클릭률과 다양성 사이에 충돌이 발생할 수 있다.
loss-function에 의해 최적화된 결과가 비즈니스 목표와 일치하지 않을 수 있다. 이를 위해 multi-task learning 연구가 진행되고 있으나, 완전히 해결되지 않는 실무적인 부분이 존재한다. 이러한 점이 추천 시스템을 어렵게 만드는 요인 중에 하나이다.
- Cold-Start Problem
![](https://velog.velcdn.com/images/b-jayu/post/2b26d875-b071-4ce1-a446-181a4861cb96/image.png)
- 아무리 좋은 추천 시스템이라 할지라도, 신규 유저 혹은 아이템에 어떠한 interaction이 존재하지 않는다면 알고리즘 추론이 잘 작동하지 않는 현상
- cold user는 충분한 사용패턴을 만들지 못한 사용자를 의미하며, cold item은 연관지을 수 있는 사용자 정보가 없는 items, 선택받지 못한 items을 의미한다.
- No clear Ground Truth
![](https://velog.velcdn.com/images/b-jayu/post/6a090947-187c-4deb-aa8b-8f8766e694de/image.png)
- 추천 시스템에서 유저의 선호도는 주관적이고 변동성이 크다.
=> 그렇기 때문에, 유저 스스로 선호를 불분명하게 인지하고 있어 명확한 레이블(실제 값)이 존재하지 않는다.
- 추천 알고리즘의 결과로 나온 것들만 유저가 소비할 수 있는 시스템의 경우, 모델의 판단 자체가 고객의 행동에 영향을 미친다.
추천 시스템의 파이프라인
고전 추천 시스템의 전형적인 구성을 이해해본다.
![](https://velog.velcdn.com/images/b-jayu/post/c7320382-4287-4765-92ba-46f1f7585ec3/image.png)
- 고전적인 추천 시스템은 유저의 과거이력, 추천시점에 따라 추천하고자 하는 정보 후보군을 생성하고 재정렬해서 사용자에게 추천을 제공한다.
- 후보군 생성에 ANN(Approximate Near Neighbors), LSH(Locality Sensitive Hashing) 알고리즘 등이 활용될 수 있다
고전적인 추천 알고리즘
고전적 추천 알고리즘
- 인구 통계 기반 필터링 : 연령, 나이, 직업과 같은 정보로 추천
- 인기도 기반 추천 : 인기 상품을 추천
- 지식 기반 추천 : 전문가의 지식이나, 유저의 입력에 기반한 추천
- 규칙 기반 추천 : 사전에 정의된 규칙에 의해 추천을 제공
이 중에서도 인구 통계 기반 필터링이나 인기도 기반 추천이 널리 사용되는 방식
![](https://velog.velcdn.com/images/b-jayu/post/914638b5-c422-4423-bb8a-5ffbe6798012/image.png)
- 인구 통계 기반 필터링은 콜드스타트, 즉 유저에 대한 상호작용 정보가 없더라도 유저의 개인 정보를 통해 어느 정도 적당한 추천 정보를 제공할 수 있다.
- 그러나 개인화되지 않으며, 고정관념에 기반한 추천이라는 단점이 있고, 민감정보를 다루는 한계가 존재한다.
![](https://velog.velcdn.com/images/b-jayu/post/725852fd-4cb4-4e36-96a2-8e0578db04a7/image.png)
- 인기도 기반 추천은 직관적이고, 단순하지만 어떤 플랫폼에서는 강력한 방법으로 작용할 수 있으며, 널리 쓰이는 방식 중 하나이다.
- 복잡한 모델보다 인기도 기반의 추천이 더 효율적인 결과를 제공해주기도 한다.
- 인기도를 측정하는 메트릭은 다양할 수 있다
- 인기도 기반 추천도 인구통계학 정보 기반 추천과 마찬가지로, 개인화된 추천을 제공해주지는 않는다. 한 번도 선택되지 않은 신규 아이템에 대한 아이템 코드 스타트 단점을 지니고 있다.
![](https://velog.velcdn.com/images/b-jayu/post/ec3b1119-9f9e-42fe-b813-8ae0a6b6992b/image.png)
- 필터 버블이라는 현상이 발생할 수 있는데, 이는 개인화 알고리즘으로 인해 사용자가 제한된 정보나 추천에만 노출되는 현상을 의미한다.
- 기존의 사용자 패턴정보와 의견에 노출도리 가능성이 높아져 유사한 콘텐츠의 '거품'이 형성되는 것에서 비롯된 용어
- 제한된 다양성의 아이템만 유저에게 노출되는 문제를 발생시킨다. 소셜미디어에서 편향된다면, 사고하는 방식이나 시아야 악영향을 미칠 수 있다.
연관 규칙 기반 추천
![](https://velog.velcdn.com/images/b-jayu/post/b6d1609e-559e-43b1-a2a9-17e8b893b8aa/image.png)
![](https://velog.velcdn.com/images/b-jayu/post/d4f3267a-1e7e-413b-b429-6ce3c125dbcd/image.png)
![](https://velog.velcdn.com/images/b-jayu/post/323adfbf-88ec-4657-a147-e62554483dc1/image.png)
규칙 성능 지표
![](https://velog.velcdn.com/images/b-jayu/post/b743694f-34ea-46ae-a7dc-daf48828da27/image.png)
![](https://velog.velcdn.com/images/b-jayu/post/18c3ae2e-dcd0-4734-a1d3-0bc5fe65139e/image.png)
규칙 생성 알고리즘
![](https://velog.velcdn.com/images/b-jayu/post/0221dcd1-0875-4521-8bf3-90e6e270265c/image.png)
![](https://velog.velcdn.com/images/b-jayu/post/b9d6c026-23ff-4f7c-be93-0690ec0db282/image.png)
컨텐츠 필터링
"너가 좋아했던 그거, 이것도 그거랑 비슷하던데?"
- 비슷한 것을 찾기 위해, 수치형태로 나타내고 비슷한 정도를 계산해야 한다.
- 수치 형태로 표현하기 위해, 각 아이템의 특성을 feature로 나타낼 수 있고, 변수의 종류에 따라 다른 처리가 필요하다.
- 연속형 변수 : 정규화 후 수치 형태 가공
- 범주형 변수 : one-hot encoding
유사도 계산하기
![](https://velog.velcdn.com/images/b-jayu/post/0c03cc15-025e-429b-b30f-ab05fecf1b21/image.png)
컨텐츠 필터링 구현 절차
![](https://velog.velcdn.com/images/b-jayu/post/a3fee41c-5a5c-4667-a76d-9ff5a3eb43ad/image.png)
![](https://velog.velcdn.com/images/b-jayu/post/d1a2575e-502f-41cb-ae9e-6f276f72fe49/image.png)
![](https://velog.velcdn.com/images/b-jayu/post/e47b6992-0de2-40e4-a254-648e127ba42f/image.png)
![](https://velog.velcdn.com/images/b-jayu/post/c38db5ed-c97c-4700-b1a6-9326fde2eca6/image.png)
![](https://velog.velcdn.com/images/b-jayu/post/f650f657-e6cd-49fd-aa61-f48315ab397e/image.png)
협업 필터링
![](https://velog.velcdn.com/images/b-jayu/post/7e0969c9-d001-4e31-8149-62422cf3c656/image.png)
![](https://velog.velcdn.com/images/b-jayu/post/d921abe3-51e7-46fe-b7d8-86b63113fba0/image.png)
- 유저의 반응은 변동성이 크고 모호하기 때문에, 해당 정보를 feature 벡터로 사용한다면 직관적으로 이해하기 어려울 수 있다.
장점
- 다른 사용자의 정보를 활용하여 개인화 추천을 하기 때문에, 유사한 집단을 찾아 개인화된 추천을 제공함.
- 상호작용 데이터가 쌓일수록 더 정교한 추천이 가능해진다
단점
![](https://velog.velcdn.com/images/b-jayu/post/f1c2c67e-6344-4500-b108-48c48a91329d/image.png)