成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

【NCTS峰會回顧】京東物流樊宇:如何讓配送地址更準確——帶你走近京東物流大數據算法測試探索之路

開發 前端 算法
2019年10月26日,由Testin主辦的第二屆NCTS中國云測試行業峰會在京召開,此次峰會以“AI+未來”為主題,匯聚來自國內外測試領域的知名專家學者、領先企業決策者、高層技術管理者、媒體從業者等,共同探討高端云測試技術。

2019年10月26日,由Testin主辦的第二屆NCTS中國云測試行業峰會在京召開,此次峰會以“AI+未來”為主題,匯聚來自國內外測試領域的知名專家學者、領先企業決策者、高層技術管理者、媒體從業者等,共同探討高端云測試技術,幫助測試從業者了解最前沿行業趨勢,及最新的行業實踐。

[[284798]]

會上,京東物流資深測試開發工程師樊宇做《如何讓配送地址更準確——帶你走近京東物流大數據算法測試探索之路》主題演講。樊宇指出,“做算法測試,首先要建立算法測試模型,然后獲得真實有效的歷史數據,再完成算法相關接口的調用,最后,改進我們的測試過程。”

以下為樊宇演講實錄:

大家好,我先自我介紹一下,我來自京東物流,我在2013年加入京東,我們大數據算法測試大概是2016年底,2017年初逐漸開始的。我們最開始也做一些自動化測試,UI自動化,接口自動化,自動化測試工具平臺,還有數據集成。今天我給大家分享大數據算法方面的測試。

先介紹一下目錄,第一部分是項目背景,第二部分是算法模型建立,第三部分是測試數據的獲取,第四是算法測試執行過程,然后是總結,主要分這么幾部分。

首先我介紹一下技術背景,京東快遞從去年年底逐漸開始支持微信小程序下單了,原來京東只是能送快件,現在還可以上門取,所以說在微信小程序里面增加了這么一個功能叫做“京東快遞”,小程序界面當中做了自動提取關鍵字的算法,可以把整個地址都復制到微信小程序里,然后會把地址信息,電話、通訊錄提取出來,這個過程可以減少人工輸入的過程,提高我們的用戶體驗,因為大家的地址都是共享的,比如從一個應用復制出來放在另外一個應用,這樣就很方便。

這里有一個截圖,這是我們系統的界面,就是你輸入一個地址后下面自動把姓名、電話和詳細地址都提取出來,這個是我們的項目背景。

再說一下算法模型的建立,前面介紹我講的比較快,這部分講慢一點。我們想象一下,配送地址是很長的字符,S2、S2一直到S7,就是一級地址,二級地址,S6是姓名S7是電話。這個模型如何建立呢?

算法測試很多時候要建立模型,左側這部分是經常用到的算法測試的模型,比如說第一個是準確率,召回率,大家如果做搜索相關測試都會了解一些,大家知道準確率、召回率就是一個真值表。例如期望為真,實際為真與期望為假;實際為假的這個統計是準確率的情況。召回率就是我期望結果是假,但實際上結果是真和期望結果為真,實際結果為真的情形,就是說有一部分的結果都是真值的情況,這個就是召回率。下一部分的概率,很多算法是用概率衡量的,最后一部分是余弦相似度,這在很多算法測試當中用的多一些,因為余弦相似度是衡量高倍向量結果,這會有很多維度,我們衡量兩個向量之間的差異多半是用余弦相似度比較,當然不限于文本的比較,其他的也是可以的。

既然是算法模型,我們就要考慮一下分子是什么?分母是什么?我們回頭看一下左側這四個統計模型,他們結果都有一個特點,就是0到1之間的一個數,我們想象一下我們的分子如何構建?分母如何構建?

我們再回到剛才講的技術背景,我們被測算法應用其實是跨領域的,用現在經常說的新詞就是跨界,一個是自然語言處理,另外是地理位置服務,這就和一般的算法測試不太一樣,是跨的這兩個領域的界限。大家都知道跨界這種東西一般是有難度的,可能和我們平時測試差別比較大一些。

