Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- len()
- 반복문
- nan
- pandas
- wcss
- IN
- del
- numpy
- function
- list
- sklearn
- Dictionary
- 최솟값
- data
- Python
- Machine Learning
- count()
- append()
- string
- insert()
- elbow method
- hierarchical_clustering
- analizer
- DataFrame
- 분류 결과표
- matplotlib
- DataAccess
- 최댓값
- dendrogram
- 덴드로그램
Archives
- Today
- Total
개발공부
아이템 기반 협업 필터링(Item based collaborative filtering), corr()의 min_peiods 파라미터 본문
Python/Machine Learning
아이템 기반 협업 필터링(Item based collaborative filtering), corr()의 min_peiods 파라미터
mscha 2022. 5. 13. 17:58협업필터링 (Collaborative Filtering)
사용자와 item 간의 rating을 이용해서 사용자끼리 유사도를 찾는 방식이다.
특정 사용자와 유사한 사용자들이 남긴 평점, 상품구매 이력등 행동양식 기반으로 예측해서 추천해준다.
그래서 item을 얼마나 좋아할 것인지를 수치적으로 예측한다.
아이템기반 협업필터링 (Item based collaborative filtering)
사용자가 아니라 아이템을 파라미터로 하여 협업필터링하는 방법이다.
이템 기반 협동적 필터링은 대부분의 사람들이 과거에 자신이 좋아했던 상품과 비슷한 상품이면 좋아하는 경향이 있고 반대로 싫어했었던 상품과 비슷한 상품이면 싫어하는 경향이 있다는 점을 기반으로 하고 있다.
이 필터링 방법은 고객이 선호도를 입력한 기존의 상품들과 예측하고자 하는 상품과의 유사도(similarity)를 계산하여 고객의 선호도를 예측하는 방법이다.
사용자가 각 영화에 대해 평점을 어떻게 입력했는지에 대한 데이터 프레임으로 예를 들어보자.

분별력 있는 결과를 위해 우리는 영화에 대한 평가가 80개 이상 있는 것으로만 사용해보자.
최소 80개 이상 데이터가 들어있는 것들만 상관계수를 뽑으면 corr()의 min_periods를 이용하면 된다.
# 최소 80개이상 데이터가 있는 것만 상관계수 뽑아라
movie_corr = df.corr(min_periods= 80)
movie_corr

이제 내가 아래와 같은 영화에 대한 평점을 남겼을 때, 추천하는 영화가 무엇인지 구해보자.

# 1. 내가 본 영화의 이름을 가져온다.
# 내가 본 영화는 여러개일 수 있기 때문에, 반복문을 사용한다.
for i in range(myRatings.shape[0]) :
movie_name = myRatings['Movie Name'][i]
recom_movies = movie_corr[movie_name].dropna().sort_values(ascending = False).to_frame()
recom_movies.columns = ['correlation']
recom_movies['weight'] = myRatings['Ratings'][i] * recom_movies['correlation']
similar_movies_list = similar_movies_list.append(recom_movies)
# 2. weight 로 정렬한다.
# 이 이유는 내가 남긴 평점에 따라 추천하는 정도가 달라지기 때문이다.
similar_movies_list = similar_movies_list.sort_values('weight', ascending = False)
similar_movies_list

# 3. 내가 본 영화는, 이 데이터 프레임에서 삭제한다.
drop_index = myRatings['Movie Name'].to_list()
for name in drop_index :
if name in similar_movies_list.index :
similar_movies_list.drop(name, axis = 0, inplace = True)
similar_movies_list

# 3. 추천영화가 중복되는 경우도 발생한다.
# 따라서, 중복된 영화가 있을 경우는, 웨이트가 가장 높은 값으로만 추천해준다.
# 즉, 영화 이름별로, 웨이트가 가장 높은 데이터를 가져와서, 웨이트로 정렬해준다.
similar_movies_list.reset_index(inplace = True)
similar_movies_list.groupby('title')['weight'].max().sort_values(ascending = False)

'Python > Machine Learning' 카테고리의 다른 글
| 학습한 인공지능을 파일로 저장하는 법, 불러오는 법 joblib (0) | 2022.05.23 |
|---|---|
| Prophet 라이브러리 사용법 (0) | 2022.05.12 |
| WordCloud 라이브러리 사용법, STOPWORDS(불용어) 처리, 배경 색, 배경 모양(mask) 설정 (0) | 2022.05.11 |
| 문자열 데이터를 숫자로 바꿔주는 CountVectorizer 와 analyzer 파라미터, fit, transform (0) | 2022.05.11 |
| 문자열 데이터의 구두점과 Stopwords(불용어) 제거하기 (0) | 2022.05.11 |