2011-09-30 84 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 ^)

我最好的建議:首先,使用你所知道的問題來構建模型;然後根據模型找出如何解決問題。

相關問題