最開始,我們會拿到用戶的是一個地址,這個地址我們可以認為是測試的最開始數據,地址有兩部分,第一個地址就是寄件地址,第二個是收件地址,功能測試角度來講,我們可以把地址顛倒過來,收件地址作為寄件地址也可以,這樣可以增加測試覆蓋率,下一步就是涉及到地理編碼的概念,大家如果知道LBS測試功能,應該知道地理編碼的概念,一個是正向地理編碼還有一個是逆向。正向地理編碼就是我給你一個地址街道門牌號會生成經緯度坐標,另外一個是給你一個經緯度坐標,給你一個最近的地址,我們會對這兩個作為一個地理編碼的計算。然后會得到對應的坐標,根據坐標我們可以算一下距離,大家應該知道距離也可以用最簡單方式,就是算兩點之間的距離,我們用的也是這種方式,相對來講這種模型比較簡單。

但是我們要衡量轉換以后坐標是不是準確度,或者說原來的地址轉化是不是有問題,如果地址轉化差就會有差別,距離就會達到幾千米甚至說十幾公里的距離,所以我們轉化計算距離會計算閾值,低于這個閾值就是可接受的。

我們再繼續,我們會統計計算正確轉換的地址數量,就是說有多少地址是轉換正確的,這個就是我們剛才說的分母,我們還會做一些過濾,就是說計算匹配范圍內的地址轉換錯誤的地址數量。因為我們剛開始做的時候,京東配送不是全國都支持,現在都是全國支持了,當時只是北京、上海等部分地區支持,所以超出范圍不會被支持,所以我們要把這部分數據排除掉。最后我們再看一下這個數據,我們相當于用召回率統計的,看一下地址的轉換有多少東西是有問題的,這個就是我們的算法模型的建立過程。

算法測試很多時候和我們的功能測試不太一樣,功能測試都是自己造的數據,比如說訂單數據,一些商家的數據還有一些其他的數據,或者說用一些開發給定的原形中的數據。但是算法測試很多時候是用線上歷史數據做的,因此我們就會涉及到第三部分的內容,就是測試數據的獲取與提取。

這個PPT大家看的不是太清楚,第一框架是“歷史數據”,左側是“運單數據”,中間這個框是“小程序日志數據”,最后一部分就是配送員PDA日志。因為我們有配送運單數據,我們會把運單數據里所有有效的地址都拿出來,運單里就我剛才說的有兩個地址,一個是配送的收件地址,一個是取件地址,然后因為我們已經妥投的,地址肯定是有效的,當然這個數據并不是我們小程序里面的,這是京東里原來的一些歷史數據。然后我們再說PDA這部分,它收集同用戶在較小時間內地址變更的行為情況。為什么說是同一段時間內較小時間呢?就是用戶輸入地址可能輸入的時候是輸入錯了,大家會想到的一種情況,本來是家的地址,但是實際上想輸入公司的,輸入以后就直接改了這個時間間隔會比較小一些,我們設定一個時間間隔,比如,一個小時或者兩個小時之內變更的地址。

還有變更行為可能意味著前面的地址是輸入錯的,這塊我們都會作為一個輸入數據。最后一部分是配送員PDA日志數據,配送的時候也會有一個經緯度坐標的定位,我們會取這個經緯度坐標去作為我們用戶的輸入,我需要再強調一下,配送員取件的時候也有異常數據,比如說用戶下單下錯了,本來應該是往A地址發,結果下的是B地址,這時候會給配送人員打電話,讓他往B地址取件,這時候PDA有變更記錄,配送員送件時也會產生上述類似的行為,我們會把變更記錄拿過來作為我們輸入數據。

