机器学习在高德起点抓路中的应用实践

导读:高德地图作为中国领先的出行领域解决方案提供商,导航是其核心用户场景。路线规划作为导航的前提,是根据起点、终点以及路径策略设置,为用户量身定制出行方案。

起点抓路,作为路线规划的初始必备环节,其准确率对于路线规划质量及用户体验至关重要。本文将介绍高德地图针对起点抓路准确率的提升,尤其是在引入机器学习算法模型方面所进行的一些探索与实践。

什么是起点抓路

首先,我们来简单介绍一下什么是起点抓路。起点抓路是指针对用户发起的路线规划请求,通过获取到的用户定位信息,将其起点位置绑定至实际所在的道路。

从高德地图App可以看到,用户进行路线规划时选择起点的方式有以下三种:

1.手动选点(用户在地图上手动标注所处位置)。

2.POI选点(Point of Interest,兴趣点,在地理信息系统中可以是商铺、小区、公交站等地理位置标注信息)。

3.自动定位(通过GPS、基站或WiFi等方式自动定位所在位置)。

三种方式中,用户手动选点及POI选点这两种方式的位置信息相对准确,起点抓路准确率相对较高。

而自动定位起点的方式,由于受GPS、基站、网络定位精度影响,定位坐标易发生漂移,定位设备抓取的位置与用户实际所处道路可能相差几米、几十米甚至几百米。如何在有限信息下,将用户准确定位到真实所在道路,就是我们所要解决的主要问题。

为什么要引入机器学习

引入机器学习之前,起点抓路对候选道路的排序采用了人工规则。核心思路是:以距离为主要特征,结合角度、速度等特征,加权计算得分,进而影响排序,人工规则中所涉及到的权重及阈值等是经综合实战经验人工拍定而成。

随着高德地图业务的不断增长,规划请求数量及场景的增多,人工规则的局限性越来越明显,具体表现在以下方面:

•即使包含了众多经验在内,人工设定的阈值、权重仍不够完善,易发生偏移或存在盲区是不可改变的事实。
•策略维护方面,面对上游数据的更新,新特征无法用最快速度加入到策略中。
•人工规则拍定对经验要求较高,对于人员的更迭,很难做出最敏捷的响应。

在大数据和人工智能时代,利用数据的力量代替部分人力工作,实现流程的自动化,提高工作效率是必然趋势。

因此,基于起点抓路人工规则的现状及问题,我们引入了机器学习模型,自动学习特征与抓路结果之间的关系。一方面,拥有大量规划及实走数据,对于机器学习模型的训练数据获取,高德有天然优势;另一方面,机器学习模型有更强的表达力,能够学习到特征之间的复杂关系,提高抓路准确率。

如何实现机器学习化

回归机器学习本身,下面来介绍我们如何建立起点抓路机器学习模型。一般来讲,运用机器学习方法解决实际问题分为以下几个方面:
•目标问题的定义
•数据获取与特征工程
•模型选择
•模型训练及效果评估

1.目标问题定义
在引入机器学习模型之前,需要将待解决问题进行数学抽象。

分析起点抓路问题,如上图所示,我们可以看到当用户在A点发起路线规划请求时,其定位位置A所对应的周边道路是一个独立的集合B,而用户所在的实际道路是这个集合中的唯一一个元素C。

这样,起点抓路问题转化为在定位点周边道路集合中选出一条最有可能是用户实际所在的道路。

整个过程类似搜索排序,因此,我们在制定建模方案时也采用了搜索排序的方式。

i.提取用户路线规划请求中的定位信息A。
ii.对定位点周边一定范围内的道路进行召回,组成备选集合B。
iii.对备选道路进行排序,最终排在首条的备选道路为模型输出结果,即用户实际所在道路C。

最终,我们将起点抓路定义为一个有监督的搜索排序问题。明确了需要达到的目标,我们开始考虑数据获取及特征工程问题。

2.数据获取与特征工程
业界常言,数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限。可见对于项目最终效果,数据和特征至关重要。

训练起点抓路机器学习模型,我们需要从原始数据中获取两类数据:

•真值数据,即用户发送路线规划请求时实际所处道路信息。

机器学习应用于起点抓路项目,第一个问题就是真值数据的获取。用户在某个位置A发起路线规划请求,由于定位精度限制,我们无法确认其实际所在位置,但如果用户在发起规划请求附近有实走信息,可以将实走信息匹配到路网生成一条运动轨迹,通过这条轨迹我们就可以获取到请求定位点所处的实际道路。

我们针对高德地图的导航请求数据进行相关挖掘,将用户实走与路线规划信息相结合,得到了请求与真值一一映射的数据集。

•特征数据
在起点抓路模型中,我们提取了三大类特征用于构建样本集,分别是定位点相关特征、道路自身特征以及定位点与道路之间的组合特征。

