15

基本上,我有一个相当大的列表(一年的数据),其中包含单个离散事件发生的时间(对于我当前的项目,有人打印某些东西的时间列表)。基于此列表,我想构建某种统计模型,该模型将在给定所有先前事件时间的情况下预测下一个事件(下一个打印作业)的最可能时间。

我已经阅读了这篇文章,但是这些回复并不能完全帮助我了解我对项目的想法。我做了一些额外的研究,发现隐马尔可夫模型可能会让我准确地做到这一点,但我找不到有关如何仅使用时间列表生成隐马尔可夫模型的链接。我还发现在列表中使用卡尔曼滤波器可能很有用,但基本上,我想从实际使用过卡尔曼滤波器的人那里获得更多关于它的信息,并在尝试某些东西并希望它有效之前了解他们的局限性和要求。

非常感谢!

编辑:因此,根据 Amit 在评论中的建议,我还将其发布到Statistics StackExchange, CrossValidated。如果你知道我应该做什么,请在这里或那里发帖

4

6 回答 6

8

我承认,我不是一个统计类的人。但我以前遇到过这类问题。我们在这里真正谈论的是,你有一些观察到的、离散的事件,你想弄清楚你在任何给定时间点看到它们发生的可能性有多大。您遇到的问题是您想要获取离散数据并从中获取连续数据。

想到的术语是密度估计。特别是核密度估计。您可以通过简单的分箱来获得核密度估计的一些效果(例如,在一个时间间隔内计算事件的数量,例如每一刻钟或每小时)。核密度估计比简单的分箱具有更好的统计特性。(生成的数据通常“更平滑”。)

不过,这只解决了您的一个问题。下一个问题仍然是更有趣的问题——你如何获取数据的时间线(在这种情况下,只有打印机数据)并从中产生预测?第一件事是第一 - 你设置问题的方式可能不是你想要的。虽然拥有有限数据源并预测该数据源下一步的神奇想法听起来很有吸引力,但整合更多数据源以创建实际预测更为实际。(例如,可能在大量电话活动之后打印机受到重创——这在某些公司中可能很难预测) Netflix 挑战赛是这一点的一个相当有力的例子。

当然,更多数据源的问题在于建立收集数据的系统需要额外的工作。

老实说,我认为这是一个特定领域的问题,并采取两种方法:找到与时间无关的模式,并找到与时间相关的模式。

一个与时间相关的示例示例是,每周一天的 4:30,Suzy 打印出她的一天结束报告。这发生在一周中的每一天的特定时间。这种事情很容易以固定的时间间隔检测出来。(每天、每个工作日、每个周末、每个星期二、每个月的 1 日等......)这非常容易以预定的时间间隔检测 - 只需创建一个估计概率密度函数的曲线,即一周长并及时返回并对曲线进行平均(可能通过窗口函数进行加权平均值以获得更好的预测)。

如果您想变得更复杂,请找到一种方法来自动检测此类间隔。(可能数据不会如此庞大,以至于您可以暴力破解。)

一个示例的时间无关模式是,会计部门的 Mike 每次打印发票清单时,他都会去找 Johnathan,Johnathan 会在几个小时后打印出相当多的完整发票报告。这种东西更难检测,因为它的形式更自由。我建议查看不同的时间间隔(例如 30 秒、40 秒、50 秒、1 分钟、1.2 分钟、1.5 分钟、1.7 分钟、2 分钟、3 分钟、.... 1 小时、2 小时、3 小时, ....) 并以一种很好的方式对它们进行二次采样(例如Lanczos 重采样)以创建向量。然后使用矢量量化风格算法对“有趣”的模式进行分类。但是,您需要仔细考虑如何处理类别的确定性——如果您的结果类别中的数据非常少,那么它可能不可靠。(一些向量量化算法在这方面比其他算法更好。)