我們實踐過程當中拿用戶的地址數據是相對來講比較復雜的,我們再考慮中間遇到的新問題,如何對新地址進行地址轉換,前面的S當中的地址來進行片段,這個其實和我們經常用探索性測試很類似,大家想探索性測試屬于原有工程基礎上發現有沒有潛在問題,因為很多時候,最開始時候我們測試沒有介入之前都是開發根據以前的用戶反映到的問題找一些問題,發現一個解決一個,這樣效率比較低,體驗不是特別好。因此我們最主要的一點就是對新地址做一個處理,大家可以想像,我們看一下新地址的來源實際上有兩個來源,第一個來源是新配送區域,假設我所在城市原來是京東上門取件是不支持的但是現在支持了,這就屬于新的配送區域。還有一個情況更長更復雜一些,這個配送區域是支持的,但是新增了地址,比如我所在區域,北京朝陽區是支持的,但是這塊新修了一個小區,小區是新的,這就屬于后一種情況,大家可以想一下這個問題如何解決。

這是我們這次講的最核心內容,就是生成一個新坐標的情況,我們其實是用這種極坐標解決這個問題的。大家上學時候可能記得極坐標概念,這和傳統的笛卡兒坐標不一樣,一個坐標代表距離,一個坐標代表角度。我們把用戶所有的地址進行聚類,聚類以后我們會把簇的質點做為圓心,我們會用兩重循環去生成一個新地址,然后再過濾一下,用這些地址得到可配送地址,因為有時候逆地址生成的不是可配送的,比如是某一個街道交叉路口或者公交車站,我們要把這些過濾掉然后做一個去重,比如,一個小區方圓幾公里,會把這個去重。小區我們測試時候會精確到每一個樓,并不需要精確到單元和樓層,因為這個對于地址來講其實是一樣的。

這部分是我們講的比較重要的一部分,就是算法測試執行的過程。首先,先獲得歷史數據,把歷史地址和坐標都拿出來,然后,進行地理編碼,根據地理編碼后進行計算坐標聚類,最后有效去重,去重以后做逆地理編碼計算,再生成一個新坐標,藍色這部分嚴格來講對于我們其他測試都屬于測試的準備階段,就是造數據,但是我們的數據是根據真實數據生成的。我們看右半部分,這個其實是我們實際測試執行的過程,我們會把這個地址作為分詞,我們會增加噪點和冗余信息,比如,增加姓名和電話,然后,調地址識別和轉換的接口,比較預期值,再根據預期值生成地理編碼,再比較我們的距離,如果這個距離大余閾值就有問題,如果小于閾值就是沒有問題的,這個就是我們整個測試過程的執行。

重點說一下中間的過程,比如聚類這塊我講一下,大家如果對法測試有所了解應該會知道,比如常見聚類就是均值聚類,我們用的并不是均值聚類,因為數據量比較大。結合業務特點,京東配送站有一個經緯度坐標,我們以這個經緯度坐標作為初始簇點。然后以這個半徑范圍內的坐標劃簇,如果這個坐標達不到簇內數據量的要求,就把兩個配送站地址作為合并。如果說達到我們的要求,比如說我們這個簇要求一萬個座標點,如果超過一萬個我們就終止,聚類就結束了,然后按照簇的元素從大到小排序取前N個值,最后按照質點生成極坐標,這就是我們聚類的過程。

地址轉化算法是算法類測試,那如何提供類似缺陷列表的內容?大家想我做一個功能測試,不管手工測試還是自動化測試,測試完一輪都會產生一些Bug,我們提到缺陷管理系統,但是我們算法測試,可能最后只是一個數,比如召回率是80%或者90%,但是沒有缺陷的這種,對于一般來講產品、開發和測試本身就覺得不是特別喜歡,我們怎么提供這種類似于缺陷列表的功能呢?我們看一下是如何做的,取這些歷史記錄當中出現最多的前N個坐標對應的地址,然后取距離較大的前M個,這前M坐標肯定大于閾值的,然后我們在前N個當中選取前M個出現的地址,這就相當于一個TOP N的問題。我們會和工程師做核實,如果有問題,就作為缺陷貼到缺陷系統里或者直接發個郵件附帶一個表格,因為有的缺陷比較多,一輪測試發現幾百個,然后提供給開發,開發根據缺陷列表看是程序問題還是數據問題還是其他的配置導致的問題。這樣的話比只是召回率通過不通過好,有一定說服力。

