最近一直被一个简单的风险场景卡着,识别考勤代打卡。其实python的实现逻辑也很简单,做笛卡儿积=>两列打卡时间相减,保留10秒以内的记录=>用员工号做主键groupby+count,按月计算,次数超过一定常规数值的员工号两两组合视为异常。
问题是整个公司每天打卡的人太多,10多天的数量就超过400万条记录,只保留进的记录也得有200多万条。
想了一些解决方案,如下:
方案一:简单粗暴笛卡儿积。数据量会超过16万亿条。X
方案二:按照电子门ID和日期gourpby之后再做笛卡儿积,今天尝试了一下,速度太慢,跑几天都不一定能跑出来。X
方案三:放弃使用笛卡儿积的solution,用pandas的rolling系列功能,只检查相邻的两次打卡。好处是rolling底层是numpy实现,速度有保障,坏处是无法识别一个人帮一帮人打卡。这个方案明天尝试一下。
领取专属 10元无门槛券
私享最新 技术干货