title: 技巧26: 使用滑动窗口找出频繁刷单用户 date: 2024-11-28
技巧26: 使用滑动窗口找出频繁刷单用户
需求
定义在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.
time_cumsum = time_delta.rolling(outlier_count).sum()
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)