再看一下另外一個問題,如何生成入參,后臺是一個接口,輸入一個地址反饋S1到SN的地址,如果我們增加一個噪點呢?我們是這么做的,假如我這里有一個地址,北京市豐臺區樊羊路多少多少號,為什么去這里呢?這里有一個坑稍候給大家講。我們做一個分詞,北京市/豐臺區/樊羊路這么分。因為我自己姓樊就可以把我姓名加進去,就都是黃色,樊羊路后面多少號,樊宇再加上我手機號,這個模擬一個用戶真實收件地址或者取件地址,判斷這個系統,因為都是樊,但立義不一樣,一個是街道,一個是姓,這就是增加了一種測試噪點。還有一種情況,把這個位置顛倒過來,姓名完了直接是手機號,最后輸入門牌號,因為我們看日志情況也有這種情況,就是順序不一樣是規定的,我們會把這個顛倒順序,這樣的話也會產生一定噪點。

最后這部分噪點,我們對應著一個寫字樓或者小區,我們就把這些具體地址換成一個小區多少多少號樓,用戶很多時候也會用這種寄件,實際上都是一個地址,但表現形式不一樣,最后用這種形式替換。大家可以看一下有黃色字部分都相當于增加的噪點,這樣就可以增加我們轉化率測試的覆蓋率情況了,就可以更好發現轉換的算法存在的潛在問題。其實我們做的方法就是把街道當中一些涉及到姓氏提取出來,然后根據姓氏隨機生成一些名字。

如何加速我們測試執行的過程呢?這塊我們用了并行的一些計算,因為我們用并行計算還有一個原因,地理編碼這種運算,逆地理編碼運算會很長,一個地址逆地理編碼大概需要幾百毫秒時間,累積出來會很多,所以我們用并行計算,讀取歷史數據,信息不全這些都放在緩存里,地址可能有重復的,有緩存的話我們不用調接口,直接在緩存當中拿數據,可以放在數據庫等地方,最后我們進行召回率的計算來得到我們所需要的結果,這樣就可以加速執行、調試過程中就執行一兩條就可以了,實際跑的時候用并行計算跑的。

最后我們再給大家介紹算法測試方法論,這個是我們團隊的理解,一般任何算法測試首先需要建立一個算法測試模型,像我們這個用的是召回率計算的,其他的可能召回率不合適,就得用余弦相似度。第二部分我們獲得歷史數據,這是真實有效數據,用它做回歸測試可以反映出有算法和沒有算法情況的前后對比。第三部分是算法相關接口,但是有些算法可能調其他的周邊接口,上下游接口可能都會有,就需要大家有這方面考慮。最后一部分是改進我們的測試過程,我們剛才講的如何生成新坐標就是我們的一個改進過程,這也是一種創新,還有一個是如何增加噪點,這種都屬于改進我們的測試過程。

這部分就給大家一個介紹,很多公司我想都要開始,或者逐漸想從事這種算法測試,算法測試究竟需要哪些方面的基礎?我給大家簡單做了總結,第一部分就是要有數學基礎,我們這個案例當中涉及到的極坐標,距離等等都是屬于數學方面技術。你可能對開發算法不一定了解,這是一個純黑核,但是對自己的算法是需要有了解的,這就是建立算法模型,召回率計算,分母分子如何取都是需要考慮的。第三部分,自動化接口測試,我想很多團隊都有這個能力,因為接口比較快,基本上不會涉及到UI,都是通過接口觸發實際測試還有數據獲取的。第四部分是并行計算能力,大家可能需要多線程,多進程,分布式計算能力來提高測試速度。因為你不可能說一個測試跑一天還沒有跑完,因為開發很多需要等著上線的。還有一個是需要我們有數據挖掘的能力,就是我測試的這個東西需要從哪里獲取數據,我要轉換成什么樣的數據,這個是需要知道的。最后一部分我個人覺得所有的測試都需要掌握的一個東西,就是業務場景,不同業務場景的測試重點是不一樣的,導致我們用的一些算法模型,還有一些結果都會有一些差距。以上這幾點就是算法測試給大家的一些期望。

