추천 알고리즘 구현 | [토크On세미나] 추천시스템 분석 입문하기 1강 – 추천시스템의 이해 (연관분석, Apriori, Fp-Growth) | T아카데미 14343 투표 이 답변

당신은 주제를 찾고 있습니까 “추천 알고리즘 구현 – [토크ON세미나] 추천시스템 분석 입문하기 1강 – 추천시스템의 이해 (연관분석, Apriori, FP-Growth) | T아카데미“? 다음 카테고리의 웹사이트 you.experience-porthcawl.com 에서 귀하의 모든 질문에 답변해 드립니다: you.experience-porthcawl.com/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 SKplanet Tacademy 이(가) 작성한 기사에는 조회수 11,647회 및 좋아요 239개 개의 좋아요가 있습니다.

Table of Contents

추천 알고리즘 구현 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 [토크ON세미나] 추천시스템 분석 입문하기 1강 – 추천시스템의 이해 (연관분석, Apriori, FP-Growth) | T아카데미 – 추천 알고리즘 구현 주제에 대한 세부정보를 참조하세요

이번 과정에서는 추천시스템의 전반적인 내용에 대해 알아보고, 컨텐츠기반 및 협업필터링 모델에 대해 학습합니다. 이후 ‘Goodbooks-10k’ 데이터를 이용한 추천시스템 분석 방법에 대해 알아봅니다.
▶ 동영상 학습 전에 \”사전 학습자료\” 자료를 꼭 읽어보신 후 필요한 선수지식과 SW를 설치하시기 바랍니다.
▶ 이번 과정 캐글 노트북 환경에서 진행하였습니다.
▶ 강의자료는 T아카데미 홈페지를 참고해 주시기 바랍니다.

추천 알고리즘 구현 주제에 대한 자세한 내용은 여기를 참조하세요.

추천 알고리즘 구현하기 (User-based Collaborative Filtering)

추천 시스템은 보유하고 있는 데이터에 따라 다양한 방법으로 접근하여 구현이 가능하다. 아마존 , 넷플릭스 와 같이 사용자의 행위 데이터를 분석 …

+ 여기를 클릭

Source: proinlab.com

Date Published: 2/8/2022

View: 2452

상품(콘텐츠) 추천 기능 구현하기: (3) 고객 취향 사로잡기 | 뷰저블

김민경 고객에게 추천해야하는 상품은 무엇일까요? 협업 필터링 알고리즘의 기본. 쇼핑몰에서 상품 구매이력 데이터를 살펴본 결과 아래 표로 도식화할 수 있었습니다.

+ 여기에 표시

Source: www.beusable.net

Date Published: 10/20/2021

View: 4773

파이썬으로 추천 시스템 구현하기(Python recommender system)