特征处理是特征工程的核心部分,不同项目在进行特征预处理时会有不同,需要根据实际业务场景进行特殊化处理,往往依赖于专业领域经验。起点抓路项目中,我们针对定位特征进行了样本去重、异常值处理、错误值修正及映射等数据清洗工作。

3.模型选择
在目标问题定义中,我们将起点抓路剖析为搜索排序问题,而机器学习的ranking技术,主要包括point-wise、pair-wise、list-wise三大类。

根据起点抓路业务特点,我们采用了list-wise,其learning to rank框架具有以下特征:

•输入信息是同一路线规划请求对应的所有道路构成的多特征向量(即一个query)。
•输出信息是对应请求(即同一query)特征向量的打分序列。
•对于打分函数,我们采用了树模型。

我们选择NDCG(Normalized Discounted Cumulative Gain 归一化累积折算信息增益值)作为模型评价指标,NDCG是一种综合考虑模型排序结果和真实序列之间关系的指标,也是常用的衡量排序结果的指标。

4.模型训练及效果评估
我们抽取了一定时间段内的请求信息,按照步骤2中描述的方式获取到对应真值及特征数据,打标构建了样本集,将其划分为训练集与测试集,训练模型并查看结果是否符合预期。

评估模型效果,我们将测试集的请求分别用人工规则及机器学习模型进行抓路,并分别与真值进行对比,统计准确率。

对比结果,针对随机抽取的请求,模型与人工规则抓路结果差异率为10%,这10%的差异群体中,模型抓路准确率比人工规则提升40%,效果显著。

写在最后
以上我们介绍了大数据和机器学习在起点抓路方面的一些应用,项目的成功上线也验证了机器学习在提升准确率、优化流程等方面可以发挥重要作用。

未来,我们希望能够将现有模型场景继续细化,寻找新的收益点,从数据和模型两个角度共同探索,持续优化机器学习抓路效果。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518369.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css-阴影和超链接伪类

