摘要
推荐系统不是为了推荐而推荐,首先要聚焦解决什么问题,根据不同的业务场景来制定推荐业务,推荐系统并不是一个科技向善的系统。首先推荐系统是为了增加业务量而不是为了给用户实惠方便,是为了增加用户需求而不是仅仅为了满足用户需求(当然,这个也很重要),是为了增加信息壁垒而不是为了信息透明化,是为了给用户及时的心理暗示而不是为了百分百满足用户心理。
推荐系统的初衷是由于数据量逐渐增大,发生了信息过载,正是为了解决信息过载(Information overload)的问题,人们提出了推荐系统(与搜索引擎对应,人们习惯叫推荐系统为推荐引擎),将用户想要的信息推荐给用户。
而现代推荐系统不仅仅是为了解决信息过载的问题,如抖音,抖音的推荐系统是依据于不断的暗示来形成认知习惯的(就是说推荐给你的真的是你感兴趣的吗?真的是令你愉悦的吗?抖音的推荐不仅是对于兴趣需求的推荐,更多的是对于人性的分析)。比如对于一个很迷茫的打工人,抖音给他推荐的是让他坚定方向的,还是给他给多机会暗示给他紧张感的信息还是一下子让他豁然开朗的信息呢?
1 问题需求
1.1 主要问题
- 解决电商行业商品推荐的问题,也就是用户需要什么喜欢什么?
- 解决推荐系统模型设计问题,如何设计可以满足实时和非实时的推荐?
- 解决模型的保存问题,如何可以使模型满足工程化应用,即扩展性,业务系统非侵入性?
- 如何解决数据完整性问题,即模型的存储,如何在系统崩溃的时候保证数据不丢失?
- 如何进行系统的测试的,因为推荐我们并不知道推荐的结果是否是一个相对可靠的输出。
- …
1.2 人员组织
至少需要一个算法工程,一个大数,一个后台。由算法负责模型算法实践(最好算法能动基本的后台),再加一个大数据负责实时数据的抓取(如用户的搜索记录,用户行为等,最好需要大数据能单独做算法),所有数据最终汇总的后台模型,需要后台能处理总体全部数据,并且处理单个用户实时数据(需要后台能把控整个系统结构,后台需要业务系统最终接入)
1.3 工作边界
做推荐系统是一件很难的事,并非算法会算法后台会后台就能做成的事,要是算法不会mq,怎么接入实时数据,要是大数据不知道数据清洗怎么保证数据有效,不知道算法模型怎么做参照,后台不懂算法怎么去接入模型应用化,所以这一块的边界是在各自工作范围里需要懂得其他人员的工作结果并且能运用。
1.4 电商行业特点
电商行业相比传统门店即种类更加齐全,产品分类更加多,并且服务时间更长,需要仓储物流商品供应等等后台的支持,而电商实现营收和实体店并无区别,也是通过购买交易来获取利益,所以电商行业的推荐是按照用户的需要而定的,当然像国内阿里之类淘宝的推荐,是不是有的就算不想买东西也会逛下,最终剁手的,这个需要平台提供一些服务使用户养成使用习惯。
2 技术选型
都需要的必备能力,Git的使用,数据库操作,基本的网络请求响应操作,如果这些做不到的,只能做个小程序各玩各的,做不成系统。不过这些也不难,算是作为一个IT人员的基本能力的,最后要做出结果来还是没啥大问题。
2.1 算法
常用的算法工具包numpy,pytorch,pandas,sklearn等,其他的还涉及到必不可少的数据库操作等等。
import pandas
import pytorch
import numpy as np
from sklearn.cluster import **
2.2 大数据
流处理spark,kafka,数据库常用操作等等。
2.3 后台
springWeb系列,数据库等等。
3 系统设计
整个系统架构如下图所示。
- 数据来源(历史数据和实时数据),实时数据是指的用户行为(搜索,查看等等)
- 数据清洗(数据并非都是有效的数据,比如一个一百年没操作的用户你加载到模型里干嘛,做干扰吗?实时数据用户查的我*个大也要把这些实时数据搞进来吗?)
- 算法得出模型(模型是否可以支持单词修正,比如实时数据传入修改的只进行单个用户的模型怎么修正)
- 后台控制反转IOC,模型算法做出来,但是模型你叫算法去帮你维系这个模型,怕是不行把!到时候的服务怎么做,后台通过接口的方式将模型维系到后台?别问这波为什么这波神仙操作,难道指望Java,Go,或者PHP拿着算法跑出来的一个模型文件读出来然后模型就到内存里了?
- 外部服务接入,这儿就是其他业务系统通过推荐系统后台IOC做输入输出而已,比如输入是用户id,返回是一个商品列表的集合。
4 实现
系统实现太复杂,参考上述系统构建思路自行实现。
4.1 后台IOC
实现过程中有一个很重要的点就是后台模型IOC,即经过运算后更新模型由算法请求后台,后台接受到请求后将模型进行更新。这儿需要后台进行模型的预定义,即这个模型是长什么样的,先进行定义。
4.2 测试
推荐系统的测试的测试结果是比较难验证的,相比其他监督学习的结果推荐系统需要更多的体验的测试。
5 总结
推荐系统在整个公司框架中发挥着巨大的作用,可以通过推荐系统来夸大业务,来稳定用户,而推荐系统的实现往往需要投入很大的人力智力,上述情况是人员最精简的情况,这样对人员的要求也就极高,并且最后还需要为了验证推荐系统的准确可靠还需要大量的测试来进行验证,并且让用户体验来确认推荐的准确和可靠性,毕竟推荐系统的准确性是很难测试的,这个问题也是需要反复验证的。