지난 포스팅에는 추천 시스템 협업 필터링(Collaborative Filtering)을 구현해봤습니다. 그 중 아이템 기반 협업 필터링(Item based Collaborative …

+ 여기에 자세히 보기

Source: lsjsj92.tistory.com

Date Published: 12/18/2021

View: 7773

딥러닝을 활용한 추천시스템 구현 올인원 패키지 Online.

다양한 데이터 실습으로 추천 알고리즘 이해부터 성능 평가, 최신 논문 리뷰까지 실전에 최적화된 국내 유일 온라인 강의로! 추천시스템의 A to Z를 알려주실 강사님 …

+ 더 읽기

Source: fastcampus.co.kr

Date Published: 12/10/2021

View: 4448

추천 알고리즘(Recommendation Algorithm)이란?

추천 알고리즘이란? 콘텐츠 기반 필터링; 협업 필터링. 추천 알고리즘 … 아래는 영화를 콘텐츠 기반 필터링을 기반으로 파이썬으로 구현해본 게시글 …

+ 여기를 클릭

Source: dkswnkk.tistory.com

Date Published: 4/16/2022

View: 2610

추천 알고리즘 구현하기 (User-based Collaborative Filtering)

확장 보안 업데이트 ESU 프로그램은 지원 종료 이후 특정 레거시 Microsoft 제품을 실행해야 하는 고객이 최후의 수단으로 쓸 수 있는 옵션입니다. 추천 알고리즘 구현하기 …

+ 여기를 클릭

Source: de.takylentkelb.gq

Date Published: 1/30/2021

View: 9400

실시 간 추천 알고리즘 구현

실시 간 추천 알고리즘 구현. 25179 단어. 글 목록; 영상 실시 간 추천 … 오프라인 추천 알고리즘 은 이미 영화 싱크로 율 행렬 을 MongoDB 에 미리 계산 했다.

+ 자세한 내용은 여기를 클릭하십시오

Source: intrepidgeeks.com

Date Published: 5/18/2021

View: 6117

맥주 추천시스템 구현 – 5. CF 기반 추천시스템 구현

추천시스템 구현에 사용할 알고리즘은 아이템기반 CF입니다. 협업필터링(CF)은 최근접 이웃 협업필터링과 잠재 요인 협업필터링으로 나뉩니다.

+ 자세한 내용은 여기를 클릭하십시오

Source: western-sky.tistory.com

Date Published: 12/25/2022

View: 5083

주제와 관련된 이미지 추천 알고리즘 구현

주제와 관련된 더 많은 사진을 참조하십시오 [토크ON세미나] 추천시스템 분석 입문하기 1강 – 추천시스템의 이해 (연관분석, Apriori, FP-Growth) | T아카데미. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

[토크ON세미나] 추천시스템 분석 입문하기 1강 - 추천시스템의 이해 (연관분석, Apriori, FP-Growth) | T아카데미
[토크ON세미나] 추천시스템 분석 입문하기 1강 – 추천시스템의 이해 (연관분석, Apriori, FP-Growth) | T아카데미

주제에 대한 기사 평가 추천 알고리즘 구현

  • Author: SKplanet Tacademy
  • Views: 조회수 11,647회
  • Likes: 좋아요 239개
  • Date Published: 2021. 1. 25.
  • Video Url link: https://www.youtube.com/watch?v=43gb7WK56Sk

추천 알고리즘 구현하기 (User-based Collaborative Filtering)

추천 시스템은 보유하고 있는 데이터에 따라 다양한 방법으로 접근하여 구현이 가능하다. 아마존 , 넷플릭스 와 같이 사용자의 행위 데이터를 분석하여 맞춤형 추천이 가능하고, 뉴스 데이터 등의 텍스트 데이터의 내용을 분석하여 유사도 계산을 통해 추천하는 것도 가능하다. 이 글에서는 추천 시스템의 종류에 대한 소개와 협업 필터링을 통해 간단한 추천 알고리즘을 소개한다.

관련 키워드: 협업 필터링 , Collaborative Filtering , Content-based Recommendation , Item-based Recommendation , User-based Recommendation , Inner Product Matrix Similarity

추천 시스템 종류 및 장단점

User-based CF (Collaborative Filtering)

사용자간의 유사도를 계산하여 다른 사용자의 리스트를 추천해주는 방식이다. 아이템에 대한 사용자의 평가 데이터가 존재할 때 행렬을 구성하여 사용자간 유사도 계산이 가능하다. 따라서 서비스 초창기 데이터가 별로 없거나 신규 사용자에 대해서는 추천 정확도가 떨어진다.

사용 예시

장점

– 아이템 자체의 정보 없이 추천이 가능

– 알고리즘이 간단하여 구축하기가 쉬움

단점

– 유저-아이템의 양이 많아질 수록 연산이 복잡해지고 컴퓨팅 자원 소모가 많아짐

– 신규 가입자의 경우 선택된 아이템이 없어 유저간 유사도를 구할 수 없음

Item-based CF

User-based CF와 달리 아이템 간의 유사도를 측정하여 사용자가 아이템을 조회했을 때 유사 상품을 보여주는 방식이다.

Usage Example

장점

– 아이템 자체의 정보 없이 추천이 가능

– 아이템에 대한 평가를 가지고있지 않은 신규 사용자에 대해서 추천이 가능

단점

– 유저-아이템의 양이 많아질 수록 연산이 복잡해지고 컴퓨팅 자원 소모가 많아짐

– 초기 서비스시 데이터 양이 적을 때 추천 정확도가 떨어짐

Content-based Filtering

Item-based CF와 마찬가지로 아이템간 연관성을 분석하여 연관 아이템을 찾아 보여주는 방법이다. CF 방식과 달리 아이템의 정보를 바탕으로 아이템의 유사도를 분석하여 추천해준다. 주로 텍스트 정보를 바탕으로 형태소분석, 키워드 추출, 연관단어 검색의 과정을 거쳐 아이템을 추천하고, Word2Vec 등을 사용하여 콘텐츠를 분석할 수 있다.

Usage Example

– 뉴스 추천

장점

– 사용자의 정보 없이 보유한 데이터만 가지고 추천 정확도를 높일 수 있음

단점

– 과정이 복잡하고 학습 시간이 오래걸림

Evaluation

추천 시스템의 성능 평가는 분류 등 다른 작업과는 평가 방식이 다르다. 실험 데이터에서 정답은 존재하지만 단순히 Precision, Recall을 통해 평가하기에는 정확도 비교가 어렵다. 따라서 사용자의 만족도 등을 고려한 지표를 만들어 사용하는데 이 글에서는 Normalized Discounted Cumulative Gain (NDCG) 지표를 사용하여 평가하는 방식을 소개한다.

CF 추천 알고리즘 구현

이 글에서는 CF를 통해 간단한 추천 시스템을 만들어 볼 것이다. Content-based 방식은 추후 다른 글에서 다룰 예정이다.

nodeml 라이브러리

nodeml은 요즘 기계학습 실험을 진행하면서 관련 알고리즘을 정리하며 만든 node.js용 기계학습 라이브러리이다. 현재 Bayes, CNN 등의 분류 알고리즘과 User-based CF 알고리즘을 라이브러리 형태로 구현해 놓았고, Yeast, bbc의 공개된 데이터셋과 개인적으로 수집해놓았던 사용자별 영화 평가 데이터 220만건을 샘플 데이터로 이용 할 수 있게 해놓았다.

라이브러리 설치는 node.js 프로젝트 경로에서 아래의 명령어를 통해 설치가 가능하다.

npm install –save nodeml

nodeml을 이용한 추천 시스템 코드

아래의 코드는 영화 데이터를 nodeml 을 사용하여 사용자별 40개씩 추천한 후 ndcg를 계산한 코드이다.

const {sample, CF, evaluation} = require(‘nodeml’); const movie = sample.movie(); // 영화 데이터셋 {movie_id: no, user_id: no, rating: num, like: num} let train = [], test = []; for (let i = 0; i < movie.length; i++) { if (Math.random() > 0.8) test.push(movie[i]); else train.push(movie[i]); } const cf = new CF(); cf.maxRelatedItem = 40; cf.maxRelatedUser = 40; cf.train(train, ‘user_id’, ‘movie_id’, ‘rating’); let gt = cf.gt(test, ‘user_id’, ‘movie_id’, ‘rating’); let result = cf.recommendGT(gt, 40); let ndcg = evaluation.ndcg(gtr, result); console.log(ndcg);

영화 데이터셋

nodeml 에 있는 영화 데이터는 총 220만건의 유저-아이템 평가 데이터이다. 데이터는 아래의 형태와 같이 구성되어있다.

[ { movie_id: ‘1’, user_id: ‘1’, rating: ‘3’, like: ‘1011’ } , … ]

아래의 코드는 영화 데이터셋을 불러온 후 8:2 비율의 트레이닝, 테스트 집합으로 분할한다.

let movie = nodeml.sample.movie(); let train = [], test = []; for (let i = 0; i < movie.length; i++) { if (Math.random() > 0.8) test.push(movie[i]); else train.push(movie[i]); }

추천 알고리즘

nodeml 의 추천 알고리즘은 유저 기반(User-based) CF 알고리즘이다. 알고리즘은 아래의 순서로 동작한다.

특정 사용자가 본 영화 목록을 불러온다 1 의 영화 목록을 본 다른 사용자를 불러온다 2 에서 검색된 사용자가 본 영화 목록을 바탕으로 사용자간 유사도를 Inner Product를 통해 구한다. 3 에서 계산된 사용자들의 영화 목록을 불러온 후 사용자 유사도 점수를 바탕으로 해당 영화들의 점수를 구한다. 4 에서 계산된 점수를 바탕으로 내림차순으로 정렬하여 높은 점수의 영화 n개를 추천한다.

아래의 코드는 nodeml 에 구현되어있는 CF 알고리즘의 설명이다.

let trained = {}; let train = (data, x, y, val)=> { if (!x) x = 0; if (!y) y = 1; if (!val) val = 2; let userBase = {}, itemBase = {}, itemRank = {}; for (let i = 0; i < data.length; i++) { let userId = data[i][x]; let itemId = data[i][y]; let feature = data[i][val] * 1; if (!userBase[userId]) userBase[userId] = []; userBase[userId].push({itemId: itemId, feature: feature}); if (!itemBase[itemId]) itemBase[itemId] = []; itemBase[itemId].push({userId: userId, feature: feature}); if (!itemRank[itemId]) itemRank[itemId] = 0; itemRank[itemId] += feature; } let ranking = []; for (let itemId in itemRank) ranking.push({itemId: itemId, play: itemRank[itemId]}); ranking.sort((a, b)=> b.play – a.play); trained.userBase = userBase; trained.itemBase = itemBase; trained.ranking = ranking; };

학습 함수는 아래와 같이 구성된다. 학습이라기보다는 추천에 필요한 데이터를 사용하기 편리하게 재구성하는 과정이다. userBase 에 유저별로 영화 및 평가 데이터가 저장되고, itemBase 에는 영화별로 해당 영화를 본 사용자의 정보가 들어가게된다. ranking 은 전체 받은 평가를 바탕으로 영화의 순위를 저장하는데, 이 데이터는 신규 사용자의 경우 평가한 아이템 데이터가 없기 때문에 전체 랭킹으로 추천을 해주기 위해 저장하였다.

let recommendToUser = (userId, count) => { let userList = trained.userBase[userId]; if (userList) return recommendByArray(userList, count); else return JSON.parse(JSON.stringify(trained.ranking)).splice(0, count); };

recommendToUser 함수는 특정 유저에 대해 n개의 추천 목록을 반환해주는 함수이다. 선택된 유저가 평가한 아이템이 없을 경우 전체 랭킹에서 n개를 추천해주고, 평가한 아이템이 존재할 경우 recommendByArray 함수를 통해 아이템을 추천해준다.

let recommendByArray = (listenList, count)=> { let alreadyIn = {}; let similarUsers = {}; for (let i = 0; i < listenList.length; i++) { alreadyIn[listenList[i].itemId] = true; let similarUserList = trained.itemBase[listenList[i].itemId]; for (let j = 0; j < similarUserList.length; j++) { if (!similarUsers[similarUserList[j].userId]) similarUsers[similarUserList[j].userId] = 0; similarUsers[similarUserList[j].userId] += similarUserList[j].feature * listenList[i].feature; } } let relatedUsers = []; for (let userId in similarUsers) relatedUsers.push({id: userId, score: similarUsers[userId]}); relatedUsers.sort((a, b)=> b.score – a.score); let playlist = {}; let playlistCount = 0; for (let i = 0; i < relatedUsers.length; i++) { if (app.maxRelatedUser !== 0 && i > app.maxRelatedUser) break; let userId = relatedUsers[i].id; let userScore = relatedUsers[i].score; let userList = trained.userBase[userId]; for (let j = 0; j < userList.length; j++) { if (alreadyIn[userList[j].itemId]) continue; if (app.maxRelatedItem !== 0 && j > app.maxRelatedItem) break; if (!playlist[userList[j].itemId]) { playlist[userList[j].itemId] = 0; playlistCount++; } playlist[userList[j].itemId] += userScore; } } let result = []; for (let itemId in playlist) result.push({itemId: itemId, score: Math.round(Math.log(playlist[itemId] + 1) * 100) / 100}); result.sort((a, b)=> b.score – a.score); result.splice(count); for (let i = 0; i < trained.ranking.length; i++) { if (result.length >= count) break; if (!playlist[trained.ranking[i].itemId]) result.push(trained.ranking[i]); } return result; };

recommendByArray 함수는 지정된 사용자와 타 사용자의 점수를 계산하여 아이템을 추천해준다. 앞에서 알고리즘에 대해 설명한 순서로 코드가 진행되는데, 데이터가 많을 경우 속도가 느려지기 때문에 maxRelatedUser 와 maxRelatedItem 를 설정하여 속도 개선이 가능하다. 기본적으로 설정은 모든 데이터를 활용하지만 해당 값이 설정되어 있을경우 일정양에 도달하면 멈추도록 되어있다.

NDCG 평가

const cf = new nodeml.CF(); cf.maxRelatedItem = 40; cf.maxRelatedUser = 40; cf.train(train, ‘user_id’, ‘movie_id’, ‘rating’); let gt = cf.gt(test, ‘user_id’, ‘movie_id’, ‘rating’); let result = cf.recommendGT(gt, 40); let ndcg = evaluation.ndcg(gtr, result); console.log(ndcg);

위의 코드는 Threshold 설정을 각각 40으로 설정한 후 test 데이터에 사용자별로 40개씩 추천을 한 후 ndcg 지표로 성능을 평가하는 코드이다.

time node nodeml.cf.js

js파일을 위의 명령어로 실행하면 ndcg 값과 수행 시간을 확인 할 수 있다. 현재 코드를 수행할 경우 초당 68명의 사용자를 평가가 가능하고 정확도 및 전체 수행시간은 아래와 같다. (컴퓨팅 성능별로 차이가 있을 수 있음)

0.14899252729622794 real 9m2.662s user 8m33.283s sys 0m46.914s

아래는 동일한 환경에서 전체 랭킹에서 상위 40개의 아이템을 모든 유저에게 추천했을 경우와 비교를 한 자료이다. 빠른 실험을 위해 유저 100명에 대해 각각 추천하는 방식으로 비교하였다. CF알고리즘을 사용할 경우 수행시간은 2배정도 증가하고 정확도는 2배정도 향상되었다.

항목 CF 상위일괄추천 ndcg 0.20 ~ 0.24 0.10 ~ 0.12 초당사용자평가 68명 160명

마치며

이 글에서는 nodeml을 통한 추천 기술 구현과 평가 방법에 대해서 언급했는데, 알고리즘 자체가 복잡하지 않기 때문에 필요에 따라서 직접 구현할 수 있다고 생각한다. Inner Product 계산으로 유사도를 구했지만, k-NN 등 다른 알고리즘을 사용하여 유사도를 구하거나 추천시 아이템에 가중치를 변경하면 추가적인 성능 개선도 가능하다.

이 글에서는 CF만 다루었지만 추후에 Word2Vec를 사용한 텍스트 데이터에 대한 Content-based 추천 방식을 다루어 볼 예정이다.

이것이 좋아요: 좋아하기 가져오는 중…

상품(콘텐츠) 추천 기능 구현하기: (3) 고객 취향 사로잡기

안녕하세요 뷰저블입니다. 상품 추천 기능 구현하기 마지막편, 협업 필터링입니다. 이전 글에서도 협업 필터링에 대해 잠깐 매우 간단한 개념만을 소개해드렸었는데요, 이번 글에서는 상세히 다뤄보고자 합니다.

많은 서비스들이 ‘이 아이스크림을 보는 사람은 이 아이스크림도 살펴보고 있어요!’ 혹은 ‘이 과자를 구입한 사람은 이 과자도 구매했어요!’ 처럼 상품간의 공통점을 이용하여 추천을 제안하는데요. 이러한 방식은 ‘개인화 추천(개인의 취향에 따라 상품을 제안하는 방식)’방식이 아닌 모두에게 동일한 결과를 노출하는 방식에 해당합니다.

하지만, 협업 필터링은 ‘나와 닮은 사람의 평가는 나와 비슷한 평가를 내릴 것이야. 따라서 나는 아직 사지 않았지만 다른 사람이 구매한 상품을 나도 원할거야’라는 사고 아래 시작합니다.

특정 대상자가 상품을 살펴보거나 구입한 데이터와, 다른 사람들이 살펴보거나 구입한 데이터 양쪽 모두 사용하여 해당 구입 패턴을 유형화하고 유사성과 공통점의 ‘상관관계’를 분석합니다. 이를 통해 개인 행동이력과 관련된 ‘개인화된 상품’을 추천받을 수 있게 됩니다.

즉, 협업필터링은 ‘자신과 닮은 고객을 찾아내 해당 고객이 구매했지만 아직 내가 갖고 있지 않은 상품을 추천하는 방식’이라 말할 수 있습니다. 세상 간단한 개념이죠?

좀 더 깊이 설명하자면, 이용자의 모든 사용과 소비 기록을 입력시켜 이를 바탕으로 ‘불필요한 정보를 필터링’하는 기술입니다. 예를 들어 박 사원이 A와 B 콘텐츠를 좋아하고, 김 사원이 B와 C 콘텐츠를 좋아한다면, 박 사원에게는 C를, 김 사원에게는 A를 추천하는 식이죠.

데이터가 쌓이면 쌓일수록 추천 정확도가 높아지는 머신러닝 기술이 적용되었습니다. 그래서 이름도 ‘필터링’입니다. 협업필터링은 상품 특성간의 연관성이나 상품간의 공통점으로 추천할뿐만 아니라, 구매 데이터를 기반으로 한 고객 간의 상호 유사성을 패턴화하여, 자신과 닮은 사람이 가졌지만 본인은 갖고 있지 않은 상품을 추천하는 것이 기본 개념이기 때문에 간혹 ‘전혀 예상하지 못했던 상품’이 튀어나오기도 합니다.

김민경 고객에게 추천해야하는 상품은 무엇일까요?

협업 필터링 알고리즘의 기본

쇼핑몰에서 상품 구매이력 데이터를 살펴본 결과 아래 표로 도식화할 수 있었습니다.

<상품 구매이력 데이터를 표로 도식화하기>

상품을 구매했다면 ‘1’로 표기합니다.

상품을 확인하긴 했지만 구매하지 않았다면 ‘0’으로 표기합니다.

마지막으로 상품이 고객에게 화면단에 노출되지 않았으면서, 해당 상품을 구매하였는지 모르는 경우는 데이터가 없어(NULL), ‘-’로 표기하였습니다.

자 문제를 하나 내보겠습니다. ‘김민경’ 고객에게는 다음으로 어떤 상품을 추천해야 할까요?

김민경씨의 취향과 가장 맞는 고객을 함께 먼저 찾아봅시다. 상관관계가 높은 사람이 바로 그 고객인데요, 김민정 고객과 권유라 고객의 취향의 유사성은 김민경 고객에게도, 권유라 고객에게도 함께 표기된 제품(두 고객 모두에게 동일한 숫자가 적혀 있어야 함)의 0과 1 데이터에 대한 상관관계를 살펴봅니다.

여기서는 0.167이라는 상관관계가 있음이 밝혀졌는데요, 이 상관계수는 김민경 고객과 권유라 고객이 같은 상품을 샀거나 동일한 상품을 열람(노출)한 정도가 많으면 많을 수록 숫자가 1에 수렴합니다.

그렇다면 김민경 고객과의 상관관계를 살펴보면 엄상희, 구태혁, 고민준의 상관관계가 0.5이상으로 높게 나타났습니다. 상관계수가 상위인 3명의 평균값(데이터가 ‘-’일 경우에는 합계에서 제외)으로 김민경 고객에게 추천도를 구하면 상품E가 구태혁과 고민준 모두 구입한 상품에 해당하여 평균 1.0이라는 높은 수치가 나옵니다.

그럼 김민경 고객에게 다음으로 추천해야 하는 상품은 결국 상품E가 되는 것이지요.

김민경 고객에게 추천해야하는 상품,

한 걸음 더 나아가 고도화된 협업필터링으로 찾아볼까요?

위에서 설명한 표는 상품을 구입하였다면 ‘1’, 구입하지 않았으면 ‘0’, 상품이 고객 화면단에 비노출되었다면 ‘-’으로 표기하였습니다. 즉, 상품의 평가가 높았다면 ‘1’, 평가가 낮았다면 ‘0’이라는 두 가지 평가 데이터를 기반으로 산출하였다는 것을 의미합니다.

헌데 여기서 다시 질문을 던져보겠습니다. 영화를 구매는 했는데 시청했더니 너무 재미가 없었던 적도 있고, 맛을 봤더니 맛이 없어 재구매 의사가 없을 수도 있고 내가 사려는게 아니라 엄마나 여자친구에게 선물로 주기 위해 내 타입은 아니지만 일부러 구매했을 수도 있습니다. 거꾸로 아직 사진 못했지만 너무 갖고 싶어서 항상 사려고 마음에 염두해 두었을 수도 있습니다.

이렇게 생각해보면 1과 0이라는 2가지 평가방식만으로 추천해야할 상품을 정하는 건 어쩌면 너무 부족한 것일지도 모릅니다. 좀 더 정밀도 높은 상품을 추천하려면 상품을 평가한다는 관점을 함께 도입하여 생각해보아야 합니다.

<고도화된 협업 필터링>

영화를 검색해보신 적 있으신가요? 보통 5개의 별점으로 얼마나 재미있었는 체킹할 수 있는데요, 이렇게 평가 내리는 방식을 좀 더 세분화하면 단순히 1와 0으로 점수화하는 것보다 고도화할 수 있습니다.

대표적으로 그룹렌즈(GroupLens)라는 회사에서 Usenet 사이트의 기사를 추천하기 위해 다른 고객의 평가를 기반으로 해당 고객에게 기사를 추천하였고, 해당 평가 방식 또한 위 별점 처럼 5개로 구분되어 있었다고 해요. 이후에 계속해서 상품 열람이력이나 구입 이력같은 암묵적인 평가 방식을 채용하는 추천 시스템들이 속속히 등장하였고, 현재 ‘0’과 ‘1’로 간단히 기본적으로 구현하는 협업필터링이 널리 퍼졌다고 합니다.

위에서 설명드린 기본적인 협업필터링 표과 비교하기 위해 다시 5점으로 상세화한 표를 가져왔습니다. 상품 구입 후 평가가 가장 높다면 ‘5’, 가장 낮다면 ‘1’로 5단계 표기하였습니다. 마찬가지로 구매한 이력이 없거나 고객에게 노출되지 않았다면 ‘-’로 표기합니다. 다시 김민경 고객에게 어떤 상품을 추천해야 할까요?

우선 김민경 고객과의 상관관계를 살펴보면 엄상희, 구태혁, 고민준 3명의 상관계수가 0.5 이상으로 높습니다. 상관계수 상위 3명의 평균값으로 김민경 고객에게 추천도가 높은 상품을 살펴보면 상품E가 평균 4.5점으로 높다는 것을 알 수 있죠. 쇼핑몰 화면상으로 상품E를 제안할 수 있습니다.

협업필터링으로 구현한 추천 기능, 어떻게 성과를 측정할까?

먼저, 기능이 구현된 페이지 내 장바구니 추가 또는 상품 상세 클릭 수의 비중이 증감하였는지를 살펴볼 수 있습니다. 구글 애널리틱스나 어도비 애널리틱스로 해당 영역 내 클릭 이벤트를 수집할 수도 있는데요, 뷰저블 스크립트 코드가 설치되었다면 추가 이벤트 트래킹 코드를 삽입할 필요없이 바로 클릭 히트맵에서 클릭 성과 확인이 가능합니다. 나아가 A/B Testing 기능을 이용하여 두 개의 URL을 가지고 비교해볼 수 있습니다.

다음으로는 정성적인 평가를 추가하기 위해 스크롤 히트맵의 어텐션 그래프를 통해 고객이 해당 기능을 인지하고 살펴보는지를 측정할 수 있습니다. 고객이 얼마나 도달하는지, 또 도달하여 숙독하는지를 전후 대비 살펴보세요.

해당 화면 높이 값에서 스크롤 도달 PV의 비중이 증가하였지만 클릭이 많이 발생하지는 않는지, 혹은 많이 도달하지 않았음에도 불구하고 굉장히 많은 클릭이 발생하는지도 살펴볼 수 있습니다.

나아가 해당 상품이 실제로 구매로 이어져 매출에 기여하였는지 기여도를 측정하는 방법이 있습니다. 어도비 애널리틱스에서는 eVars라는 특수한 기능으로 제공하고 있기도 합니다.

고도화된 추천 알고리즘을 구현하기 위해서는

데이터 설계 단계부터 UX디자이너가 참여해야 합니다.

온라인에서 일어나는 ‘추천 기능’은 데이터 수집 단계부터 UX 디자이너와 데이터 관리자, 데이터 분석가, 개발자가 함께 협업하여야 합니다.

어떤 알고리즘을 적용해야하며 어느 수준까지 구현할지, 해당 기능을 구현하기 위해서는 화면으로 어떻게 풀어 고객 경험을 증진시킬 수 있을지 모두 UX 디자이너가 이해하고 주축이 되어 실현해야 합니다.

이번 <상품(콘텐츠) 추천 기능 구현하기> 시리즈 글을 통해 여러분들께 상품 추천 기능별로 어떤 데이터가 기본적으로 필요하며 어떤 구현 방식을 채용해야 하는지, 나아가 어떻게 UX로 표현할 수 있을지 설명드렸습니다.

데이터 분석가나 개발자처럼 알고리즘을 직접 구현할정도는 아니더라도 어느정도 이해를 하고 있어야 커뮤니케이션하고 리딩하여 고객에게 나은 경험을 제공할 수 있을 것입니다. 이번 글이 그러한 UX 디자이너 여러분들에게 꼭 도움이 되었으면 합니다.

참고 자료 : (PDF) GroupLens: Applying collaborative filtering to Usenet news

꿈 많은 사람의 이야기

포스팅 개요

해당 글에 대한 코드는 아래 github 링크에 전부 올려두었습니다.

이번 포스팅은 파이썬(Python)으로 추천 시스템(Recommendation system) 기본을 구현해보는 포스팅입니다.

지난 포스팅에는 추천 시스템 협업 필터링(Collaborative Filtering)을 구현해봤습니다.

그 중 아이템 기반 협업 필터링(Item based Collaborative Filtering)을 구현했습니다.

https://lsjsj92.tistory.com/568

이번 포스팅은 이전 포스팅에 이어서 파이썬으로 추천 시스템 구현(Recommender system with Python)해보기 3탄으로 이어집니다.

그 중 협업 필터링을 구현할 것인데요. 지난 포스팅과 다르게 행렬 분해(Matrix Factorization)을 기반(잠재 요인 협업 필터링, latent factor collaborative filtering) 으로 한 추천 시스템을 파이썬으로 구현해봅니다.

Python Recommendation System(Recommender system) : Collaborative Filtering Matrix Factorization

해당 자료는 아래에서 참고했습니다.

데이터는 캐글의 MovieLens 데이터를 사용했습니다. (https://www.kaggle.com/sengzhaotoo/movielens-small)

포스팅 본문

협업 필터링(Collaborative Filtering) 요약

지난 포스팅에서 추천 시스템(Recommender System)의 협업 필터링(Collaborative Filtering)에는 크게 2가지 종류가 있다고 말씀드렸습니다.

아이템 기반 협업 필터링(Item based Collaborative Filtering) – nearest neighbor collaborative filtering 혹시 모르신다면 링크를 참고해주세요 (https://lsjsj92.tistory.com/563)

잠재 요인 기반 – SVD와 같은 행렬 분해(Matrix Factorization)를 사용

혹시 모르신다면 링크를 참고해주세요 (https://lsjsj92.tistory.com/564)

오늘 포스팅은 여기서 잠재 요인 기반 협업 필터링(Latent Factor Collaborative Filtering)을 파이썬(Python)으로 구현해봅니다.

파이썬 코드 구현

자! 이제 파이썬으로 추천 시스템을 구현해보죠

데이터는 앞서 개요에서 말씀드린 것처럼 Kaggle에 있는 movielens 데이터를 사용하겠습니다.

반응형

이 movielens 데이터는 2개로 나뉘어져 있는데요.

1. 사용자-영화 평점 기반 데이터

2. 영화 정보 데이터

영화 평점 데이터는 10만개가 넘고, 영화 데이터는 9000여개가 됩니다.

이렇게 말이죠!

이제 여기서 불필요한 데이터는 제거하고 필요한 데이터만 남기겠습니다.

timestamp와 genres는 잠재 잠재요인 기반 협업 필터링 추천 시스템에서 필요없습니다.

따라서 drop을 이용해 두 컬럼을 각각 제거해줍니다.

자! 이제 2개의 파일을 pandas의 merge를 이용해서 합쳐줍니다.

2개의 데이터는 movieId라는 공통 컬럼 이 있습니다. pd.merge(rating_data, movie_data, on = ‘movieId’)를 이용해 하나로 합쳐주겠습니다.

하나로 합쳤습니다! 그러면 특정 유저가 영화에 대해 평점을 매겼는데 그 영화의 제목(title)이 무엇인지 알 수 있게 되었습니다.

자! 이제 pandas의 pivot table을 이용해서 데이터를 변경시켜주어야 합니다.

지금은 user, movie, rating이 각각 컬럼에 존재하는데요. 이렇게 생긴 데이터를 value를 평점으로 column은 movie로, row는 user id로 바꿔주어야 합니다. 아래 그림처럼요!

이렇게 변환하는 것을 pandas에서 pivot_table이라는 것으로 지원해줍니다.

바꿔주죠!

user_movie_data.pivot_table(‘rating’, index = ‘userId’, columns=’title’)로 바꿔주면 사용자-영화 평점 데이터로 변경해줍니다.

단, 단순히 저렇게만 하면 사용자가 평점을 매기지 않은 정보에는 NaN값이 들어가니 fillna을 사용해 0으로 채워줍시다.

이제 이 데이터를 어떻게 활용할까? 이것을 고민해야 하는데요.

이번 포스팅에서는 ‘특정 영화와 비슷한 영화를 추천’ 해주는 컨셉으로 가볼까합니다.

그래서 현재 user-movie로 되어 있는 pivot table을 movie-user data로 바꿔줍시다.

numpy에서 .T를 사용하면 Transpose를 시켜줍니다. 즉, 전치를 시켜줍니다.

이렇게 전치로 바꿔주면 행은 9064개의 영화 데이터가 되고 열은 671개의 사용자 데이터가 됩니다.

이제 SVD라는 개념을 적용해서 사용해봅니다.

SVD(Singular Value Decomposition)란?

SVD라는 것은 특이값 분해라고도 불리웁니다. M x N 크기의 데이터 행렬 A를 아래와 같이 분해합니다.

출처 : https://ratsgo.github.io/from%20frequency%20to%20semantics/2017/04/06/pcasvdlsa/

300×250

제가 많이 참조하고 배우고 있는 ratsgo님의 블로그에 자세히 설명이 쓰어져 있는데요.

간단히 말하면 SVD는 다음과 같습니다.

행렬 U와 V에 속한 열벡터는 특이 벡터(Singular Vector)라 불리고 이 특이 벡터들은 서로 직교하는 성질을 가지고 있습니다. 또한 가운데 시그마 모양(∑)을 가지고 있는 것도 행렬인데요. 이 행렬은 대각 행렬(Diagonal Matrix) 성질을 가지고 있습니다. 그래서 대각 성분이 행렬 A의 특이값이고 나머지는 0의 값을 가지고 있습니다. 저렇게 특이값으로 쪼개진 데이터를 U, ∑, Vt를 각각 행렬곱을 하면 원래 행렬 A로 되돌릴 수 있습니다. 파이썬 사이킷런(Python scikit learn)에서 제공해주는 TruncateSVD는 이러한 SVD의 변형입니다. TruncatedSVD는 시그마 행렬(∑)의 대각원소(특이값) 가운데 상위 n개만 골라낸 것입니다. 이렇게 하면 기존 행렬 A의 성질을 100% 원복할 수 없지만 (그 만큼 데이터 정보를 압축했기 때문) 행렬 A와 거의 근사한 값이 나오게 됩니다.

여기서는 scikit learn의 TruncatedSVD를 사용합니다.

scikit learn의 TruncatedSVD를 사용하고 안에 latent 값을 12로 두겠습니다.

그리고 SVD.fit_transform을 통해 변환을 하게 되면 9064개의 영화 데이터가 12개의 어떤 요소의 값을 가지게 됩니다.

이렇게 나온 데이터끼리 피어슨 상관계수를 통해 구해줍니다.

numpy에 있는 corrcoef를 이용하면 상관계쑤를 구할 수 있도록 해줍니다

seaborn의 heatmap을 사용하면 이 상관계수끼리의 관계를 볼 수 있습니다.

대각선이 하얀색인 이유는 자기 자신과의 관계니까 가장 높은 하얀색이 나온 것입니다.

이렇게 나온 상관계수를 이용해서 ‘특정 영화’와 관련하여 상관계수가 높은 영화를 뽑아주면 됩니다.

마블의 가디언즈 오브 갤럭시를 지정하여 상관계수가 높은 영화를 뽑아봤는데요.

영화 목록은 아래와 같습니다.

영화 투 건즈

영화 2012

영화 300

마블 엔트맨

마블 어벤져스

베트맨

등등의 영화가 마블의 가디언즈 오브 갤럭시와 비슷하다고 추천되었습니다!

뭔가 그럴듯한 결과가 나왔네요!

이번 포스팅에서는 파이썬을 활용해 추천 시스템을 구현해보았습니다.

이번 추천 시스템 구현은 잠재 요인 협업 필터링(latent factor collaborative filtering)에 대해서 구현했고 이를 위해 행렬 분해(matrix factorization)을 사용했습니다. 행렬 분해를 위해서 SVD를 사용했구요.

이번 포스팅은 ‘특정 영화’와 비슷한 영화 들을 추천해주었습니다.

마치 아이템 기반 협업 필터링과 비슷했죠?

이것은 사용자가 본 history를 생각하지 않은 결과입니다. 즉, 사용자에게 추천하기에는 부족하죠.

따라서 다음 포스팅에서는 사용자 맞춤 개인 추천 시스템 을 구현하는 포스팅을 작성하겠습니다.

반응형

그리드형

딥러닝을 활용한 추천시스템 구현 올인원 패키지 Online.

주의사항 * 상황에 따라 사전 공지 없이 할인이 조기 마감되거나 연장될 수 있습니다.

* 수강 신청 및 결제를 완료하시면, 마이페이지를 통해 바로 수강이 가능합니다.

– 총 학습기간 :

정상 수강기간(유료 수강기간) 최초 1개월(30일), 무료 수강 기간은 31일차 이후로 무제한이며, 유료 수강기간과 무료 수강기간 모두 동일하게 시청 가능합니다.

본 패키지는 약 26시간 분량으로, 일 1시간 내외의 학습 시간을 통해 정상 수강 기간(=유료 수강 기간) 내에 모두 수강이 가능합니다.

– 수강시작일 :

수강 시작일은 결제일로부터 기간이 산정됩니다. (사전 예약 강의의 경우 1차 강의 오픈일) 패스트캠퍼스의 사정으로 수강시작이 늦어진 경우에는해당 일정 만큼 수강 시작일이 연기됩니다.

* 천재지변, 폐업 등 서비스 중단이 불가피한 상황에는 서비스가 종료될 수 있습니다.

– 본 상품은 기수강생 할인, VIP CLUB 제도 (구 프리미엄 멤버십), 기타 할인이벤트 적용 불가 합니다.

– 콘텐츠는 향후 당사의 일정에 따라 추가 또는 업데이트 될 수 있습니다.

– 쿠폰 적용이나 프로모션 등으로 인해 5만원 이하의 금액으로 강의를 결제할 경우, 할부가 적용되지 않습니다.

환불규정 – 수강시작 후 7일 이내, 5강 미만 수강 시에는 100%환불 가능합니다.

– 수강시작 후 7일 초과, 5강 이상 수강시 수강기간인 1개월(30일) 대비 잔여일에 대해 다음과 같이 환불 가능합니다.

: 환불요청일시 기준 수강시작 후 8일 ~10일 미만 경과시, 실 결제금액의 2/3에 해당하는 금액을 환불

: 환불요청일시 기준 수강시작 후 11일~15일 미만 경과시, 실 결제금액의 1/2에 해당하는 금액을 환불

: 환불요청일시 기준 수강시작 후 15일 초과 시, 환불금액 없음

추천 알고리즘(Recommendation Algorithm)이란?

728×90

목차

추천 알고리즘

사용자가 선호할 만한 아이템을 추측하여 적합한 특정 항목을 제공해 주는 기본적인 알고리즘에는

콘텐츠 기반 필터링(Content-based filtering)과 협업 필터링(Collaborative filtering) 이 있다.

콘텐츠 기반 필터링은 ‘콘텐츠의 특성 자체’를, 협업 필터링은 사용자의 ‘행동 기록’을 분석하여 추천한다.

콘텐츠 기반 필터링

콘텐츠 기반 필터링은 콘텐츠(아이템)의 특성과 사용자의 선호도를 비교해 추천하는 방식이다.

장점

다른 유저의 데이터가 필요하지 않다.

추천할 수 있는 아이템의 범위가 넓다. 즉 새로운 아이템이나 인기 없는 아이템도 추천이 가능하다.

추천하는 이유를 제시할 수 있다. ex) 아이템의 특징으로 분석하기 때문에 어떤 특징이 추천의 이유가 되었다고 설명이 가능하다.

단점

적절한 특징을 찾기가 어렵다.

새로운 유저를 위한 추천이 어렵다. ex) 새로운 유저의 데이터가 존재하지 않거나 데이터가 부족하다면 해당 유저에게 추천 시스템을 적용하기 어렵다.

선호하는 특성을 가진 항목을 반복 추천한다.

협업 필터링

협업 필터링은 특정 집단에서 발생하는 ‘유사한 사용행동’을 파악하여, 비슷한 성향의 사람들에게 아이템을 추천하는 기술이다.

성향이 비슷하면, 선호하는 것도 비슷할 것이라는 가정을 전제로 한다.

협업 필터링은 1. 사용자 기반 협업 필터링(User-based CF) , 와 2. 아이템 기반 협업 필터링(Item-based CF)으로 구분된다.

1. 사용자 기반 협업 필터링 : 나와 성향이 비슷한 사람들이 사용한 아이템을 추천해 주는 방식이다.

ex) 사용자 A가 온라인 몰에서 치킨, 피자 그리고 콜라를 구매하고 B가 치킨과 콜라를 구매했다고 가정할 때, 알고리즘은 구매 목록이 겹치는 이 두 사용자가 유사하다고 판단해, 사용자 B에게 피자를 추천한다.

대표적으로 페이스북, 링크드인 등 대다수의 SNS ‘친구 추천’ 서비스 역시 이와 같은 서비스를 적용한다.

2. 아이템 기반 협업 필터링: 내가 구매하려는 물품과 함께 구매된 경우가 많은 아이템을 추천해 주는 방식이다.

ex) 공책과 볼펜을 함께 구매하는 소비자가 많다면, 공책을 구매한 사용자에게 볼펜을 추천한다. 이때 두 상품의 특징은 파악하지 않는다.

