如何基于Spark进行用户画像?

近期,comSysto公司分享了该公司研发团队利用Spark平台解决Kaggle竞赛问题的经历,为Spark等平台应用于数据科学领域提供了借鉴。

主办方提供了一个包含5万个匿名驾驶员线路的数据集,竞赛的目的是根据路线研发出一个驾驶类型的算法类签名,来表征驾驶员的特征。例如,驾驶员是否长距离驾驶?短距离驾驶?高速驾驶?回头路?是否从某些站点急剧加速?是否高速转弯?所有这些问题的答案形成了表征驾驶员特征的独特标签。

面对此挑战,comSysto公司的团队想到了涵盖批处理、流数据、机器学习、图处理、SQL查询以及交互式定制分析等多种处理模型的Spark平台。他们正好以此挑战赛为契机来增强Spark方面的经验。接下来,本文就从数据分析、机器学习和结果等三个方面介绍comSysto团队解决以上问题的过程。

数据分析

作为解决问题的第一个步骤,数据分析起着非常关键的作用。然而,出乎comSysto公司团队意料的是,竞赛提供的原始数据非常简单。该数据集只包含了线路的若干匿名坐标对(x,y),如(1.3,4.4)、(2.1,4.8)和(2.9,5.2)等。如下图所示,驾驶员会在每条线路中出发并返回到原点 (0,0),然后从原点挑选随机方向再出发,形成多个折返的路线。

拿到数据后,comSysto公司的团队有些气馁:只看坐标很难表征一个驾驶员吧?!

信息指纹的定义

因此,在原始数据如此简单的情况,该团队面临的一个问题就是如何将坐标信息转换为有用的机器学习数据。经过认证思考,其采用了建立信息指纹库的方法,来搜集每一个驾驶员有意义和特殊的特征。为了获得信息指纹,团队首先定义了一系列特征:

  • 距离:所有相邻两个坐标欧氏距离的总和。
  • 绝对距离:起点和终点的欧氏距离。
  • 线路中停顿的总时间:驾驶员停顿的总时间。
  • 线路总时间:某个特定线路的表项个数(如果假设线路的坐标值为每秒钟记录的数值,路线中表项的个数就是线路的总秒数)。
  • 速度:某个点的速度定义为该点和前一个点之间的欧氏距离。假设坐标单位为米、坐标之间的记录时间间隔为1秒,该定义所给出的速度单位就为m/s。然而,本次分析中,速度主要用于对比不同点或者不同驾驶员。只要速度的单位相同即可,并不追求其绝对值。对于加速、减速和向心加速度,该说明同样成立。
  • 加速度:加速时,该点和前一点速度的差值
  • 减速度:减速时,该点和前一点速度的差值
  • 向心加速度:

其中,v为速度、r为曲线路径所形成圆的半径。半径计算需要用到当前点、之前和之后的若干个点的坐标信息。而,向心加速度是对驾驶员高速驾驶风格的体现:该值越大表明转弯的速度越快。

一个驾驶员所有线路的上述特征组成了其简历(信息指纹)。根据经验,城市道路和高速道路上的平均速度是不同的。因此,一个驾驶员在所有线路上的平均速度并没有很多意义。ecoSysto选择了城市道路、长距离高速道路和乡村道路等不同路线类型的平均速度和最大速度作为了研究对象。

数据统计:根据统计,本次竞赛的数据集中共包含了2700个驾驶员,共54000个线路的信息。所有的线路共包含3.6亿个X/Y坐标——以每秒记录一个坐标来算,共包含10万个小时的线路数据。

机器学习

在初步的数据准备和特征提取后,ecoSysto团队开始选择和测试用于预测驾驶员行为的机器学习模型。

聚类

机器学习的第一步就是把路线进行分类——ecoSysto团队选择k-means算法来对路线类型进行自动分类。这些类别根据所有驾驶员的所有路线推导得到,并不针对单个驾驶员。在拿到聚类结果后,ecoSysto团队的第一感觉就是,提取出的特征和计算得到的分类与路线长度相关。这表明,他们能够作为路线类型的一个指针。最终,根据交叉验证结果,他们选择了8种类型——每条路线指定了一种类型的ID,用于进一步分析。

