极客星球|基于加权DBSCAN的工作地居住地计算方法
极客星球开发者
2021-06-03

随着智能手机和信息通信技术的不断发展和普及,大规模的轨迹数据存储已经比较普遍,成为挖掘用户行为模式的重要来源,工作地和居住地是用户行为模式的重要表现,可以用于辅助智能城市的建设,比如优化通勤路线、产业布局、分析人口流动情况等等,从而减少交通拥堵、提高市民生活便利性和满意度等。但是现有的工作地居住地计算方法存在不同程度的问题,本文提出一种改进方案。

 

01、现有方法

目前的工作地居住地定位方法主要有两种,一是基于规则,一是基于模型;

 

基于规则的方法是通过业务经验设计逻辑,根据设定的统计指标选择工作地居住地。

 

比如基于汽车的数据会基于用户每天的起始点和终点,来统计频次、时长等指标,选择排名最高的作为工作地居住地;

 

基于基站的数据会统计用户连接每个基站的时间,选择工作时间连接时间最长且月度工作日连接次数/休息日连接次数最高的作为工作地;

 

基于模型的方法是通过聚类+有监督模型来定位工作地居住地,通过聚类来剔除噪声点,然后通过规则来生成特征,通过人工对工作地居住地进行标注,最后通过有监督模型来预测工作地和居住地。

 

02、现有方法局限性

基于规则的方法局限性比较大,不同行业都有自己的规则和特定结构的数据,不够通用;且难以穷尽所有规则,对于异常情况的适应性不够好,复杂且不够精确;

 

基于模型的方法需要进行人工标注,成本较高且整个计算流程比较复杂;准确率对特征的代表性和样本覆盖的广度依赖较大;

 

现有方法计算出的工作地居住地经常不符合业务逻辑,如正常的工作地应该大部分分布在写字楼、工业园区等poi,少部分分布在餐厅、商场等其他各种类型的poi;正常的居住地应该大部分分布在小区、别墅、公寓等poi,少部分分布在其他各种类型的poi;但是现有方法计算的结果受数据源影响较大,并不能保证这一点,导致可能大量的工作地出现在小区里,大量的居住地出现在写字楼或商场里等情况,导致业务不可用。

 

本文提出了一种更通用的计算方法,降低整个流程的复杂性并提高准确性;设计一种更贴近业务的计算方法,提高工作地居住地的可用性。

 

03、背景知识介绍

1、DBSCAN聚类简介:

首先设定一个阈值a,对于样本集中的每个点,以这个点为圆心,a为半径划一个圆,被包含在这个圆中的点的个数记为b(包括圆心);

 

然后再设定一个阈值c,如果b>=c,则把这个圆心叫做核心对象;

 

如果一个核心对象A被包含在另一个核心对象B的圆中,核心对象B被包含在另一个核心对象C的圆中,则称A到C是密度可达的;

 

如果核心对象X到核心对象Y密度可达,核心对象Z也密度可达,则Y和Z密度相连,找到最大的密度相连的样本集合,就是聚类的一个簇,如下图所示:

 

其优点在于:

 

可以对任意形状的稠密数据集进行聚类,适用于地理位置数据;相对的,K-Means之类的聚类算法一般只适用于凸数据集;

 

可以在聚类的同时发现异常点,对数据集中的异常点不敏感;

 

聚类结果没有偏倚,相对的,K-Means之类的聚类算法,初始值对聚类结果有很大影响。

 

2、加权几何平均数:

 

3、经纬度求中心点

Lat_i = lat_i * pi/180,i= 1,2,…,n

Lon_i = lon_i * pi/180,i= 1,2,…,n

 

xi = cos(Lat_i) * cos(Lon_i),i= 1,2,…,n

yi = cos(Lat_i) * sin(Lon_i) ,i= 1,2,…,n

zi = sin(Lat_i) ,i= 1,2,…,n

 

x = (x1 + x2 + ... + xn) / n

y = (y1 + y2 + ... + yn) / n

z = (z1 + z2 + ... + zn) / n

 

Lon = atan2(y, x)

Hyp = sqrt(x * x + y * y)

Lat = atan2(z, hyp)

 

lon_center = Lon * 180/pi

lat_center = Lat * 180/pi

 

04、具体方法

1.    对用户近X个月的轨迹数据做预处理,清洗掉其中的异常数据和节假日数据(大小长假,但不包括周末);

 

2.    划分工作时间和休息时间;

 

3.    爬取poi数据数据,并对poi数据进行清洗;

 

4.    判断用户的轨迹数据是否落在某类poi中:

 

有poi边界的直接使用poi边界判断;

 

没有poi边界的,使用poi点经纬度所在geohash8及周围一圈geohash8判断(九宫格);


地铁站以各出口经纬度点为中心点,生成边长100m的正方形,即poi点的经纬度加减0.0005做判断;

 

5.    根据计算工作地还是计算居住地,给落在不同类别poi中的点以不同的权重;

 

比如计算工作地时,如果点落在写字楼中,给一个较高的权重;

 

6.    对于落入不同的时间段的轨迹点,同样给不同的权重;

 

比如计算工作地时,工作时间会给一个比较高的权重;

 

7.    根据5、6点中给出的权重,分别对每个用户的工作时间和居住时间轨迹数据进行加权DBSCAN聚类,并调优参数;

 

8.    计算每个簇内的工作/休息时间点数、工作/休息时间天数,

 

计算每个用户的工作/休息时间总点数,

 

计算用户的每个簇内工作/休息时间点数,占该用户工作/休息时间总点数比例,

 

计算用户的每个簇内工作/休息时间天数,占该用户工作/休息时间总天数比例,

 

对总点数的比例和总天数的比例计算加权几何平均数,得到每个簇的得分,工作时间得分第一的簇为工作地,休息时间得分第一的簇为居住地;

 

举例:第一个例子最终选择的B类,第二个例子是C类

 

 

9.    对工作地簇和居住地簇根据公式分别计算其地理中心点,得到工作地居住地的最终位置;

 

10.  根据工作地居住地簇中的活跃天数和点数,给出相应的工作地居住地置信度,活跃天数越多,置信度越高,点数越多,置信度越高;

 

11.  因为即使采用了上述加权聚类的方法,也不能保证结果完全符合业务逻辑,所以给出工作地/居住地一定范围内各类poi的类型及与工作地/居住地的距离,以便于业务方自己根据距离来对工作地/居住地进行筛选。