즉 공책과 볼펜이 사무용품인지, 서로 같이 관용되는 관계인지 등은 고려하지 않는다. 다만 두 제품이 같이 구매된 기록이 많기에 새로운 사용자에게도 추천할 뿐이다.

장점

많은 사용자에게서 얻은 기호 정보로 새로운 아이템을 추천한다.

직관적으로 이해하기 쉽고 합리적으로 보인다.

단점

콜드 스타트(Cold start) : 새로운 아이템이나 사용자가 추가되면, 충분한 사용기록이 확보될 때 까지는 적절한 투표를 하기 어렵다.

롱테일(Long tail) : 인기 편향성의 문제라고도 하며, 사용자가 소수의 아이템만 선호하여 대다수의 비인기 아이템들은 추천을 위한 충분한 정보가 쌓이지 못한다.

계산 효율 저하: 협업 필터링은 계산량이 비교적 많은 알고리즘 이기 때문에 사용자 수가 많은 경우 게산이 몇 시간에서 길게는 며칠까지 소요되기도 한다.

아래는 영화를 콘텐츠 기반 필터링을 기반으로 파이썬으로 구현해본 게시글이다.

추천 알고리즘 구현하기 (User-based Collaborative Filtering)

휴대폰 용 MxSpy-Download 무료 모바일 스파이 소프트웨어 사용은 다음과 같은 기능을 제공합니다. 다음 5 분 이내에 모든 휴대 전화에서 감시 및 추적을 시작 하시겠습니까? 세계에서 가장 강력한 휴대 전화 추적 소프트웨어를 사용하십시오. 당사의 신중한 소프트웨어는 GPS 위치…. 스마트 폰 및 컴퓨터 용 솔루션 모니터링의 세계적 선두 주자 인 모든 개인 및 대상 장치 데이터는 냉전 중에 만들어진 비밀 핵 벙커에 저장됩니다. SpyBunker는 파일을 암호화 한 다음 안전하게 보관하기 위해 벙커에 업로드합니다.

