一、热力图工具
利用百度开放平台的成熟热力图接口,挖掘一下审计中的应用场景。
比如IPO走访在制定走访计划的时候,一般是能拿到所有的走访地址的,如果把这些走访地址全部平铺在地图上,按客户/供应商数量或者交易金额作为权重来形成一个热力图作为计划安排的参考,会更加的有针对性,也更加清晰直观,效果如下图
![](https://www.gzaudit.com/wp-content/uploads/2022/08/热力图1.png)
![](https://www.gzaudit.com/wp-content/uploads/2022/08/热力图2.png)
![](https://www.gzaudit.com/wp-content/uploads/2022/08/热力图3-1024x615.png)
一般来说走访线路都是由被审计单位的人员来安排的,因为他们更加熟悉情况,但是如果自己心理也有一个图,就能判断他们安排的是否合理,是否把更多的走访资源浪费在不重要的地点,一定程度来说这也是风险应对的措施之一
由于使用这个接口以及获取地址的经纬度需要一定的编程能力,一般人用不了,所以我把他部署到自己的服务器上了,并且在本地做了一个Excel工具,大家只要用Excel工具就能获取到地址所对应的坐标,然后上传到我的服务器就能自动生成热力图了。
使用步骤:
第一步:注册高德的个人开发账号获取key,大概需要2分钟
第二步:把key复制到上面的E1单元格,key就是高德用来识别和记录你使用次数的标志
第三步:填好A列的地址
第四步:点击获取坐标,获取完毕后ctr+S保存文档(每秒获取5-6个地址,地址多的话需要耐心等待,500个不到2分钟)
第五步:点击上传,会打开热力图网页,选择文件时选择本文档
![](https://www.gzaudit.com/wp-content/uploads/2022/08/热力图.gif)
获取坐标是用的高德的地址解析api,虽然百度也有,但是百度申请key的步骤比较麻烦,高德直接用支付验证一下就能迅速注册。
本来想公开自己的key给大家用,但是我发现每个人的免费额度是5000次查询/天,并且对并发量也有限制,一个人用肯定是绰绰有余,但是如果2-3个人同时用会立马封掉这一天的使用权。
所以大家在用之前要先去高德注册一个账号,获取自己的key,大概2分钟的样子。
具体的注册方法可以看下面的链接,非常简单:
https://zhuanlan.zhihu.com/p/96838566
还有几点再说明一下:
如果想用金额作为热力的权重,则在C列把对应的金额填好,但是要注意!
这里的值如果超过了500,则在地图上直接会变成最红的颜色,如果全部都大于500,那么就体现不出金额的热力分布了,所以可以把这一列的数字除以一万,比如500万就变成500了,我也专门做了一个按钮,金额除万。
![](https://www.gzaudit.com/wp-content/uploads/2022/08/4.png)
金额处理好了以后,点击金额权重即可,本质上就是改变坐标中的“count”值而已(默认为50不用动),我用代码都写好了,当然你想手工替换也行。
点击上传会自动用IE浏览器打开网页,并自动打开选择文件的框,手动选择刚刚保存的文件,则会自动上传并且跳转到热力图的网页
![](https://www.gzaudit.com/wp-content/uploads/2022/08/5.png)
地址:https://api.gzaudit.com/map/file/
如果你不想用IE浏览器,那么就手动打开其他浏览器,输入上述网址,手动点击选择文件,再点上传按钮即可
二、DBSCAN分析工具
年初的时候函证中心的老师让我帮写几个函证风险模型,比如在全所几十万条数据的发函清单中,将多个函证地址、电话号码、联系邮箱等信息是否完全相同的组提取合并在一起,作为风险提示项发给项目组进一步核实
![](https://www.gzaudit.com/wp-content/uploads/2023/05/8e4146bbbc829d658884ba5ec11b8a74-1024x66.png)
现在所里的所有项目组收到的风险提示信息就是我用VBA写出来的,这个倒是不难,但是其中有一个模型:距离极为接近的2个以上地址,也需要作为疑似风险来提示项目组。当时年报太忙,一时想不到什么很好的办法,就搁置了。
最近看了几个聚类的算法,发现DBSCAN算法非常适合解决这个问题
DBSCAN算法是一种基于密度的聚类算法,它的核心思想是基于数据点的密度将数据划分成不同的簇。具体来说,他会从一个数据点开始,寻找到它邻域半径内的所有数据点,如果这些点的数量大于等于指定的最小点数,则认为这些点属于同一个簇,如果这些点的数量小于最小点数,那么它们就是噪声点,接下来,以这些点为新的起点,重复以上步骤,不断扩展簇的范围,直到无法再扩展为止。
举个例子:
如果设置邻域半径为r,最小点数为3,那么上图中的点1、2、3满足聚集条件(在r内,数量≥3),属于同一个簇(距离相近的地址组),点4为噪声点(正常的地址)
![](https://www.gzaudit.com/wp-content/uploads/2023/05/7a110c447dacbbec9f8b3344be8b5b01.png)
了解了算法以后,下面要做的就是将函证地址通过高德API转为为经纬度坐标打在地图上,将每个函证地址作为一个数据点,通过DBSCAN算法将它们聚类成不同的簇,以此达到识别函证地址风险的目的,工具使用的是Python的scikit-learn机器学习库以及folium地理信息可视化库。
![](https://www.gzaudit.com/wp-content/uploads/2023/05/077bb27d4b6e10f21f5bf6ff38785e6b.png)
比如在上图中,将各个函证地址打在地图上,设置邻域半径为500米,最小点数为2,将同一个聚类簇(相近地址组)标记为同一个颜色(紫色),噪声点(正常地址)标记为黑灰色,可以迅速观察到右下角疑似异常的情况,也就是说灰色的点之间距离都超过了500米,紫色的点之间小于500米,同时在Excel中,在对应的地址后标记其所在的组别(相同的数字代表他们属于同一个组,距离接近)
![](https://www.gzaudit.com/wp-content/uploads/2023/05/d6b0494987cb8eb36a852e76ca560ee5.png)
下面举两个例子,首先将邻域半径设置为50米,:
案例1:某消费类公司的函证地址在DBSCAN算法下的结果图如下:
![](https://www.gzaudit.com/wp-content/uploads/2023/05/3eb22de54a9e8d64b904b94d2058acc6.png)
在上图中纳入聚类簇的地点非常多(彩色),也就是说全国有非常多组函证地址不足50米的情况,经过了解,该公司的经销商聚集度比较高,在同一个楼中会开设非常多的档口,因此体现在地图上重合度很高。
案例2:某建筑公司的函证地址在DBSCAN算法下的结果图如下:
在上图中可以看到,绝大部分的点都是正常地址(黑灰色),对聚类的结果进行分析后发现有几种情况:①二次发函造成的地址重复;②两个被函证对象地址完全相同;③部分相似的地址在高德地图中获取的经纬度信息相同;④确实是两函证地址之间的距离小于50米。那么②③④涉及到的被函证单位组可以作为风险提示项做进一步核实。
通过这两个案例可以看出,在使用DBSCAN算法对函证地址进行分析时,并不是所有聚类簇都是异常点,应结合被审计单位所处的行业进行具体分析。
除了使用DBSCAN算法对函证地址的风险进行判断外,还可以用于分析客户供应商的分布情况,比如某商品批发行业结果图如下:
![](https://www.gzaudit.com/wp-content/uploads/2023/05/cde90719c9f7a10bcc45a83e48a6d8d2.png)
在邻域半径为50米时,样本比较正常,部分聚类簇为二次发函的相同地址
![](https://www.gzaudit.com/wp-content/uploads/2023/05/06a447206c43fb78be671b7db203df67.png)
将邻域半径扩大到1km时,聚类簇明显增多,可以看出客户或经销商铺店的选址会在半径一公里左右,对于我们走访时的路径规划也有一定的意义。
使用DBSCAN算法可以有效地对函证地址进行聚类,识别出距离接近的函证地址组,为审计师判断函证地址真实性提供了有力的支持。同时,相较于K-means算法,DBSCAN能够自适应地确定簇的个数,避免了事先设定簇的个数可能导致的误差。
但是,该算法需要选择合适的邻域半径,邻域半径过大会导致多个函证地址被聚类在同一个簇中,邻域半径过小则可能会忽略掉一些距离较近的函证地址。因此,在使用该算法时需要根据实际情况进行调整。
依旧是老规矩,这个工具我部署在服务器上了,在我的Excel工具中(下载地址:www.gzaudit.com),把地址填进来,输入你的高德密钥,即可获取对应的经纬度坐标,高德的api是每人每天可以免费使用5000次,应该够用了
![](https://www.gzaudit.com/wp-content/uploads/2023/05/c91dcd22c570327b2dc2f023c423291a-1024x396.png)
拿到经纬度以后,打开网页上传本文档,即可下载对应的地图以及分组后的Execl文档
![](https://www.gzaudit.com/wp-content/uploads/2023/05/1cd3df6d22464c418e2a11a5cea8bd30.png)
模板里面的邻域半径是多少呢?如何自行设定呢?
可以自己用python跑,领域半径的代码在python中
哥哥,DBS表格里的网址,超链接是错的
收到,已重新上传,感谢
坐标无法自动生成
检查高德的key是否申请成功
老师,我申请到了key,也把地址粘贴在了A列,还是无法解析出坐标,是需要和高德上的地址一致吗?
不会呀
。。。
我也出现了这问题,最后好了,你看KEY是不是放在有文字的那个单元格里面