预测

对于驾驶员行为预测,ecoSysto团队选择一个随机森林(random forest)算法来训练预测模型。该模型用于计算某个特定驾驶员完成给定路线的概率。首先,团队采用下述方法建立了一个训练集:选择一个驾驶员的约 200条路线(标为“1”——匹配),再加随机选择的其他驾驶员的约200条路线(标为“0”——不匹配)。然后,这些数据集放入到随机森林训练算法中,产生每个驾驶员的随机森林模型。之后,该模型进行交叉验证,并最终产生Kaggle竞赛的提交数据。根据交叉验证的结果,ecoSysto团队选择了10 棵树和最大深度12作为随机森林模型的参数。有关更多Spark机器学习库(MLib)中用于预测的集成学习算法的对比可参考Databrick的博客。

流水线

ecoSysto团队的工作流划分为了若干用Java应用实现的独立步骤。这些步骤可以通过“spark-submit”命令字节提交给Spark执行。流水线以Hadoop SequenceFile作为输入,以CSV文件作为输出。流水线主要包含下列步骤:

  1. 转换原始输入文件:将原有的55万个小的CSV文件转换为一个单独的Hadoop SequenceFile。
  2. 提取特征并计算统计数字:利用以上描述的定义计算特征值,并利用Spark RDD变换API计算平均值和方差等统计数字,写入到一个CSV文件中。
  3. 计算聚类结果:利用以上特征和统计值以及Spark MLlib的API来对路线进行分类。
  4. 随机森林训练:选取maxDepth和crossValidation等配置参数,结合每条线路的特征,开始随机森林模型的训练。对于实际Kaggle提交的数据,ecoSysto团队只是加载了串行化的模型,并预测每条线路属于驾驶员的概率,并将其以CSV格式保存在文件中。

结果

最终,ecoSysto团队的预测模型以74%的精度位列Kaggle排行榜的670位。该团队表示,对于只花2天之间就完成的模型而言,其精度尚在可接受范围内。如果再花费一定的时间,模型精度肯定可以有所改进。但是,该过程证明了高性能分布式计算平台可用于解决实际的机器学习问题。

本文作者:张天雷

来源:51CTO

时间: 2024-12-05 13:22:55

如何基于Spark进行用户画像?的相关文章

如何实现基于内容和用户画像的个性化推荐

基于内容和用户画像的个性化推荐,有两个实体:内容和用户.需要有一个联系这两者的东西,即为标签.内容转换为标签即为内容特征化,用户则称为用户特征化. 因此,对于此种推荐,主要分为以下几个关键部分: 标签库 内容特征化 用户特征化 隐语义推荐 综合上面讲述的各个部分即可实现一个基于内容和用户画像的个性化推荐系统.如下图所示: 标签库 标签是联系用户与物品.内容以及物品.内容之间的纽带,也是反应用户兴趣的重要数据源.标签库的最终用途在于对用户进行行为.属性标记.是将其他实体转换为计算机可以理解的语言关

基于用户画像的实时异步化视频推荐系统

前言 这个月做的事情还是蛮多的.上线了一个百台规模的ES集群,还设计开发了一套实时推荐系统. 标题有点长,其实是为了突出该推荐系统的三个亮点,一个是实时,一个是基于用户画像去做的,一个是异步化. 实时主要体现在三个层面: 1.用户画像中的的短期兴趣模型实时构建. 也就是你看完一个视频,这个视频几秒内就影响了你的短期兴趣模型,并且反应到你下次的推荐中. 2.候选集实时变更. 在我设计的推荐系统中,候选集的概念是不同类型的待推荐给用户的视频库,一个用户并不能看到某个候选集的全部,而是能够看到经过匹配

基于大数据技术的手机用户画像与征信研究

内容提要:手机用户画像是电信运营商实现"数据驱动业务与运营"的重要举措.首先,介绍了手机用户画像过程中对个人隐私保护的方法,然后分析手机用户画像的数据来源与大数据实现技术,最后,通过数据样本实例分析手机用户画像在个人征信中的应用. 引言 随着计算机网络技术的不断发展,"数据即资源"的大数据时代已经来临.用户画像是电信运营商为了避免管道化风险,实现"数据驱动业务与运营"的重要举措.用户画像与应用大数据技术对客户分类密切相关,是单个客户的众多属性标签

