본문 바로가기
IT 도서/파이썬 머신러닝

9. 추천 시스템

by 이민우 2021. 2. 15.
728x90
반응형

book.naver.com/bookdb/book_detail.nhn?bid=16238302

 

파이썬 머신러닝 완벽 가이드

자세한 이론 설명과 파이썬 실습을 통해 머신러닝을 완벽하게 배울 수 있습니다!《파이썬 머신러닝 완벽 가이드》는 이론 위주의 머신러닝 책에서 탈피해 다양한 실전 예제를 직접 구현해 보면

book.naver.com

*해당 글은 학습을 목적으로 위의 도서 내용 중 일부 내용만을 요약하여 작성한 포스팅입니다.

 상세한 내용 및 전체 내용 확인을 원하신다면 도서 구매를 추천드립니다.

 

 

추천 시스템

  • 사용자의 취향을 이해하고 맞춤 상품과 콘텐츠를 제공해 자신의 사이트를 고객들이 오래 사용하게 하는 것.
  • 발전하는 추천 엔진은 수익과 직결되어 있고, 이에 많은 사이트들이 추천 엔진의 고도화에 큰 비용과 노력을 들이고 있다.
  • 동영상, 음악, 전자상거래 등 다양한 업종에서 사용된다.
  • 온라인 스토어에서 특히 많이 사용되는데, 한정된 시간동안 사용자가 원하는 상품들을 추천하여 사용자의 온라인 쇼핑을 즐겁게 해주는 것은 온라인 스토어의 필수 구성요소이다.
  • 하나의 컨텐츠를 선택했을 때 선택된 컨텐츠와 연관도니 추천 콘텐츠가 얼마나 사용자의 관심을 끌고 개인에게 맞는 것인지는 그 사이트의 평판을 좌지우지한다.
  • 또한 추천 시스템은 고객이 자신도 몰랐던 취향을 발견할 수 있게 한다.
  • 이러한 추천 시스템은 사용자로 하여금 사이트를 더 강하게 신뢰할 수 있게 한다.
  • 사이트의 입장에서는 사용자들이 더 많이 사용할수록 많은 데이터가 추천 시스템에 축적되어 추천이 더 정확해지고, 다양한 결과를 얻을 수 있다.

 

 

 

추천 시스템 유형

  • 크게 콘텐츠 기반 필터링과, 협업 필터링으로 나뉜다.
  • 협업 필터링은 다시 최근접 이웃 협업 필터링과 잠재 요인 협업 필터링으로 나뉜다.
  • 초기에는 콘텐츠 기반 필터링과 최근접 이웃 협업 필터링이 주로 사용됐지만, 넷플릭스 추천 시스템 경연 대회에서 행렬 분해 기법을 이용한 잠재요인 협업 필터링 방식이 우승하며 대부분의 온라인 스토어에서 잠재요인 협업 필터링 기반의 추천 시스템을 적용한다.
  • 그렇다고 모두가 그런 것은 아니고, 콘텐츠 기반 필터링과 최근접 이웃 협업 필터링 역시 아직까지도 많이 사용되고 있다.

 


 

콘텐츠 기반 필터링

  • 사용자가 특정한 아이템을 선호하는 경우, 그 아이템과 비슷한 콘텐츠를 가진 다른 아이템을 추천하는 방식
  • 예를 들어 사용자가 특정 영화에 높은 평점을 줬다면, 그 영화의 장르, 배우, 감독 등이 유사한 다른 영화를 추천해주는 방식이다.

 


 

협업 필터링

  item 1 item 2 item 3
user 1 3   2
user 2 4 3 3
  • 친구들에게 물어보는 것과 유사한 방식으로, 사용자가 아이템에 매긴 평점 정보나 상품 구매 이력과 같은 행동 양식만을 기반으로 추천을 수행한다.
  • 주요 목표는 사용자-아이템 평점 매트릭스와 같은 축적된 사용자 행동 데이터를 기반으로 사용자가 아직 평가하지 않은 아이템을 예측 평가하는 것.
  • 협업 필터링은 사용자가 평가한 다른 아이템을 기반으로 사용자가 평가하지 않은 아이템의 예측 평가를 도출 하는 방식이다.
  • 협업 필터링 기반의 추천 시스템은 최근접 이웃 방식과 잠재 요인 방식으로 나뉘며, 두 방식 모두 사용자- 아이템 평점 행렬 데이터에만 의지해 추천을 수행한다.
  • 사용자-아이템 평점 행렬은 행은 사용자, 열은 아이템인 다차원 행렬이다.
  • 사용자-아이템 평점 행렬은 사용자가 아이템에 대한 평점을 매기지 않는 경우가 많아 희소 행렬이다.

 

 

