[
  {
    "path": "README.md",
    "content": "## 推荐系统资料收集\n> Fire 2017.12.04 \n\n做了一个[推荐系统demo](https://github.com/fire717/RecommendationSystemDemo)：\n* 基于Surprise实现的具有完整功能的推荐系统服务，并利用flask框架实现了简单的接口调用\n* 封装了完整的更新日志数据、训练、根据id查询推荐结果等功能\n* 包含了常见的SVD、FM等算法\n\n### 0.主题式学习\n\n* [常见算法总结](./note/rec_algorithm.md)\n* [冷启动](./note/rec_coldstart.md)\n* [推荐理由](./note/rec_reason.md)\n* A/B测试\n* 实时推荐\n\n### 1.书籍\n* [集体智慧编程](https://book.douban.com/subject/3288908/) | [【代码】](https://github.com/fire717/Machine-Learning/tree/master/JTZHBC)\n* [推荐系统（[奥]D J）](https://book.douban.com/subject/24746415/) | [【笔记】](./note/《推荐系统[奥]DJ.AF》笔记.md)\n* [推荐系统实践](https://book.douban.com/subject/10769749/)\n* [深度学习推荐系统【2020】](https://book.douban.com/subject/35013197/)\n\n### 2.文章 / 专栏 / ppt\n* [推荐系统老司机的十条经验 / Xavier Amatriain](https://zhuanlan.zhihu.com/p/23847246)\n* [Netflix前推荐引擎总监Xavier在KDD2014上的压轴分享「The Recommender Problem Revisited」](https://wenku.baidu.com/view/ea8baee6e87101f69f3195aa.html)\n* [基于用户协同过滤与基于物品协同过滤的比较](http://blog.csdn.net/shenxiaoming77/article/details/51566481)\n* [21天搭建推荐系统：实现“千人千面”个性化推荐（含视频）](https://yq.aliyun.com/articles/39629)\n* [探索推荐引擎内部的秘密](https://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/index.html)\n* [推荐系统有哪些坑？](https://www.zhihu.com/question/28247353)\n* [个性化推荐系统的六个问题](http://www.52ml.net/569.html)\n* [deep learning 可以用来做推荐系统吗？](https://www.zhihu.com/question/20830906)\n* [社交网络为用户进行「个性化推荐」的做法，是否会导致人们「难以接触到意见相左的人」？](https://www.zhihu.com/question/46480353)\n* [专治选择困难症——bandit算法](https://zhuanlan.zhihu.com/p/21388070)\n* [MovieTaster-使用Item2Vec做电影推荐](http://lujiaying.github.io/2017/08/15/MovieTaster-%E4%BD%BF%E7%94%A8Item2Vec%E5%81%9A%E7%94%B5%E5%BD%B1%E6%8E%A8%E8%8D%90/)\n* [推荐系统实战之FM（Factorization Machine）算法——keras算法练习](https://www.jianshu.com/p/b838ec6afccf)\n* [推荐系统干货总结](https://zhuanlan.zhihu.com/p/34004488)\n\n### 3.论文\n* Deep Learning based Recommender System: A Survey and New Perspectives，SHUAI ZHANG，2017 | [【笔记】](./note/DL_RS.md)\n* A Survey on Recommendation System with Collaborative Filtering using Big Data，Sonali R. Gandhi，2017 | [【笔记】](./note/RS_CF_survey2017.md)\n* Survey on Recommendation System，Lipi Shah，2016\n* 推荐系统研究进展，朱扬勇，孙 婧，2015\n* Context-Aware Recommender Systems，Gediminas Adomavicius，2013\n* Toward the Next Generation of Recommender Systems: Applications and Research Challenges，Alexander Felfernig，2013\n* Performance of recommender algorithms on\ntop-N recommendation tasks，Paolo Cremonesi，2010\n* A Survey of Collaborative Filtering Techniques，Xiaoyuan Su，2009 | [【笔记】](./note/协同过滤学习记录.md)\n* 个性化推荐系统的研究进展，刘建国，2009\n* Introduction To Recommender Systems: Algorithms and Evaluation，ACM，2004\n* [知乎|推荐系统有哪些比较好的论文？](https://www.zhihu.com/question/25566638)\n* [推荐系统的循序进阶读物（从入门到精通）](http://blog.sciencenet.cn/home.php?mod=space&uid=210641&do=blog&id=508634)\n* [2016 RecSys 参会总结](https://www.douban.com/note/583716751/)\n* [RecSys 2017](http://www.recsyschallenge.com/2017/#dates)\n* [awesome-RecSys-papers](https://github.com/YuyangZhangFTD/awesome-RecSys-papers)\n\n### 4.现有产品\n现有产品一般都不会说明实现方式，大多数成熟商用的推荐系统都是混合型的。\n\n* [知乎|豆瓣 FM 的推荐算法是怎样的？](https://www.zhihu.com/question/19560538/answer/12228221\n)\n\n> 本来应该是另一个“不便回答”的问题。但有人盛情邀请，所以稍微说一下。豆瓣电台的私人电台会综合用户在豆瓣上的各种音乐行为做算法推荐。当然考虑最多的是电台本身的“红心”， “垃圾”， “跳过”这些数据。至于算法本身，在任何领域里，超出基本的普通推荐算法之后，就没有“亢龙有悔”一招打遍天下的东西。可以说全是细节。这个是不断积累、观察、学习、创造的过程，而且每天在持续变化。做推荐是在一条没有终结的马路上一边攒车一边开车，教科书、论文里的东西都是基本的零件，中间碰到各种奇奇怪怪的算法都可能被捡起来装到车上。Swiss army knife, yes.  Silver bullet, no.\n\n* [知乎|网易云音乐的歌单推荐算法是怎样的？](https://www.zhihu.com/question/26743347)(高票答案实际讲的在netflix推荐算法比赛获奖的潜在因子（Latent\nFactor）算法)\n\n* [Youtube 视频推荐|Deep neural networks for YouTube recommendations](http://blog.csdn.net/xiongjiezk/article/details/73445835)\n* [Netflix 电影推荐](www.infoq.com/cn/news/2013/04/netflix-ml-architecture)\n* 亚马逊/京东/淘宝 商品推荐\n* 豆瓣 电影/图书/内容推荐\n* 知乎 用户推荐\n* 豆瓣fm/网易云 音乐推荐\n* [微信朋友圈 广告推荐(斑马系统)](www.infoq.com/cn/articles/wechat-banma-dmp?utm_source=infoq&utm_medium=popular_widget&utm_campaign=popular_content_list&utm_content=homepage)\n* [微博推荐架构的演进](www.infoq.com/cn/articles/evolution-of-micro-blog-recommendation)\n* [Facebook如何向十亿人推荐东西](www.infoq.com/cn/news/2015/06/facebook-recommender-system)\n* [深度学习在美图个性化推荐的应用实践](https://zhuanlan.zhihu.com/p/87466510)\n* [阿里妈妈新突破：深度树匹配如何扛住千万级推荐系统压力](https://blog.csdn.net/cpongo3/article/details/89027848)\n\n### 5.工具\n* [Python推荐系统库Surprise](https://github.com/NicolasHug/Surprise)\n"
  },
  {
    "path": "note/DL_RS.md",
    "content": "## Deep Learning based Recommender System: A Survey and New Perspectives\n> Fire 2017.12.07\n\n### 为什么关注深度学习的推荐系统\n工业界：Recently, many companies resort to deep learning for further enhancing their recommendation quality [12, 17, 81]. Covington et al. [17] presented a deep neural network based recommendation algorithm for video recommendation on YouTube. Cheng et al. [12] proposed an App recommender system for Google Play with a wide & deep model. Shumpei et al. [81] presented a RNN based news recommender system for Yahoo News. All of these models have stood the online testing and shown signi cant improvement over traditional models.  us, we can see that deep learning has driven a remarkable revolution in industrial recommender applications.\n\n学术界：Another noticeable change lies in the research area.  e number of research publications on deep learning based recommendation methods has increased exponentially in these years.  e leading international conference on recommender system, RecSys1, started to organize regular workshop on deep learning for recommender system2 since the year 2016.  is workshop aims to promote research and encourage applications of deep learning based recommender system.\n\n### 分类\n* 神经网络模型：\n\t1. 使用单个深度学习技术：MLP, AE, CNN, RNN, DSSM, RBM, NADE and GAN based recommender system. \n\t2. 使用复合深度学习技术。\n\n* 融合模型\n\t1. 结合深度学习和传统推荐模型\n\t2. 结合不同的深度学习模型\n\n### 质量分析\n提到了最近几年的论文数量爆发性增长。分析了不同深度学习方法的数量，提到了常用的数据集和评价指标，以及最有名的一些出版源，还列举了一些应用领域。\n\n### 基于深度学习的推荐系统\n目标是阐述最显著的发展，而不是详尽的清单。\n\n* 多层感知机MLP。单独的 / 结合其他的\n* 自动编码机AE。单独的 / 结合传统方法（紧密连接的 / 松散连接的）\n* CNN\n* RNN\n* 受限玻尔兹曼机RBM\n* 涌现的新方法：NADE（神经自回归分布评估） / GAN\n\n### 深度组合模型\n* CNN+AE\n* CNN+RNN\n* CNN+MLP\n* RNN+MLP\n* CNN+DSSM\n* RNN+DSSM\n\n### 未来研究方向&开放问题\n* 深度理解用户和物品\n* 深度组合模型\n* 时间动态\n* 跨领域推荐\n* 多任务学习\n* 注意力机制\n* 规模化\n* 新的评测指标\n"
  },
  {
    "path": "note/RS_CF_survey2017.md",
    "content": "## A Survey on Recommendation System with Collaborative Filtering using Big Data\n> Fire 2017.12.07\n\n### 摘要\n任何推荐系统首选都是CF，但仅仅CF缺乏足够的扩展性和准确性。本论文呈现了一个结合推荐系统（比如CF）和大数据技术（比如规则挖掘）的模型。我们的主要目标是提供一个可扩展的健壮的且有一定准确率的推荐系统，我们的工作提出了通过考虑用户过去的行为的个性化电影推荐。\n\n### 内容\n大致介绍了CF及其问题，然后讲了在mapReduce的实现。\n\n引用了一篇论文研究解决扩展性和稀疏性问题，使用机器学习方法。作者建立一个混合方法，结合降维技术和聚类方法来提升传统基于用户的CF表现。\n\n* 我们的模型可分为几步：\n\t0. 非结构化数据通过预处理结构化，生成用户-物品矩阵；\n\t1. 形成一个权重矩阵；\n\t2. 应用联系规则挖掘，生成强联系规则来发现高频购买模式，通过确信度排序；\n\t3. 应用CF算法计算相似度，预测；\n"
  },
  {
    "path": "note/rec_algorithm.md",
    "content": "## 推荐系统常见算法总结\n> By Fire\n\n按自己的理解进行的分类。标注星号☆的是阿里云平台目前有的（2018.1.29）。\n\n### 1.基于静态信息的推荐\n通过用户登录来源或者相关账号绑定，获取用户之前的社交网站上的信息。与2人口统计学获取特征相区别。\n\n#### 1.1 直接获取用户喜好信息\n* 基本原理：利用用户之前的社交网站的信息直接获取用户喜好信息。\n* 例子：\n\t1. 用户使用微信登录，获取用户发过的朋友圈公开信息，提取与被推荐物品高度相关的信息，进行推荐。\n\t2. 用户使用微博登录网易云，发现发过喜欢begin again电影的状态，于是推荐主题曲lost star.\n\t3. 用户用微博登录，切关注了xx领域某个类别的一个大v号，则可以推荐该类别。\n* 优点：推荐准确。\n* 缺点：这种信息不好获取，且不是都能获取。需要一定的物品信息。\n\n#### 1.2 获取用户社交关系信息\n* 基本原理：利用用户之前的社交网站的信息直接获取用户好友信息。\n* 例子：用户使用微博/微信等登录，获取关注者、好友等信息，把好友的喜好推荐给用户。\n* 优点：推荐比较准确。\n* 缺点：好友信息不容易获取，且好友的喜好信息不一定有。\n\n### 2.基于用户特征的推荐（基于人口统计学的推荐）☆\n* 基本原理：通过用户的属性特征进行建模，比如年龄，性别等，把用户分为不同的人群，然后对同一类人群把该类人群的共同喜好推荐给新用户。\n* 优点：\n\t1. 不需要历史行为数据；\n\t2. 不需要物品的属性信息。\n* 缺点：\n\t1. 区分粒度很粗，效果不会特别好。\n\n### 3.基于物品内容的推荐 ☆\n* 基本原理：通过物品的属性特征进行建模，计算物品相似度，然后基于用户行为推荐相似物品。\n* 优点：\n\t1. 比较直观，物品属性维度越多越准确；\n\t2. 覆盖率广。\n* 缺点：\n\t1. 需要物品的属性信息；\n\t2. 物品相似度衡量只考虑物品本身，有一定局限，因为很多推荐内容有很强的主观性，比如音乐书籍电影；\n\t3. 需要一定的用户历史喜好信息。\n\n### 4.协同过滤 ☆\n* 基本原理：根据用户的历史行为数据计算用户或者物品的相似度(比如使用余弦相似度)，然后进行推荐。\n* 优点：\n\t1. 不需要任何的用户或者内容的属性特征信息\n\t2. 推荐效果的惊喜度、准确度、多样性较好\n\t3. 随着用户行为增多，推荐效果也会提升\n* 缺点：\n\t1. 需要大量、准确的用户行为数据；\n\t2. 冷启动问题（新用户/物品没有行为，也找不到类似用户）\n\t3. 灰羊问题（个别口味特殊的用户找不到口味类似的用户）\n\t4. 因为采用历史行为数据，不易修改，不够灵活\n\t5. 覆盖率较低（数据稀疏问题，很多物品没有行为）\n\n#### 4.1 基于用户的CF\n基于用户行为计算用户之间的相关性，再通过当前用户行为找到相似度高的用户，然后把他们喜欢的物品推荐给当前用户。\n\n#### 4.2 基于物品的CF\n基于用户行为计算物品之间的相关性，再通过当前用户对物品的行为对喜欢的物品找到相似度高的物品，然后推荐给当前用户。\n\n### 5.因子分解 ☆\n* 资料：\n\t1. [推荐算法学习-SVM，RSVM，ASVM，SVDPP学习公式推导](http://blog.csdn.net/chloezhao/article/details/53186665)\n\t2. [在Python中实现你自己的推荐系统-svd](http://python.jobbole.com/85516/) \n\t3. [Factorization Machines(FM论文)](https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf)\n\t4. [潜在因子算法](https://www.zhihu.com/question/26743347/answer/34714804)\n\n* 基本原理：对用户历史行为数据建立用户-物品评分矩阵，然后使用矩阵分解相关算法进行因子分解，得到低维稠密的用户特征矩阵和物品特征矩阵，然后两个矩阵相乘就可以得到估计的得分矩阵。\n* 优点：\n\t1. 可以处理一定的数据稀疏问题\n* 缺点：\n\t1. 很依赖历史行为数据量\n\t2. 速度可能会非常缓慢，并且计算成本比较高\n\t3. 物品相关推荐集更多的是基于行为，不太适合做详情页推荐\n\n### 6. 深度学习\n\n1. [基于电影海报的深度学习方法](https://www.leiphone.com/news/201705/rOD6wP779DLXx8mI.html): 其实也是基于内容的，只是用深度学习来获取海报图像的内容。\n2. [youtube视频推荐](http://blog.csdn.net/xiongjiezk/article/details/73445835): 整个推荐系统分为候选集生成（也称为搜索/召回）和排序两个阶段。其中召回阶段负责基于用户画像及场景数据从海量的视频库（百万级别）中将相关度最高的资源检索出来，作为候选集； 排序阶段负责基于更加精细的特征对候选集（百级别）进行排序，最终呈现给用户的只是很少一部分数据。\n3. [Deep Interest Network](https://www.jianshu.com/p/132da6864d40)|[开源代码](https://github.com/zhougr1993/DeepInterestNetwork)：代码质量一般，看issue效果也不敢保证，未尝试。\n4. [Wide&Deep](https://github.com/tensorflow/models/tree/master/official/r1/wide_deep)\n\n### 7.其它\n* [MovieTaster-使用Item2Vec做电影推荐](http://lujiaying.github.io/2017/08/15/MovieTaster-%E4%BD%BF%E7%94%A8Item2Vec%E5%81%9A%E7%94%B5%E5%BD%B1%E6%8E%A8%E8%8D%90/): 把Word2Vec迁移到item-based CF.这篇博文是根据豆瓣的豆列来做的。从自然语言序列迁移到物品集合，丢失了空间／时间信息，还无法对用户行为程度建模（喜欢和购买是不同程度的强行为）。好处是可以忽略用户－物品关系，即便获得的订单不包含用户信息，也可以生成物品集合。而论文的结论证明，在一些场景下序列信息的丢失是可忍受的。\n"
  },
  {
    "path": "note/rec_coldstart.md",
    "content": "## 冷启动\n> By Fire\n\n推荐系统冷启动主要分为：系统冷启动，物品冷启动，用户冷启动。\n\n目前常见方法：\n\n* 系统冷启动\n  1. 利用专家知识，给物品分类/打标签；\n  2. 从互联网上爬取数据。\n  \n* 物品冷启动\n  1. 利用内容信息，将它们推荐给喜欢过和它们相似物品的用户；\n  2. 利用物品特征，推荐给喜欢该类别的用户，做粗粒度的个性化。\n  \n* 用户冷启动\n  1. 利用用户社交网站的信息，获取好友，推荐好友喜欢的物品；\n  2. 利用用户社交网站信息，获取发过的状态，通过nlp等技术分析获取喜欢的物品，进行相关的物品推荐；\n  3. 利用隐式用户信息，比如社交网站的账号资料信息，手机设备信息，地理位置信息等等，获取用户特征，进行粗粒度推荐（通过热门物品的不同类别，或者专家人工设置好对应类别的推荐，或者通过爬取的数据进行机器学习分类聚类等）；\n  4. 利用显式用户信息，比如用户注册时填写的资料，进行粗粒度推荐；\n  5. 直接要求用户注册时回答一些问题，进行粗粒度推荐；\n  6. 直接先推荐一定数量的物品（热门物品、区分度高的物品等），让用户评价反馈，再进行个性化推荐。\n\n\n### 网站资料\n* [推荐系统冷启动](http://blog.csdn.net/huruzun/article/details/50912736)\n* [推荐系统中的冷启动和探索利用问题探讨](http://www.datagrand.com/blog/coldstartee.html)\n* [推荐系统中冷启动问题](http://blog.csdn.net/u013963380/article/details/73519212)\n* [推荐系统浅谈系列（三） - 冷启动问题](https://www.jianshu.com/p/97e46f933010)\n* [有哪些解决推荐系统中冷启动的思路和方法？](https://www.zhihu.com/question/19843390)\n\n### 论文\n* [Ling, Guang, et al. \"Online learning for collaborative filtering.\" Neural Networks (IJCNN), The 2012 International Joint Conference on. IEEE, 2012.](https://pdfs.semanticscholar.org/3848/5c7b4e991a67cda20c38062626a7637955b9.pdf)\n"
  },
  {
    "path": "note/rec_reason.md",
    "content": "## 推荐理由\n> By Fire\n\n### 前言\n给推荐系统加入推荐理由的主要目的是增加推荐系统的说服力，加强用户对推荐系统的信任感。进而增加推荐效果，提高转化率。\n\n#### 业界情况\n* 目前使用了推荐理由的推荐系统：亚马逊、豆瓣用户推荐。基本是根据物品内容来进行相关性推荐，比如购买了xxx的也喜欢yyy。豆瓣用户推荐只根据单一条目，比如“和你一样喜欢xxx”，而很多人标注过的电影、书有几百几千条，这样效果并不好。\n* 没有使用推荐理由的推荐系统：淘宝、京东、豆瓣电影、豆瓣fm、网易云音乐。基本都是“猜你喜欢”的形式。\n\n#### 基本分类\n* 静态推荐理由：每个人看到的都一样，比如“热销榜单前十”，“年度top10”，“喜欢推理的人也会喜欢这些”。\n* 动态推荐理由：随着用户行为变化。比如“购买了xx的60%的人也购买了yy”，“和你口味类似的人也喜欢这些”，“猜你喜欢”，“根据你的阅读喜好为你推荐”。\n\n### 目标\n1. 透明性:使推荐系统更加透明，是推荐理由的主要作用之一，也是评价推荐理由是否有效的重要标准。推荐理由能让用户理解生成推荐结果的计算过程，同时也可以解释一个物品比另一个物品更受欢迎的原因。\n\n2. 用户信任度:用户对推荐系统的信任程度通常是与透明性联系在一起的。用户通过推荐理由了解到当前推荐结果的产生原理，可以增强用户对系统推荐结果的信心，并且在推荐失误的情况下对错误结果更加宽容。建立起用户对推荐系统的信心后，用户会更倾向于继续使用这个系统；相反，在透明性不好的系统，用户的信任程度偏低，使用次数也会随之下降。\n\n3. 可理解性:可理解性是紧密关联透明性的另一指标。用户总是希望自己有最后的决定权，如果系统推荐的商品不满意，得有办法让用户改进它。对于这类需求，需要简洁地告诉用户系统的推荐逻辑，比如“因为你喜欢A所以给你推荐了B”，用户可以依此来修改兴趣列表，调整推荐结果。\n\n4. 正确性:基于推荐理由，用户可以比较自己的需求和实际提供的物品特性，从而确认推荐物品的质量，验证推荐结果的准确性。一个表达准确的推荐理由能够帮助用户使用户做出更明智更准确的决策。\n\n5. 高效性:高效性是指让用户快速地判断推荐结果是不是真的符合自己的兴趣。在实际应用中，我们通过计算用户与推荐系统的交互次数，或者用户使用推荐理由找到心仪物品的耗费时长，作为衡量推荐理由高效性的量化标准。\n\n6. 说服力:给出推荐物品的正面信息以打动用户，改变和强化用户对此物品的正面观点，使其接受推荐结果并进行点击、收藏或者购买等行为。说服力通常是从推荐系统或者销售方的角度出发，目的是获取更多利益。不过说服力和用户信任度是推荐系统需要权衡的两方面因素，过分追求说服力有可能会削弱用户的信任程度。\n\n7. 满意度:满意度是推荐理由设计的一个综合性指标，是针对整个推荐流程而言的。推荐理由使推荐结果看上去更加友好，提供更多的参考信息，极大的改善了用户体验。\n\n### 设计维度\n1. 产生方式\n\t* 白盒模式：透明性是推荐理由设计的重要指标。在白盒模式中，推荐理由能够直接反映推荐系统生成推荐结果所使用的具体方法，具有良好的用户体验。\n\t* 黑盒模式：黑盒模式隐藏了推荐过程的实现原理，会使用户体验有一定影响。采用黑盒模式的原因，主要包括基于保密原因不愿公开实现细节，或者是计算方式过于繁琐复杂，缺乏简洁直观的推荐理由使用户能够一目了然。\n\n2. 采用信息\n\t* 用户画像：生成推荐理由时考虑到用户的个体特性，譬如说基于用户的人口学特征、用户偏好以及用户的行为特征。\n\n\t* 物品信息：推荐理由的生成依赖于物品的特定信息。\n\n\t* 替代商品：推荐理由中包含了对替代商品的评价意见。\n\n3. 推荐算法:\n推荐系统的主流算法包括基于内容的推荐，协同过滤，和基于知识的推荐，对于不同的算法推荐理由有相对应的展现形式。\n\n### 注意事项\n1. 拼凑一些描述推荐物品优点的句子，通过这样的方式就可以产生物品的推荐理由。但是如此机械生硬的做法很容易让用户产生消极厌倦的情绪，难以获得用户对推荐系统的信赖。\n2. 无论是 CF，matrix factorization 还是 feature engineering, 基于统计机器学习的推荐算法基本都是“黑盒”模式的，虽然我们可以抽取出类似“75%购买了 A 商品的用户还购买了 B”，或者“影响购买 A 商品的因素是 F1，F2 和 F3” 这样从数据的角度来看很有说服力的结论，但这些是数据上的关联，相关性不等于因果性，相信大家都明白这个道理。用户对推荐理由的诉求是知其然还要知其所以然，而算法上，我们仅仅做到了前半部分。\n3. 无论怎样拼接和构造推荐理由，它看起来都像是机器产生的，远达不到朋友之间的推荐那种自然而然的效果，更像是个蹩脚的店员徒劳的向你推销些你早已知道的东西。推荐理由，说到底，是个人机交互的问题，不够友好、自然的方式，不会起到太好的效果。\n\n\n### 尝试方法\n1. 使用阿里云平台，每个算法单独设置一个场景；\n2. 做成对话式；\n3. 详情页面增加推荐理由和不推荐理由，用户写入，根据点赞数排序。\n\n### 参考资料\n> [让推荐系统变得会“说话” 推荐理由设计实践](http://www.sohu.com/a/86034850_163062)\n> \n> [推荐系统中的推荐理由实现，有什么好的思路吗？](https://www.zhihu.com/question/19576347)\n"
  },
  {
    "path": "note/《推荐系统[奥]DJ.AF》笔记.md",
    "content": "## 《推荐系统[奥]DJ.AF》笔记\n> Fire 2017.12.06\n\n### 1 基本概念\n#### 1.1 协同过滤推荐\n##### 1.1.1基于用户的最近邻推荐\n假设：1.用户过去有相似的偏好，未来也会有相似的偏好；2.用户偏好不会随时间变化。\n* 在基于用户的推荐系统中，皮尔逊相关系数更好；在基于物品的推荐中，余弦相似度更好。\n* 使对有争议的物品达成共识而不是广受欢迎的物品，可使用反用户频率iuf和方差权重因子。\n* 选择近邻。不必考虑所有近邻，以降低规模。实验显示20-50个近邻似乎比较合理。\n##### 1.1.2 基于物品的最近邻推荐\n适合线下预处理，思想是利用物品相似度,一般采用余弦相似度。据介绍亚马逊就是采用了物品协同过滤（2003）。传统基于用户的CF不能很好的适应大规模用户和物品。\n\n* 标度系统分级最优值依旧有待讨论。\n* 数据稀疏问题。冷启动是其特例。应对方法有扩展激活，缺省投票等。\n* 矩阵因子分解。SVD/潜在语义索引LSI/PCA。09年的nexflix竞赛表明很多参赛团队用到的高等矩阵因子分解方法对提高预测准确率有帮助。\n* 关联规则挖掘。是一种在大规模交易中识别类似规则关系模式的通用技术。例如“啤酒纸尿布”。\n* Slope One预测器。近来实际的方法和系统，虽然非常简单但也能得到适当的推荐质量。\n\n#### 1.2 基于内容的推荐\n文献中基于内容和基于知识的没有明确界限，有些学者认为内容是知识的子集，本书遵循传统分类。基于内容的特点是利用物品描述信息，基于知识推荐一般会有一些附加的因果知识来生成推荐，比如某个实用功能。\n\n* 内容表示和相似度。相似度有简单的0/1相似度，或者计算重叠度等，根据实际的问题各种测量方法都是有效的。向量空间模型和TF-IDF / TF-IDF一般很大且稀疏，可以使用技术让它们更紧凑：停用词和词干还原，精简规模，使用短语，局限是没有考虑上下文。\n* 基于内容相似度检索。最近邻，基于余弦相似度的knn，但knn一般比其他更复杂的技术精度低。/ 相关性反馈-Rocchio方法。/显示决策模型（决策树和规则归纳法） / 特征选择（基于卡方检验）\n* 对比评估：详细的算法笔记无法清晰分出胜负，但可以看到，决策树在既定条件下表现不突出，且最近邻在某些领域表现很差。贝叶斯和rocchio在所有领域都表现良好且没明显区别。且贝叶斯速度较快。还有一些提高分类性能的技术：特征管理，层级分类等。\n* 局限：浅层内容分析；推荐结果缺乏新颖性；获取评分。\n\n#### 1.3 基于知识的推荐\n可以解决类似于购买房，车因为数据少CF效果不好的问题。不需要评分就可以推荐，不依赖单个用户评分。\n\n两种基本类型：基于约束推荐/基于实例推荐。过程相似：用户必须指定需求，系统设法给出解决方案，及解释。\n\n（与我们产品关系不大，先跳过。）\n\n#### 1.4 混合推荐方法\n推荐问题通常可转换成效用函数rec，预测物品集合I中的物品i对整个用户集U中某个特定用户u的有用性，大多数应用中区间是0-1。\n\n* 混合设计。三种基本思想：\n\t1. 整体式：将几种推荐策略整合到一个算法中实现的混合设计。方案有特征组合，特征补充。\n\t2. 并形式：几种推荐系统独立运行，分别产生推荐列表，然后组合到最终推荐集合。并行策略有加权（加权求和），交叉（对应于阿里云同级权重），切换（对应于阿里云应用）。\n\t3. 流水线式：前一个推荐系统的输出变成后一个推荐系统的输入，后者也可以选择使用部分原始输入。策略有串联，分层。\n\n#### 1.5 推荐系统的解释\n解释用于沟通，一般为了商品的销售。推荐过程中提供解释的主要目的有：透明性（可以给用户更正错误假设的机会），正确性，可信度，说服力，有效性，效率（指帮助用户减少决策代价），满意度，关联度（解释为什么需要用户的额外信息），可解释性，教育（培养用户更好的理解产品领域）。\n\n在CF中，Herlocker2000的研究成果：\n1. 效果最好的解释界面根据的是邻近者；\n2. 推荐系统只是简单的说明movielens过去的表现就能达到仅次于最好的效果。\n3. 提到与其他备受好评的电影或著名演员的相似度。这种内容相关的理由也是最好的效果。\n4. 设计简陋的解释界面会降低用户听从推荐的意愿，甚至与基线实例相比也是这样；\n5. 有趣的是，利用领域权威，比如电影评论家的评分辅助推荐，并不会提高认可度。\n\n#### 1.6 评估推荐系统\n为了确保可以复现研究过程、验证结果，就必须完整的描述方法论，遵循系统的过程，而且要在评估应用的过程中将所有的决定记录下来。这就能回答如何研究的问题。此外，我们词啊用与衡量的标准（比如概念的有效性、可靠性、灵敏度）要与研究的实验对象本身密切相关，这就解决了研究什么的问题。\n\n### 2 最新进展\n#### 2.1 针对协同推荐系统的攻击\n简单的多注册几个账号然后给要攻击的目标特别好或者特别差的评分值，对大多数基于最近邻方法的实际系统并不奏效。只包含一个记录不会与任何其他用户记录相似。\n\n插入伪造记录也不容易，一是攻击者访问不到评分数据库，无法有效的构造和已有记录相似的结果。其次，邻近者规模很大时，少数的攻击记录影响不大。而要插入大量伪造记录，也不大容易：1.许多商业系统禁止自动插入记录；2攻击状况下通常会在相对较短的时间内生成许多用户记录，这可以被有防攻击意思的推荐系统轻易识别。\n\n* 攻击维度。目前有关推荐系统弱点的研究关注的都是单个物品的攻击模式。\n\t1. 目的：推举攻击/打压攻击；\n\t2. 代价：插入新纪录的代价\n\t3. 算法依赖：攻击是针对某种特定算法而设计的吗\n\t4. 可识别性：攻击有多容易会被系统管理员/自动检测工具或系统用户自己识别出来？\n\n* 攻击类型。\n\t1. 随机攻击：插入记录的所有物品会被赋以随机值，随机值服从数据库中所有评分平均值和标准差决定的正态分布；方式简单，但评估结果相比其他方法效果差。\n\t2. 均值攻击：每个物品平均评分被用来确定插入记录的评分值。在用户协同过滤上效果更明显，代价是需要额外的知识来确定评分值。\n\t3. 造势攻击：利用来领域内评分数据库的其他外部知识，目的是提高插入记录拥有更多近邻的机会。即让插入记录只包含非常热门物品的高评分，这样更有可能找到许多有类似主流选择的近邻。且代价较低，也不需要额外的评分知识。\n\t4. 局部攻击：识别出对与物品A相似的物品感兴趣的群体。比如对新物品《哈利波特》新书，攻击者需要在插入记录中包含其他热门魔幻类图书的正面评分。专门设计攻击基于物品的CF，对基于用户的CF也有效。\n\t5. 针对性打压攻击：上述攻击类型在原则上对太高和打压单个物品都适用，但实验结果显示大多数攻击类型对抬高物品更有效。Mobasher2007提出了专门的打压攻击类型（爱/憎攻击：目标物品赋予最小值，其他随机物品赋予最高的值；反向趋势：将目标物品与许多人都不喜欢的其他物品联系起来。）。\n\n* 点击流攻击和隐式反馈。之前的攻击都假设有一个显式收集评分的模块，还有隐式反馈的攻击，比如点击行为。（比如网站上的“浏览”）目前还没有特别好的对策。\n* 效果评估和对策。为了测量攻击的实际影响，O'Mahony提出了鲁棒性（测量攻击前后整体准确率的转变）和稳定性（攻击引起的被攻击物品评分预测值的改变）的衡量方法。Mobasher引入了其他两种，对于推举攻击，使用“命中率”表示目标出现在前N的频率，对于打压攻击，物品预测排名的变化被用于衡量的结果。 \n* 基于用户的CF，均值攻击和造势攻击都能显著误导推荐结果，当伪造3%数据时可以影响1.5的变化（5分制）；基于模型的CF，算法更加稳定，伪造15%影响0.15分。\n\n* 【对策】\n\t1. 使用基于模型的技术和额外的信息。尽量采用不只是依赖评分信息的推荐系统，还可以利用群体中不同参与者之间的信任信息。\n\t2. 提高插入成本。验证码，限制单个ip插入数量等。\n\t3. 自动探测攻击。自动探测出可以记录，比如“群托”。\n* 隐私方面——分布式CF\n\t1. 集中方法：数据扰动。先通过随机数据扰动模糊评分再发给中央服务器。\n\t2. 分布式CF：点对点的CF；模糊数据的分布式协同CF；预估一致方法的分布式CF；构建群体和聚集；\n\n#### 2.2 在线消费决策\n主要是电商推荐。\n\n* 努力-准确性框架\n* 构建偏好\n\n个性和社会心理学：\n\n* 控制点：人能够控制正在发生事件的总数，预先定义好的静态对话适用于那些对控制推荐过程没有特别兴趣的用户（外在控制点）；而更灵活的对话可以更好的支持对控制推荐过程非常感兴趣的用户（内在控制点）。\n* 结束的需求：指个人需要尽快做出决策，并得到还需要多少努力才能成功完成决策任务的反馈（比如问卷中的进度提示）。\n* 最大者和满意者：另外的两种基本的行为模式。最大者倾向于找出最优解，满意者会去搜索足够好方案，直到在可接受的阈值范围内找到一个方案。比如若用户一致关注产品专业特性的分析可归到最大者，可以给他更详细专业的解释。\n* 从众：推荐系统可以影响用户对物品的判断。用户界面对用户评分行为有很大的影响。\n* 信任。\n* 说服。\n\n#### 2.3 推荐系统和下一代互联网\n* 基于信任网络的推荐系统。用户可以声明一般情况下会信任其他某些用户及其观点。（设置大V，推荐电影，其他人可以关注订阅）\n* 大众分类法及其他。允许用户自己用关键词对物品注释，打任意标签，然后根据标签即可推荐。\n* 在分享媒体中推荐内容。\n* 本体过滤。通过分类改进过滤/ 通过属性改进过滤/ \n* 从网络抽取语义。语义信息可以提供方法改进推荐结果。\n\n#### 2.4 普适环境中的推荐\n* 上下文感知推荐。指系统已知的状态参数，比如位置，时间，用户状态等。\n* 应用领域：移动商务/ 浏览和访问指南 /文化遗产和博物馆导航 /家庭计算和娱乐/ \n\n#### 2.5 展望\n* 改进的CF\n* 上下文感知\n* 算法和技术的推荐\n* 用户交互问题/虚拟咨询\n* 推荐技术将会融入其他研究领域\n"
  },
  {
    "path": "note/协同过滤学习记录.md",
    "content": "## 协同过滤学习笔记\nFire 2017.12.05\n\n> 参考文献 A Survey of Collaborative Filtering Techniques，Xiaoyuan Su，2009\n\n### 1. 介绍\n基本假设：用户x和y评价n个物品的分数相似，或者有类似的行为，因此在其他物品上极有可能有相似的评价或者行为。\n\n两种CF方法：基于记忆的，基于模型的。\n\n1. 基于记忆的使用用户评价数据计算用户和物品间的相似性。已经成功商用，比如亚马逊（减少了用户的搜索工作，提高用户忠诚度，提高销量，更多广告收益，目标商品的促销）。特点是容易实现且高效。缺点有稀疏性等。\n2. 基于模型的CF克服了1的一些缺点，它使用纯净的打分数据来评估或者学一个用于预测的模型。模型可以是一个数据挖掘或者机器学习算法，例如贝叶斯信念网络/聚类/潜在语义/马尔可夫决策过程。\n\n同时除了CF，还有一个重要的类别：基于内容过滤。通过分析内容信息找到规律。他们都有所局限。\n混合推荐系统就是为了解决这些局限而提出的，组合不同类型的方法实现。\n\n### 2 CF的挑战\n* 数据稀疏性。它出现在几种情景下：\n\t1. 冷启动（新的用户/物品没有足够信息很难找到相似的）\n\t2. 覆盖率（推荐系统可推荐的物品比例）\n\t3. 减少覆盖（物品很多，用户评分很少）\n\t4. 邻居传递性（用户间评分物品没有交集）\n\t\n\t虽然有很多方法提出了（TAN-ELR/svd/pca/lsi），混合cf算法更好。额外的内容信息用于对新用户/物品产生推荐。\n* 可扩展性（看看mark的用户/电影数）。当用户/物品都达到百万级别时，即使O（n）的CF也很耗时，而且很多系统需要直接即时反应。SVD和增量SVD是一个办法。而基于记忆的CF比如基于物品的皮尔逊相关度CF算法可以在扩展性上有很好的表现。基于模型的CF都有一些办法应对扩展性问题，但是要权衡一个扩展性和预测准确性。\n* 同义字研究。基于记忆的CF把相同类型的不同名称看作没有联系。可以通过SVD，LSI进行一定的处理。\n* 灰羊。用户的意见和任何群体都不完全一致。黑羊，和群体相反的品味，几乎不能做推荐，但非推荐系统的人为推荐一样存在黑羊，所以这是一个可以接受的问题。Claypool提出了一个混合基于内容的CF系统，预测用户在两者之间的权重，使系统对每个用户有最佳的混合效果，有助于解决灰羊问题。\n* 欺诈攻击。在每个用户可以提供推荐的系统，人们可能给自己的物品给一大堆好评，给竞争者很多差评。研究发现基于物品的CF比基于用户的CF更少受影响。混合CF和模型CF都有一定的处理这个的能力。\n* 其他：用户隐私/增加的噪音数据/可解释性。\n\n### 3 基于记忆的CF\n* 相似度计算。根据两个用户都评价过的物品计算，有很多计算方法：\n\t1. 基于相关性的相似度：皮尔逊相关度/约束皮尔逊相关度/spearman rank相关度/Kendall‘s相关度\n\t2. 基于向量余弦的相似度\n* 预测和推荐计算。计算方法：\n\t1. 其他评分加权和\n\t2. 简单的加权平均\n* top-N推荐\n* 扩展：默认投票/反向用户频率/样例放大/imputation-boosted cf/权值主要预测\n\n### 4 基于模型的CF\n* 贝叶斯信念网络。扩展性比基于皮尔逊相关度的CF好，计算时间少一些，但准确率低一点。\n* 聚类CF算法。衡量相似性也用皮尔逊相关度或者Minkowski距离等。可扩展性好，复杂的计算都是离线的，但是推荐质量比较低，\n* 基于回归的CF算法。通过一些方法改进后的模型可以解决一些稀疏性的问题。\n* 基于MDP的CF。看作一个序列优化问题而使用马尔可夫决策过程。线上结果显示使用了MDP的比没有使用的效果要好。\n* 潜在语义CF算法。依赖于统计模型技术，引入了潜在类别变量来发现用户社群和用户评分概括。有更高的准确率和更大的扩展性。\n* 其他。应用中排序比分类更好，Cohen引入了一个双层排序学习CF模型。/基于联系规则的CF算法在top-N推荐中用的更多，/最大熵方法。/依赖网络。/决策树CF。/Horting。/MMFs。/概率PCA。/基于矩阵因子的CF。\n\n### 5 混合CF技术\n* CF+基于内容的特征。使用朴素贝叶斯作为内容分类，然后用预测值填补评价矩阵的缺失值，然后使用加权皮尔逊相关度计算预测结果。\n* CF+其他推荐系统。加权混合使用多个推荐算法，然后加权得到最终结果。权值可以调整。/交换混合设置一些优先级，这样当一个推荐系统无法做出有把握的推荐时，另一个就可以用来推荐。\n* 混合CF算法。混合基于记忆的和基于模型的。作为一个集成分类器准确率更高。代表有PMCF/PD.\n\n### 6 评测指标\n* MAE 平均绝对误差\n* EMSE 均方根误差\n* ROC曲线\n"
  }
]