发明内容
发明目的:本发明所要解决的技术问题是针对现有技术的不足,提供一种基于数据分析与挖掘的查处高速公路换卡逃费行为的方法。
为了解决上述技术问题,本发明公开了一种针对高速公路换卡逃费行为数据分析与挖掘的方法,包括以下步骤:
步骤1,采集所需数据,包括:用于逃费分析的收费记录数据以及用于抽取照片取证分析结果的路段卡口数据和服务区卡口数据,收费记录数据记为数据集S,路段卡口数据和服务区卡口数据记为数据集K;收费记录数据包含各收费站出入车辆进收费站和出收费站的时间戳、车辆出入收费站被拍照识别的车牌记录(即车牌图像),路段卡口数据包含路段卡口(即安装在高速公路路面上对指定车道内机动车进行不间断自动检测和记录的装置,例如设置休息区进出口以及一些特定位置进行超速抓拍的装置)对过往车辆抓拍后所识别的车牌号及原始影像数据,服务区卡口数据包含服务区卡口对出入服务区车辆抓拍后所识别的车牌号及原始影像数据;
步骤2,对数据集S中的记录数据进行预处理,并检测是否符合要求;删除不符合要求的记录数据,保留符合要求的记录数据;
步骤3,计算步骤2数据集S保留的记录数据中车辆出入收费站被拍照识别的车牌记录之间的Levenshitein距离,并追加到每条记录数据末尾,保存为新数据集S1;
步骤4,对数据集S1的全部记录数据按照不同的Levenshtein距离大小进行频度分析,获得频度分布直方图;
步骤5,基于步骤4的频度分布直方图,使用大津算法求出最大类间方差时的分割阈值T;
步骤6,使用步骤5求出的阈值T,对步骤3获得的数据集S1进行分割,将Levenshtein距离大于阈值T的记录数据保存为数据集S2;
步骤7,对数据集S2进行匹配查找,找到疑似换卡记录对,结果储存为数据集S3;
步骤8,对数据集S3中的记录按照各收费站出入车辆的车辆出入时间戳、车辆出入收费站被拍照识别的车牌记录在数据集K中查找是否存在对应记录,若存在对应记录,则提取对应路段卡口和服务区卡口的原始影像数据。
至此疑似换卡逃费的车牌和行驶记录以及影像证据均已获得。
本发明步骤2中的预处理方法是删除数据集S中不能被分析的记录数据,判断方法是若数据集S中的车牌记录不全或缺失,即判定车牌是无效车牌并删除该条记录数据。
本发明步骤2中的预处理方法包含删除数据集S中正常通行的车辆记录数据,判断方法是若车辆出入收费站被拍照识别的车牌记录相符,则删除该条记录数据。
本发明步骤7中所述对数据集S2进行的匹配查找是基于容错换卡模型进行的两两匹配查找,方法如下:Si,Sj分别是数据集S2中第i条和第j条收费记录数据,收费记录数据Si,Sj同时满足以下条件时,判定Si与Sj为一对疑似换卡记录数据:
其中,PEN和PEX分别为车辆进收费站和出收费站的车牌号,TEN和TEX分别为车辆进收费站和出收费站的时间戳,和分别为数据集S2中第i条收费记录数据中车辆进收费站和出收费站的车牌号,和分别为第j条收费记录数据中车辆进收费站和出收费站的车牌号,和分别为数据集S2中第i条收费记录数据中车辆进收费站和出收费站的时间戳,和分别为数据集S2中第j条收费记录数据中车辆进收费站和出收费站的时间戳。
本发明步骤7中所述对数据集S2进行的匹配查找是基于容错换卡模型进行的两两匹配查找,方法如下:Si,Sj分别是数据集S2中第i条和第j条收费记录数据,收费记录数据Si,Sj同时满足以下条件时,判定Si与Sj为一对疑似换卡记录数据:
其中,PEN和PEX分别为车辆进收费站和出收费站的车牌号,TEN和TEX分别为车辆进收费站和出收费站的时间戳,和分别为数据集S2中第i条收费记录数据中车辆进收费站和出收费站的车牌号,和分别为第j条收费记录数据中车辆进收费站和出收费站的车牌号,和分别为数据集S2中第i条收费记录数据中车辆进收费站和出收费站的时间戳,和分别为数据集S2中第j条收费记录数据中车辆进收费站和出收费站的时间戳;为第i条收费记录数据中车辆进收费站的车牌号PEN和第j条收费记录数据中车辆出收费站的车牌号PEX之间的Levenshtein距离,为第i条收费记录数据中车辆出收费站的车牌号PEX和第j条收费记录数据中车辆进收费站的车牌号PEN之间的Levenshtein距离,ΔT的值等于大津算法所求出的阈值T,若和的值不大于ΔT,则Si与Sj为一对疑似换卡记录。
本发明步骤7中所述对数据集S2进行的匹配查找是基于改良换卡模型,对数据集S2编制哈希表,以哈希检索法对数据集S2进行匹配查找,方法如下:Si,Sj分别是数据集S2中第i条和第j条收费记录数据,收费记录数据Si,Sj满足以下条件时,判定Si与Sj为一对疑似换卡记录数据:
或 (5)
其中,PEN和PEX分别为车辆进收费站和出收费站的车牌号,和分别为数据集S2中第i条收费记录数据中车辆进收费站和出收费站的车牌号,和分别为第j条收费记录数据中车辆进收费站和出收费站的车牌号,为第i条收费记录数据中车辆进收费站的车牌号PEN和第j条收费记录数据中车辆出收费站的车牌号PEX之间的Levenshtein距离,为第i条收费记录数据中车辆出收费站的车牌号PEX和第j条收费记录数据中车辆进收费站的车牌号PEN之间的Levenshtein距离,ΔT的值等于大津算法所求出的阈值T。
本申请提出一种基于数据分析与挖掘的方案,使用相似度量化、自适应阈值切割、换卡数据匹配分析、哈希查找的技术手段,实现了海量数据的自动分析。
本发明基于高速公路信息系统的多源数据,以数学模型描述了换卡逃费现象的数字特征。基于所建模型,应用有效的算法,提供了一套高速公路车辆逃费行为数据分析方法。本申请能从数据中寻找可疑的换卡逃费车辆记录。发明填补了目前智能交通分析逃费车辆的空白,与现有技术相比,具有的有益效果是:
1)能够对海量数据进行自动分析。可以同时对跨月,季,年度的数据进行分析,避免了通过人工判读当月数据的局限性。
2)智能判别记录中车牌不一致的记录来源于机器识别误差还是人为换卡行为。
3)采用新颖算法和模型提供了高效快速分析的能力。
4)结合多源数据,影像照片,核实与佐证分析的结果。
实际应用中,该方法可以嫁接于大数据分析平台,采用分布式存储,内存计算,NoSQL查询等技术,为在更大范围高速路网中查处偷逃车辆提供技术支撑。
具体实施方式
本申请需要以下数据:
·收费记录数据
·路段卡口数据
·服务区卡口数据
收费记录数据汇集了各收费站出入车辆的流水记录。记录描述了车辆出入时间戳,车辆出入收费站被拍照识别的车牌记录,车辆类型,轴重,以及收费信息。
路段卡口数据描述了路段卡口对过往车辆抓拍后所识别的车牌号,抓拍时间戳,抓拍时行驶速度与方向,及原始影像数据。
服务区卡口数据描述了服务区卡口对出入服务区车辆抓拍后所识别的车牌号,抓拍时间戳,抓拍时行驶速度,及原始影像数据。
如图1所示,本发明公开了一种针对高速公路换卡逃费行为数据分析与挖掘的方法,包括以下步骤:
步骤1,采集所需数据,包括:用于逃费分析的收费记录数据以及用于抽取照片取证分析结果的路段卡口数据和服务区卡口数据,收费记录数据记为数据集S,路段卡口数据和服务区卡口数据记为数据集K;收费记录数据包含各收费站出入车辆进收费站和出收费站的时间戳、车辆出入收费站被拍照识别的车牌记录,路段卡口数据包含路段卡口对过往车辆抓拍后所识别的车牌号及原始影像数据,服务区卡口数据包含服务区卡口对出入服务区车辆抓拍后所识别的车牌号及原始影像数据;
步骤2,对数据集S中的记录数据进行预处理,并检测是否符合要求。不符合要求的记录数据予以删除,符合要求的记录数据保留;
预处理定义了一个方法用于排除不能被分析的数据,并检查记录是否具备换卡数据的基本特征。需被排除的数据的特征是记录牌照号不全或缺失,记录数据是无效车牌,如显示“无车牌”,“//////”,“------”,“??????”等。另外,正常通行的车辆记录不具备换卡特征,需予以检测和排除,其判断方法是出入车牌记录相符;
步骤3,计算步骤2数据集S保留的记录数据中车辆出入收费站被拍照识别的车牌记录之间的Levenshitein距离,并追加到每条记录数据末尾,保存为新数据集S1;
关于Levenshitein距离算法的使用方法如下:
本申请引入了Levenshtein距离算法(Levenshtein,1966),用于描述收费记录中出入车牌号不一致的差异,该方法计算出一个量化值来描述差异的程度。
从信息学和计算机科学角度,Levenshtein距离量化了两组序列间的差异。两组字符串之间的Levenshtein距离表征了对其中一组字符串进行编辑转成另一组字符串所需要的最小单个字符编辑操作次数。其中,单个字符编辑操作可以是以下三种:(1)将一个字符替换成另一个字符,(2)插入一个字符,(3)删除一个字符。这个算法最早由前苏联科学家莱文施坦(Vladimir Levenshtein)于1965年提出。
从数学角度,对于给定两组字符串a和b,定义其Levenshtein距离(leva,b)可表达为:
其中i,j指针字符串a和b的某位字符作为指示函数,当ai与bj字符相等时取值为0;当ai与bj字符不相同时,取三个算式中最小值。这三个算式则分别计算了采取删除,插入和改写操作所需要的操作数。
Levenshtein距离算法原理与实现简单,能巧妙量化描述近似信息之间的相似程度,应用领域广泛。如:DNA分析,语音识别,拼写检查,抄袭侦测,机器学习与机器翻译等。本申请在高速交通分析中引入此算法,实现了车辆入站出收费站牌照误差的量化测量。
收费记录中出入车牌号不一致有以下几种原因造成:(1)车牌识别错误。这是车牌号不一致的主要构成之一,是由于识别算法缺陷,拍摄条件不利,以及车牌污损或遮挡造成。这类记录在搜寻换卡逃费分析中属于干扰噪音数据,应被排除。(2)预发卡和收费员作业的误差。入站车辆大量排队积压时,会由人工发放预编卡加快积压车辆放行。预编卡发放导致收费记录中缺失车辆入站车牌信息,取而代之的是统一的“无车牌”或某一相同车牌的记录。发放预编卡是导致车牌不一致的另一因素。(3)车辆换卡逃费。这部分的记录在占车牌不一致的总体中比重不大,是由换卡逃费造成的。本申请所需的分析挖掘需要基于这类数据。前两类不一致的记录则是换卡逃费分析中的噪音数据。
引入量化的Levenshtein距离后,上述第(1)类车牌不一致记录的Levenshtein距离值是较小的非零值(通常不大于3),而第(3)类记录的Levenshtein距离值通常较大。因此,可以使用一个阈值来区分这两类数据。本申请的采用大津算法来寻找这个最优阈值从而分离出后者——疑似换卡记录。至于第(2)类车牌误差,既已经丢失车牌信息,无法用于换卡逃费车辆的寻找,且增加了数据集的空间,加大了分析的计算复杂性,故而设计在预处理阶段将之排除;
步骤4,对数据集S1的全部记录按照不同的Levenshtein距离大小进行频度分析,获得频度分布直方图;
步骤5,基于步骤4频度分布直方图,使用大津算法求出最大类间方差时的分割阈值T。大津算法的使用如下:
最大类间方差算法(Maximial Inter-class Variance Algorithm),又名大津算法(Otsu'sMethod),由日本学者大津展之(Nobuyuki Otsu)在1979年提出。
大津算法是一种自适应确定图像聚类阈值的方法。在图像处理领域,该算法用于图像二值化处理。本申请引入此方法,通过获取最优阈值来提取目标数据。
大津算法通过寻找一组变量中的某个特定阈值,使得以该阈值划分的两类数据的类间方差最大,类间方差可以定义为:
其中,ω是阈值t所分隔产生的一组变量在总数上的比重,是每组变量的方差。大津指出,最大类间方差(Maximial Inter-class Variance)与最小类内方差(MinimalIntra-class Variance)是等效的,后者可以表示为:
其中,μ表示类内部变量的平均值。
由阈值t所分割的类占总体比重在总体的频度分布直方图上可由t分割获得,表示为:
类中变量均值可表示为:
其中x(i)是频度直方图上第i柱的中值。同理,ω2(t)和μ2(t)由此方法从t右边的直方图上获得。通过迭代法计算不同程度上t产生的类比重和类均值,最终获得类间方差最大时t的取值。
大津算法可以有效的把图像按其自身的灰度特征分成背景和目标两部分。其数学意义是背景与目标之间方差的最大化,而现实意义代表了所分离出的背景和目标具有最强的对比度。本申请引入此算法对数据集进行分类,从而达到提取目标数据,缩减待分析数据集大小的作用。
在图1中的第3步,对每条记录的出入车牌进行Levenshtein距离量化后,数据集的空间并无变化。因此,提取分析所需的有效数据(目标数据)降低了数据集空间从而节省运算开销,换卡模型对海量数据进行分析变得可行。因为计算难度级会随着目标数据集增大而增大,海量数据无法直接分析。因此,本申请步骤6提取有效的目标数据,缩减了数据集空间,用于之后的模型分析。这一过程排除数据集中合理的通行记录(以下称噪声数据)。噪声数据体现为两类:(1)车牌记录无误差;(2)车牌记录有误差。对于第一类噪声,可用等值判断来排除;而对于第二类噪声,由于识别错误,原本合理的行车记录变成了出入车牌照不一致的疑似记录。
大津算法的引入可以有效的把数据集分为背景数据(噪声数据)和目标数据(可疑较大的记录)。从数据角度看,第一类噪声数据的Levenshtein距离应为零(已在预处理中被剔除),而第二类噪声数据的Levenshtein距离值大于零但相对较小。因为牌照识别的误差往往仅存在于车牌的某一两位,通常不小于三。假定存在某个阈值T,在数据集以Levenshtein值作为频度分布图上,T可以有效分离两类噪音和目标数据。大津算法最大化对比度的特征与自适应性为T的求解提供了可行的方案。
利用大津算法对数据总体求出分隔阈值T后,Levenshtein距离大于此阈值的数据为所需目标数据,将被用于后期分析。这些数据有以下特征:数据量占总体相对较小,每条记录的出入车牌存在差异,且差异很大;
步骤6,使用步骤5求出的阈值T,对步骤3获得的数据集S1进行分割,将Levenshtein距离大于T的记录数据保存为数据集S2,用于进一步分析;
步骤7,基于容错换卡模型对数据集S2进行两两匹配查找,找到高度可疑的换卡记录对。具体算法如下:
为了进一步对换卡记录进行分析,尤其是两车换卡行为,考虑以下情况:若某条收费数据(以下称A记录)是某换卡车辆经由收费站提交的,一定存在另一换卡车的记录(以下称B记录)与之相对应。为了查找到这类记录对,使用换卡模型匹配算法,对过滤下来的可疑换卡记录进行两两匹配。若某两条收费数据(以下称A,B记录)是车辆进行换卡后,在出收费站后经收费卡提交的,则存在以下特征:
·A记录的入站车牌等于B记录的出收费站车牌,A记录的出收费站车牌等于B记录的入站车牌;
·一组对应的换卡数据中,A记录描述的收费卡在高速公路中的经过时间段,必然与B记录的该时间段有交集。
根据以上定义的特征,Si,Sj分别是数据集S2中第i条和第j条收费记录数据,收费记录数据Si,Sj同时满足以下条件时,判定Si与Sj为一对疑似换卡记录数据:
其中,PEN和PEX分别为车辆进收费站和出收费站的车牌号,TEN和TEX分别为车辆进收费站和出收费站的时间戳,和分别为数据集S2中第i条收费记录数据中车辆进收费站和出收费站的车牌号,和分别为第j条收费记录数据中车辆进收费站和出收费站的车牌号,和分别为数据集S2中第i条收费记录数据中车辆进收费站和出收费站的时间戳,和分别为数据集S2中第j条收费记录数据中车辆进收费站和出收费站的时间戳。
换卡模型根据公式(11)和(12)对输入的记录进行逻辑判断,并输出判别结果。在实际操作中,考虑到某些记录的牌照存在识别误差,使用公式(13)判别过于严苛,因此可使用以下公式替代:
其中,为第i条收费记录数据中车辆进收费站的车牌号PEN和第j条收费记录数据中车辆出收费站的车牌号PEX之间的Levenshtein距离,为第i条收费记录数据中车辆出收费站的车牌号PEX和第j条收费记录数据中车辆进收费站的车牌号PEN之间的Levenshtein距离,若Si与Sj为一对疑似换卡记录,则和)值应该不大于ΔT。ΔT的取值可采用大津算法所求出的阈值T,或小于该阈值的数,当ΔT取值趋于0时,模型对车牌识别的容错率趋于最小。
步骤8,当数据集较大时,基于改良换卡模型,对数据集S2编制哈希表,以哈希检索法对数据进行匹配查找,结果存储为数据集S3。算法原理如下:
哈希检索算法是基于哈希表的一种查找匹配算法。哈希(Hash)表,又称散列表,是根据键(Key)直接访问内存存储位置的数据结构。哈希检索通过哈希函数,用键的哈希值快速索引到对应的数据。
根据步骤7中所述换卡模型,使用公式(12)和(13)匹配数据集中所有记录,若采用穷举检索,时间复杂度将是O(n2)。数据量很大时计算时间的代价将极为高昂。本申请数据预处理和阈值分割已经缩减了待分析数据集的大小,得出较小的可疑目标数据集用于换卡模型分析。在实际环境情况下,为了对处理过程进行性能上的进一步优化,还需从算法上进行改良。因此,本申请抛弃了穷举检索而改用哈希检索。
由于换卡模型匹配是一个查找过程,因此可以考虑到将待查找数据集全部装载入内存,并用哈希表进行索引。使用哈希检索,每次匹配查找过程的时间复杂度退化到O(1),对全部数据集进行查找匹配的时间复杂度是O(n),极大的加快了查找速度。
哈希检索的缺陷是仅能根据键值快速查找索引,无法适用于数值的大小比较,只能实现公式(11)的等值运算,无法满足公式(13)对识别误差的容错。
因此,为配合使用哈希检索,本申请结合公式(11)的等值判断和公式(13)容错机制,在实际操作中,采用以下公式判别换卡对:
或 (14)
原模型公式(13)对换卡记录Si,Sj要求同时满足:(a)记录Si的入站车牌与记录Sj的出收费站车牌的Levenshitein距离不大于阈值ΔT;(b)记录Si的出收费站车牌与记录Sj的入站车牌的Levenshitein距离不大于阈值ΔT。改良模型公式(14)要求上述条件(a)与(b)中只需满足一条,而对应的另一条则满足公式(11)的等值判断,亦即Levenshitein距离等于零。
在实际场景应用中,会发生数据量太大无法一次性装载入内存的情况。因此可以考虑采用大数据技术,将哈希表存储在大内存单机的NoSQL数据库中,不仅能够提供很大的容量,同时提供了高效的查询性能,同时也消去了每次分析装载数据进入内存的时间。NoSQL数据库提供的数据备份方案也保证了数据的可靠性与安全性。
步骤9,对S3中的记录,按照各收费站出入车辆的车辆出入时间戳、车辆出入收费站被拍照识别的车牌记录在数据集K中查找是否存在对应记录,若存在对应记录,则提取对应影像数据作为佐证。至此疑似换卡逃费的车牌和行驶记录以及影像证据均已获得。
实施例1
本实施案例使用了某高速公路公司所辖约260公里高速公路2014年3月至11月所有收费数据和相关路段卡口数据和服务区卡口数据,对换卡记录按上述方案进行了模型开发与测试。
本申请例采用了以下原始数据:(1)收费记录为5800万条,大小约为16Gb;(2)对应卡口记录1.4亿条,照片数据约1.5Tb;(3)服务区记录1600万条,照片数据约237Gb。
开发测试的硬件环境为intelCOREi5 CPU,内存8Gb,开发平台为MicrosoftWindows 8(64~bit),开发测试软件使用python3.3(64~bit),NoSQL数据库使用Redis2.8(64~bit)。
具体步骤如下:
步骤1,采集与准备所需收费数据(数据集S)用于逃费分析,相关路段卡口和服务区卡口数据(数据集K)用于抽取照片数据佐证分析结果。
步骤2,逐行读取数据集S中每条记录数据,并对每条记录数据进行预处理分析。不符合预处理要求的记录数据,直接丢弃。符合要求的记录数据调用Levenshtein算法函数,计算该条记录数据中车辆出入收费站被拍照识别的车牌记录之间的Levenshitein距离,并追加到每条记录数据末尾,输出符合要求的数据。保存为新的数据集S1,为下一步分析备用。
此步操作在约5800万条收费数据S中,获得322.77万条记录S1。正常数据占总体94.43%,出入车牌异常数据占5.57%,后者被输出保存为下一步分析备用。
步骤3,对数据集S1中记录按照其Levenshtein距离进行频度分析,获得频度分布直方图(如图2所示)。
步骤4,基于频步分布直方图,使用大津算法求出最大类间方差时的分割阈值T。
步骤5,根据分割阈值T,对数据集S1进行分割。Levenshtein距离大于4的记录被选取,成为可疑目标数据集,保存为数据集S2。
步骤6,对数据集S2编制哈希表,使用Redis作为哈希表的存储库。将S2的数据集以键(Key)和列表(List)的形式装载入Redis中。以记录的出收费站车牌作为键(key),记录中的其他数据作为内容添加到键所对应的列表中。使用列表可将多个记录出现同一个车牌的情况装在一个列表中。
步骤7,基于改良换卡模型,使用哈希检索算法,对Redis中的数据集S2,进行查找,找出换卡记录对。
对数据集S2中的每一条记录A做三次判断:首先,按照公式(13)判断是否存在另一条记录B(或多条),其出收费站车牌等于记录A的入站车牌。这里仅需检测在Redis的数据集里是否存在一条以A的入站车牌作为键值的列表。若存在,读取该键所对应列表的所有记录。其次,用A记录与列表中的每一条记录B进行下一步判断:计算A记录的出收费站车牌与B记录的入站车牌之间的Levenshtein距离是否小于△T。最后,在前两步条件成立的情况下,依据公式(11)判断该两条记录的时间同一性。对同时满足三次判断的两条记录,判定其为高度可疑换卡记录对,输出至数据集S3。
步骤8,对S3中出现的每对高度可疑的换卡车辆,按照其记录时间和车牌号在数据集K中寻找是否存在对应记录。提取车辆出入收费站的时间戳,行驶方向和相应牌照图片,佐证步骤7得到的高度可疑换卡记录。
本发明提供了一种高速公路车辆逃费行为数据分析方法,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。