SpyBunker는 엔드 투 엔드 암호화를 사용하므로 사용자 만 대상 장치 데이터를 제어하고 액세스 할 수 있습니다. SPYBUNKER 직원이나 귀하 이외의…. 상업용 iPad iPhone Android Windows Mac. 자녀의 안전에 대해 걱정하십니까? 아니면 직원들이 일을하고 있는지보고 싶습니까? 아마도 당신이 원하는 것은 전화 나 데이터를 도둑이나 손해로부터 보호하는 것입니다. 통화, 방문한 웹 사이트, 메시지, 사진, GPS 위치 등에 대한 정보를 얻을 수 있으며 시장에서 가장 뛰어난 휴대폰 추적기 중 하나를 사용하여 원격으로 전화를 제어 할 수 있습니다. 프리미엄 iPhone Android. 자녀의 모바일을 원격으로 모니터링하십시오. TheTruthSpy를 사용하면 TheTruthSpy 응용 프로그램에서 직접 활동 사본을 비밀로 확인할 수 있습니다! 무료 기능 : -모든 기능에 대해 48 시간 무료. SpyToApp은 트랙 및 스파이 휴대 전화를위한 가장 강력한 스파이 소프트웨어입니다. 그것은 쉽게 SMS를 추적, 스파이 통화 레코더, WHATSAPP 메시지를 추적, Viber, 페이스 북, KIK, 라인, Snapchat SpyToApp은 안드로이드에 대한 최초의 10 최고의 스파이 애플 리케이션입니다.

