5块钱低成本阿里云大数据生态协同过滤推荐系统实战

本文涉及的产品
交互式建模 PAI-DSW,5000CU*H 3个月
简介: 前情提要 人工智能千千万,没法落地都白干。自从上次老司机用神经网络训练了热狗识别模型以后,群众们表示想看一波更加接地气,最好是那种能10分钟上手,一辈子受用的模型。这次,我们就通过某著名电商公司的公开数据集,在阿里云大数据生态之下快速构建一个基于协同过滤的推荐系统! 推荐系统大家都不陌生,早就已经和大家的生活息息相关。

前情提要

人工智能千千万,没法落地都白干。自从上次老司机用神经网络训练了热狗识别模型以后,群众们表示想看一波更加接地气,最好是那种能10分钟上手,一辈子受用的模型。这次,我们就通过某著名电商公司的公开数据集,在阿里云大数据生态之下快速构建一个基于协同过滤的推荐系统!

推荐系统大家都不陌生,早就已经和大家的生活息息相关。从淘宝天猫的猜你喜欢,到抖音快手的向你推荐,再到新浪微博的热点推荐,推荐系统让大家又爱又恨。可是这无数的推荐系统背后的原理到底是如何构成的?今天就让数据科学老司机带你一起在5块钱以内构建一个基于协同过滤的推荐系统,为你揭开数据的秘密。

afdf23cffbf3f803015f337b287ce6b5

常见推荐系统原理

在开始之前,我们先讲讲常见的推荐系统的原理:

  1. 基于热度的推荐系统: 最简单,但是也是最不个性化的。典型的案例就是 bilibili 的日/周/月榜
    Bilibili_
  2. 基于内容的推荐系统: 基于内容描述的推荐系统
    Bilibili_
  3. 基于协同过滤的推荐系统: 基于用户相似度的推荐系统
    _

但是用户和用户之间的相似度是如何定义的呢?其实这个数值的计算方式有很多种。这一次我们选择一个相对简单易懂的计算方式: Jaccard相似系数 具体计算公式如下

Jaccard

给定两个集合A,B,Jaccard 系数定义为A与B交集的大小与A与B并集的大小的比值。Jaccard 距离越大,样本相似度越低。也就是说 如果2个用户的 Jaccard 得分为越高,这两个用户越相似。反之同理。

那么原理就说到这里,然后我们就进入实战环节。整个实验的架构图如下:

_

数据集解读

这一次我们选择从 UCI 开放数据集中的 在线购买商品数据集 来作为案例。这个数据集有 2010 年 1月 12日 到 2011年 9月 12日的一家 英国的网上电商所有的交易数据。这家公司主要是出售各种各样神奇的小礼物的。我们这里可以用天池的Notebook(免费的)来做一个简单的EDA和数据清洗。大家也可以直接下载我为大家准备好的数据清洗代码和数据集 下载之后直接运行 EDA_CN.py 即可。当然也可以看一下里面的Notebook。

载入数据集之后,我们可以看到我们的数据一共有55万条记录左右。
_

但是再仔细观察一些,发现空值还是很多的
_

我们可以丢弃这些空值,然后再重新导出数据集。
_

导出之后,我们可以随便找一台能够链接外网的 ECS 实例,把数据上传上去。我这里个人推荐可以用 FileZilla ,免费好用。阿里云的ECS是按月付费的,我们可以先短暂购买一下,用完之后释放就可以了。一个2核8G基础的ECS实例成本平摊到每天也就 2 块钱不到,远低于我们的 5块钱的经费。

_MEME

服务开通 - 开通 PAI 和 DW(DataWorks)

准备好数据集之后,我们就可以开始准备我们在阿里云大数据平台上的环境配置了。可以先参考这个 PAI开通流程 开通 机器学习 PAI,并且创建可视化建模服务。完成之后,我们如果登陆 PAI 工作台DataWorks控制台 应该就可以看到我们刚刚创建的工作空间了。

DW 添加数据源 + 数据集成 + 验证

确认完工作空间创建之后,我们先登陆 DataWorks控制台 来进行数据集成,把我们刚刚清洗好的数据给上传到 MaxCompute 里面。

_

进入工作空间后,我们可以参考 FTP 数据源配置 先配置一个FTP数据源。

_

创建完成之后,我们在回到控制台,进入数据开发。
_

进入之后,我们可以跟着系统的引导,创建一个业务流程。比如我这里就创建了一个名为 测试 的业务流程
_

创建完毕之后,我们可以双击数据集成,然后创建一个新的数据集成任务。选择我们刚刚添加的数据源,以及对应的表。这里我们可以先通过在数据开发中运行如下的 SQL 来创建一张我们的表。