最后一部分,對未來做一個展望,因為我們現在是在線下做的測試,因此未來我們要做一個線上測試環境,就是把它完全放在線上采用我們的CI/CD,數據集成的方式去做,做完這個我們準備在運營期間,超區的測試,因為現在京東配送基本上已經支持全國,但是有超區情況,超區就意味著分配是有問題的,本來是很近的,但是分配早幾公里之外的站點,這會導致運營效率會降低。我們會做京東第三方地址轉化測試,把它作為取件地址去做。因為京東物流也會接觸到很多商家,商家那種實際上都屬于第三方地址。

最后兩部分,就是非內地的,就是國外地址,因為京東物流有很多國際化的業務,因為國外地址和國內不一樣,因為很多都是英文,分子系統和咱們也不一樣,這塊以后都需要介入的。最后一部分就是我們準備降低一下我們人工識別的比重,因為現在我們很多東西還是人工識別的,有時候可能計算閾值很大,但是實際上情況可能是正常的,比如有一條河,河上有幾個橋,要過河取件肯定要過橋,過橋距離就會長,這時候就需要人工識別,我們以后會通過其他手段降低人工識別的難度。

以上就是我給大家做的分享。

 

責任編輯:張燕妮 來源: 51CTO
相關推薦

2016-06-17 14:19:52

數據中心

2019-11-26 17:52:18

AI 數據人工智能

2018-12-08 11:14:00

京東

2019-12-05 16:17:59

云計算行業科技

2019-12-05 16:23:15

開發技能代碼

2024-10-15 08:14:51

2019-11-26 17:58:47

系統運維架構

2015-12-29 17:06:17

大數據存儲

2024-10-29 13:59:27

銳捷網絡京東物流

2019-03-12 08:56:51

京東JDK大數據平臺

2019-12-13 11:56:50

AI 數據人工智能

2016-07-29 14:31:00

京東

2019-12-13 11:58:21

AI 數據人工智能

2019-12-13 11:55:30

AI 數據人工智能

2015-06-23 11:04:44

京東物流

2017-01-10 15:22:34

京東容器集群

2016-09-21 15:35:45

Javascript單元測試

2018-07-11 06:06:20

物流倉儲運維數據庫

2017-11-22 09:23:00

自動化快遞電商
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久亚洲国产 | 欧美一区二区三区视频在线观看 | 欧美日韩视频在线 | 2020国产在线 | 久久久国产精品 | 91在线视频播放 | 91亚洲国产成人久久精品网站 | 欧美亚洲视频在线观看 | 91精品国产综合久久婷婷香蕉 | 久久精品二区亚洲w码 | 国产精品久久久久久久7777 | 欧美午夜精品理论片a级按摩 | 国产精品国产成人国产三级 | 日韩av成人| 日韩国产一区二区 | 中文字幕日韩一区 | 国产精品成人在线观看 | 欧美日韩一区精品 | 国产清纯白嫩初高生在线播放视频 | 日韩精品久久久 | 欧美精品欧美精品系列 | 欧美一级欧美三级在线观看 | 国产女人叫床高潮大片免费 | 日韩欧美国产一区二区三区 | 国产a区 | 亭亭五月激情 | 羞羞的视频免费观看 | 在线国产99| 国产精品夜夜春夜夜爽久久电影 | 欧美另类日韩 | 精品国产乱码久久久久久88av | 国产日韩欧美精品一区二区三区 | 精品国产乱码一区二区三 | 日韩在线精品视频 | 99精品国产一区二区三区 | 亚洲精品在线看 | 丁香五月网久久综合 | 亚州精品天堂中文字幕 | 免费一二区 | 人人看人人爽 | 欧美乱操|