최신 SpyToApp의 상태는 전화기 응용 프로그램에 완전히 숨겨져 있으며 모니터링되는 전화기에서는 찾을 수 없습니다. 이 추적…. 상업용 Android Tablet Android. BlurSPY는 다른 곳에서는 찾을 수없는 자녀를 모니터링하는 최신 아이디어를 제공합니다. 기술은 수세기 동안 발전해 왔지만 아이들은 항상 아이들의 활동에 대해 걱정 해 왔습니다. 기술의 발달로 인해 아이의 안전은 더 이상 부모의 손에 달려 있지 않습니다. 아이들은 최신 가제트를 사용하여 나이에 관계없이 모든 정보에 액세스 할 수있었습니다. 아이들이 소셜 미디어에 갇히거나 모르는 나쁜 회사에 빠질 수 있습니다.

기술이 아이들이 주변의 모든 것…. 이 앱에는 저렴한 가격표와 많은 기능이 포함되어 있습니다. 탈옥없이 iPhone을 감시 할 경우 XNSPY가 맨 위에 나오는 이름입니다. Google 지도는 사용자가 웹에서 찾을 수 있는 최고의 내비게이션 서비스입니다. 자동차나 자전거를 운전할 때 특히 유용합니다. 사용 가능한 내장 기능이 많이 있습니다. 이 응용 프로그램에서 사용자가 쉽게 새로운 장소를 탐색 할 수 있습니다. 이 응용 프로그램을 선택의 주요 이점은 무료로 사용할 수 있다는 것입니다.

Intralinks 모바일

com 5 iKeyMonitor iKeyMonitor는 텍스트, 인스턴트 메시지, 브라우저 기록 및 키 입력을 기록 할 수있는 간단하면서도 효과적인 iPhone 스파이 앱입니다. 이렇게하면 스스로 할 수있는 것보다 더 빨리 신뢰를 구축하고 자신의 신뢰를 구축 할 수 있습니다. 추천 글 및 상세 리뷰 요청 휴대폰이 대중에게 공개되기 몇 주 전에 업계 전문가가 준비한 최신 iPhone에 대한 리뷰를 읽은 적이 있습니까? com 결론 이 주제로 다가온 후 우리는 이제 문제가없는 방식으로 전화 위치를 추적 할 수 있다고 생각합니다. 시장에 나와있는 최고의 전화 스파이 앱 목록 중 4 위인 Android 및 iOS 기기에 사용할 수있는 Highster Mobile이 있습니다. 신뢰할 수있는 스파이 셀 앱을 선택하십시오. 이 소프트웨어는 특히 장치를 라우팅 할 필요없이 Android 장치에서 WhatsApp 메시지를 모니터링하는 기능으로 유명합니다. 대상 전화에 설치되면 송수신 된 모든 통화를 모니터링 및 추적하고, 휴대폰의 실시간 GPS 최고의 새로운 모니터링 Android 모바일 추적기 앱 추적하고, 문자 메시지 SMS 를 추적 및 모니터링하고, 전체 연락처 목록 및 사진에 저장된 사진에 액세스 할 수 있습니다. 당신은해야합니다 로그인 코멘트를 게시합니다. 특히 Mobile Spy와 같은 부모 친화적 인 경쟁 업체와 비교할 때 더욱 그렇습니다.