阴影和超链接伪类 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>/* 默认的颜色 */a{text-decoration: none; /* 去掉下划线 */color: #000000; /* 修改颜色 */}…

时尚电商新赛道:揭秘 FashionAI 技术

雷音是阿里巴巴研究员、淘系技术部 FashionAI 负责人&#xff0c;在淘系技术嘉年华硅谷站&#xff0c;他分享了《时尚电商新赛道— FashionAI 中的技术》 &#xff0c;旨在揭秘&#xff1a;从面向机器学习的知识重建切入&#xff0c;提出了在 AI 能力的推动下&#xff0c;让人值…

MQ 技术产品井喷,今天来详聊一下腾讯开源消息中间件 TubeMQ | 原力计划

作者 | kimmking来源 | CSDN博客&#xff0c;责编 | 夕颜出品 | CSDN&#xff08;ID:CSDNnews&#xff09;随着分布式技术的发展&#xff0c;MQ技术产品也出现井喷。目前除了各类常用的MQ&#xff0c;比如Apache的ActiveMQ&#xff0c;Kafka&#xff0c;Pulsar&#xff0c;Rock…

MongoDB compact 命令详解

为什么需要 compact 一图胜千言 remove 与 drop 的区别 MongoDB 里删除一个集合里所有文档&#xff0c;有两种方式 db.collection.remove({}, {multi: true})&#xff0c;逐个文档从 btree 里删除&#xff0c;最后所有文档被删除&#xff0c;但文件物理空间不会被回收db.col…

css-背景图片和渐变

背景图片 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>/* 边框 border 1px粗细 solid样式 red颜色*/div{width: 1000px;height: 700px;border: 1px solid red;/*…

GitOps 初探

前言 GitOps 的概念最初来源于 Weaveworks 的联合创始人 Alexis 在 2017 年 8 月发表的一篇博客 GitOps - Operations by Pull Request。文章介绍了 Weaveworks 的工程师如何以 Git 作为事实的唯一真实来源&#xff0c;部署、管理和监控基于 Kubernetes 的 SaaS 应用。 随后&…

老码农吐血建议:2020年,低于1w的程序员要注意了...

最近在知乎上&#xff0c;关于AI的这个话题又被顶起来&#xff0c;其中&#xff0c;这条回答让人印象深刻&#xff1a;在这短短的一条信息里&#xff0c;无疑显示出&#xff1a;AI行业缺人&#xff0c;高端岗位80万年薪恐怕也招不来&#xff01;小编上周在一个AI群里&#xff0…

重磅!容器集群监控利器 阿里云Prometheus 正式免费公测

Prometheus 作为容器生态下集群监控的首选方案&#xff0c;是一套开源的系统监控报警框架。它启发于 Google 的 borgmon 监控系统&#xff0c;并于 2015 年正式发布。2016 年&#xff0c;Prometheus 正式加入 Cloud Native Computing Foundation&#xff0c;成为受欢迎度仅次于…

Archsummit 2019重磅分享|闲鱼Flutter&FaaS云端一体化架构

作者&#xff1a;闲鱼技术&#xff0d;国有   讲师介绍 国有&#xff0c;闲鱼架构团队负责人。在7月13号落幕的2019年Archsummit峰会上就近一年来闲鱼在Flutter&FaaS一体化项目上的探索和实践进行了分享。 传统NativeWeb服务端混合开发的挑战 随着无线&#xff0c;Io…

Spring Cloud 云架构下的微服务架构:部门微服务(Dept)

作者 | springML来源 | CSDN 博客 责编 | Carol出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;封图| CSDN下载于视觉中国 对于 Rest 基础架构实现处理是 SpringCloud 核心所在&#xff0c;其基本操作形式在 SpringBoot 之中已经有了明确的讲解&#xff0c;…

并发模式与 RPS 模式之争,性能压测领域的星球大战

本文是《如何做好性能压测》系列专题分享的第四期&#xff0c;该专题将从性能压测的设计、实现、执行、监控、问题定位和分析、应用场景等多个纬度对性能压测的全过程进行拆解&#xff0c;以帮助大家构建完整的性能压测的理论体系&#xff0c;并提供有例可依的实战。 该系列专…

Akka in Schedulerx2.0

1. 前言 Schedulerx2.0是阿里中间件自研的基于akka架构的新一代分布式任务调度平台&#xff0c;提供定时、任务编排、分布式跑批等功能&#xff0c;具有高可靠、海量任务、秒级调度等能力。 本篇文章以Schedulerx2.0为例子&#xff0c;介绍akka的应用场景&#xff0c;希望能给…

java.sql.SQLException: The server time zone value ‘???ú±ê×??±??‘ is unrecognized or represents more

【报错信息】 【百度翻译】 服务器时区值???????无法识别或表示多个时区。如果要利用时区支持&#xff0c;必须配置服务器或JDBC驱动程序&#xff08;通过ServerTimeZone配置属性&#xff09;&#xff0c;以使用更具体的时区值 【解决方法】 数据库连接配置conf.xml(…

【从入门到放弃-Java】并发编程-锁-synchronized

简介 上篇【从入门到放弃-Java】并发编程-线程安全中&#xff0c;我们了解到&#xff0c;可以通过加锁机制来保护共享对象&#xff0c;来实现线程安全。 synchronized是java提供的一种内置的锁机制。通过synchronized关键字同步代码块。线程在进入同步代码块之前会自动获得锁…

Redis 学习之一招击穿自己的系统,附送 N 个击穿解决大礼包 | 原力计划

作者 | Mark_MMXI来源 | CSDN博客&#xff0c;责编 | 夕颜出品 | CSDN&#xff08;ID:CSDNnews&#xff09;缓存的存在是为了在高并发情形下&#xff0c;缓解DB压力&#xff0c;提高业务系统体验。业务系统访问数据&#xff0c;先去缓存中进行查询&#xff0c;假如缓存存在数据…

阿里巴巴王坚:用数据来改变世界

“传统信息化建设都是从无到有&#xff0c;加了杆子和机器&#xff0c;但是新一代数字建设就是从有到无&#xff0c;缴费的机器没有了&#xff0c;你回家缴&#xff0c;杆子没有了&#xff0c;你回家缴。” 7月21日&#xff0c;阿里巴巴技术委员会主席王坚在2019年中国电子政务…

Knative Service 之流量灰度和版本管理

本篇主要介绍 Knative Serving 的流量灰度&#xff0c;通过一个 rest-api 的例子演示如何创建不同的 Revision、如何在不同的 Revision 之间按照流量比例灰度。 部署 rest-api v1 代码 测试之前我们需要写一段 rest-api 的代码&#xff0c;并且还要能够区分不同的版本。下面…

在生产环境中使用 Sentinel

文章目录一、安装zookeeper1. linux环境2. windows环境2. 安装并启动zkui二、编译打包2.1. 拉取项目2.2. 启动2.3. 登录 sentinel2.4. 登录zkui2.5. 重启Sentinel2.6. 删除Sentinel的流控规则三、将客户端和zk打通3.1. 引入依赖3.2. 配置3.3. 启动springboot3.4. sentinel控制台…

JavaScript-浏览器控制台使用

基本语法 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><!-- JavaScript 严格区分大小写 --><script>// 1. 定义变量 变量类型 变量名 变量值var num 1;num …

看完就入门系列!吞吐量、消息持久化、负载均衡和持久化、伸缩性…… 你真的了解 Kafka 了吗?...

作者| liuhehe123来源| CSDN博客 责编| Carol出品| CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;封图| CSDN下载于视觉中国 无论是已经接触过 Kafka 还是刚入坑的小伙伴&#xff0c;都应该时不时回头了解一下 Kafka &#xff0c;有时候会有不少新收获。今天这份…