-- 创建数据源
CREATE TABLE IF NOT EXISTS  uci_e_commerce_data_clean  (

InvoiceNo       STRING COMMENT 'InvoiceNo',
StockCode       STRING COMMENT 'StockCode',
Description     STRING COMMENT 'Description',
Quantity        BIGINT COMMENT 'Quantity',
InvoiceDate     STRING COMMENT 'InvoiceDate',
UnitPrice       DOUBLE COMMENT 'UnitPrice',
CustomerID      DOUBLE COMMENT 'CustomerID',
Country         STRING COMMENT 'Country'

)
COMMENT 'UCI E-Commerce DATASET '
lifecycle 36000;

然后我们再完成我们的数据集成配置。
_

选中我们刚刚创建的 uci_e_commerce_data_clean 之后,下方应该会自动出现表名匹配的界面。
_

然后再拉到地步看一下通道控制,这里我们用默认的就可以了。然后我们按下左上方的运行按钮,就会看到我们任务开始运行了。等到跳出的日志显示任务完毕之后,我们可以在左侧的公共表中看一下,验证我们的数据上云是否成功。
_

能看到数据就说明我们的数据已经成功的从我们的ECS里面到我们的MaxCompute环境了。接下来就是构建我们的协同过滤模型的事情了。

PAI构建模型

首先,我们登陆到我们的 PAI 工作台,进入我们刚刚创建的 PAI-Stuido 实例。进入实例之后,我们新建一个实验。
_

然后打开这个实验,我们可以从左侧数据源内搜索我们刚刚迁移到MaxCompute到表名,然后将它拖入主界面。然后我们再拖入SQl组件来做好数据类型的转换。SQL内容如下:

-- 类型转换
select  
    cast(cast(customerid AS BIGINT) AS STRING) customerid,
    REPLACE(description, ' ', '-') description
from    
    ${t1} 
;    

完成类型转换之后,我们就可以拖入我们的协同过滤算法了,并为其设置好相对应的字段。
_

同时我们可以吧参数也更改一下,因为保留2000个最相近的物品对我们来说计算量有些太大,而且也没必要。
_

最后我们再添加一个SQL组件来把协同过滤组件计算出来的结果全部读取出来 语句为
SELECT * FROM ${t1};,看一下长什么样。整个实验的图现在应该为如下:

PAI_

确认无误之后,我们点击开始运行实验,就可以看到我们的实验正在运行了。等实验运行完毕之后,我们可以右键点击我们的最后一个SQL组件来查看结果数据。数据结果如下:

SQL_

图上标红的就是我们计算结果存储的表名。接下来我们就可以进行清洗这个结果数据,将它部署为一个接口服务。

生成接口服务

我们先进入Dataworks的控制台,找到我们之前用过的工作空间。进入数据开发,然后用SQL语句来创建一张关系表来存放我们之前计算出来的结果。

CREATE TABLE IF NOT EXISTS `uci_ecommerce_recommendation` (
    `origin_product_name` string,
    `match_product_name` string,
    `coefficient` double
) ;

然后我们再使用如下的sql语句,将之前计算出来的结果转存储到这个表里面。

INSERT INTO uci_ecommerce_recommendation(origin_product_name, match_product_name, coefficient)
SELECT
    foo.itemid as origin_product_name,
    split(foo.sim,':')[0] as match_product_name,
    split(foo.sim,':')[1] as coefficient
FROM (
    SELECT  
        itemid,
        sim
    FROM 
        pai_temp_82363_1078761_1 -- 这里写查看数据的时候的那个表名     
    lateral view explode(split(similarity,' ')) similarity AS sim 
) foo

运行完毕之后,我们可以通过如下语句来检查是否成功插入数据

SELECT 
    * 
FROM 
    uci_ecommerce_recommendation
ORDER BY
    coefficient DESC
LIMIT 100

运行之后应该会看到如下结果:
_

完成之后,我们就可以开始配置我们的接口服务了。整个思路是我们会传入一个物品的名称,以及最相关的多少个商品数量N。首先我们去创建一个 Lightning 数据源,来查询我们这个MaxCompute中的数据。创建Lightning的方式可以参考这个 其中Lightning的 Endpoints 列表可以参考这里

创建完毕之后,我们就可以进入数据服务
_

然后我们以脚本模式创建接口。
_

创建完毕之后,我们点击左侧的API列表,进入这个服务。在选择表的时候 数据源类型选择为 Lightning,数据源名称就选择我们刚刚创建的。然后在下方的sql区域内写入

