# aps_reco **Repository Path**: mrytsr/aps_reco ## Basic Information - **Project Name**: aps_reco - **Description**: 工爸推荐系统 - **Primary Language**: PHP - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2015-06-16 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 工爸推荐系统说明 ## 工爸推荐系统架构图 ![工爸推荐系统架构图](http://7xjrpz.com1.z0.glb.clouddn.com/工爸推荐系统架构图.png) ## 数据架构 * 数据源于: 1.关联数据库 2.用户事件日志 3.人工输入 * 数据工程师根据业务需求分析数据,对数据建模,包括:回归分析,相关性分析等 * 构建数据产品原型并评估其效果,评估方式包括:专用对比程序,在线的分流或不分流的应用 * 如模型通过初步的评测被认为优于原先的方案,往下进行,否则重复以上两部直到得到满意的模型 * 优化程序性能并构建长期有效的,可人为干预的解决方案:包括方便运营人员使用的配置网页,高效可靠的定时执行脚本等 ## 应用架构 * 推荐引擎:用于存储进过分析,索引的数据以支持在线程序的高速索引。数据库可以是mysql,redis,memcache,程序使用php编写,往往仅是简单的查询适配器。常见的引擎有TopN,基于用户的协同过滤ubcf,基于物件的协同过滤ibcf,用户行为历史等 * 推荐产品:使用php编写的应用程序,如编辑推荐,同龄在听,猜你喜欢等,是推荐系统在和产品设计,客户端通讯时的最小单位。可以调用一个多多个推荐引擎来实现。如本次做的"相关列表"就可以同时整合ibcf引擎和TopN引擎。具体的组合方法和每个引擎对列表的影响程序取决于实际评测的效果。 * 物件细节:推荐系统仅提供物件的id列表和推荐理由,权重等推荐系统独有的信息,物件的其他详细信息(icon,描述等)需要通过物件细节得到。该部分目前由一张aps_audio表即相关php查询程序组成 * 反馈:如果是非实时反馈,只需要到原先的日志中去提取相关信息即可,否则需要架构相关服务来实现实时的反馈 ## 原型代码说明 |-- common.php # 共用代码 |-- compare.php # 对比页面 |-- compare_static.php |-- data.log # compare.php产生的统计数据 |-- engine.php # 推荐引擎,目前全部殷勤在一个文件中,以后会分开 |-- product_cnxh.php # 产品"猜你喜欢" |-- product_ibcf.php # 产品"基于物件的协同过滤" |-- product_rand.php # 产品"随机列表" |-- render_dump.php # 物件细节渲染器1 |-- render.php # 物件细节渲染器1 `-- storage.php ## 基于物件的协同过滤(ibcf)算法说明 * 找到所有对源物件有下载行为的用户 * 找到这些用户有过行为的物件 * 对这些物件进行去重并按照重复次数分配权重,出现次数越多权重越大 * 把上面得到的"物件-物件-权重"关联信息载入高速存储引擎(如redis) * 当客户端传入源物件以请求相关列表时,应用程序从高速索引中得到一个带权重的物件列表 * 应用程序对列表进行处理,如乱序,限制个数等,然后返回客户端 ## 需要其他部门协助的事情 * 产品:研究下其他的推荐做的成功的app,以提出适合工爸的方案,如:今日头条,脉脉,GooglePlay等(我本人就研究了很长时间,乐意分享下我的见解) * 客户端:用户的view事件的跟踪(类似http中的refer) * 服务器:分流,即可以向不同用发送不同算法的列表,并且这张列表的效果得到跟踪 * 运营:后期会需要至少一个运营人员关注推荐的效果并调整相关参数