你好,我是 zhenguo
今天这篇文章是一个关于好玩实用的小案例,使用Pandas的滑动窗口方法确定是否存在刷单行为,给予黄牛党致命一击。
滑动窗口可能是你应用没那么多的方法,但是在处理事件序列的场景中,滑动窗口的价值凸显!
如下批量生成时间戳,random_timestamp
函数中,hour
传入小时(24小时制)ymd
表示年月日,默认为2021-12-01
import random
import pandas as pd
def random_timestamp(hour, ymd='2021-12-01'):
"""
生成年月日固定,分秒随机的时间戳
:param ymd:
:param hour: 传入小时
:return:
"""
def tstr():
tms = set([random.randrange(1, 59, 2) for _ in range(20)])
return [f'2020-12-01 {hour}:{ms}:{ms}' for ms in tms]
return [pd.Timestamp(ws) for ws in tstr()]
series = random_timestamp(9)
结果:
[Timestamp('2020-12-01 09:01:01'), Timestamp('2020-12-01 09:35:35'), Timestamp('2020-12-01 09:05:05'), Timestamp('2020-12-01 09:07:07'), Timestamp('2020-12-01 09:09:09'), Timestamp('2020-12-01 09:11:11'), Timestamp('2020-12-01 09:13:13'), Timestamp('2020-12-01 09:19:19'), Timestamp('2020-12-01 09:53:53'), Timestamp('2020-12-01 09:55:55'), Timestamp('2020-12-01 09:23:23'), Timestamp('2020-12-01 09:21:21'), Timestamp('2020-12-01 09:29:29'), Timestamp('2020-12-01 09:31:31')]
定义在20分钟连续下单为:刷单
给你一批交易数据,类型为pd.Series
,确定这批数据是否存在频繁刷单的行为。
Pandas的rolling
方法,求出固定滑动窗口长度的序列。
import pandas as pd
def is_outlier(time_series: pd.Series, outlier_duration=20, outlier_count=5):
"""
outlier_duration分钟内连续交易outlier_count次认为是异常
:param time_series:
:param outlier_duration:
:param outlier_count:
:return:
"""
# 排序
time_series2 = time_series.sort_values()
# 基于最早时间的时间跨度
time_delta = (time_series2 - time_series2.iloc[0]) / np.timedelta64(1, 's') / 60.
# 求得长度为outlier_count的滑动窗口的时间跨度
time_cumsum = time_delta.rolling(outlier_count).sum()
# 若outlier_count次交易的时间小于outlier_duration,就是所定义的刷单,返回True
if (time_cumsum <= outlier_duration).any():
return True
# 不存在刷单
return False
使用小技巧25,生成随机时间戳序列,调用
series = random_timestamp(9) # hour 等于9点
print(series)
result = is_outlier(pd.Series(series))
print(result)
本文分享自 程序员郭震zhenguo 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有