我正在尝试创建一个检查,它将拾取每月收到的二进制数据中的异常更改。我的DataFrame(见下面的示例)有多个实体,每月都会为其分配一个“排除标志”(1=排除,0=包含)。
import pandas as pd
d = {'Date': [20210101, 20210201,20210301,20210401,20210501,
20210101, 20210201,20210301,20210401,20210501,
20210101,20210201,20210301,20210401,20210501,
20210101,20210201,20210301,20210401,20210501,
20210101,20210201,20210301,20210401,20210501,
20210101,20210201,20210301,20210401,20210501,],
'Entity': ['A','A','A','A','A',
'B','B','B','B','B',
'C','C','C','C','C',
'D','D','D','D','D',
'E','E','E','E','E',
'F','F','F','F','F'],
'Exclusion': [1,1,1,1,1,
0,0,0,1,1,
0,0,0,1,0,
1,0,1,0,1,
1,1,1,1,0,
0,1,1,1,0]}
df = pd.DataFrame(data=d)
df.columns
##pd.melt(df, id_vars =['Date'],value_vars='Entity')
pd.pivot(df, index=['Date'], columns = 'Entity',values = 'Exclusion')
如果我根据前几个月观察到的趋势验证2022年5月的数据,检查将:
1.接受实体A的新值(值1与历史记录一致)
1.接受实体B的新值(历史中观察到一些变化,但没有逐月变化)
1.接受实体C的变更(值从1变为0,但零与历史值一致,例如,接受条件可以是:过去的0多于1,因此我可以将此值恢复为0)
1.接受图元D的更改(值在0和1之间定期翻转)
1.将实体E的更改标记为可疑(第一次出现0)
1.将实体F的变化标记为可疑(不是第一次出现0,但过去几个月的趋势已被打破)。
有没有人能推荐一个简单的方法来解决这个问题,而不应用大量的机器学习?我的目标不是一个完美的检查,将100%满足6个条件,而只是一些尝试简单的预测什么更有可能发生作为下个月的值(1或0)基于过去的数据。
我试过的一件事是np.polyfit(使用月份作为我的x,尽管我的数据不受季节性的影响)然而,仅设法应用于处理1个实体的场景,在我的情况下,实体的可能数量将大约为3 K,数据的月数是我可以随意使用并应用一些限制的东西(例如,只考虑过去6个月)。我是一个python新手,也是第一次在这里发帖,所以希望我把我的问题解释得足够清楚-如果你需要任何额外的信息,请让我知道。
先谢了!
1条答案
按热度按时间4smxwvx51#
你可以试着用移动平均法。
输出: