高 碩, 佟 冶, 吳忠凱
(1.遼寧省公安廳, 遼寧沈陽 110035; 2.朝陽市公安局, 遼寧朝陽 112000)
黨的十九大就建設(shè)數(shù)字中國、智慧社會作出了全面部署。習(xí)近平總書記強調(diào),大數(shù)據(jù)發(fā)展日新月異,我們應(yīng)該審時度勢、精心謀劃、超前布局、力爭主動,實施國家大數(shù)據(jù)戰(zhàn)略,加快建設(shè)數(shù)字中國。對于公安信息化來說,主要任務(wù)就是讓更多的“警之于前”來代替“察之于后”,這才是新時期警察工作在數(shù)字中國、智慧社會中的完美體現(xiàn)。
實現(xiàn)更多的“警之于前”,就是要改變通過發(fā)現(xiàn)案件、嫌疑人的目標(biāo)之于后再應(yīng)用數(shù)據(jù)的單一做法,真正實現(xiàn)基于“大數(shù)據(jù)”發(fā)現(xiàn)目標(biāo)[1],只有這樣才能把“警之于前”做到最好。各級公安“大數(shù)據(jù)”建設(shè)及應(yīng)用部門不斷探索,積累經(jīng)驗?zāi)P?,充分?yīng)用大數(shù)據(jù)資源,做好預(yù)知、預(yù)防、預(yù)警工作[2]。目前的摸排算法多是基于集合的邏輯運算進行摸排,算法復(fù)雜度大且不容易理解,容易在實際使用過程中造成摸排對象的遺漏,利用窗口函數(shù)可以更直接地對模型進行描述,且培訓(xùn)和理解更加簡單。
算法就是對解題方案準(zhǔn)確而完整的描述,公安實戰(zhàn)單位提出的所有業(yè)務(wù)模型,都是用特定的算法來解決,進而算法的特征也就是業(yè)務(wù)模型的特征,具體包括:可行性、有窮性、確定性、輸入、輸出。而近些年主流的算法任務(wù)和方向主要包括:一是數(shù)據(jù)分析處理工作。支撐刑偵、治安、禁毒、經(jīng)偵、國保、反恐等警種部門,提供已知的數(shù)據(jù),對其進行分類匯總、透視、關(guān)聯(lián)比對分析、統(tǒng)計等,按照警種要求進行反饋結(jié)果。二是數(shù)據(jù)摸排[3]比對工作。相關(guān)警種提供業(yè)務(wù)模型,依托現(xiàn)有大數(shù)據(jù)資源庫,解讀模型,編制高效的算法,為所提供的模型得出結(jié)果,后續(xù)可以固化模型,直接在系統(tǒng)前臺調(diào)取。三是數(shù)據(jù)戰(zhàn)略預(yù)警工作。分析案件形勢,支撐打擊整治工作,如5類侵才案件,8類高發(fā)案件,高危地區(qū)人員等全省分布情況,破案情況,打擊處理情況等進行支撐分析。在以上3類中,第二類數(shù)據(jù)摸排比對工作對算法的復(fù)雜度要求是最高的,主要應(yīng)用的是SQL結(jié)構(gòu)化查詢語言[4],一個完整的算法的實現(xiàn),要求大數(shù)據(jù)應(yīng)用民警具備以下能力:一是SQL基本語法是基礎(chǔ);二是公安業(yè)務(wù)數(shù)據(jù)應(yīng)該深刻掌握,所有的需求模型都離不開公安業(yè)務(wù),用業(yè)務(wù)思路來理解數(shù)據(jù)的邏輯結(jié)構(gòu);三是關(guān)系表中的集合運算是分析業(yè)務(wù)模型的關(guān)鍵;四是查詢條件的設(shè)置決定整個數(shù)據(jù)分析的效率;五是去除重復(fù)數(shù)據(jù)是確定正確關(guān)系的前提;六是聚合函數(shù)[5]是最常規(guī)的數(shù)據(jù)分析手段。熟練掌握以上六項技能,則具備常規(guī)公安“大數(shù)據(jù)”算法編制工作能力。
為便于理解常規(guī)的模型運算,列舉如下業(yè)務(wù)模型:圈定一類特殊人員,他(她)們一般從家中乘坐火車出發(fā),到出差地出幾天差,然后乘坐火車返回原地。試找出一段時間內(nèi)(2018年上半年)乘火車到沈陽出差4~7天,中途無火車離開信息,然后乘坐火車返回原地,并且在沈陽期間有住宿記錄的商旅人員,輸出身份號碼。
此模型調(diào)取的人員同上半年沈陽高發(fā)、連發(fā)、多發(fā)、新發(fā)案件分布情況一并分析,對于刑偵部門偵破案件和后續(xù)預(yù)防具有重大意義(有時也可以把旅館條件去掉,來擴充人員)。為了便于算法的理解,調(diào)取數(shù)據(jù)需要注意的是:到沈陽指的是站名里面包含沈陽字樣的(減少復(fù)雜度不考慮蘇家屯站的情況,如需全面考慮,則需要參照城市與火車站名對照表),返回原地指的是火車站名也要完全一致,出差4~7天指的是離開沈陽火車日期減去到達(dá)沈陽火車日期在3~6日之間(含3和6)。
常規(guī)集合運算算法思路如下:
(1)調(diào)取指定時段內(nèi)(業(yè)務(wù)模型要求的時段)到站包含沈陽二字的火車乘車數(shù)據(jù),形成集合;
(2)調(diào)取指定時段內(nèi)發(fā)站包含沈陽二字的火車乘車數(shù)據(jù),形成集合;
(3)將(1)、(2)兩部分?jǐn)?shù)據(jù)做交集,條件是:a、證件號碼相等,b、(2)與(1)的發(fā)車時間差為3~6天,c、(1)的發(fā)站與(2)的到站站名相等,得到交集結(jié)果;
(4)將(3)的結(jié)果再與沈陽的旅館數(shù)據(jù)做交集,條件是:a、證件號碼相等,b、是沈陽轄區(qū)的旅館數(shù)據(jù),c、入住時間在兩個購票時間段內(nèi)。
4部分如圖1所示。
算法分析:對于常規(guī)的數(shù)據(jù)摸排比對,集合運算都能發(fā)揮其準(zhǔn)確的摸排結(jié)果,但是對于當(dāng)前的業(yè)務(wù)模型,采用上述的算法,不能達(dá)到預(yù)期,將部分臟數(shù)據(jù)納入了所求結(jié)果中,比如:該人“張三”的數(shù)據(jù),也在所求結(jié)果之中,“張三”原始表數(shù)據(jù)如表1所示。
表1 “張三”原始表數(shù)據(jù)
以上表格中對應(yīng)的“張三”共計4條數(shù)據(jù)(假設(shè)旅館數(shù)據(jù)滿足條件),按照前面給出的算法,張三已在所求的結(jié)果之中,但是對于業(yè)務(wù)模型來講,張三不是要摸排的人員,因為他在指定時段內(nèi)來過兩次“沈陽”,第一次逗留一天,第二次也逗留一天,不滿足停留“到沈陽出差4~7天”這個條件,恰恰是第三步的集合運算,采用笛卡爾積的方式,實現(xiàn)了第四條數(shù)據(jù)與第一條數(shù)據(jù)的時間差為4,滿足條件,但是第四條數(shù)據(jù)與第一條數(shù)據(jù)求差是無意義的操作,此操作隱藏在第三步的集合操作之中,類似某人的第六條與第一條,第八條與第三條等都是非法操作,所以算法的隱藏錯誤深刻的顯現(xiàn)出來,將表中這一類數(shù)據(jù)刪除,才能得到正確的結(jié)果。采用集合操作并將這樣的“數(shù)據(jù)對”刪除,緊接著上述第四步之后補充算法如下:
(5)調(diào)取指定時段內(nèi)到站包含沈陽二字或發(fā)站包含沈陽二字的火車乘車數(shù)據(jù),形成集合。
(6)將(4)、(5)兩部分?jǐn)?shù)據(jù)做交集,條件是:a、證件號碼相等,b、(5)的發(fā)車時間在(4)的“3到6天”之內(nèi),形成集合,由于特殊條件限制,代碼實現(xiàn)過程中(4)、(5)直接做減法不容易操作。
(7)將(4)的結(jié)果與(6)進行差運算,得出正確結(jié)果。
補充步驟如圖2所示,深色區(qū)域為所求。
圖2 常規(guī)集合運算算法
窗口函數(shù)[6]:窗口函數(shù)也是作用于一個數(shù)據(jù)集合。窗口是標(biāo)準(zhǔn)SQL術(shù)語,用來描述SQL語句內(nèi)用OVER子句劃定的內(nèi)容,這個內(nèi)容就是窗口函數(shù)的作用域。在對大量公安結(jié)構(gòu)化數(shù)據(jù)進行分析時,數(shù)據(jù)應(yīng)用部門越來越多地利用這些函數(shù)對解決方案進行優(yōu)化,用這些窗口函數(shù)來取代哪些依賴更古老、傳統(tǒng)的語言結(jié)構(gòu)解決方案,結(jié)果更加簡單和高效,效果是非常明顯的,所以我們現(xiàn)在的大部分查詢解決方案,都用窗口函數(shù)來完成。在實際應(yīng)用中,除了已有的聚合函數(shù)外,還包括3類函數(shù):排名函數(shù)、分布函數(shù)、偏移函數(shù)[7]。其中排名函數(shù)主要包括:RANK、DENSE_RANK、ROW_NUMBER、NTILE,分布函數(shù)主要包括:PERCENT_RANK、CUME_DIST、PERCENTILE_CONT、PERCENTILE_DISC,偏移函數(shù)包括:LAG、LEAD、FIRST_VALUE、LAST_VALUE、NTH_VALUE。為支撐公安實戰(zhàn)研判需要,現(xiàn)對上述利用集合運算實現(xiàn)的算法進行改進,應(yīng)用窗口函數(shù),無笛卡爾積操作,在時間性能上更加簡單和高效,為深刻體現(xiàn)效果,采用阿里巴巴大數(shù)據(jù)分析平臺,開窗偏移后數(shù)據(jù)表現(xiàn)形式(見表2)和SQL查詢實現(xiàn)代碼如下。
表2 開窗偏移后數(shù)據(jù)表現(xiàn)形式
商旅人員圈定運用窗口函數(shù)算法
摸排分析總結(jié):窗口函數(shù)是解決這一類問題的法寶,本模型需要將發(fā)站和到站進行向下偏移,按照證件號碼排序,每條記錄里面包含了該人的相鄰記錄(由偏移后所得),最關(guān)鍵的是通過partition by 關(guān)鍵字來進行分區(qū)(身份證號),通過order by進行排序(發(fā)車時間)。通過二次條件篩選再確定來沈陽和從沈陽走的人,開窗之后,應(yīng)用該結(jié)果限定從“某個”地方來沈陽且又回到這“某個”地方去,“某個”為同一站名,天數(shù)相減:3~6天,即所求的4~7天,在與旅館表進行關(guān)聯(lián)的時候,時間直接用字符串比較即可,但是旅館表中數(shù)據(jù)應(yīng)該是“沈陽”區(qū)劃的旅館數(shù)據(jù),即行政區(qū)劃為“2101”開頭。
窗口函數(shù)最大的優(yōu)點是實現(xiàn)分區(qū)后,并未改變記錄的數(shù)目,實現(xiàn)部分字段的聚合、偏移等操作,編制算法的最核心內(nèi)容就是應(yīng)用哪些函數(shù)并以什么內(nèi)容進行分區(qū),而研判分析人員最需要打基礎(chǔ)的是對業(yè)務(wù)工作和數(shù)據(jù)表的掌握,如業(yè)務(wù)詞匯表、元數(shù)據(jù)、主數(shù)據(jù)做到如數(shù)家珍,應(yīng)用窗口函數(shù)后則能發(fā)揮出更大的價值,實現(xiàn)精準(zhǔn)的高危預(yù)警。針對當(dāng)前算法,采用集合運算與窗口函數(shù)對比復(fù)雜情況見表3。
表3 集合運算與窗口函數(shù)復(fù)雜度對比表
以上窗口函數(shù)是采用偏移函數(shù)實現(xiàn)的,除了偏移函數(shù)外,其他類別的函數(shù)也發(fā)揮重要價值,如調(diào)取一段時間內(nèi)鐵路數(shù)據(jù),摸排同一車次內(nèi)同一車廂有同鄉(xiāng)人10名(不包含10名)以上且其中有2人以上(含)有違法前科,輸出全部人員證件信息,其中同鄉(xiāng)的條件是指身份證號碼前4位相同,SQL查詢實現(xiàn)代碼如下:
同車同鄉(xiāng)違法人員預(yù)警運用窗口函數(shù)算法
摸排分析總結(jié):實現(xiàn)模型結(jié)果的巧妙之處就是利用兩次窗口函數(shù)[8],為最終的結(jié)果設(shè)計中間過程,最終得出查詢結(jié)果。窗口函數(shù)的價值就是待查詢的身份證與PARTITION BY后的分區(qū)數(shù)據(jù)并存展示,體現(xiàn)了分區(qū)和分組的最大區(qū)別,因為這種并存方式,更有利于各種公安業(yè)務(wù)模型的實現(xiàn)。
當(dāng)前公安數(shù)據(jù)摸排與分析最常見的是3類主數(shù)據(jù):人員、車輛、電話。這3類主數(shù)據(jù)的主屬性分別是:身份證號碼、車牌號碼、電話號碼。在實際應(yīng)用過程中,這3類數(shù)據(jù)最終都是對人的研判與分析,圍繞這3種數(shù)據(jù)形成所有感知類數(shù)據(jù)包括:話單、車軌、旅館、網(wǎng)吧、航班、鐵路、客運、水運等。這些數(shù)據(jù)分類別匯集,實時價值重要,而在分析個體特征時,需要根據(jù)個體的主屬性分區(qū),按照感知時間排序,所有行為特征根據(jù)“時間軸獨立展示”,而窗口函數(shù)的優(yōu)勢就是在“時間軸獨立展示”后發(fā)揮特定的價值,經(jīng)過偏移函數(shù)增加新的字段后,則更能達(dá)到預(yù)期目的,使得算法更加簡潔、清晰,窗口函數(shù)的靈活運用,大大提升了警務(wù)技術(shù)研判團隊服務(wù)實戰(zhàn)的能力,能在更短的時間內(nèi)直觀高效地排查出所需要的結(jié)果,且運算過程直接容易理解,大大減少了學(xué)習(xí)的復(fù)雜度和出錯率,本文在論述過程中以常規(guī)的集合運算實現(xiàn)算法為基礎(chǔ),不斷改進,最終實現(xiàn)了一種基于窗口函數(shù)的公安大數(shù)據(jù)摸排算法,總結(jié)出窗口函數(shù)替代復(fù)雜算法的魅力之處。在公安大數(shù)據(jù)分析建模工作不斷發(fā)展的今天,做好基于數(shù)據(jù)發(fā)現(xiàn)目標(biāo)的復(fù)雜工作,將公安機關(guān)治理的對象進行完整的模型化、數(shù)字化、可視化,達(dá)到認(rèn)知高度后并付諸行動,在模型算法探索過程中形成一個新的樣本、新的范式。