首页 > 代码库 > 推荐系统实践小结 转

推荐系统实践小结 转

之前对于推荐,一直都仅限于理论书籍,浅一点像《集体智慧编程》《推荐系统实践》,复杂的像《数据挖掘》《机器学习》,当然也没看太深入。
当时对推荐系统的看法是,这是一个以算法为核心的系统,一切价值体现都在算法模型上了。不过这段时间有幸参与到真实系统,稍有改观。
下最近的一些想法吧,当然作为一个系统开发人员,理论算法方面的理解可能有点偏颇。
 
1.业务永远是第一位----------我们的本质是销售。
话说做推荐,和做营销的本质区别是什么?
还要说下销售和市场的区别,我个人理解市场和营销的区别在于市场是偏向于整体(如何定价,产品面向人群,广告投放),
而营销是偏向于个体(销售人员怎么卖)。所以推荐属于销售,产品规划和设计才是市场的事情。
 
宽泛的销售,相当于在大街上发传单。那么精准推荐就是说给你一个性化的解决方案,vip的服务。
因为计算机的copy能力是低成本的,而大数据处理能力刚好能将这种vip服务低成本的扩散到网络世界的每个长尾客户身上。
精准营销的目的是提高成单率,而精准推荐借助网络的长尾理论,不仅仅提高了成单率,也做大了盘子
 
继续聊业务逻辑。既然是卖东西,那么就从卖东西往下说,假设你是购物中心的一个小门店老板。
点击就是在广场中流动的人群,人潮涌动中,我们不断地吆喝着“快来看一看,买一买啊,走过路过不要错过啊”,那么你要注意什么:
 
第一个,作为一个老板,你要知道你产品的面向人群----------------用户分析。
三大哲学问题,你是谁,你从哪里来,又将要到哪里去?
对应下来就是用户画像分析,来源统计分析,效果统计(其实这里要包括崩失率,去向,转化率等)。
 
第二个,作为一个老板,你要知道季节潮流,进货渠道---------------热度。
每一个商品都是有其周期性的,而季节潮流对于小店可能至关重要。这里就设计到行为数据的统计(商品的浏览,曝光,点击,购买)。
如果熟知各种排行榜的热点,就清楚热度是需要衰减的,这可能用到一些算法:
牛顿冷却,贝叶斯平均,威尔逊区间。我也细讲不了算法层面的东西。
 
第三个,作为一个老板,你要熟悉店里的商品属性,懂搭配------------物品相关性
你要整理好商品详细目录。你要知道那一款上衣配那一款裙子比较合适。
涉及到相关性算法。怎么计算相关性,可以看皮尔逊系数,余弦等。
至于计算的维度,就跟商品相关了,比如化妆品,那么品牌的权重就需要调大。
 
第四个,作为一个老板,你要有一个老顾客电话本-------------------个性化
小店家是需要维护每一个顾客的联系方式,长时间不来,你要电话问下,对应下来就是定期邮件营销(EDM)。
如果你是大商家,那你只好分人群了,不然成本太大。
 
第五个,作为一个老板,你要招揽新顾客计划-----------------------社交化
虽然推荐本身就是个大的广告形式。但是你只在门口卖吆喝肯定是过时了,星巴克真功夫优衣库这种传统企业都开始微博微信营销了。
作为一个电商企业没有理由不用这种形势扩大自己的影响圈。
对应的就是基于SNS的推荐,当然隐私问题另论。
 
第六个,作为一个老板,你要知道店里的状况,为下步作参考------------数据闭环。
最重要的概率,没有之一,数据要形成闭环。
任何数据如果不形成闭环,是难于往下发展的。形成闭环后,整个系统才算完整搭建,当然如果到最后,这步能交给机器学习来实现,就完美了。
这里涉及到,ctr,转换率,成交金额。转换率是电商的重要指标,这些行为分析是提升未来销售的关键。
 
2.数据是第二位。
信息熵的定义是对不确定性的度量。强调的是不确定性,如果你知道明天要下雨,那么数据告诉你要下雨的信息熵就是0。
 
信息是有用的,但是数据不一定是有用的。从数据到信息的过程就是一个解码的过程,而业务逻辑就是数据的编码方式。
现在是大数据时代,每天弄个几T,几P数据存储下来,意义有多大(说的是数据挖掘,用来容灾备份的话另说),
如果告诉的都是我们已知的事情,那么就没有意义。
 
