inflearn logo
강의

Course

Instructor

(UPDATED) Personalized Recommendation Systems using Python | Recommendation Algorithms | Recommendation AI

Determining the optimal neighbor size

3장 CF_knn 코드 질문

Resolved

260

Yoojeong Lee

2 asked

0

안녕하세요 좋은 강의 감사합니다.
(1) 코드 주석 관련 질문
3장.ipynb 코드에서 def CF_knn(user_id, movie_id, neighbor_size = 0): if movie_id in rating_matrix.columns: sim_scores = user_similarity[user_id].copy() movie_ratings = rating_matrix[movie_id].copy()
~~
위 부분의 강의 중 코드 주석을 보면
movie_ratings = rating_matrix[movie_id].copy()
이 부분의 주석이 주어진 영화와 다른 사용자의 유사도 추출이라고 되어있는데 영화와 사용자 유사도 추출이 아니라
주어진 영화에 대한 다른 사용자의 평점 추출 같은데 제가 이해한게 맞는지 문의드립니다!

(2) 코드 질문

neighbor_size 가 지정되지 않은경우
mean_rating 으로 대치하는 부분의 코드에서

if neighbor_size == 0 :

mean_rating = np.dot(sim_scores, movie_ratings) / sim_scores.sum()
이라고 되어있는데
mean_rating 이 전체 user_id의 해당 movie_id에대한 평균 평점을 의미하는 것이라면
분모가 sim_scores.sum()이 아니라 유효한 평점의 개수, 즉 len(sim_scores) 이런 게 되어야 하는거 아닌가요?
왜 분자는 평점*유사도인데 나눌때 전체 사용자의 평점 합으로 나누는건지 이해가 잘 안갑니다. ㅜㅜ

.

딥러닝 추천-시스템

Answer 1

0

거친코딩

안녕하세요.

질문 주신 부분에 답변 드리겠습니다.

일단, 먼저 주석에 대한 부분은 학습자님께서 말씀하신대로 주어진 영화에 대한 다른 사용자의 평점 추출이 맞습니다.

이 부분은 오타가 있었던 것 같습니다.

 

두번째 부분에 대해서는, 가중평균에 대한 부분이기 때문입니다.

학습자님께서 말씀주신대로 산술평균으로 계산한다면 그렇게 계산할 수 있습니다.

예를 들어, 학생의 총 과목 평균

국어 100, 수학 90, 영어 80 => (100 + 90 + 80) / 3 = 270 / 3 = 90점

 

만약에 각 과목별로 가중치(=중요도)가 있다면 어떨까요

국어 중요성 : 2, 수학 중요성 : 3, 영어 중요성 : 4

[ (100 X 2) + (90 X 3) + (80 X 4) ] / (2+3+4) = 87.777777

 

 

산술평균은 가중평균에서 가중치를 동일하게 1로 주셨다고 이해 하시면 될 것 같습니다.

해당 예시를 저희 데이터셋으로 가져와보면

dot product를 하니 유사도와 영화에 대한 평점이 각각 곱해지고 더해집니다.

여기서 가중치가 유사도라고 이해해주시면 될 것 같습니다.

그렇기 때문에 길이가 아닌, 가중치의 합(=유사도합)으로 계산되게 됩니다.

 

감사합니다.

거친코딩 드림.

 

0

Yoojeong Lee

안녕하세요! 말씀 주신 가중평균 기반의 평점 산출에 대해 또다른 궁금증이 생겨서 문의드립니다!

실제 데이터에서는 평점 데이터가 준비된 경우가 아닌, transaction / 시청기록 / session history 같은 사용자와 아이템의 interaction data 에서 피쳐를 만들어서 rating rule 을 만들어서 평점을 계산하는 것이 일반적일텐데요,
이 경우에 가장 직관적이고 널리 사용되는 '선호도' 라는 컨셉을 변수화 할 때 주로

해당 유저의 전체 history 대비 해당 아이템에 대한 history 의 비율 (예를 들면 A상품 구매횟수 / 전체 상품 구매횟수) 지표를 먼저 떠올리게 되는것같습니다.
하지만 위의 rating에서의 사용자간 영향도의 차이 이슈처럼, (그래서 대안으로 가중평균이 사용되는 것처럼)
유저별로 단순 비율수치를 선호도로 환원할 경우 - 해당유저의 상품별 구매횟수의 평균/표준편차 가 유저별로 다 다르니 동일한 선호도 지표로 볼 수 없을 것 같습니다.
이럴 때 주로 사용되는 표준화 기법이 z-score, min-max 등이 있을 것 같은데
실제 기업의 운영데이터를 통해 이러한 선호도를 계산할때는 연산량과 효율성도 고려를 해야 할 것 같아서 혹시 이런 유저간의 데이터 분포 차이를 통일 시켜줄 수 있는 '선호도'를 산출하는 좋은 방법이 있는지, 실제 인더스트리에서 활용되는 예시들이 있는지 알려주실 수 있나요?

강의 자료 이게 맞나요?

0

67

3

6장 Keras로 MF 구현하기 학습 결과

0

163

2

초심자의 질문

0

116

1

코드 공유 폴더가 비어 있습니다.

0

186

1

코드 공유 관련 부탁드립니다.

1

260

2

section 4 네번째 강의에서 pd.merge(x_train, users) 에러 발생

0

289

1

section 2 네번째 강의 score(cf_gender) 실행하면 Error 발생합니다.

0

201

1

MF알고리즘에서 질문이있습니다.

0

365

1

ean_rating = np.dot(sim_scores,movie_ratings) / sim_scores.sum() 부분에서 질문이있습니다.

0

310

1

score를 실행하면 항상 nan이 출력됩니다

0

327

1

user_id가 인덱스범위를 벗어난 값으로 들어옵니다

0

255

1

인덱스 칼럼은 어떻게 접근해야하나요

0

226

1

제공해주신 데이터링크에 들어가면 404가 뜨는데요?

0

364

1

코드 자동완성 속도가 상당히 느린데 개선할 방법이 있을까요?

0

302

1

ValueError: setting an array element with a sequence

0

472

1

users에 대한 인덱스 설정 기준

0

288

1

ppt 자료

0

286

1

train_test_split에 관한 질문입니다.

0

330

1

Timestamp 제거 이유

0

395

1

사용자 집단별 추천 강의 11:56 부분에 성별에 따른 예측값 계산에서 MergeError가 발생합니다.

0

435

1

local variable 'movie_ratings' referenced before assignment

0

256

2

실습 중 에러 'numpy.ndarray' object has no attribute 'drop'

0

1163

2

IntCastingNaNError: 관련 에러

0

436

1

인구통계학적 추천 알고리즘

0

343

1