随着旅游业快速发展和居民对休闲娱乐需求的不断增长,推行经济性强、便利度高的旅游年卡有利于进一步激发居民的旅游热情,进而带动提升景区整体效益。随着旅游年卡系统数据量的大幅增加,人为虚增刷卡量骗取年卡资金分成的风险也逐步加大。如何甄别旅游年卡刷卡真实性、监督旅游年卡资金分成成为审计工作面临的难题。本文基于某市旅游年卡刷卡数据,介绍运用Python可视化技术统计和分析旅游年卡刷卡真实性的审计方法。
一、审计背景
某市旅游年卡实行实名制(仅限年卡持有人使用),使用范围基本包括全市所有收费景区,由旅游年卡系统进行统一管理,数据化程度较高。旅游年卡资金主要来源于持卡人的办卡费用和年缴费用,年卡管理办公室预留部分工作经费后,剩余资金根据各景区刷卡人次和门票价格综合计算权重分成给各景区。根据旅游年卡资金分成计算方法,在景区门票价格较为固定的情况下,刷卡次数成为年卡资金分成的重要依据。因此,审计组将旅游年卡刷卡真实性情况列为审计重点关注事项。
二、审计思路和方法
旅游年卡刷卡数据是记录刷卡时间等要素的结构化数据,属于时间序列数据。针对时间序列数据特点,审计人员首先利用Python中pandas库读入年卡刷卡数据,存储为DataFrame格式;其次根据审计对象属性特征,利用DataFrame内置的filter(筛选)、groupby(分组)、agg(聚合)等方法,得到年卡刷卡数据对应的统计结果;然后使用Python中Matplotlib库的绘图功能,生成折线图、柱状图、直方图等,直观展现对象数据的统计特性;最后根据图形反映的对象行为特征,判断对应的刷卡行为是否属实。
(一)刷卡情况总体趋势分析
为掌握各景区旅游年卡每年度刷卡量变化情况,审计人员以“年度”字段和“景区id”字段为分组依据,利用groupby函数对全市各景区旅游年卡年刷卡数据进行分组,并按“agg({'景区id': 'count'})”方法聚合统计各景区年度刷卡次数。根据统计结果,以年度为横坐标、刷卡次数为纵坐标,使用Matplotlib库的plot函数将结果通过折线图进行呈现。如图1所示,A景区刷卡次数近三年大幅度增加,特别是2022至2023年,景区刷卡次数远超该市全国知名5A级景区E景区。截至2023年9月,A景区旅游年卡刷卡次数几乎是其余4个景区的刷卡次数总和。
一般来说,双休日和节假日会导致景区客流量剧增。为判断A景区的刷卡次数异常是否受假期影响,一方面,审计人员利用filter方法筛选出A景区所有法定节日刷卡记录,并按“年度”字段使用groupby函数分组并统计节假日刷卡次数。统计结果显示,A景区节假日刷卡次数未有较大幅度增加,说明刷卡数量剧增并非受节假日影响。另一方面,审计人员利用pandas时间模块dt.weekday提取“刷卡时间”中的工作日和周末,生成新字段“wkday”,再利用groupby函数按“wkday”和“景区id”字段分组汇总计算周一至周日的日刷卡量,并使用Matplotlib库的bar函数生成柱状图。统计结果显示,A景区工作日和周末刷卡量相比,变化幅度不大,说明该景区每日刷卡人流量大且比较稳定,双休日影响因素有限。
排除客观因素的影响后,审计人员利用刷卡数据和用户信息对在该景区刷卡的游客进行用户画像,根据用户行为验证刷卡数据的真实性。为进一步减少抽审样本人员的数量,审计组重点关注在景区频繁刷卡人员(除周末以外平均每周刷卡次数超过1次)的刷卡特点。
(二)刷卡人员特征分析
1. 刷卡人员的聚集性特征
刷卡人员在日期上的聚集性。首先,使用groupby函数对在A景区刷卡的人员记录按“单位”字段进行分组统计,并对统计结果使用“sort_values(by='刷卡次数', ascending=False).head(3)”语句,找出刷卡次数排名前三的单位作为重点抽查单位,筛选该单位频繁刷卡人员作为抽查对象。然后,对抽查对象刷卡记录使用groupby函数按“单位”“刷卡日期”分组统计每日刷卡量。最后,以日期为横坐标,以每个单位每日刷卡次数为纵坐标,使用Matplotlib库的plot函数生成折线图。折线图显示,三家单位人员每日刷卡总次数峰值出现频率较高,说明抽查对象经常选择同一天去A景区。
关注刷卡人员行为在刷卡时间点上的聚集性。首先,选取2023年抽查单位人员刷卡记录,使用“sort_values(by='刷卡时间')”语句按刷卡时间排序。然后,以“单位”和“日期”字段分组,使用“groupby(df.刷卡时间.dt.date)['刷卡时间'].apply(lambda x: x.diff(1))”语句计算相邻刷卡记录的时间间隔。最后,以时间间隔值为横坐标,对应时间间隔值出现的次数为纵坐标,使用Seaborn库的histplot函数生成直方图,直观统计刷卡时间间隔值分布情况。
如图2所示,纵向线段描述对应横坐标时间间隔值的数量,曲线为时间间隔值的密度估计,曲线峰值部分为时间间隔数值的聚集区域。三家单位直方图均呈现出左偏移的特征,且抽查对象之间的刷卡时间间隔值大多集中在5秒以内,说明刷卡人员刷卡时应集中在一起。综合上述日刷卡量和刷卡间隔情况,审计人员初步判断抽查单位可能存在集体组团游览A景区的情况。
2. 频繁刷卡行为的时间特征
首先,利用pandas时间模块dt.hour和dt.minute提取“刷卡时间”中的小时和分钟。其次,以“30分钟”为间隔,使用“groupby('时间段').agg({'景区id':'count'})”语句对A景区工作日期间频繁刷卡的所有单位人员按一天内各时段统计刷卡次数。最后,以时段为横坐标,总刷卡次数为纵坐标,使用Matplotlib库的bar函数生成柱状图,显示各时段刷卡量情况。
如图3所示,A景区频繁刷卡的人员刷卡时段主要集中在8:30至10:00,而该时段为各单位上班时间。再结合频繁刷卡人员群体的聚集性特征,可以得出部分单位工作人员常在工作日上班时间组团去A景区刷卡游玩,这一结论显然与事实不符。再通过比对刷卡记录、核实单位人员活动信息等,审计人员最终确定抽查对象“在A景区刷卡时”并不在场。
三、审计成效
根据审计反映问题线索,市旅游年票管理办公室紧急暂停旅游年卡资金分成工作,派专人赴A景区进行核查。面对相关审计证据,A景区承认其为了考核和提高年卡分成,平时借用所在地区部分单位人员旅游年卡进行自行刷卡。根据审计发现的这一问题,A景区旅游主管部门进一步完善旅游年票系统相关功能,出台相关制度文件,规范旅游年卡的使用管理,促进旅游市场健康发展。
(作者:江苏省连云港市审计局 刘峰)
(本文转载自《中国审计》2024年第1期)