SELECT 
    match_product_name,
    coefficient
FROM 
    uci_ecommerce_recommendation
WHERE
    origin_product_name = ${origin_product_name}
ORDER BY coefficient DESC
LIMIT ${k}

然后点击右侧的请求参数,设置我们的请求参数类型。
_

配置完毕后,我们点击右上角的测试,输入一个物品的名字和多少个最相关的物品数量,就可以得到结果了

API_

这样我们就低成本的完成了一个协同过滤系统从数据探索,集成,模型构建到接口的构建。整个流程花费还不到5块钱,有想法的同学也可以一起试试。同时也欢迎加钉钉群 23304116 和我们交流更多有关与阿里云大数据平台实战的想法。

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
22天前
|
关系型数据库 分布式数据库 数据库
成都晨云信息技术完成阿里云PolarDB数据库产品生态集成认证
近日,成都晨云信息技术有限责任公司(以下简称晨云信息)与阿里云PolarDB PostgreSQL版数据库产品展开产品集成认证。测试结果表明,晨云信息旗下晨云-站群管理系统(V1.0)与阿里云以下产品:开源云原生数据库PolarDB PostgreSQL版(V11),完全满足产品兼容认证要求,兼容性良好,系统运行稳定。
|
4月前
|
Java
dockerfile打包阿里云镜像 springboot实战项目(阿里云镜像仓失败 处理)
dockerfile打包阿里云镜像 springboot实战项目(阿里云镜像仓失败 处理)
|
3月前
|
机器学习/深度学习 自然语言处理 搜索推荐
阿里云向量检索服务:重塑大数据检索的未来
阿里云向量检索服务是一款强大且易于使用的云服务产品,专为大数据检索而设计。通过深度学习模型和高效的索引结构,该服务提供了快速、准确的检索能力,适用于多种业务场景。在评测中,我们对其功能、性能和业务场景适配性进行了全面评估,认为其具有出色的性能和良好的业务场景适配性。未来,阿里云向量检索服务有望持续发展和创新,拓展更多应用领域,为用户带来更加卓越的体验。
1484 5
|
3月前
|
搜索推荐 算法 前端开发
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
97 4
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
|
4月前
|
分布式计算 运维 DataWorks
松柏之志,下聚百川-松下中国阿里云大数据实践
松下集团在中国及东北亚地区拥有有64家法人公司,员工人数约4万人,业务范围涉及研究开发,养老、铸件、汽车、车载、能源、电池等多个方面,这些多元化的业务组合为松下常年可持续性发展提供坚实保障。中国地区的松下已有30多年的历史,集合了研发、生产、制造、流通、销售、服务于一体。 互联网浪潮下,松下作为百年传统制造业企业,在务实的坚实基础上进行创新,本文将围绕数字化改革中所遇挑战,松下数据治理实践及未来期待三部分进行说明。
101545 13
松柏之志,下聚百川-松下中国阿里云大数据实践
|
11天前
|
存储 缓存 Java
阿里云OSS实战从入门到大神
说起阿里云OSS,那作用和功能都是非常强大的,它可以存放图片,音频,视频等资源文件,这些资源文件,你不必存放到服务器的硬盘里,这样既可以节省服务器硬盘空间,又可以降低服务器的读写压力,非常适合大并发的架构。
52 0
|
17天前
|
机器学习/深度学习 分布式计算 数据挖掘
阿里云 MaxCompute MaxFrame 开启免费邀测,统一 Python 开发生态
阿里云 MaxCompute MaxFrame 正式开启邀测,统一 Python 开发生态,打破大数据及 AI 开发使用边界。
196 1
|
1月前
|
人工智能 Cloud Native 安全
阿里云携手用友,共话企业服务生态新未来
3月2日,以“数无限 智无边 融无界”为主题的2024用友全球生态大会在北京召开。用友集中展示了用友BIP生态的新实践、新成果,并发布2024生态策略。阿里云参展并共同见证这一重要时刻,共话企业服务生态新未来,共同加速构建全球领先的企业数智化生态。
|
1月前
|
人工智能 DataWorks 数据可视化
心动基于阿里云DataWorks构建游戏行业通用大数据模型
心动游戏在阿里云上构建云原生大数据平台,基于DataWorks构建行业通用大数据模型,如玩家、产品、SDK、事件、发行等,满足各种不同的分析型应用的要求,如AI场景、风控场景、数据分析场景等。
334 1
|
2月前
|
人工智能 分布式计算 大数据
重磅!阿里云在海外市场推出系列AI大数据产品
重磅!阿里云在海外市场推出系列AI大数据产品
90 1