2011-09-30 46 views
11

基本上,我有一个合理的大单(一年的价值数据)的单个离散事件发生的时间(对于我目前的项目,有人打印的东西的时间列表)。基于这个列表,我想构建一种某种统计模型,它将预测下一个事件(下一个打印工作)在以前的所有事件时间内的最可能时间。如何根据之前的事件预测下一个事件何时发生?

我已经阅读this,但反应不完全帮助与我有什么记住我的项目。我做了一些额外的研究,发现Hidden Markov Model可能会让我做到这一点,但我找不到一个关于如何使用一个列表生成隐马尔可夫模型的链接。我还发现,在列表上使用Kalman filter可能很有用,但基本上,我想从实际使用它们的人那里获得更多关于它的信息,并且在尝试某些事情并希望它能正常工作之前知道它们的限制和要求。

非常感谢!

编辑:所以通过Amit在评论中的建议,我也发布了这个到Statistics StackExchange, CrossValidated。如果你只知道我应该怎么做,请张贴无论是在这里或那里

+0

也许你可以生成0和1的列表,将在事件发生的,零否则,再训练神经网络识别模式。基本上,如果您的列表长度为1000个事件,并且您想预测下一个100个,那么请使用1000-> 100个神经网络。 –

+2

您可能会在[statistics stackexchange](http://stats.stackexchange.com/)中获得更好的答案 – amit

+0

不知道!我想我应该只是在那里重新发布? – ankushg

回答

6

我承认,我不是一个统计类的家伙。但是我之前遇到过这类问题。真的,我们在这里讨论的是,你有一些观察到的离散事件,你想知道如何在任何给定的时间点看到它们。你所得到的问题是你想要获取离散数据并从中取出连续的数据。

想到的术语是density estimation。具体为kernel density estimation。您可以通过简单的分箱来获得核密度估计的一些效果(例如,计算时间间隔中的数量事件,例如每四分之一小时或每小时)。核密度估计只具有比简单分箱更好的统计特性。 (产生的数据通常是'平滑的'。)

虽然这只是照顾你的一个问题。接下来的问题仍然是一个更有趣的问题 - 你如何获取数据的时间线(在这种情况下,只有打印机数据),并从中产生预测?第一件事是第一件事 - 你设置问题的方式可能不是你想要的。尽管拥有有限数据源并预测该源的下一步的奇迹概念听起来很有吸引力,但集成更多数据源以创建实际预测更加实用。 (例如,在有很多手机活动之后,打印机可能会受到重创 - 某些公司可能很难预测)Netflix挑战赛就是这方面的一个颇有力的例子。

当然,更多数据源的问题在于还有额外的工作量来设置收集数据的系统。

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

一个与时间有关的例子是,每周4:30,Suzy打印出当天结束的报告。这发生在每周的特定时间。这种事情很容易以固定的时间间隔进行检测。 (每天,每周一天,每个周末,每个星期二,每个月的第一天等...)这在预定时间间隔内非常简单 - 只需创建一周估计概率密度函数的曲线并且返回到时间并平均曲线(可能是通过开窗函数的加权平均以获得更好的预测)。

如果您想要更复杂一些,找一种方法来自动检测这些间隔。 (可能数据不会如此强大,以至于你可能只是蛮横地强制这个。)

一个与时间无关的模式是,每次会计Mike打印一张发票清单时,他都会转向Johnathan,他在几小时后打印出一大批完整的发票报告。这种事情更难以发现,因为它更自由。我建议您查看各种时间间隔(例如30秒,40秒,50秒,1分钟,1.2分钟,1.5分钟,1.7分钟,2分钟,3分钟...... 1小时,2小时,3小时, ....)并通过很好的方式对它们进行二次取样(例如Lanczos resampling)以创建一个向量。然后使用vector-quantization样式算法对“有趣”模式进行分类。但是,您需要仔细考虑如何处理类别的确定性 - 如果您的结果类别的数据非常少,则可能不可靠。 (某些矢量量化算法比其他方法更好)

然后,要创建关于将来打印某物的可能性的预测,请查找最近的活动间隔(30秒,40秒,50秒,1分钟和所有其他间隔)通过矢量量化并基于其确定性对结果进行加权以创建预测的加权平均值。

你要找到测量时间依赖性和时间独立输出的确定性来创建一个最终估计的好方法。

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

你可能要采取从矢量量化完全不同的方法和离散的数据和使用的东西更像是一个PPM方案。它可以非常简单地实施并且仍然有效。

我不知道这个项目的时限和范围是什么,但这样的事情总是可以采取第N度。如果截止日期有限,我想强调一点,您担心首先要做的事情,然后使其运作良好。没有最佳的东西比没有东西好。

这种项目是。如果你把它包装好,这种项目可以帮你找到工作。我建议你花点时间,把它做对,然后把它作为功能,开源,有用的软件发布。我强烈建议开源,因为您希望创建一个社区,可以在您有权访问,支持或支持的更多环境中贡献数据源提供程序。

祝你好运!

0

觉得马尔可夫链就像顶点图的相互连接,具有重量或距离。在这张图表中移动会消耗你旅行的重量或距离的总和。以下是生成文本的示例:http://phpir.com/text-generation

1

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

但是,当用户打印下一个东西时,是否存在一种模式?也就是说,你是否看到工作之间有一个固定的时间模式?如果是这样,那么马尔可夫模型将起作用。如果不是,那么马尔科夫模型将是一个随机猜测。

在如何建模它,认为就业机会之间的不同时间段,如一个字母的。事实上,你可以指定每个时间段的信,是这样的:

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

然后,经过数据以及将字母分配给打印作业之间的每个时间段。完成后,您将获得数据的文本表示,并且可以运行任何执行文本预测的Markov示例。

+0

该模型的主要假设是在定时打印作业中应该有一个模式。 您是否有某种方法可以从简单的时间列表中为马尔可夫模型生成参数? – ankushg

+0

你为什么得到upvote而不是我?标题马尔可夫模型是一个随机猜测是非常模糊和ambigous。 – Bytemain

+0

@Unk:我在回复中展示了如何从时间列表创建马尔可夫模型:将时间间隔*转换为字母。这个想法是,这些区间构成了一种字母 - 正是你想要的一种马尔可夫模型。如果要预测打印作业可能运行的绝对时间,最好的办法是放弃马尔可夫模型,并使用某种聚类算法来计算打印作业在任何特定时间运行的可能性。见http://en.wikipedia.org/wiki/Cluster_analysis。 –

1

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

最原始统计建模基于检查相邻事件之间(说)一次技术将难以捕捉到这些潜在的影响。

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

+0

。这里重要的是每个事件的时间,而不是事件之间的时间间隔。你需要找到测量的有用方法(可能是一周中的某一天和一天中的时间),然后使用这些数据构建这些参数的概率分布。 –

0

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

这听起来像你没有一个基础模型,以及一个正在钓鱼周围:你已经有了一个钉子,并正在经历工具箱尝试文件,螺丝刀,和卷尺8 ^)

我最好的建议:首先,使用你所知道的问题来构建模型;然后根据模型找出如何解决问题。

相关问题