2017-03-14 21 views
2

我的老闆需要我們的票務處理系統的指標,他希望的指標之一是「90%的時間」,他將其定義爲需要處理90%票據的時間。我猜他認爲有10%是異常的可以忽略。我希望這至少能夠達到一些統計的有效性。所以我列出了我投入numpy數組的時間列表。這是我想出的代碼。找到處理90%票的時間?

import numpy as np 

inliers = data[data<np.percentile(data, 90)] 
ninety_time = inliers.max() 

這是有效的嗎?有沒有更好的辦法?

+1

是你累計還是遞增的次數? –

+0

@ Ev.Kounis增量。處理1張票的時間是陣列中的一個條目。 –

+0

我能想到的最*統計正確*的過程是獲得時間列,隔離它,對它進行排序,從正面和背面消除等量的條目(最快和最慢的條目; 0.05 * len(數組)',從而使你最終得到總數的90%),然後只剩下剩下的東西。 –

回答

2

百分位數是一種統計上完全有效的方法。它們被用來提供強大的數據描述。例如,50%百分位數是中位數,盒圖通常顯示25%,50%和75%的百分位數,以提供數據覆蓋範圍的概念。

90%的百分位數可以被看作是一個相對於實際最大值不易受異常值影響的最大值的非常樸素和粗略的估計。 (顯然,它有點偏頗 - 它總是小於真正的最大值。)小心使用這種解釋。 90%的百分點是最安全的 - 它是90%以下的數據和10%以上的數值。

您的代碼有點多餘,因爲percentile(data, 90)返回數據中90%的元素低於或等於的值。所以我會說這正是90%的時間,不需要計算90%的值。對於大量樣本和連續值,< = 90%和< 90%之間的差異將消失。