每一个公司最了解数据的肯定是其CFO,底层的财务会计等,但是谁敢说自己比老板清楚这个公司?
财务报表大家也能看,但是财务报表是不了解公司的终点,而是起点,是为了更深入了解公司的。
我们常说领导的视野会更高一点,反过来的意思就是我们懂数据,但是不懂业务,不懂商业,不懂管理。
业务,管理是皮,数据是毛,皮之不存,毛将焉附。
 
接下来说推荐系统的数据:
第一,用户数据
这个是基础数据,推荐系统存在之前就已经有了。
网站分析里做的就是人群细分,电商也是网站,这里涉及到的维度其实都是现实世界的映射:
年龄,性别,地域,兴趣,收入等等
 
第二,商品数据
这个也是基础数据,推荐系统存在之前就已经有了。没什么好讲的,就是品牌,价格等
 
第三,行为数据
这个是串联数据,将第一部分和第二部分关联起来。
包括用户和用户之间关联,商品和商品之间关联。
 
其实这三个数据以前的商业社会里都有,但是传统时代靠的是人脑和记事本,容量有限。
而一个好的商家是将这些数据带来的信息用到极致。
回想一下推荐系统经历的几个时代(可以看我前面的《集体智慧之概念介绍 》)
基于人口统计的推荐时代:这个时候靠的是历史,地理知识来关联人和人之间的信息,这里提信息的是统计数据,以及几千年来的历史地理知识。
基于商品内容的推荐时代:这个时候靠的就是产品专家们的人工分类, 这里提供信息熵的是专家们的专业知识。
协同过滤时代: 靠的是我们每次点击,带来的隐含信息。点击就是人和商品之间的关系, 点同一个商品就是人和人之间的关系。
 
一句话,我们主要要找的信息就是用户和用户之间的关系,商品和商品之间的关系,用户和商品之间的关系。
无论你用什么方式,用什么样的数据,你最后要得到的信息无非就这么几个维度。我们就是围绕这几点去竭尽所能地挖掘信息,并利用好。


3.算法是第三位
某位google的工程师曾说过:简单的算法+大量的数据  要远好于(>>)   复杂的算法+少量的数据。
 
看业界这几年,无论是豆瓣,亚马逊,淘宝,都在提精准推荐,还有热火的不能再热火的大数据。
似乎这个行业应该算是蓬勃发展了吧,可是细细看来,算法模型其实发展有限。大家挂在口边的还是协同过滤,社交化推荐。
 
这里说下自己的一个教训:
在实现系统的时候,因为有大量的计算和读取操作,为了节省一点cpu和内存,网络开销,就搞了个很复杂的算法,需要保存很多的中间数据结果。
实现文档写了几页,然后代码写了2000多行,实现后跑起来,性能上倒是没有什么问题的。
 
但还是碰到一个问题,没法跟踪数据。
做效果优化的时候,你是需要不停的从头到尾看数据的,看到底是哪个环节出了问题。结果太多的中间结果,而且是小的错误会被累计放大,
人反被系统整崩溃了。最后就改为简单实现方式(会很耗性能),但是做好数据的去噪后(不得不说这个环节相当重要),性能上也没有问题了。
 
业界这么多做算法的大牛,当然也是极其厉害的,不过越复杂就会要求特定的场景,这个对我等来说还是没有优化1,2来的迅速。
 
4.系统性能是第四位
系统同技术一样,只是解决问题的工具,不以解决问题的牛逼技术都是耍流氓。
举个例子,股票的程序化交易,相信很多做技术的人都能实现。但是如果没有一个有效的买卖规则,越实时越高效,可能亏损的越惨。
 
这里也是,如果你业务逻辑理不清,数据清洗不干净,样本抽取的有问题,系统是帮不了你的。当然做好了前面三样,性能就要考虑了。
第一点,无限大。 
这意味着无限细分, 也扩大了将整个市场盘子(长尾嘛)。
现亚马逊CEO Jeff Bezos的梦想“如果我有100万个用户,我就为他们做100万个亚马逊网站”。
越细分,理论上效果会越好。只是开发人员不能不考虑成本。
其实你考虑一下就会发现一个事情, 你想个性化,但是用户却想跟随潮流,你无限细分的意义呢?
 
第二点,实时
做到了细分,你肯定要考虑实时性,理论上也是越实时,效果越好。
作用有多大,这个看业务和用户群。
阈值是多少,这个也看业务和用户群。
但是想信不会有人把商品属性这个也来实时实现的。也不会说我们要求推荐数据的更新级别达到毫秒级。
你可以有变态的系统,但是你不希望有变态的用户吧?

总言之,系统总是根据你的用户来定义的。btw,安全不属于性能问题,推荐系统防恶意干扰不在性能讨论范围内。


推荐系统实践小结 转