我有一个Pandas数据框,其中包含两个相关的列:事件时间戳记和完成事件的设备的持久唯一ID。
我想确定每个设备是否仍在运行。
我通过选择以天为单位的阈值来执行此操作,如果该阈值之后该设备没有任何事件(对于该设备,自上次事件发生以来经过的时间),则该设备被视为已失效。
例如,如果设备在数据的最后14天之内未报告任何事件,则将其视为已失效(尽管如果设备在14天的阈值之后发生事件,例如,如果它处于休眠状态,则将重置倒计时时钟一个月,然后又有一个事件。
您可以想象,如果我将阈值设置为一天,则会错误地将许多仍处于活动状态(但一天没有发生事件)的设备分类为已失效,并且如果将阈值设置为90天,我将有许多设备在实际上已失效时标记为可运行(平均使用寿命约为20天的运行时间)。
我想找到与设备失效的95%概率相对应的阈值。也就是说,根据历史数据,如果某设备在X天内消失,则有90%的机会在90天内不会再次出现。我说“在90天之内”是因为从技术上讲,一种设备可能会在12个月内重新出现,因此我不得不划定界线,而我只有大约一年的数据。
示例数据框:
pd.DataFrame({"device_id": ['A','A','A','A','A'], "event_date":["2019-01-01", "2019-01-03", "2019-01-07", "2019-01-12", "2019-01-18"] })
device_id event_date
0 A "2019-01-01"
1 A "2019-01-03"
2 A "2019-01-07"
3 A "2019-01-12"
4 A "2019-01-18"
例如,对于此数据集,如果将阈值设置为六天,则设备将被淘汰的可能性为50%,因为事件之间有两个实例,每6天以上,并且设备可继续运行在这些情况之一之后。
如果将阈值设置为7天,则设备失效的可能性为100%。实际的数据框有数千个设备,每个设备有数十个日期。
我以前在电子表格中的较小数据集上进行过类似的计算,但是对于我的较大数据集则无法实现。
我已将数据集简化为一组唯一的设备ID-事件日期对,但这显然达不到标准。
所需的输出:我想要一个函数,给定用户输入的阈值(数据集中连续X天无事件),它将计算设备是否不存在后重新出现的概率连续X天。