馮佳樂, 姚遠
(1. 上海眾恒軟件技術(shù)有限公司, 上海 200042; 2. 重慶市公安局警務(wù)督察總隊, 重慶 401147)
公共交通在日常出行中占據(jù)重要地位,為市民提供方便的同時,卻也成為了扒竊者的聚集地,特別是在我國城鎮(zhèn)化進程發(fā)展比較快的發(fā)達地區(qū),發(fā)生在公共交通上的扒竊行為對治安穩(wěn)定造成了持續(xù)性的影響,由于這種扒竊行為多發(fā)生在人員復(fù)雜、流動性大、現(xiàn)場難以取證等特殊的環(huán)境中,給案件的偵破帶來很大的不確定性,可見客觀環(huán)境決定了案件的發(fā)生概率,因此提高市民的主觀防護意識,可以有效避免案件的發(fā)生。
文獻[1]闡述了關(guān)于犯罪熱點的定義,由于公交扒竊案件具有流動性的特征,其案發(fā)地很難界定,發(fā)生的時間和空間位置呈現(xiàn)不均勻分布狀態(tài),很容易形成犯罪熱點,因此研究這種聚集的成因以及預(yù)測這類案件的發(fā)生對預(yù)防扒竊案件具有很好的指導(dǎo)意義。
本文通過整理以往公交扒竊行為的數(shù)據(jù),側(cè)重分析犯罪時間和位置數(shù)據(jù),基于凝聚層次聚類算法,開展扒竊犯罪的熱點分析研究,加強熱點區(qū)域的防范宣傳,可以有效地減少公共交通扒竊犯罪的發(fā)生,進而提高市民的生活安全感和城市文明形象。
聚類算法作為無監(jiān)督學(xué)習(xí)的一個重要算法,多用于機器學(xué)習(xí)的數(shù)據(jù)挖掘和分析等領(lǐng)域,其核心思想是將具有相似屬性的研究對象聚合到一起,形成的每組類中的研究對象在某種程度上具有共性,這為研究犯罪熱點提供了理論基礎(chǔ)[2-3]。
層次聚類算法是聚類算法的一種,根據(jù)層次聚類的方式分為自上而下和自下而上兩種模式。凝聚層次聚類算法[4]屬于自下而上的層次聚類算法,首先把所有研究對象默認分組,然后對每個組按照相關(guān)算法進行合并,直到把研究對象聚集成一個分組或自己設(shè)定的條件為止。
犯罪熱點的研究根據(jù)犯罪發(fā)生的空間形態(tài)的不同,主要分為基于面形態(tài)的研究和基于點形態(tài)的研究。具體的研究過程可以分為研究形態(tài)的識別和相關(guān)熱點的分析。
公交扒竊犯罪主要是發(fā)生于公交行駛過程中以及公交站點的扒竊犯罪,行駛過程中發(fā)生的犯罪難以確定具體的犯罪位置,在研究中我們將發(fā)生在行駛過程中的犯罪置換到發(fā)現(xiàn)犯罪事實最近的公交站點。本文研究的公交扒竊犯罪熱點主要采用面向離散點的犯罪熱點研究,將每個公交扒竊案件識別為單獨的組,通過計算每組扒竊犯罪的位置半徑進行層級聚類,依據(jù)犯罪半徑及聚類層級等指標(biāo)可以滿足警方對犯罪熱點不同尺度的研究分析。
在本文中,我們結(jié)合犯罪數(shù)據(jù)、地圖服務(wù)和層次聚類算法,通過研究歷史的公交扒竊犯罪的空間位置信息,基于層次聚類算法研究犯罪的地理位置數(shù)據(jù),發(fā)現(xiàn)犯罪熱點信息,加強反扒宣傳,提高防扒意識,減少人民的財產(chǎn)損失。
面向離散點的犯罪熱點研究是本文研究的重點,數(shù)據(jù)主要是犯罪發(fā)生的位置數(shù)據(jù),以某市2019年公交扒竊報案數(shù)據(jù)為研究對象。
日常碰到比較常見的公交扒竊數(shù)據(jù)主要是案件的接報數(shù)據(jù),其具體的形式如表1所示。由于這種犯罪數(shù)據(jù)的特殊性,其內(nèi)容主要是受害人的報案數(shù)據(jù),也是受害人對犯罪發(fā)現(xiàn)過程的一種描述信息,沒有具體的犯罪位置為研究帶來了一定難度,也是相關(guān)領(lǐng)域研究滯后的影響因素。
表1 公交扒竊案件描述
本文通過分析公交扒竊案件描述信息來提取犯罪位置數(shù)據(jù),首先提取所有案件的公交線路和公交站點信息,借助公交線路查詢服務(wù)獲取犯罪位置數(shù)據(jù)。參考文獻[5],數(shù)據(jù)處理的具體過程如下。
公交線路的提取采用分詞和正則匹配的方法,從犯罪案件描述信息中提取出公交線路,依托外部數(shù)據(jù)和服務(wù)獲取公交線路的站點信息,將提取的所有公交站點信息作為字典使用。
提取公交站點數(shù)據(jù)是數(shù)據(jù)提取的關(guān)鍵,將提取的相關(guān)數(shù)據(jù)作為案件的發(fā)生位置,我們將上一步獲取的公交站點字典信息作為分詞字典,對案件描述信息重新進行分詞,從0到1取相似度高的作為扒竊發(fā)生點信息。
轉(zhuǎn)換公交站點位置信息需借助地圖服務(wù),根據(jù)地圖服務(wù)提供的興趣點查詢服務(wù)輸入公交站點信息,返回其對應(yīng)的位置信息,作為實驗的基礎(chǔ)數(shù)據(jù)。
公交扒竊是一種流動性犯罪行為,犯罪人經(jīng)常以一種隱蔽的方式流竄作案,受害人很難確定具體的被盜時間和被盜地點,根據(jù)報案時提供的被害地點獲取其大概犯罪活動地,以凝聚層次聚類算法為基礎(chǔ),曼哈頓距離為聚類依據(jù),使用地圖分析工具獲取案發(fā)地理位置信息,計算案發(fā)地之間的距離,研究公交扒竊行為的犯罪熱點現(xiàn)象。
定義集合A{i=1,2,3,…,n}用于存放聚類數(shù)據(jù),分析過程如下。
步驟1 按案件的地理位置坐標(biāo)進行排序,將排序結(jié)果存入定義集合A{i=1,2,3,…,n}中。
步驟2 依次計算Ai與集合中其他元素的曼哈頓距離Ai=(xi,yi),d=|xi-xj|+|yi-yj|,其中j不等于i。
步驟3 將步驟2所得的集合中距離最近點Ax和Ai作為新的集合,記作(Ax,Ai)。
步驟4 循環(huán)執(zhí)行步驟2和步驟3,最終得到新的集合B{(Ah,Ak),(Al,Ag),(Am,An),(Ao,Ap),…,(Ax,Ay)}。
步驟5 依次計算步驟4中得到的新集合中元素的中心點,以每個集合的中心點為新的元素,計算中心點的曼哈頓距離,將距離最近的2個元素集合合并為新的集合,記作(Ah,Ak,Al,Ag)。
步驟6 重復(fù)步驟5,最終形成新的集合C{(Ah,Ak,Al,Ag),(Am,An,Ao,Ap),…,(Ax,Ay,Au,Az)}。
步驟7 重復(fù)步驟5、6,直到d>10公里。
步驟8 重復(fù)步驟2、3、4、5、6、7,將所有集合放入集合D中。
步驟9 生成的集合D即為實驗結(jié)果。
步驟10 循環(huán)集合D,取出每個集合的中心點及元素個數(shù),最終形成{(x,y,n)…….},x為中心點橫坐標(biāo),y為中心點縱坐標(biāo),n為元素數(shù)量。
本文實驗的數(shù)據(jù)為某市某區(qū)域的公交案件,運行環(huán)境為1臺算法分析工作機和1臺地圖分析工作機,考慮到案件數(shù)據(jù)的敏感性,算法分析需要使用原始案件數(shù)據(jù),因此將算法分析工作機部署在特殊的網(wǎng)絡(luò)環(huán)境,地圖分析工作機部署在外網(wǎng)環(huán)境,將算法分析結(jié)果傳輸?shù)降貓D分析工作機上再進行地圖分析。具體配置如表2所示。
表2 工作機配置表
算法實現(xiàn)以Python語言為編程語言,依據(jù)算法設(shè)計的步驟進行算法開發(fā),定義points為案件的存儲集合,初始指派每個點為單獨的一個簇,并放入groups中,具體如下。
(1) 自下往上聚類
groups= [pt_idx for pt_idx in range(len(points))]
pt_pt_dis = {}
for pt_idx1,pt1 in enumerate(points):
for pt_idx2,pt2 in enumerate(points):
if (pt_idx1 < pt_idx2):
pt_pt_dis[str(pt_idx1)+"_"+str(pt_idx2)] = abs(t1. lng-pt2. lng) + abs(pt1.lat-pt2.lat)
按距離進行排序
pt_pt_dis =
OrderedDict(sorted(pt_pt_dis.iteritems(), key=itemgetter(1), reverse=True))
獲取當(dāng)前簇個數(shù)
group_len = len(groups)
設(shè)定循環(huán)結(jié)束條件
end_len = int(group_len*0.15)
while group_len > end_len:
tps_key,dt_value = point_point_dis.popitem()
ptA = int(tps_key.split(’_’)[0])
ptB = int(tps_key.split(’_’)[1])
ptAG = groups[ptA]
ptBG = groups[ptB]
合并簇
if(ptAG != ptBG):
for idx in range(len(groups)):
if groups[idx] == ptBG:
groups[idx] = ptAG
group_len-= 1
(2) 獲取聚類的幾何中位數(shù)
def geometric_median(X, eps=1e-5):
y = np.mean(X, 0)
while True:
D = cdist(X, [y])
nonzeros = (D != 0)[:, 0]
Dinv = 1 / D[nonzeros]
Dinvs = np.sum(Dinv)
W = Dinv / Dinvs
T = np.sum(W * X[nonzeros], 0)
num_zeros = len(X)-np.sum(nonzeros)
if num_zeros == 0:
y1 = T
elif num_zeros == len(X):
return y
else:
R = (T-y) * Dinvs
r = np.linalg.norm(R)
rinv=0 if r==0 else num_zeros / r
y1 = max(0,1-rinv) * T + min(1,rinv) * y
if np.linalg.norm(y-y1) < eps:
return y1
y = y1
(3) 獲取聚類的幾何中位數(shù)中心
def get_posMedianCenter(pos):
xy_arr = np.array(pos).transpose(1, 0)
test_median = geometric_median(xy_arr)
pos_point = Point(test_median[0], test_median[1])
return pos_point
最終獲取聚類的幾何中位數(shù)中心和組的數(shù)量,形成表3數(shù)據(jù)。
表3 扒竊案件熱點數(shù)據(jù)
結(jié)果展示主要是借助地圖的可視化優(yōu)勢,將案件的熱點問題轉(zhuǎn)換為地圖的熱點問題,直觀地展示到地圖上,主要是使用高德地圖[6],具體如下。
(1) 定義地圖顯示的容器,引入地圖API
(2) 展示地圖
var map = new AMap.Map(’container’, {
resizeEnable: true,
province: "",
zoom:11
});
(3) 以熱點方式展示案件數(shù)據(jù),如圖1所示。
圖1 扒竊案件地理位置聚類熱點圖
var heatmap;
var heatmapData;//為表3中的數(shù)據(jù)
map.plugin(["AMap.Heatmap"], function () {
//初始化heatmap對象
heatmap = new AMap.Heatmap(map, {
radius: 25, //給定半徑
opacity: [0, 0.8]
});
heatmap.setDataSet({
data: heatmapData,
max: 300
});
});
實驗結(jié)果可以明確展示公交扒竊案的熱點。文獻[6]中表述公交扒竊案件多發(fā)生在車站、醫(yī)院、學(xué)校、商業(yè)區(qū)附近,其實隨著人民生活方式的改變、現(xiàn)金等貴重物品的攜帶形式的改變以及社會治安的強化,如今公交扒竊案件已經(jīng)慢慢地從車站、商業(yè)區(qū)等地方消失,更聚集在公園、銀行、學(xué)校、農(nóng)貿(mào)市場等老年人活動地以及流動人口聚集地。
隨著社會治安的加強和社會支付習(xí)慣的改變,公交扒竊行為已慢慢得在發(fā)達地區(qū)悄悄退出歷史舞臺,特別是發(fā)達地區(qū),以我們分析的歷史數(shù)據(jù)看,某市某區(qū)域的案發(fā)量已從歷史的平均每天上百起案件下降到如今的幾起案件,從原來的商業(yè)積聚區(qū)域慢慢轉(zhuǎn)移到公園、銀行、學(xué)校、農(nóng)貿(mào)市場等老年人活動地以及流動人口聚集地。
公交扒竊案件的演變也再次證明客觀環(huán)境治理是預(yù)防公交扒竊案件的重要因素之一。公交扒竊案是犯罪者對客觀環(huán)境的一種臨時判斷而做出的犯罪行為,這種臨時起意、趁人不備,使用秘密方式竊取他人財物的犯罪行為非常受限于客觀環(huán)境,因此要加強防扒宣傳,提供防扒意識,可以有效減少公交扒竊這一特殊案件的發(fā)生。
公交扒竊依然是社會常見的犯罪類型,特別是目前的受害群體慢慢轉(zhuǎn)移到老年人經(jīng)常出入的場所,這更值得社會治安治理者的重視,每一起案件的發(fā)生都嚴重影響了人民的財產(chǎn)和安全感。希望本文提出的一種公交扒竊熱點分析方法能為社會治理提供一些參考和依據(jù)。
翻閱歷史論文期刊,公交扒竊案件相關(guān)的論文也逐年下跌,研究方向也從案件的分析轉(zhuǎn)向案件趨勢的分析,本文在研究公交扒竊熱點分析時也側(cè)重趨勢分析,通過熱點分析能為公交扒竊案件的預(yù)防和治理工作提供一些參考,為公交扒竊案件退出歷史舞臺作出一點貢獻。