所以我正在寻找方法来改进我目前在工作时间表中检测异常值的实现。 我的数据集是人们的徽章滑动。当前实现使用简单的标准偏差方法分别在时间和时间上发现异常值。这种方法的问题是,
以下是数据样本;
PersonID event_ts
0 104756 2017-02-13 10:37:29
1 38469 2017-05-10 09:15:11
2 111130 2017-05-05 12:08:07
3 601398 2017-04-05 18:14:10
4 33945 2017-02-08 09:10:31
5 101294 2017-05-17 12:28:51
6 39476 2017-06-23 16:01:44
7 31791 2017-03-15 18:42:12
8 114090 2017-03-14 20:33:27
9 33380 2017-02-22 16:03:22
现在,这些数据的另一个挑战是训练数据会被异常值污染。由于数据集中的人数以及轮班的变化或轮换,因此很难清理。
现在,我尝试使用GaussianMixter模型,并将日期调整为序数以供算法使用。而不是一个完整的时间戳,我使用带有IS_SWIPE标志的每小时数据,在该小时内至少进行一次滑动。所以数据看起来像这样。
PersonID Date_ordinal hour IS_SWIPE
0 0x002935373242324333352D303533332D3443 736384 0 0
1 0x002935373242324333352D303533332D3443 736384 1 0
2 0x002935373242324333352D303533332D3443 736384 2 0
3 0x002935373242324333352D303533332D3443 736384 3 0
4 0x002935373242324333352D303533332D3443 736384 4 0
5 0x002935373242324333352D303533332D3443 736384 5 0
6 0x002935373242324333352D303533332D3443 736384 6 0
7 0x002935373242324333352D303533332D3443 736384 7 0
8 0x002935373242324333352D303533332D3443 736384 8 1
9 0x002935373242324333352D303533332D3443 736384 9 0
以下是我正在尝试使用的一般代码;
df = pd.read_sql_query("""SQL Query""", cnxn, parse_dates=['Date','Datetime'])
df['Date_ordinal']=df['Date'].apply(datetime.toordinal)
df = df.sort_values(by=['Datetime'])
train_set, test_set = train_test_split(df[['Date_ordinal','hour','IS_SWIPE']], test_size=0.4)
A = mixture.GaussianMixture(n_components=3, covariance_type='tied').fit(train_set)
print A.predict(test_set)[:10]
[1 0 2 0 2 0 2 2 2 1]
现在,我陷入困境的是,
非常感谢任何帮助。你可以看到我是数据科学的新手并且还在学习,所以请原谅我的无知。