1) 최근접 이웃 협업 필터링 (메모리 협업 필터링)

  • 사용자 기반과 아이템 기반으로 나눌 수 있다.
  1.  사용자 기반 : 당신과 비슷한 고객들이 다음 상품을 구매했습니다.
  2.  아이템 기반 : 이 상품을 선택한 다른 고객들은 다음 상품도 구매했습니다.
  • 사용자 기반은 특정 사용자와 유사한 다른 사용자를 TOP-N으로 선정해 해당 사용자들이 좋아하는 아이템을 추천해주는 방식이다.
  • 아이템 기반은 아이템이 가지는 속성과 상관 없이 사용자들이 그 아이템을 좋아하는지 혹은 싫어하는지의 평가 척도가 유사한 아이템을 추천하는 기준이 되는 알고리즘이다.
  • 일반적으로 사용자 기반보다 아이템 기반 협업 필터링이 정확도가 더 높다. 이유는 비슷한 컨텐츠를 좋아한다고 해서 사람들의 취향이 비슷하다고 판단하기는 어렵기 때문이다.
  • 예를 들어 명작 영화의 경우에는 누구나 높은 평점을 준다.
  • 게다가 컨텐츠에 많은 평점을 메기기 전까지 해당 방식으로는 추천의 정확도가 낮다. 그렇기에 사용자 기반보다, 아이템 기반이 더 정확도가 높다.

 

 

2) 잠재 요인 협업 필터링

  • 사용자-아이템 평점 매트릭스 속에 숨어 있는 잠재 요인을 추출해 추천 예측을 하는 기법
  • 대규모 다차원 행렬을 SVD와 같은 차원 감소 기법으로 분해하는 과정에서 잠재 요인을 추출하는데, 이러한 기법을 행렬 분해라고 한다.
  • 행렬 분해 기반의 잠재 요인 협업 필터링은 넷플릭스 경연 대회에서 사용되며 유명해졌다.
  • 사용자-아이템 평점 행렬 데이터만을 이용해 잠재 요인을 끄집어내는 것이다. 다차원 희소 행렬인 사용자-아이템 평점 행렬저차원 밀집 행렬의 사용자-잠재 요인 행렬과 아이템-잠재 요인 행렬의 전치 행렬로 분해할 수 있으며, 이렇게 분해된 두 행렬의 내적을 통해 새로운 예측 사용자-아이템 평점 행렬 데이터를 만들어 사용자가 아직 평점을 부여하지 않은 아이템에 대한 예측 평점을 생성하는 것이다.

 

 

2-1) 행렬 분해

  • 다차원 매트릭스를 저차원의 매트릭스로 분해하는 기법.
  • 대표적으로 SVD (Singular Vector Decomposition), NMF(Non-Negative Matrix Factorization) 등이 있다.
  • 행렬 분해는 주로 SVD 방식을 적용한다. 하지만 SVD 방식은 NaN 값이 없는 행렬에만 적용이 가능하다. 그런데 대부분의 사용자-아이템 평점 행렬은 아직 평점을 입력하지 않은 NaN 값들이 다수 존재한다. 그렇기에 확률적 경사 하강법과 ALS를 통해 SVD를 수행한다.

 

*Factorization (인수분해) : 하나의 복잡한 다항식을 두 개 이상의 단순한 인수의 곱으로 분해

*x^2 + 5x + 6 = (x+3)(x+2)

 

*확률적 경사 하강법을 이용한 행렬 분해 방법을 요약하면, 행렬 P, Q의 계산으로 예측된 R 행렬 값실제 R 행렬 값과 최소의 오차를 가질 수 있도록 반복적인 비용 함수 최적화를 통해 P와 Q를 유추하는 방식.

 

 