이 앱은 Android 전용 서비스를 제공합니다. 이 앱으로 휴대폰의 위치를 무료로 추적 할 수 있습니다. 사용 방법이 매우 쉽고 편리합니다. Geo-Tracker 는 안드로이드 전용 무료 휴대폰 위치 추적앱입니다. Google Play 스토어에서이 앱을 무료로 다운로드하고 추적을 시작할 수 있습니다. Find My Device는 Google에서 Android 기기 용으로 개발한 앱니다. 이 앱은 주로 분실 또는 도난당한 장치를 찾도록 설계되었습니다. 위치 추적 앱으로 사용할 수 있습니다. 안드로이드 장치에 앱을 설치하고 모니터링을 시작합니다. 이 앱의 이용료는 무료입니다.

자신만의 Swimmo 만들기

수 있습니다. Android 및 IOS를 모니터링하는 수십 가지 우수한 전화 추적 소프트웨어가 있습니다. 우리는 10 년 최고의 대 휴대폰 감시 앱을 찾았습니다. Highster Mobile은 또 다른 인기있는 전화 추적 앱입니다. 다른 것만 큼 사용하여 새로운 Google 드라이브 업데이트를 통해 사용자가 온라인 파일을 작성, 편집 할 수 세계에서 가장 인기 있는 PC 및 Mac 정리 소프트웨어의 제작자들이 Android용 CCleaner를 선사합니다. 정크를 제거하고 공간을 확보하며 시스템을 모니터링하고

Glympse는 웹에서 사용할 수있는 최고의 위치 추적 서비스 중 하나입니다. Android 및 iOS 기기에서 실행할 수 있습니다. 대상 장치의 위치 기록을 알려줍니다. 온라인 Glympse를 사용하여 위치 추적 활동에 액세스 할 수 있습니다. Phone Tracker for iPhones 은 Cell Phone Solution, LLC 사가 개발하였습니다. 전 세계 약 3 백 만명이 이용하고 있습니다. 이 앱은 자녀의 휴대폰 기기 위치를 추적하려는 수 백 만명의 사람들이 추천합니다. 수영 훈련 워치를 사용하기 위해 버튼을 누를 필요가 없습니다.

쉽게 전화 위치를 추적하는 5 가지 무료 방법

그냥 손목을 돌려 화면을 탭하면서 워치를 마음대로 조정할 수 있습니다. 지금 Swimmo 구매. Wireless connection and sync with your modern phone via Bluetooth Low Energy technology.

The expected life span of the battery is 1, charges. The battery should last for several years. Swimmo Training Watch, Charger, USB Cable, Product Manual Guide, Important Product Information Guide. Swimmo는 맞춤형 훈련을 통해 근육의 강도와 힘을 기르는 데에 집중합니다. Swimmo만의 즉시 피드백 모드로 최고 기록을 달성하세요. Swimmo가 근육을 강화하고 몸매를 유지할 수 있도록 도와드립니다. 보기에도 좋고 사용이 간편한 수영 워치 회전 및 탭 기술이 가히 혁신적입니다.

특히 수영인을 위해 설계하고 수중에서 계속해서 사용할 수 있도록 제작했습니다. 버터를 듬뿍 바른 오리처럼 물은 아무 것도 아니라는 듯 기능하는, 이름만큼 영리한 스마트 워치 수영 게임의 발전을 앞당길 차세대 최고의 앱 회원님을 위한 해상 공원은 없지만, iWatch가 있습니다 이것이 바로 Swimmo의 도메인입니다. Swimmo의 목표를 멋지게 달성했습니다! 주문일로부터 3영업일 내에 Swimmo를 배송합니다.

그리고 고용주. 다양한 잠재 고객에게 서비스를 제공하기 위해 The TruthSpy에는 위장을 유지하고 대상 장치에서 많은 양의 정보를 실시간으로 원격으로 수집 할 수있는 다양한 기능이 제공됩니다. 이 소프트웨어는 특히 장치를 라우팅 할 필요없이 Android 장치에서 WhatsApp 메시지를 모니터링하는 기능으로 유명합니다.

이상의 고급 기능으로 운동을 강화하세요

TruthSpy에는 편안한 집에서 편안하게 추적 경험을 제공하는 몇 가지 고유 한 기능이 있습니다. 세 가지 구독 플랜 모두 5 일 환불 보증이 제공되므로 제품에 만족하지 않으면 반품을 청구 할 수 있습니다. 시중에 나와있는 많은 전화 스파이 앱 은 다른 경쟁 제품과 유사 할 수있는 여러 가지 기능을 제공하지만 일반적으로 측정하지 않으므로 전체 모니터링 경험이 희석됩니다. 상위 5 개 휴대 전화 모니터링 소프트웨어 목록에서 객관적으로 다중 매개 변수 스파이 앱을 평가 한 결과, mSpy는 다양한 기능과 완벽한 고객 지원을 통해 탁월한 사용자 경험을 제공 할 것입니다. 마찬가지로 Hoverwatch와 FlexiSPY도 저렴한 가격에 훌륭한 옵션이므로 설치가 쉽고 최신 기능을 갖춘 쾌적한 환경을 모니터링 할 수 있습니다. 그러나 가입 계획이 귀하의 요구에 적합하지 않은 경우 Highster Mobile은 모든 기능을위한 고유 한 지불 옵션을 갖춘 완벽한 옵션입니다. 우리의 목록에있는 최신 제품인 The TruthSpy는 고도로 사용자 정의 가능하고 사용자 친화적 인 제어판과 함께 고유 한 기능을 찾고 있다면 유리한 옵션입니다.

이러한 앱은 대부분 무료 평가판 옵션과 함께 제공되므로 평가판을 확인하고 요구 사항에 가장 적합한 제품을 결정할 수 있습니다. 먼저 유명한 회사에서 소프트웨어를 구입하십시오. 그러면 공급 업체로부터 인증 정보, 설치 지침, 다운로드 링크 및 활성화 코드가 포함 된 이메일을 받게됩니다. 그런 다음 제어하려는 장치에 소프트웨어를 설치해야합니다.

남자 친구 또는 남편의 휴대폰 확인. 데이터 사용량을 모니터링하는 5 가지 최고의 모바일 앱. 최고 휴대 전화 모니터링 앱 Android.; 전화 추적 사이트 무료? 유료 앱을위한 9 가지 최고의 마케팅 전략.

소프트웨어가 설치되면 모든 장치에서 액세스 할 수있는 제어판에서 모든 전화 활동 모니터링을 시작할 수 있습니다. 정말 간단합니다. 특별 참고 사항 : iPhone에서 소프트웨어를 사용하려면 iPhone을 설치하기 전에 먼저 탈옥해야합니다.

실시 간 추천 알고리즘 구현

영상 실시 간 추천 알고리즘 의 실현

1. 실시 간 추천 알고리즘 의 전제

2. 알고리즘 과정 은 다음 과 같다

1. 사용자 의 K 번 최근 평 점 획득

2. 현재 영화 에서 가장 비슷 한 K 개 영화 획득

3. 영화 추천 우선 순위 계산

4. 결 과 를 mongoDB

5. 실시 간 추천 결과 업데이트

레 디 스 클 러 스 터 에는 사용자 한 명 이 최근 영화 에 대한 K 회 평 점 을 저장 했다.실시 간 알고리즘 은 빠르게 얻 을 수 있 습 니 다.

오프라인 추천 알고리즘 은 이미 영화 싱크로 율 행렬 을 MongoDB 에 미리 계산 했다.

Kafka 는 사용자 의 실시 간 평가 데 이 터 를 얻 었 다.

import scala . collection . JavaConversions . _ def getUserRecentlyRating ( num : Int , uid : Int , jedis : Jedis ) : Array [ ( Int , Double ) ] = { jedis . lrange ( “uid:” + uid . toString , 0 , num ) . map { item = > val attr = item . split ( “\\:” ) ( attr ( 0 ) . trim . toInt , attr ( 1 ) . trim . toDouble ) } . toArray }

def getTopSimMovies ( num : Int , mid : Int , uid : Int , simMovies : scala . collection . Map [ Int , scala . collection . immutable . Map [ Int , Double ] ] ) ( imp licit mongConfig : MongConfig ) : Array [ Int ] = { val allSimMovies = simMovies . get ( mid ) . get . toArray val ratingExist = ConnHelper . mongoClient ( mongConfig . db ) ( MONGODB_RATING_COLLECTION ) . find ( MongoDBObject ( “uid” – > uid ) ) . toArray . map { item = > item . get ( “mid” ) . toString . toInt } allSimMovies . filter ( x = > ! ratingExist . contains ( x . _1 ) ) . sortWith ( _ . _2 > _ . _2 ) . take ( num ) . map ( x = > x . _1 ) }

def computeMovieScores ( simMovies : scala . collection . Map [ Int , scala . collection . immutable . Map [ Int , Doub le ] ] , userRecentlyRatings : Array [ ( Int , Double ) ] , topSimMovies : Array [ Int ] ) : Array [ ( Int , Double ) ] = { val score = scala . collection . mutable . ArrayBuffer [ ( Int , Double ) ] ( ) val increMap = scala . collection . mutable . HashMap [ Int , Int ] ( ) val decreMap = scala . collection . mutable . HashMap [ Int , Int ] ( ) for ( topSimMovie < - topSimMovies ; userRecentlyRating < - userRecentlyRatings ) { val simScore = getMoviesSimScore ( simMovies , userRecentlyRating . _1 , topSimMovie ) if ( simScore > 0.6 ) { score += ( ( topSimMovie , simScore * userRecentlyRating . _2 ) ) if ( userRecentlyRating . _2 > 3 ) { increMap ( topSimMovie ) = increMap . getOrDefault ( topSimMovie , 0 ) + 1 } else { decreMap ( topSimMovie ) = decreMap . getOrDefault ( topSimMovie , 0 ) + 1 } } } score . groupBy ( _ . _1 ) . map { case ( mid , sims ) = > ( mid , sims . map ( _ . _2 ) . sum / sims . length + log ( increMap . getOrDefault ( mid , 1 ) ) – log ( decreMap . getOrDefault ( mid , 1 ) ) ) } . toArray . sortWith ( _ . _2 > _ . _2 ) }

