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

本文涉及的产品
模型训练 PAI-DLC,5000CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 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 和我们交流更多有关与阿里云大数据平台实战的想法。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
14天前
|
人工智能 Cloud Native 数据管理
媒体声音|重磅升级,阿里云发布首个“Data+AI”驱动的一站式多模数据平台
在2024云栖大会上,阿里云瑶池数据库发布了首个一站式多模数据管理平台DMS:OneMeta+OneOps。该平台由Data+AI驱动,兼容40余种数据源,实现跨云数据库、数据仓库、数据湖的统一数据治理,帮助用户高效提取和分析元数据,提升业务决策效率10倍。DMS已服务超10万企业客户,降低数据管理成本高达90%。
|
16天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
30天前
|
机器学习/深度学习 监控 搜索推荐
电商平台如何精准抓住你的心?揭秘大数据背后的神秘推荐系统!
【10月更文挑战第12天】在信息爆炸时代,数据驱动决策成为企业优化决策的关键方法。本文以某大型电商平台的商品推荐系统为例,介绍其通过收集用户行为数据,经过预处理、特征工程、模型选择与训练、评估优化及部署监控等步骤,实现个性化商品推荐,提升用户体验和销售额的过程。
73 1
|
2月前
|
人工智能 分布式计算 DataWorks
连续四年!阿里云领跑中国公有云大数据平台
近日,国际数据公司(IDC)发布《中国大数据平台市场份额,2023:数智融合时代的真正到来》报告——2023年中国大数据平台公有云服务市场规模达72.2亿元人民币,其中阿里巴巴市场份额保持领先,占比达40.2%,连续四年排名第一。
200 12
|
2月前
|
人工智能 Cloud Native 数据管理
重磅升级,阿里云发布首个“Data+AI”驱动的一站式多模数据平台
阿里云发布首个AI多模数据管理平台DMS,助力业务决策提效10倍
321 17
|
2月前
|
SQL 人工智能 大数据
阿里云牵头起草!首个大数据批流融合国家标准发布
近日,国家市场监督管理总局、国家标准化管理委员会正式发布大数据领域首个批流融合国家标准GB/T 44216-2024《信息技术 大数据 批流融合计算技术要求》,该标准由阿里云牵头起草,并将于2025年2月1日起正式实施。
85 7
|
2月前
|
SQL 人工智能 大数据
首个大数据批流融合国家标准正式发布,阿里云为牵头起草单位!
近日,国家市场监督管理总局、国家标准化管理委员会正式发布大数据领域首个批流融合国家标准 GB/T 44216-2024《信息技术 大数据 批流融合计算技术要求》,该标准由阿里云牵头起草,并将于2025年2月1日起正式实施。
|
1月前
|
存储 机器学习/深度学习 分布式计算
大数据技术——解锁数据的力量,引领未来趋势
【10月更文挑战第5天】大数据技术——解锁数据的力量,引领未来趋势
|
3天前
|
存储 分布式计算 数据挖掘
数据架构 ODPS 是什么?
数据架构 ODPS 是什么?
41 7
|
3天前
|
存储 分布式计算 大数据
大数据 优化数据读取
【11月更文挑战第4天】
13 2

热门文章

最新文章