728x90
반응형
모든것에 대한 개인화 된 추천과 개인화 된 정리함/보관함 (Personalized Recommendation for Everything, and Self-customized List Box)
만들어야지. Recommendation for you.
Table of Contents
Service Name? Domain Address?
Recoeve (Recommendation of Everything), PROE (Personalized Recommendation Of Everything), perev (Personalizing Everything), pereco (Personalized Recommendation), perecom (Personalized Recommendation) 등의 이름. 이름은 더 생각해봐야 할듯. 당장은 Recommendation for Everything 및 Record, Recover 란 뜻이 통하는 "Recoeve" 가 가장 맘에 들긴 함. 즉 아마도 http://www.reco-eve.com; and http://www.recoeve.com; and http://www.recove.com (이건 누가 쓰고 있네.)
이름도 중요한 문제이긴 한데, 내용이 더 중요하니 당장은 우선 적당히만 고민.
Similarity and Weighted Average, The Personalization
모든 것에 대한 개인화 된 추천 알고리즘은 어떻게 짤 수 있을까? category, subCategory, subsubCategory 등으로 나눠서 category 별로 A와 비슷한 평점을 준 사용자 (ordered by similarity) 를 추출/저장. 이 category에서 A가 점수를 메기지 않은 contents에 대해 weighted average를 구해 A의 예상평점을 구함.
Similarity between user$_i$ and user$_j$: $S\,(u_i,u_j)$=$S\,(u_j,u_i)$는 어찌 디자인 할까? 굳이 symmetric하게 만들 필요는 없을듯. Symmetric하면 한쪽 (user$_i$) 을 업데이트 할 때 user$_j$ 도 업데이트 할 수 있다는 장점은 있는데, recent evaluation 기준으로만 계산하는 경우 (less weight on old evaluations) asymmetric 하게 design 하는게 더 효율이 좋을듯. 속도와 less cost 도 중요한 요소라 적당히 정확성 있는 선에서 타협해야함.
Let valuation on content k by user$_i$ : 1~7 points (콘텐츠 k 에 대한 사용자 i의 평가: 1~7점) be
v\,(c_k;u_i) .
Let similarity of user$_j$ from user$_i$ be
S\,(u_j \text{ from } u_i) = S\,(u_j ; u_i) = \frac{\sum_{c_k \in\,R(u_i)} s\,(c_k;u_i,u_j)}{\sum_{c_k \in\,R(u_i)} 1}
where $s\,(c_k;u_i,u_j)$ $\big($= $s\,(c_k;u_j,u_i)$$\big)$ is single-similarity function on content k between user i and user j. Simple candidates for single-similarity function are
s\,(c_k;u_i,u_j) = \frac{a^2}{a^2+\big(v\,(c_k;u_i)-v\,(c_k;u_j)\big)^2}
= \frac{1}{1+\Delta v^2/a^2}
and
s\,(c_k;u_i,u_j) = \exp \bigg( -\frac{\big(v\,(c_k;u_i)-v\,(c_k;u_j)\big)^2}{\sigma^2} \bigg)
= \exp \Big( -\frac{\Delta v^2}{\sigma^2} \Big) .
Here I defined
\Delta v \equiv v\,(c_k;u_i)-v\,(c_k;u_j) .
댓글 위젯(?)같은 경우, 혹은 자신의 보관함에서 자신과 비슷한 사람들의 의견을 보여주기도 하고, 정 반대 사람들의 의견을 보여주기도 하는 등. 자신의 댓글이 더 잘 공감받고 전달되고 소통되도록. 댓글에 대한 평가는 아주 간단하게 3점? 5점? 정도로 적게? 의견에 동의, 반대 개념으로 평가되게. Similarity에도 영향을 줄까? Random selecting 해서 비교 올리는 작업도 이걸 참조해서 하면 좋을듯. 내가 지금 평가한 content에서 최근 평가한 사람들을 추려내서 나와의 sim을 계산해서 나의 neighbor를 update 하는 식.
데이터가 무지막지하게 많아지면 모두와 나의 sim을 계산할수는 없음. 사용자의 컴퓨팅 리소스를 사용한다고 할지라도 이건 무리. 수억명과 매번 비교하고 업데이트 할수는 없을테니. 따라서 일부를 랜덤 픽 하고 sim 계산하고 해야함. 랜덤픽을 어떤 방식으로 할 것인가가 추천 정확도를 올리는데 중요할듯. 어뷰징에 내성이 강하게 설계하는 것도 중요할테고.
Similarity in Specific Category
심 계산식은 어떻게 할까나? 카테고리별로 심이 계산되어야 하겠고. 심 리스트를 사용자 데이터베이스에 저장해놔야 계산이 빨라짐. 디폴트 카테고리로만 우선 심들 계산? 아니면 내가 나눈 카테고리별로? 내가 평가 안한 컨텐츠들에 대한 예상 평점 및 에러정도를 보여주자. 가중치를 둔 평균, 분산을 계산.
정리함에 넣어놓은, 평가한 뉴스가 오보였을 경우 알려주기.
자신의 계정으로 댓글, 평가을 쓰되 익명기능이 가능하도록. 인캡슐레이션 및 암호화로 남들이 쉽게 개인 데이터를 못 뽑아내도록 보안에도 신경써야 할듯.
보통 평가를 하지 않는 이유는 평가를 해봤자 나에게 돌아오는게 별로 없기 때문. "수백명 평가중에 나하나 없다고 뭐 평가가 달라지겠어? 귀찮어. 이거 맘에 안드네 뒤로가기." 등으로 이어지는 행동패턴들 때문일듯. 나에게 오는 incentive가 확실해야 평가를 할텐데, 개인화 된 추천의 경우 "나에게 더 맞는 추천이 올 수 있다.", "나랑 비슷한 사람들에게 내가 처음으로 추천을 해줄 수 있다." 등이 인센티브가 될듯. 따라서 이런 효과들을 사용자에게 잘 보여주는것, 행동을 유도하는 것도 필요. "평가가 별로 없어서 정확하지 않을 수 있습니다.", "당신의 평가 및 댓글이 몇명의 사용자에게 보여졌습니다. 그리고 그 중 몇명이 링크를 클릭해서 해당 컨텐츠를 즐겼습니다." 등
"완전 공감한다"는 코멘트와 함께 7점을 줄 경우도 있고, "이 제품 너무 좋다"란 코멘트와 함께 7점을 줄 경우도, "너무 잘 설명해놨다"란 코멘트와 함께 7점인 경우도 있을것이다. 선택지를 고르게 하는것도 좋겠지만, 이건 사용자에게 두번, 세번의 클릭을 요구하는 일이다. 사용자는 귀찮으면 얻는게 그 배 이상 없는한 안쓴다. 되도록이면 클릭수가 줄어야 한다.
내용이 너무 전문적이라 5점 정도만, 비슷한 내용이지만 쉽게 쓴 글이 있으면 7점 줄듯.
보통 평가를 하지 않는 이유는 평가를 해봤자 나에게 돌아오는게 별로 없기 때문. "수백명 평가중에 나하나 없다고 뭐 평가가 달라지겠어? 귀찮어. 이거 맘에 안드네 뒤로가기." 등으로 이어지는 행동패턴들 때문일듯. 나에게 오는 incentive가 확실해야 평가를 할텐데, 개인화 된 추천의 경우 "나에게 더 맞는 추천이 올 수 있다.", "나랑 비슷한 사람들에게 내가 처음으로 추천을 해줄 수 있다." 등이 인센티브가 될듯. 따라서 이런 효과들을 사용자에게 잘 보여주는것, 행동을 유도하는 것도 필요. "평가가 별로 없어서 정확하지 않을 수 있습니다.", "당신의 평가 및 댓글이 몇명의 사용자에게 보여졌습니다. 그리고 그 중 몇명이 링크를 클릭해서 해당 컨텐츠를 즐겼습니다." 등
"완전 공감한다"는 코멘트와 함께 7점을 줄 경우도 있고, "이 제품 너무 좋다"란 코멘트와 함께 7점을 줄 경우도, "너무 잘 설명해놨다"란 코멘트와 함께 7점인 경우도 있을것이다. 선택지를 고르게 하는것도 좋겠지만, 이건 사용자에게 두번, 세번의 클릭을 요구하는 일이다. 사용자는 귀찮으면 얻는게 그 배 이상 없는한 안쓴다. 되도록이면 클릭수가 줄어야 한다.
내용이 너무 전문적이라 5점 정도만, 비슷한 내용이지만 쉽게 쓴 글이 있으면 7점 줄듯.
How to update Similarity?
내가 새로운 content $c_k$ 를 평가한다. => $c_k$ 를 최근에 평가한 다른 user들 list 를 가져와서 내 neighbors 를 update.
More weight on Recent evaluations, or equivalantly Less weight on Old evaluations
Self-customized List Box
기본적으로는 핫이슈인것들. 평가가 많은 것, 높은 것, 최근 것들을 보여줄 필요도 있어보임. 분포도랑. 5점 만점이라면 점수=-2점 해서 쭉 더한 총합이 높은것들이 베오베인 식임. 어뷰징 걸러내는거 잊으면 안되고. 사용자가 판단이 안되도록 본인 점수는 항상 들어가긴 하도록.
사용자가 자신이 봇으로 여겨지고 있는지 사람으로 여겨지고 있는지는 모르게 하는게 좋을듯? 어뷰징 막는 측면에서도 그렇고, 실수로 일정기간 봇처리 되었어도 기분 안나쁘게. 실제 사람의 계정이면 악성유저가 아닌 이상 반드시 사람계정으로 인식되게 하는 시스템이 중요.
Blocking and Filtering the Abusing
특정 이익단체/집단이 평점을 조작할 가능성은 언제나 열려 있음. 개인화 된 추천이라 할지라도, 전체 평점 분포도 보이는 구조이고 대량으로 abusing이 들어오면 개인화 된 추천도 잘못 작동할 위험이 있음. 따라서 user가 실제 사용자인지, 특정 단체가 만든 bot인지, 한 개인이 여러개의 id를 만들어서 활동하는 것인지, 일정기간만 대충 활동하다가 사라진 비활성 계정인지 등을 가려내서 처리해주는 것이 필요함. user별로 몇단계 등급 (미확인, bot 의심계정, 실제 사용자) 정도로 나눠서 평점에 영향을 끼치는 정도를 나눠서 보여주는 것도 괜찮을듯. StackOverflow나 ilwar, 카페 같은 곳은 어느정도 활동이 있어야 투표를 할 수 있다던지 글을 쓸 수 있다던지, reputation 점수를 쌓을 수 있다던지 하는 방식으로 하는거 같은데 이런건 초기 유입을 막고, 새로운 유입도 막는 등 단점도 많아 보임.
즉, 평점 분포도를 보여줄 때 미확인 계정, bot 의심계정의 평점들은 따로 빼서 실제 사용자로 보이는 계정들이 매긴 평점들의 분포도를 보여주는 식으로 abusing에 대한 대응을 할수 있을듯. Server에 꽤 부담을 주는 방식 같기도 한데 (user의 등급이 바뀔때마다 이 user가 평가했던 것들에 대한 처리를 해줘야 하니), 이정도 투자는 해야 제대로 된 결과물을 얻을거 같은데... user가 자신의 등급을 볼 수 없게 해야할듯? 볼 수 있으면, bot 만드는 사람이 연구해서 bot이 실제 사용자처럼 연기하도록 만들기 쉬워질듯.
"어떻게 bot을 걸러낼까? 어떤 알고리즘을 짜야하나?"가 한가지 포인트이고, "걸러낸 뒤에는 어떻게 처리할 것인가?"가 두번째 포인트. 걸러내는 작업 자체가 100% 완벽할수는 없을테니 무작정 user를 차단하거나 몰아낼수는 없을듯.
역으로 bot을 이용해서 남들의 sim을 계산해 준다거나, 서비스에 필요한 각종 계산을 시킬수도 있을듯. user resource를 사용하기도 하지만, cloud computing이니 많을수록 좋긴함.
Merging multiple groups of evaluations which indicates the same content
같은 콘텐츠라고 할지라도 실수로 혹은 여러 이유로 인해 다른 content-id 에서 평가가 이루어 졌을 수 있다. 원본 링크로 평가가 이루어졌는데, 퍼온 곳의 링크로도 평가가 되는 경우가 대표적인 것일텐데, 다음의 경우도 그렇고 ㅍㅍㅅㅅ 같은 사이트들도 그렇고 원본을 자신들의 포멧에 맞게 재생산/재배포 하기 때문이다. 이 경우 두 군데에서 평가된 별점들을 merge 할 필요가 있다. Merge 처리 전에 양쪽에서 중복으로 평가를 한 사용자들도 있을 것이고. 이런 점들을 염두에 두고 설계를 해야할 것이다.
Less weight on old evaluations
시간에 따라서 평가가 달라지는 contents 들이 있다. 내용이 추가되고 수정되며 보강되면서 품질이 좋아지는 경우도 있고, 나중에 알고보니 잘못된 정보로 밝혀져서 초기에 좋게 평가되었던 것들이 이후 다시 저평가되는 경우도 많다. 따라서 이런 시간에 따른 평점변화, 평점통계를 처리해 주어야 사용자들에게 제대로 된 정보를 줄 수 있다.
Categorizing the contents (Default category, user's category, multiple categories)
기본적으로 유저를 귀찮게하면 안되니, default로 설정된 (나중에라도 category가 정해지면 업데이트) category로 정리를 해서 보여줌. 사용자보고 category를 고르라고 무리하게 요구하지 않음. 하지만 개인적으로 자신의 페이지를 정리하고 싶은 사람은 솔선해서 categorizing 할 것으로 예상됨. 이 때 한가지 contents가 여러 category에 들어갈수도 있을거임. 영화를 예로 들자면, "코믹영화"이면서 "누구 감독의 영화"이면서 "누구 배우가 나온 영화"일 것임. 어떤 글은 과학 관련이면서 경제 쪽에도 연관이 있을 수 있고, 정치적으로 엮여 있는 일들인 경우도 있음. 대표적인 category가 있긴 하겠지만, 사람마다 분류하는 방식마다 다르게 분류가 될텐데 사용자에게 이걸 선택할 자유를 주는 것이 좋아보임. 이런 선택 결과들에 따라 default category를 더 정확하게 update 할수도 있을테고. Multiple categories로 분류된 경우에는 어떻게 처리해줄지도/정리해줄지도 고민해봐야 함.
- 뉴스
- 과학
- 음식 (Food)
- 오락 (Entertainment)
- TV
- 드라마
- 예능
- 영화
- 게임
- TV
Plug-in and Widget for Any sites
위에 이야기 했던 "DISQUS / Facebook Reply Plug-in"과 "Twitter / Facebook / Google+ / Pinterest Widget"처럼 사람들이 글을 올릴 때 바로 공유(?우리의 경우 채점/평가)가 in-site에서 되도록 만들어주는 것이 중요함. 누가 귀찮게 url 입력하고 평가하고 댓글달고 하겠음. 글 작성자가 우리 plug-in을 안 넣었을 경우에는 따로 누군가가 우리 사이트에서 url 입력하고 평가해서 우리 database에 올려줄수는 있겠지만, 기본적으로 in-site plug-in들이 있어야만 쉽게쉽게 data들이 쌓일 것임. 더 많이들 사용하게 될테고. (자신의 contents가 평가받는 것을 싫어하는 사람들도 있을테니, 평가가 이루어졌다는 메일이나 댓글을 해당 url 관리자에게 보내주고 원치 않을 경우 내려주겠다는 메세지를 보내줘야 할듯. 이런 시스템이 있어야 의도치않게 누군가를 상처주고 하는 일들을 미연에 방지할 수 있을듯.)
aaa
Databases and Tables
어떤 자료들을 저장해 놓아야 할까? 이걸 잘 디자인 해놔야 제대로 돌아갈듯. Resizable Hash Table로 구성할 것인지, Resizable Array Table로 구성할 것인지도 핵심이 될텐데, 이건 SQL 같은 상용 프로그램 쓰면 맘대로 건들지 못할듯도??? (공부해 봐야 함.) Indexing으로 hash table이 만들어져서 access가 빨라지게 만드는건가?
Content 중심으로 table을 짤까, User 중심으로 table을 짤까도 중요 포인트인데... 둘 다 있어서 잘 연결되게 해야할듯?
예제: http://kipid.tistory.com/category/0 즐겨찾는 사이트들 - kipid's blog 7/7
How to Operate?
어떤식으로 동작하게 할지, 사용하게 될지를 미리 고민하고 세부사항을 고민해야 할듯? 큰 틀에서만 우선 정하고, 나중에도 고치기 쉽게 디자인한 후 우선 만들어야 할듯?
References and Related Articles
- Coursera – Introducing to Recommender System (Video Lectures), 2013, by Joseph A Konstan and Michael D Ekstrand (University of Minnesota).; 추천 시스템에 관한 online 강의.
- Ummae's blog - 국내에도 개인화 추천 서비스가 계속 나올까?, 2013-04-28; and Ummae's blog - Coursera - Introducing to Recommender System 시작, 2013-09-08; 개인화 추천에 관한 이야기.
- 스웨터's blog - 2008 추천시스템 연구동향, 2013-10-30, by 스웨터
- kth 개발자 블로그 - 추천 시스템 분석 – 어떻게 아마존과 넷플릭스가 당신의 취향을 예상하는가?, 2013-01-23, by 김정민; 원문: Deconstructing Recommender Systems - How Amazon and Netflix predict your preferences and prod you to purchase, 2012-09-24, by Joseph A. Konstan and John Riedl (미네소타 대학에서 컴퓨터 과학을 가르치치고 있으며 IEEE 에서 Senior Member와 Fellow로 활동중이다.)
- International Joint Conference on Artificial Intelligence - Tutorial: Recommender Systems, 2011-07-17, by Dietmar Jannach and Gerhard Friedrich; 추천 시스템에 관한 tutorial powerpoint. 2013년 것도 있는듯.
- Book - Recommender Systems An Introduction, 2011, by Dietmar Jannach, Markus Zanker, Alexander Felfernig, Gerhard Friedrich;
- Ex: 왓챠(Watcha) (개개인 맞춤형 영화 추천 서비스); Netflix (영화 streaming service 같은데 국내에서는 아직 서비스 안하는듯. 본 영화 및 준 평점에 따라 개인화 된 추천을 해주는듯.); Google and Youtube (검색 history 등을 분석해서 개인화 된 광고를 쏘는듯 함.); Amazon.com (구매내역이나 평가에 따라 맞춤형 제품추천.)
- IBM developer Works - Recommender systems, Part 1: Introduction to approaches and algorithms (Learn about the concepts that underlie web recommendation engines.), and Part 2: Introducing open source engines (Explore software for building a recommendation capability.), 2013-12-12, by M. Tim Jones;
- Incentive Based Ranking Mechanisms, 201?, by Rajat Bhattacharjee and Ashish Goel;
- Yahoo! Labs - A Game-Theoretic Analysis of Rank-Order Mechanisms for User-Generated Content, 2011-06, by Arpita Ghosh, and Patrick Hummel (Yahoo! Research); 인터넷 찾아보면 pdf 있음.
- Personalized Recommendation on Dynamic Content Using Predictive Bilinear Models, 2009-04, Wei Chu (Yahoo! Labs.) and Seung-Taek Park (Yahoo! Labs.)
- IW3C2 - Local Collaborative Ranking, 2014-04, by Joonseok Lee, Samy Bengio, Seungyeon Kim, Guy Lebanon, Yoram Singer
- Outsider's Dev Story - 크롬 개발자도구의 콘솔을 차단하는 방법, 2014-02-14; 보안에 관련된 부분. Javascript로 돌리거나 개인정보에 관한 데이터가 오갈때 보호를 해야할텐데, 어떤 방식으로 해야할까나?
Introducing
Examples of Personalized Recommendation
Related Papers
Related Techs
728x90
반응형
'[Recoeve.net]' 카테고리의 다른 글
Recoeve.net (3S|Slow/Sexy/Sincere SNS) 사용설명서/Manual (1) | 2023.11.27 |
---|---|
안산시 단원구 고잔동 이마트24 안산천남로점 유통기간 임박상품 무료나눔+(프린팅박스|PrintingBox, Recoeve.net 홍보) (5) | 2023.11.09 |
스타트업 경영해 나갈때 참조할 만한 글들 (0) | 2023.10.29 |
Auto Completion, and Fuzzy Search (2) | 2023.05.31 |
Recoeve.net page loading and scrollTop Error (0) | 2023.05.30 |
Exception: java.sql.SQLException: java.time.LocalDateTime to SQL type (0) | 2023.05.30 |
음식점 할인정보 정리 (App Surprise) (0) | 2022.12.30 |