def getMoviesSimScore ( simMovies : scala . collection . Map [ Int , scala . collection . immutable . Map [ Int , Double ] ] , userRatingMovie : Int , topSimMovie : Int ) : Double = { simMovies . get ( topSimMovie ) match { case Some ( sim ) = > sim . get ( userRatingMovie ) match { case Some ( score ) = > score case None = > 0.0 } case None = > 0.0 } } log , 10 ( ): def log ( m : Int ) : Double = { math . log ( m ) / math . log ( 10 ) }

def saveRecsToMongoDB ( uid : Int , streamRecs : Array [ ( Int , Double ) ] ) ( implicit mongConfig : MongConfig ) : Unit = { val streaRecsCollection = ConnHelper . mongoClient ( mongConfig . db ) ( MONGODB_STREAM_RECS_COLLECTION ) streaRecsCollection . findAndRemove ( MongoDBObject ( “uid” – > uid ) ) streaRecsCollection . insert ( MongoDBObject ( “uid” – > uid , “recs” – > streamRecs . map ( x = > MongoDBObject ( “mid” – > x . _1 , “score” – > x . _2 ) ) ) ) }

이 내용에 흥미가 있습니까? 현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다: [ sql ] 백틱(`)과 홑따옴표(‘) DBeaver로 sql문 연습하는 과정에서 계속 오류가 발생해서 검색하는 과정에서 원하던 대답을 찾게되었다…ㅠ 대략 예시를 위와 같이 간단하게 만들어보았다. select구문에서의 where구문에서의 DBeaver… 텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오. CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.

글 목록에 저장영상 실시 간 추천 알고리즘 의 실현사용자 u 가 영화 p 에 대해 평 점 을 주면 u 에 대한 추천 결과 의 업 데 이 트 를 촉발 합 니 다.사용자 u 가 영화 p 에 대한 평 점 으로 인해 사용자 u 에 게 그 와 p 가 가장 비슷 한 영화 들 간 의 추천 강도 가 달라 질 것 이기 때문에 영화 p 와 가장 비슷 한 K 개 영 화 를 후보 로 선정 했다.각 후보 영 화 는 ‘추천 우선 순위’ 라 는 가중치 에 따라 이 영화 가 사용자 u 에 게 추천 되 는 우선 순위 로 평가 된다.이 영화 들 은 사용자 u 의 최근 몇 가지 평 점 에 따라 각자 사용자 u 에 대한 추천 우선 순 위 를 계산 한 다음 에 지난번 에 사용자 u 에 대한 실시 간 추천 결 과 를 바탕 으로 추천 우선 순 위 를 합병 하고 교체 하여 업 데 이 트 된 추천 결 과 를 얻 을 것 이다.실시 간 추천 알고리즘 프로 세 스 는 기본적으로 다음 과 같다. (1) 사용자 u 는 영화 p 에 대해 평 점 을 주 었 고 실시 간 으로 추천 하 는 계산 을 촉발 했다.(2) 영화 p 가 가장 비슷 한 K 개 영 화 를 집합 S 로 선정한다.(3) 사용자 u 의 최근 시간 내 K 조 평 점 을 획득 하고 이번 평 점 을 포함 하여 RK 집합 으로 한다.(4) 영화 추천 우선 순 위 를 계산 하여 집합 updated 생 성S;1. 실시 간 추천 알고리즘 의 전제2. 알고리즘 과정 은 다음 과 같다.실시 간 추천 알고리즘 을 하나의 평 점 으로 입력 하고 실행 하 는 핵심 내용 은 userId 의 최근 K 차 평 점 획득, movieId 의 가장 비슷 한 K 개 영화 획득, 후보 영화 의 추천 우선 순 위 를 계산 하고 userId 에 대한 실시 간 추천 결 과 를 업데이트 하 는 것 이다.1. 사용자 의 K 번 최근 평 점 가 져 오기비 즈 니스 서버 는 사용자 평 점 을 받 을 때 기본적으로 이 평 점 상황 을 userId, movieId, rate, timestamp 형식 으로 Redis 에 해당 하 는 대기 열 에 삽입 합 니 다. 실시 간 알고리즘 에 서 는 Redis 클 라 이언 트 를 통 해 해당 하 는 대기 열 내용 만 가 져 오 면 됩 니 다.2. 현재 영화 에서 가장 비슷 한 K 개 영화 가 져 오기오프라인 알고리즘 에서 영화 의 싱크로 율 행렬 을 미리 계 산 했 기 때문에 각 영화 의 movieId 와 가장 비슷 한 K 개 영 화 는 쉽게 얻 을 수 있다. MongoDB 에서 MovieRecs 데 이 터 를 읽 고 movieId 가 simHash 에 대응 하 는 자 해시 표 에서 싱크로 율 앞의 K 대 영 화 를 얻 을 수 있다.출력 은 데이터 형식 이 Array [Int] 인 배열 로 movieId 와 가장 비슷 한 영화 집합 을 나타 내 며 후보 영화 집합 으로 candidateMovies 라 고 명명 되 었 다.3. 영화 추천 우선 순위 계산후보 영화 집합 simiHash 와 userId 의 최근 K 개 평 점 recentRatings 에 대해 알고리즘 코드 내용 은 다음 과 같다.그 중에서 getMovieSimScore 는 후보 영화 와 평 점 된 영화 의 싱크로 율 을 추출 한 것 으로 코드 는 다음 과 같다.4. 결 과 를 mongoDB 에 저장saverecsToMongoDB 함수 가 결과 저장 을 실 현 했 습 니 다:5. 실시 간 추천 결과 업데이트후보 영화 의 추천 우선 순 위 를 계산 한 배열 updated Recommends 가 나 오 면 이 배열 은 웹 백 엔 드 서버 에 전송 되 며, 백 엔 드 서버 에 있 는 userId 의 지난 실시 간 추천 결과 recent Recommends 와 통합, 교체 하여 우선 순위 E 전 K 대 영 화 를 이번 실시 간 으로 추천 합 니 다.구체 적 으로 말 하면 a. 합병: updatedRecommends 와 recentRecommends 를 새로운 배열 로 집합 합 니 다.b. 교체 (다시 지우 기): updated Recommends 와 recent Recommends 가 중복 되 는 영화 movieId 가 있 을 때 recent Recommends 에서 movieId 의 추천 우선 순 위 는 지난번 실시 간 추천 결과 이기 때문에 폐기 되 고 업 데 이 트 된 updated Recommends 를 대표 하 는 movieId 의 추천 우선 순위 로 교 체 됩 니 다.c. TopK 선택: 합병, 교체 후의 배열 에서 각 movie 의 추천 우선 순위 에 따라 앞의 K 대 영 화 를 선택 하여 이번 실시 간 으로 추천 하 는 최종 결과 로 한다.

맥주 추천시스템 구현 – 5. CF 기반 추천시스템 구현

CF 기반 추천시스템

🔗아이템 기반 협업필터링(CF)

추천시스템 구현에 사용할 알고리즘은 아이템기반 CF입니다.

협업필터링(CF)은 최근접 이웃 협업필터링과 잠재 요인 협업필터링으로 나뉩니다.

그리고 최근접 이웃 협업필터링은 다시 유저 기반과 아이템 기반으로 나뉩니다.

그 중에서도 아이템 기반을 선택한 이유는 다음과 같습니다.

유저 개인의 취향이 너무 다양하다. 그에 반해 리뷰를 남기는 맥주 수는 한정적이다.

따라서 아이템 기반으로 추천하는 것이 적절하다고 판단했습니다.

🎇데이터 정제하기

수집한 맥주 데이터에는 리뷰가 1개인 맥주들이 있습니다.

리뷰를 남긴 유저들도 마찬가지입니다.

이는 추천시스템의 성능을 저하시킬 수 있으므로

최소 10개 이상의 리뷰를 가진 맥주와 유저들만으로 이루어진 데이터셋을 구성합니다.

import pandas as pd import numpy as np from sklearn.metrics.pairwise import cosine_similarity from sklearn.metrics import mean_squared_error import warnings warnings.filterwarnings(‘ignore’) # n개 이상의 데이터 리뷰를 남긴 유저, 맥주를 걸러내는 함수 def preprocessing(data, n): min_id = data[‘아이디’].value_counts() >= n min_id = min_id[min_id].index.to_list() data = data[data[‘아이디’].isin(min_id)] min_beer = data[‘맥주’].value_counts() >= n min_beer = min_beer[min_beer].index.to_list() data = data[data[‘맥주’].isin(min_beer)] return data temp=tmp.copy() # 10번 반복합니다. for i in range(1,10): temp = preprocessing(temp, 10) print(temp.shape) temp.to_csv(‘정제된데이터.csv’, encoding=’utf-8′)

기존의 데이터는 7만6천개 정도였는데 4만5천개로 줄었습니다.

🍺맥주간 유사도 기반 추천

맥주간 유사도를 통해 비슷한 맥주를 추천하려고 합니다.

유사도 측정의 기준은 코사인 유사도와 피어슨 유사도를 고민했습니다.

피어슨 유사도는 너무 크거나 작은 값이 있을 경우 유사도에 크게 영향을 주는 경우 사용합니다.

EDA과정에서 이상치는 따로 존재하지 않았고

평점도 정규분포를 따르는 것을 확인했습니다.

따라서 코사인 유사도를 사용하려고 합니다.

정제된데이터 중 추천시스템 구현에 필요한 3개의 컬럼으로 매트릭스를 구성했습니다.

3개의 요소는 아이디, 맥주, 평점입니다.

data = pd.read_csv(‘정제된데이터.csv’, encoding=’utf-8′, index_col=0) ratings = data.copy() # 피벗 테이블을 이용해 유저-아이디 매트릭스 구성 ratings_matrix = ratings.pivot_table(‘평점’, index=’아이디’, columns=’맥주’) ratings_matrix.head(3) # fillna함수를 이용해 Nan처리 ratings_matrix = ratings_matrix.fillna(0) ratings_matrix

정제된 데이터

3개의 요소로 구성한 매트릭스

Shape은 2496 x 65입니다.

2496은 유저의 수, 65는 맥주의 수입니다.

맥주의 종류가 줄어든 이유는 10개 이상의 리뷰를 가진 맥주만 뽑아냈기 때문입니다.

그런데 현재 매트릭스는 유저 x 맥주에 대한 매트릭스입니다.

추천에 사용할 알고리즘은 아이템 기반 CF이므로 맥주 x 유저 매트릭스로 변환합니다.

# 유사도 계산을 위해 트랜스포즈 ratings_matrix_T = ratings_matrix.transpose() ratings_matrix_T

변환된 매트릭스

# 아이템-유저 매트릭스로부터 코사인 유사도 구하기 item_sim = cosine_similarity(ratings_matrix_T, ratings_matrix_T) # cosine_similarity()로 반환된 넘파이 행렬에 영화명을 매핑해 DataFrame으로 변환 item_sim_df = pd.DataFrame(data=item_sim, index=ratings_matrix.columns, columns=ratings_matrix.columns) print(item_sim_df.shape) item_sim_df.head(3)

계산된 코사인 유사도

65개의 맥주의 종류입니다.

ratings_matrix.columns

코젤 맥주, 호가든 맥주와 유사도가 높은 맥주 5개만 추천해보겠습니다.

# 코젤 맥주와 유사도가 높은 맥주 5개만 추출하기 item_sim_df[‘Kozel Černý (Dark) 10°’].sort_values(ascending=False)[:5]

# 호가든 맥주와 유사도가 높은 맥주 5개만 추출하기 item_sim_df[‘Hoegaarden’].sort_values(ascending=False)[:5]

👩🏼‍🤝‍🧑🏻개인화된 맥주 추천

위의 추천방식은 단순히 맥주간 유사도만으로 추천을 진행했습니다.

이번엔 개인의 평점이 반영된 추천시스템을 구현해보겠습니다.

# ratings_arr.dot(item_sim_arr)는 평점 * 맥주 유사도 # ratings_arr는 사용자 u의 아이템 i와 가장 유사도가 높은 Top_N개 아이템에 대한 실제 평점 벡터 # item_sim_arr는 아이템 i와 가장 유사도가 높은 Top_N개 아이템의 유사도 벡터 def predict_rating(ratings_arr, item_sim_arr): ratings_pred = ratings_arr.dot(item_sim_arr) / np.array([np.abs(item_sim_arr).sum(axis=1)]) return ratings_pred # 개인화된 예측 평점 구하기 # 평점 value와 유사도 value만 뽑아서 대입 ratings_pred = predict_rating(ratings_matrix.values, item_sim_df.values) ratings_pred_matrix = pd.DataFrame(data=ratings_pred, index=ratings_matrix.index, columns = ratings_matrix.columns) # 개인별로 계산된 예측 평점 ratings_pred_matrix

# 우리가 예측한 평점과 실제 평점간의 차이를 MSE로 계산 def get_mse(pred, actual): # 평점이 있는 실제 영화만 추출 pred = pred[actual.nonzero()].flatten() actual = actual[actual.nonzero()].flatten() return mean_squared_error(pred, actual) print(‘아이템 기반 모든 최근접 이웃 MSE: ‘, get_mse(ratings_pred, ratings_matrix.values))

🥈Top-N에 기반한 추천

MSE값을 더 낮추려면 특정 맥주와 가장 비슷한 N개의 맥주들만 유사도 계산에 사용해야합니다.

위의 방식은 모든 맥주들의 유사도 벡터를 사용했기 때문에 MSE값이 다소 낮습니다.

# 3개의 col까지만. 3개의 맥주에 대해서 유사도가 큰 5개 선택 top_n_items = [np.argsort(item_sim_df.values[:,3])[:-5:-1]] top_n_items

# 따라서 가장 비슷한 유사도를 가지는 맥주만 유사도 벡터로 사용 # 특정 맥주와 비슷한 유사도를 가지는 맥주 Top_N에 대해서만 적용 -> 시간오래걸림 def predict_rating_topsim(ratings_arr, item_sim_arr, n=20): # 사용자-아이템 평점 행렬 크기만큼 0으로 채운 예측 행렬 초기화 pred = np.zeros(ratings_arr.shape) # 사용자-아이템 평점 행렬의 맥주 개수만큼 루프 for col in range(ratings_arr.shape[1]): # 유사도 행렬에서 유사도가 큰 순으로 n개의 데이터 행렬의 인덱스 반환 top_n_items = [np.argsort(item_sim_arr[:, col])[:-n-1:-1]] # 개인화된 예측 평점 계산 : 각 col 맥주별(1개), 2496 사용자들의 예측평점 for row in range(ratings_arr.shape[0]): pred[row, col] = item_sim_arr[col,:][top_n_items].dot( ratings_arr[row, :][top_n_items].T) pred[row, col] /= np.sum(item_sim_arr[col,:][top_n_items]) return pred ratings_pred = predict_rating_topsim(ratings_matrix.values, item_sim_df.values, n=10) print(‘아이템 기반 최근접 TOP-N 이웃 MSE: ‘, get_mse(ratings_pred, ratings_matrix.values)) # 계산된 예측 평점 데이터는 DataFrame으로 재생성 ratings_pred_matrix = pd.DataFrame(data=ratings_pred, index=ratings_matrix.index, columns=ratings_matrix.columns) ratings_pred_matrix

MSE 값이 감소했고 예측 행렬 값도 변했습니다.

🙎‍♂️실제 사용자에게 추천하기

사용자 아이디와 평점이 주어진 상황에서 맥주 3개를 추천해주겠습니다.

예시로는 이미 행렬에 존재하는 user 정보를 사용했습니다.

# username=’snoworsummer(8,581)’ username=’007lund(92)’ # 특정 유저 대상으로 맥주추천 user_rating_id = ratings_matrix.loc[username, :] # 유저가 먹었던 맥주들 출력 user_rating_id[user_rating_id > 0].sort_values(ascending=False)[:10]

사용자가 먹어본 맥주는 제외하겠습니다.

# 사용자가 안 먹어본 맥주를 추천하자. def get_not_tried_beer(ratings_matrix, userId): # userId로 입력받은 사용자의 모든 맥주 정보를 추출해 Series로 반환 # 반환된 user_rating은 영화명(title)을 인덱스로 가지는 Series 객체 user_rating = ratings_matrix.loc[userId, :] # user_rating이 0보다 크면 기존에 관란함 영화. # 대상 인덱스를 추출해 list 객체로 만듦 tried = user_rating[user_rating>0].index.tolist() # 모든 맥주명을 list 객체로 만듦 beer_list = ratings_matrix.columns.tolist() # list comprehension으로 tried에 해당하는 영화는 beer_list에서 제외 not_tried = [beer for beer in beer_list if beer not in tried] return not_tried # 예측 평점 DataFrame에서 사용자 id 인덱스와 not_tried로 들어온 맥주명 추출 후 # 가장 예측 평점이 높은 순으로 정렬 def recomm_beer_by_userid(pred_df, userId, not_tried, top_n): recomm_beer = pred_df.loc[userId, not_tried].sort_values(ascending=False)[:top_n] return recomm_beer # 유저가 먹지 않은 맥주이름 추출 not_tried = get_not_tried_beer(ratings_matrix, username) not_tried

최종적으로 아이템 기반의 최근접 이웃 CF로 맥주 추천을 진행합니다.

# top_n과 비슷한 맥주만 추천에 사용 ratings_pred = predict_rating_topsim(ratings_matrix.values, item_sim_df.values, n=5) # 계산된 예측 평점 데이터는 DataFrame으로 재생성 ratings_pred_matrix = pd.DataFrame(data=ratings_pred, index=ratings_matrix.index, columns=ratings_matrix.columns) # 유저가 먹지 않은 맥주이름 추출 not_tried = get_not_tried_beer(ratings_matrix, username) # 아이템 기반의 최근접 이웃 CF로 맥주 추천 recomm_beer = recomm_beer_by_userid(ratings_pred_matrix, username, not_tried, top_n=3) recomm_beer = pd.DataFrame(data=recomm_beer.values, index=recomm_beer.index, columns=[‘예측평점’]) recomm_beer

개인의 평점이 반영된 맥주는 오차값이 큰 편입니다.

성능을 최적화하거나 단순 맥주 기반의 유사도 추천으로 가야할 것 같습니다. 🤦‍♂️

키워드에 대한 정보 추천 알고리즘 구현

다음은 Bing에서 추천 알고리즘 구현 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 [토크ON세미나] 추천시스템 분석 입문하기 1강 – 추천시스템의 이해 (연관분석, Apriori, FP-Growth) | T아카데미

  • 추천시스템
  • 유사도함수
  • Word2Vec
  • 협업필터링
  • 평가함수
  • Goodbooks
  • T아카데미
  • Tacademy
  • 티아카데미
  • SK플래닛
  • SKplanet
  • 온라인교육
  • IT 교육
  • 온라인 강좌
  • 토크온
  • 토크ON세미나
  • 세미나
[토크ON세미나] #추천시스템 #분석 #입문하기 #1강 #- #추천시스템의 #이해 #(연관분석, #Apriori, #FP-Growth) #| #T아카데미


YouTube에서 추천 알고리즘 구현 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 [토크ON세미나] 추천시스템 분석 입문하기 1강 – 추천시스템의 이해 (연관분석, Apriori, FP-Growth) | T아카데미 | 추천 알고리즘 구현, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

Leave a Comment