然后,为了预测未来打印某些东西的可能性,通过矢量量化查找最近的活动间隔(30 秒、40 秒、50 秒、1 分钟和所有其他间隔)并加权结果基于他们的确定性来创建预测的加权平均值。

您将希望找到一种衡量与时间相关和与时间无关的输出的确定性以创建最终估计值的好方法。

这种事情是典型的预测数据压缩方案。我建议您看一下PAQ,因为它包含了很多我在这里讨论过的概念,并且可以提供一些非常有趣的见解。源代码甚至与所用算法的优秀文档一起提供。

您可能希望采用与矢量量化完全不同的方法并将数据离散化并使用更像PPM方案的方法。它可以非常简单地实现并且仍然有效。

我不知道这个项目的时间框架或范围是什么,但这种事情总是可以被带到第 N 级。如果它有最后期限,我想强调的是,你担心先让某些东西工作,然后让它运作良好。不是最佳的东西总比没有好。

这种项目很酷。如果你把它包装好,这种项目可以给你一份工作。我建议你慢慢来,把它做好,并将其发布为功能、开源、有用的软件。我强烈推荐开源,因为您将希望创建一个社区,该社区可以在您可以访问、愿意支持或有时间支持的更多环境中贡献数据源提供者。

祝你好运!

于 2011-10-01T17:11:24.980 回答
1

我真的不明白马尔可夫模型在这里有什么用处。当您预测的事件依赖于先前的事件时,通常会使用马尔可夫模型。典型的例子当然是文本,一个好的马尔可夫模型可以很好地猜测下一个字符或单词是什么。

但是,当用户打印下一件事情时,有没有一种模式?也就是说,您是否看到工作之间的定期时间模式?如果是这样,那么马尔可夫模型将起作用。如果不是,那么马尔可夫模型将是一个随机猜测。

在如何对其建模时,将工作之间的不同时间段视为字母表中的字母。实际上,您可以为每个时间段分配一个字母,例如:

A - 1 to 2 minutes
B - 2 to 5 minutes
C - 5 to 10 minutes
etc.

然后,检查数据并为打印作业之间的每个时间段分配一个字母。完成后,您就有了数据的文本表示,并且您可以运行任何进行文本预测的马尔可夫示例。

于 2011-09-30T23:29:52.497 回答
1

如果您有一个您认为可能与问题域相关的实际模型,您应该应用它。例如,可能存在与星期几、一天中的时间和可能的日期相关的模式(假期可能会显示较低的使用率)。

大多数基于检查(例如)相邻事件之间时间的原始统计建模技术都难以捕捉这些潜在影响。

我会为每个已知事件(星期几等)建立一个统计模型,并用它来预测未来的事件。

于 2011-10-01T01:09:18.063 回答
1

我认为预测神经网络将是完成这项任务的好方法。 http://en.wikipedia.org/wiki/Predictive_analytics#Neural_networks

此方法也用于预测外汇天气预报、股票标记、太阳黑点。如果您想了解更多关于它是如何工作的,这里有一个教程。 http://www.obitko.com/tutorials/neural-network-prediction/

于 2011-10-01T16:52:03.803 回答
0

将马尔可夫链想象成一个图,其中顶点通过权重或距离相互连接。在这个图表上移动会消耗掉你旅行的重量或距离的总和。这是文本生成的示例:http: //phpir.com/text-generation

于 2011-09-30T20:09:17.920 回答
0

卡尔曼滤波器用于跟踪状态向量,通常具有连续(或至少离散连续)动态。这有点与偶发的离散事件截然相反,所以除非你有一个包含这种状态向量的基础模型(并且是线性的或几乎是线性的),否则你可能不需要卡尔曼滤波器。

听起来您没有基础模型,并且正在四处寻找:您有一个钉子,并且正在通过工具箱尝试文件、螺丝刀和卷尺 8^)

我最好的建议:首先,使用您对问题的了解来构建模型;然后根据模型找出解决问题的方法。

于 2011-10-01T01:25:37.210 回答