Surprise 패키지

  • 사이킷런에는 추천 시스템 전용 모듈을 제공하지 않기에, 파이썬 기반 추천 시스템 구축을 위한 전용 패키지인 Surprise를 사용해야 한다.
  • 파이썬 기반인 Surprise는 사이킷런과 유사한 API와 프레임워크를 제공하기에, 추천 시스템에 대한 기본적인 지식과 사이킷런 활용 경험이 있다면 쉽게 사용할 수 있다.

 

 

Surprise 패키지의 장점

  • 위에서 설명한 추천 시스템 구축 알고리즘을 포함한 다양한 추천 시스템 구축용 알고리즘을 제공한다.
  • 사이킷런의 핵심 API인 fit, predict, train_test_split, cross_validate, GridSearchCV 등을 통한 추천 시스템을 위한 모델 셀렉션, 평가, 하이퍼 파라미터 튜닝 등의 기능을 제공한다.

 

 

Surprise 패키지의 사용

1) surprise.Datasets

  • 데이터 로딩용 패키지
  • Surprises는 {user_id, item_id, rating} 으로 이루어진 데이터 셋만 적용할 수 있다.
  • 첫 번째를 사용자 아이디, 두 번째를 아이템 아이디, 세 번째를 평점으로 간주하고 네 번째부터는 로딩하지 않는다.
Dataset.load_builtin(name='ml-100k') 빌트인된 데이터를 로드한다.
Dataset.load_from_file(file_path, reader) OS 파일에서 데이터를 로딩한다. *reader는 포맷
Dataset.load_from_df(df, reader) 판다스의 DF에서 데이터를 로딩한다. *reader는 포맷

 *os 파일을 로딩할 때의 주의점은 칼럼명을 전부 지워야 한다는 것이다.

 *reader는 surprise.Reader을 불러와서 설정해서 넣어줘야 한다.

 

2) Surprise 추천 알고리즘 클래스

SVD 행렬 분해를 통한 잠재 요인 협업 필터링을 위한 SVD 알고리즘
KNNBasic 최근접 이웃 협업 필터링을 위한 KNN 알고리즘
BaselineOnly 사용자 Bias와 아이템 Bias를 감안한 SGD 베이스라인 알고리즘

*surprise의 SVD의 비용 함수는 사용자 베이스라인 편향성을 감안한 평점 예측에 정규화를 적용한 것.

*SVD 클래스의 파라미터는 다음과 같다.

1) n_factors = 100 : 잠재 요인 k의 개수. 커질수록 정확도는 높아지나 과적합 발생

2) n_epochs = 20 : SGD 수행 시 반복 횟수

3) biased = True : 베이스라인 사용자 편향 적용 여부. 큰 이슈가 없는 한 디폴트인 True로 둔다.

 

 

베이스 라인 평점

  • SVD에 비해 상대적으로 성능이 뒤처지는 KNN에 베이스라인을 결합하면 성능이 올라간다.
  • 한 개인의 성향을 반영해 아이템 평가에 편향성 요소를 반영하여 평점을 부과한 평점.
  • 전체 평균 평점 + 사용자 편향 점수 + 아이템 편향 점수 공식으로 계산된다.

*전체 평균 평점 : 모든 사용자의 아이템에 대한 평점 평균

*사용자 편향 점수 : 사용자별 아이템 평점 평균 - 전체 평균 평점

*아이템 편향 점수 : 아이템별 평점 평균 - 전체 평균 평점

 

 

 

교차 검증과 하이퍼 파라미터 튜닝

  • 사이킷런과 유사한 cross_validateGridSearchCV를 제공한다.

 


실습코드 : https://github.com/123okk2/MachineLearning_practice/tree/main/9.%20%EC%B6%94%EC%B2%9C%20%EC%8B%9C%EC%8A%A4%ED%85%9C

 

728x90
반응형

'IT 도서 > 파이썬 머신러닝' 카테고리의 다른 글

8. 텍스트 분석  (0) 2021.02.11
7. 군집화  (0) 2021.02.10
6. 차원 축소  (0) 2021.02.09
5. 회귀  (0) 2021.02.08
4. 분류  (0) 2021.02.08