基于 阿里云 RDS PostgreSQL 打造实时用户画像推荐系统

标签 PostgreSQL , 实时推荐系统 , 用户画像 , 标签 , TAG , 比特位 背景 用户画像在市场营销的应用重建中非常常见,已经不是什么新鲜的东西,比较流行的解决方案是给用户贴标签,根据标签的组合,圈出需要的用户. 通常画像系统会用到宽表,以及分布式的系统. 宽表的作用是存储标签,例如每列代表一个标签. 但实际上这种设计不一定是最优或唯一的设计,本文将以PostgreSQL数据库为基础,给大家讲解一下更加另类的设计思路,并且看看效率如何. 业务场景模拟 假设有一个2B的实时用户推

用户画像系统的技术架构和整体实现

这里讲解下用户画像的技术架构和整体实现,那么就从数据整理.数据平台.面向应用三个方面来讨论一个架构的实现(个人见解). 数据整理: 1.数据指标的的梳理来源于各个系统日常积累的日志记录系统,通过sqoop导入hdfs,也可以用代码来实现,比如spark的jdbc连接传统数据库进行数据的cache.还有一种方式,可以通过将数据写入本地文件,然后通过sparksql的load或者hive的export等方式导入 HDFS. 2.通过hive编写UDF 或者hiveql 根据业务逻辑拼接ETL,使用户

(课程)基于Spark的机器学习经验

Hi,大家好!我是祝威廉,本来微博也想叫祝威廉的,可惜被人占了,于是改名叫·祝威廉二世.然后总感觉哪里不对.目前在乐视云数据部门里从事实时计算,数据平台.搜索和推荐等多个方向.曾从事基础框架,搜索研发四年,大数据平台架构.推荐三年多,个人时间现专注于集群自动化部署,服务管理,资源自动化调度等方向. 今天会和大家分享三个主题. 不过限于时间,第三个只是会简单提及下, 等未来有机会可以更详细的分享. 如何基于Spark做机器学习(Spark-Shell其实也算的上即席查询了) 基于Spark做新词发

如何用大数据给用户“画像”

对于移动运营商来说,经过多年的IT系统建设,大量的网络数据被积累下来.但是现有的IT系统和数据对于支撑网络运营工作还存在一些障碍,主要表现在:面对多样化需求,重复从底层进行大数据处理,处理环节多.难度大:留存数据主要以网络设备为中心进行存储和组织,无法反映用户真正的感知情况,无法支撑以用户为中心的网络运维:现有数据可视性和可用性较差,不能提供多样的数据开放手段,支撑一线业务人员的数据使用要求.这些障碍也是国内运营商网络部等业务部门普遍面对的问题. 为解决上述问题,同时响应中国移动集团全面转型到"

推荐系统那点事 —— 基于Spark MLlib的特征选择

在机器学习中,一般都会按照下面几个步骤:特征提取.数据预处理.特征选择.模型训练.检验优化.那么特征的选择就很关键了,一般模型最后效果的好坏往往都是跟特征的选择有关系的,因为模型本身的参数并没有太多优化的点,反而特征这边有时候多加一个或者少加一个,最终的结果都会差别很大. 在SparkMLlib中为我们提供了几种特征选择的方法,分别是VectorSlicer.RFormula和ChiSqSelector. 下面就介绍下这三个方法的使用,强烈推荐有时间的把参考的文献都阅读下,会有所收获! Vect

明确的目标用户:用户画像的创建步骤

文章描述:在产品研发过程中,确定明确的目标用户至关重要.不同类型的用户往往有不同甚至相冲突的需求,我们不可能做出一个满足所有用户的产品. 在产品研发过程中,确定明确的目标用户至关重要.不同类型的用户往往有不同甚至相冲突的需求,我们不可能做出一个满足所有用户的产品. 为了让团队成员在研发过程中能够抛开个人喜好,将焦点关注在目标用户的动机和行为上,Alan Cooper提出了Persona这一概念."赢在用户"这本书将其翻译为"人物角色",在腾讯我们习惯了使用"