3. 추천 시스템이란?
• 넷플릭스, 왓챠의 영화 추천, 아마존의 상품 추천 등
사용자들에게 상품을 추천 해주는 시스템
• 데이터 과학자들이 무엇을 하는지? 데이터 과학이 무엇인지?
설명하기 좋은 첫 출발점
• Top N 추천, 성별/연령별 등의 일반적인 통계 기반의 추천
• 사용자 기반 또는 상품 기반의 추천
4. 현실 세계에서의 추천 엔진
• 네가 좋아요한 영화를 알고 있을 때,
너는 어떤 영화를 좋아할까?
• 네가 과거 구입한 책 내역을 알고 있을 때,
너는 어떤 책을 좋아할까?
• 네 과거 여행 이력을 보았을 때,
너는 어떤 종류의 여행을 보내고 싶어할까?
5. 이분 그래프를 그려보자!
Doing Data Science, Figure 8-1. Bipartite graph with users and items as node
7. 거리 측정은 어떻게 했죠? (1)
https://www.bionicspirit.com/blog/2012/01/16/cosine-similarity-euclidean-distance.html
Cosine Similarity, Euclidean Distance Manhattan Distance
8. 거리 측정은 어떻게 했죠? (2)
http://webmathematics.net/#jaccard
Jaccard Distance
J(A,B) =
|{1,2,3,4,5,6} ∩ {4,5,6,7,8,9}|
------------------------
|{1,2,3,4,5,6} ∪ {4,5,6,7,8,9}|
= 3/9
Somewhat similar
9. 최근접이웃 방법의 문제점들 (1)
• 차원의 저주
차원이 너무 많아서 가깝다고 하기엔 너무 먼 당신
• 과적합
가장 가까운 놈이 하필 특이 취향자 (Gray Sheep)
최근접이웃(k=1)이 아닌 k=5 정도로 늘려볼까?
• 상관이 있는 특징들
단일 특징에 대한 이중 고려 가중치가 높아짐
상관에 대한 이해를 바탕으로 적은 차원의 공간으로 투영
10. 최근접이웃 방법의 문제점들 (2)
• 특징들의 상대적 중요성
가중치를 부여하자
• 희소
희소행렬의 경우 교집합이 없으므로 자커드 거리는 무의미
• 측정오차
거짓말을 했다면?
• 계산 복잡도
Mahout, Spark M/L Library 등 Hadoop Eco System과 Machine Learning을 활용
11. 최근접이웃 방법의 문제점들 (3)
• 거리척도의 민감도
유클리디안 거리는 단위(scaling)에 대한 문제가 있다.
다른 특징들에 비해 나이의 경우 그 거리의 가중치가 훨씬 크다.(2살과 60
살)
나이에 대한 그룹핑으로 해결
• 시간에 따라 변하는 선호도
사용자의 선호도는 계속 변한다.
• 업데이트 비용
데이터가 추가 된다면 다시 계산을 해줘야 한다.
12. 최근접이웃을 넘어서: 기계학습 분류 (1)
• 사용자의 속성값을 기반으로 각 개별모형 예측
매드맨을 좋아하는지 예측하는 모형
밥딜런을 좋아하는지 예측하는 모형
• 좋아하는 것이 무엇인지 예측 가능하다면?
역으로 좋아하는 항목을 통해 사용자의 속성을 예측 가능
13. 최근접이웃을 넘어서: 기계학습 분류 (2)
• 단점
- 하나의 항목에만 적용 가능. 항목의 개수만큼 모형 필요
다른 항목의 정보를 사용하지 못함
- 과적합 문제
데이터가 충분하지 못할 경우 계수가 커짐
• 장점
- 선형회귀의 계수들을 통해 특징들에 가중치를 매길 수 있음
14. 과차원의 문제
• 과차원적인 문제를 해결하기 위한 수학적 접근 방법
- 특이값 분해(Singular Value Decomposition)
- 주성분 분석(Principle Component Analysis)
• Goal?
차원을 축소
어떤 잠재적 특징이 중요한지 결정하는게 아니라
머신러닝을 통해 중요한 잠재특징을 발견
• 참고 문헌
http://rosaec.snu.ac.kr/meet/file/20120728b.pdf
데이터를 수집하고 처리하고 정제해서 EDA를 통해 데이터로부터 통찰을 얻거나 머신러닝, 알고리즘, 통계적모형을 통해 데이터 상품을 개발
이번 장에서 다룰 추천 시스템이나 앞에서 나온 스팸 분류기 등은 이런 데이터 상품 중의 하나
이렇게 나온 데이터 상품이 사용자에게 제공되고 또 다시 새로운 데이터를 재생산해내는 선순환적인 구조
나와 비슷한 사용자들이 어떤 상품을 좋아하는지 사용자 기반 추천
내가 좋아하는 상품과 유사한 상품들을 추천해주는 상품 기반의 추천
협업필터링 => 과거의 사용자들의 데이터를 가지고 미래를 예측해야 함. 어떻게?
과거 이력 데이터들을 보기 쉽게 시각화하기 위해 이분 그래프를 그려보자
U, V : 사용자와 상품에 대한 집합
연결선 : 사용자의 행위 또는 의견 (좋아요/싫어요 하거나 별점을 주거나, 상품을 보거나 등등) => 가중치에 대한 고려가 필요
이런 훈련 데이터에 기반해서 우리는 사용자들이 무엇을 좋아할지 예측해야 함 => 이것이 기본적인 추천 시스템의 아웃풋
3장의 k-NN(근접이웃) 알고리즘 복습
k의 값은 근접한 몇 개의 이웃을 기준으로 판단할 것인지에 대한 숫자, 최근접은 k=1 인 케이스
근접도 또는 유사도를 측정하기 위해 거리척도가 필요 => Cosine Similarity, Jaccard Distance, Euclidean Distance 등
Cosine Similarity (상품간의 각도) – 적을수록 유사
Euclidean Distance (상품간의 거리) – 가까울수록 유사
Manhattan Distance (대각선이 아닌 grid 같은 경로)
Jaccard Distance (교집합을 합집합으로 나눈 값으로 거리 측정) 1에 가까울수록 유사
가중치 : 관심도와 연관도 기준으로 실시간 방송추천을 하는데 해당 BJ의 방송이 오프라인이면? 가중치 *0.5