Ước tính trung bình mạnh mẽ với hiệu quả cập nhật O (1)


9

Tôi đang tìm kiếm một ước tính mạnh mẽ của trung bình có một tài sản cụ thể. Tôi có một bộ các yếu tố mà tôi muốn tính toán thống kê này. Sau đó, tôi thêm các yếu tố mới một lần và với mỗi yếu tố bổ sung tôi muốn tính toán lại thống kê (còn được gọi là thuật toán trực tuyến). Tôi muốn tính toán cập nhật này nhanh, tốt nhất là O (1), tức là không phụ thuộc vào kích thước của danh sách.

Các phương tiện thông thường có thuộc tính này là nó có thể được cập nhật hiệu quả, nhưng không mạnh mẽ đối với các ngoại lệ. Các công cụ ước tính mạnh mẽ điển hình của giá trị trung bình, như giá trị trung bình giữa các nhóm và trung bình cắt không thể được cập nhật một cách hiệu quả (vì chúng yêu cầu duy trì một danh sách được sắp xếp).

Tôi sẽ đánh giá cao bất kỳ đề xuất nào cho số liệu thống kê mạnh mẽ có thể được tính toán / cập nhật hiệu quả.


Tại sao không chỉ sử dụng một phân đoạn ban đầu của dữ liệu - chẳng hạn như 100 hoặc 1000 đầu tiên hoặc bất cứ điều gì - để dựng lên "hàng rào" để sàng lọc các ngoại lệ? Bạn không phải cập nhật lại chúng, vì vậy không cần phải duy trì cấu trúc dữ liệu bổ sung.
whuber

@whuber Tôi không thể đảm bảo rằng mẫu ban đầu sẽ đại diện cho phần còn lại của dữ liệu. Ví dụ: thứ tự mà tôi được cung cấp dữ liệu không phải là ngẫu nhiên (hãy tưởng tượng một kịch bản trong đó lần đầu tiên tôi được đưa ra các giá trị cao hơn và sau đó là các giá trị thấp hơn).
Bitwise

1
Đó là một quan sát quan trọng. Nó ngụ ý rằng bạn cần phải chăm sóc nhiều hơn bình thường, bởi vì ban đầu bạn sẽ có được ước tính "mạnh mẽ" về các ngoại lệ cao trung bình. Bằng cách tiếp tục cập nhật ước tính đó, bạn có thể kết thúc việc ném ra tất cả các giá trị thấp hơn. Do đó, bạn sẽ cần một cấu trúc dữ liệu trong đó các phần chính của toàn bộ phân phối dữ liệu được ghi lại và cập nhật định kỳ. Kiểm tra chủ đề của chúng tôi với các từ khóa "trực tuyến" và "lượng tử" cho các ý tưởng. Hai ứng dụng hứa hẹn như vậy có tại stats.stackexchange.com/questions/3372stats.stackexchange.com/q/3377 .
whuber

Tôi sẽ cung cấp một tiền thưởng nhưng tôi không có đủ danh tiếng
Jason S

1
Để tiếp tục với ý tưởng trong nhận xét đầu tiên của @ whuber, bạn có thể duy trì một tập hợp con ngẫu nhiên được lấy mẫu thống nhất có kích thước hoặc từ tất cả các dữ liệu được thấy cho đến nay. Bộ này và "hàng rào" liên quan có thể được cập nhật trong thời gian O (1). 10001001000
Innuo

Câu trả lời:


4

Giải pháp này thực hiện một đề xuất của @Innuo trong một bình luận cho câu hỏi:

Bạn có thể duy trì một tập hợp con ngẫu nhiên được lấy mẫu thống nhất có kích thước 100 hoặc 1000 từ tất cả các dữ liệu được thấy cho đến nay. Bộ này và "hàng rào" liên quan có thể được cập nhật trong thời gian .O(1)

Khi chúng tôi biết cách duy trì tập hợp con này, chúng tôi có thể chọn bất kỳ phương pháp nào chúng tôi muốn ước tính giá trị trung bình của dân số từ một mẫu như vậy. Đây là một phương pháp phổ quát, không có giả định nào, sẽ hoạt động với bất kỳ luồng đầu vào nào trong độ chính xác có thể dự đoán bằng các công thức lấy mẫu thống kê tiêu chuẩn. (Độ chính xác tỷ lệ nghịch với căn bậc hai của cỡ mẫu.)


Thuật toán này chấp nhận làm đầu vào một luồng dữ liệu cỡ mẫu và xuất ra một luồng mẫu mỗi mẫu đại diện cho dân số . Cụ thể, với , là một mẫu ngẫu nhiên đơn giản có kích thước từ (không thay thế).t = 1 , 2 , ... , m s ( t ) X ( t ) = ( x ( 1 ) , x ( 2 ) , ... , x ( t ) ) 1 i t s ( i ) m X ( t )x(t), t=1,2,,ms(t)X(t)=(x(1),x(2),,x(t))1its(i)mX(t)

Đối với điều này xảy ra, nó cũng đủ rằng mỗi -element tập hợp con của có cơ hội bình đẳng là các chỉ số của trong . Điều này hàm ý rằng bằng bằng được cung cấp .m{1,2,,t}xs(t)x(i), 1i<t,s(t)m/ttm

Lúc đầu, chúng tôi chỉ thu thập luồng cho đến khi phần tử được lưu trữ. Tại thời điểm đó chỉ có một mẫu có thể, vì vậy điều kiện xác suất được thỏa mãn tầm thường.m

Thuật toán tiếp quản khi . Giả sử rằng là một mẫu ngẫu nhiên đơn giản của cho . Đặt tạm thời . Đặt là một biến ngẫu nhiên thống nhất (không phụ thuộc vào bất kỳ biến nào trước đây được sử dụng để xây dựng ). Nếu thì thay thế một phần tử được chọn ngẫu nhiên của bằng . Đó là toàn bộ thủ tục!t=m+1s(t)X(t)t>ms(t+1)=s(t)U(t+1)s(t)U(t+1)m/(t+1)sx(t+1)

Rõ ràng có xác suất là . Hơn nữa, theo giả thuyết cảm ứng, có xác suất tính bằng khi . Với xác suất = nó sẽ bị xóa khỏi , từ đó xác suất còn lại của nó bằngx(t+1)m/(t+1)s(t+1)x(i)m/ts(t)itm/(t+1)×1/m1/(t+1)s(t+1)

mt(11t+1)=mt+1,

chính xác như cần thiết Theo cảm ứng, sau đó, tất cả các xác suất đưa vào của trong là chính xác và rõ ràng không có mối tương quan đặc biệt nào giữa các vùi này. Điều đó chứng tỏ thuật toán là chính xác.x(i)s(t)

Hiệu suất thuật toán là vì ở mỗi giai đoạn, nhiều nhất hai số ngẫu nhiên được tính toán và nhiều nhất là một phần tử của một mảng các giá trị được thay thế. Yêu cầu lưu trữ là .O(1)mO(m)

Cấu trúc dữ liệu cho thuật toán này bao gồm các mẫu cùng với chỉ số dân số mà nó mẫu. Ban đầu chúng tôi lấy và tiến hành thuật toán cho Đây là một triển khai để cập nhật với giá trị để tạo . (Đối số đóng vai trò của và là . Chỉ số sẽ được duy trì bởi người gọi.)stX(t)s=X(m)t=m+1,m+2,.R(s,t)x(s,t+1)ntsample.sizemt

update <- function(s, x, n, sample.size) {
  if (length(s) < sample.size) {
    s <- c(s, x)
  } else if (runif(1) <= sample.size / n) {
    i <- sample.int(length(s), 1)
    s[i] <- x
  }
  return (s)
}

Để minh họa và kiểm tra điều này, tôi sẽ sử dụng công cụ ước tính (không mạnh) thông thường của giá trị trung bình và so sánh giá trị trung bình theo ước tính từ với giá trị trung bình thực tế của (tập hợp dữ liệu tích lũy được thấy ở mỗi bước ). Tôi đã chọn một luồng đầu vào hơi khó, thay đổi khá trơn tru nhưng định kỳ trải qua những bước nhảy kịch tính. Cỡ mẫu của khá nhỏ, cho phép chúng ta thấy biến động lấy mẫu trong các ô này.X ( t ) m = 50s(t)X(t)m=50

n <- 10^3
x <- sapply(1:(7*n), function(t) cos(pi*t/n) + 2*floor((1+t)/n))
n.sample <- 50
s <- x[1:(n.sample-1)]
online <- sapply(n.sample:length(x), function(i) {
  s <<- update(s, x[i], i, n.sample)
  summary(s)})
actual <- sapply(n.sample:length(x), function(i) summary(x[1:i]))

Tại thời điểm onlinenày là chuỗi các ước tính trung bình được tạo ra bằng cách duy trì mẫu giá trị đang chạy này trong khi đó là chuỗi các ước tính trung bình được tạo ra từ tất cả các dữ liệu có sẵn tại mỗi thời điểm. Biểu đồ cho thấy dữ liệu (màu xám), (màu đen) và hai ứng dụng độc lập của quy trình lấy mẫu này (bằng màu sắc). Thỏa thuận nằm trong lỗi lấy mẫu dự kiến:50actualactual

plot(x, pch=".", col="Gray")
lines(1:dim(actual)[2], actual["Mean", ])
lines(1:dim(online)[2], online["Mean", ], col="Red")

Nhân vật


Đối với các công cụ ước tính mạnh mẽ về giá trị trung bình, vui lòng tìm kiếm trang web của chúng tôi để biết các thuật ngữ và liên quan. Trong số các khả năng đáng xem xét là phương tiện Winsorized và ước tính M.


Tôi không rõ ràng về ngưỡng từ chối như thế nào trong cách tiếp cận này (ví dụ: ngưỡng vượt quá các quan sát bị từ chối là ngoại lệ). Bạn có thể thêm chúng vào cốt truyện?
user603

@ user603 "Ngưỡng từ chối" hoặc bất kỳ phương pháp mạnh nào được sử dụng để ước tính giá trị trung bình là không liên quan: chọn bất kỳ phương pháp nào bạn muốn ước tính giá trị trung bình. (Không phải tất cả các phương thức mạnh đều hoạt động bằng cách dựng ngưỡng và từ chối dữ liệu, BTW.) Điều này sẽ được thực hiện trong mã câu trả lời của tôi bằng cách thay thế summarybằng một biến thể mạnh mẽ.
whuber

Một cái gì đó không rõ ràng với tôi trong ví dụ này. Là dữ liệu màu xám "tốt" hay "ngoại lệ." Nếu trước đó, có vẻ như sự phù hợp bị sai lệch (nó sẽ phù hợp với họ hơn vì tình huống sẽ tương tự như xu hướng giảm của @ Bitwise mà chúng tôi muốn theo dõi). Nếu dữ liệu màu xám ở các giá trị chỉ số cao hơn là ngoại lệ, thì có vẻ như sự phù hợp bị sai lệch lên trên. Mục tiêu bạn muốn phù hợp ở đây là gì? Sự phù hợp hiện tại dường như bị giằng xé giữa hai kịch bản.
Deathkill14

@Death Như được giải thích trong văn bản ngay trước hình, dữ liệu màu xám là luồng dữ liệu gốc. Ý nghĩa chạy của nó là đường cong màu đen. Các đường cong màu được dựa trên thuật toán. Độ lệch dọc của các đường cong màu so với đường cong màu đen là do tính ngẫu nhiên trong lấy mẫu. Độ lệch dự kiến ​​ở bất kỳ chỉ số nào tỷ lệ với độ lệch chuẩn của các giá trị xám trước chỉ số đó và tỷ lệ nghịch với căn bậc hai của cỡ mẫu (lấy trong 50 trong ví dụ này).
whuber

3

Bạn có thể nghĩ đến việc liên quan đến vấn đề của bạn với biểu đồ kiểm soát đệ quy. Một biểu đồ kiểm soát như vậy sẽ đánh giá xem một quan sát mới có trong tầm kiểm soát hay không. Nếu có, quan sát này được bao gồm trong ước tính mới về giá trị trung bình và phương sai (cần thiết để xác định giới hạn kiểm soát).

Một số nền tảng về biểu đồ kiểm soát mạnh mẽ, đệ quy, đơn biến có thể được tìm thấy ở đây . Một trong những văn bản cổ điển về biểu đồ kiểm soát và kiểm soát chất lượng dường như có sẵn trực tuyến tại đây .

Theo trực giác, sử dụng giá trị trung bình, và phương sai làm đầu vào, bạn có thể xác định liệu một quan sát mới tại thời điểm có phải là một ngoại lệ của một số phương pháp tiếp cận hay không. Người ta sẽ khai báo một ngoại lệ nếu nó nằm ngoài một số độ lệch chuẩn nhất định của (đã cho , nhưng điều này có thể gặp sự cố nếu dữ liệu xảy ra không phù hợp với các giả định phân phối nhất định. Nếu bạn muốn đi trên con đường này, thì giả sử bạn đã xác định nếu một điểm mới không phải là một ngoại lệ, và muốn đưa nó vào ước tính trung bình của bạn mà không có tỷ lệ quên đặc biệt. Sau đó, bạn không thể làm tốt hơn:μt1σt12txtμt1σt12)

μt=t1tμt1+1txt

Tương tự, bạn sẽ cần cập nhật phương sai đệ quy:

σt2=t1tσt12+1t1(xtμt)2

Tuy nhiên, bạn có thể muốn thử một số biểu đồ kiểm soát thông thường hơn. Các biểu đồ kiểm soát khác mạnh hơn đối với việc phân phối dữ liệu và vẫn có thể xử lý tình trạng không ổn định (như của quá trình của bạn sẽ tăng dần) là EWMA hoặc CUSUM được đề xuất (xem sách giáo khoa được liên kết ở trên để biết thêm chi tiết về các biểu đồ và giới hạn kiểm soát của chúng). Các phương pháp này thường sẽ ít tính toán hơn so với mạnh mẽ vì chúng có ưu điểm là chỉ cần so sánh một quan sát mới với thông tin có được từ các quan sát không phải là ngoại lệ. Bạn có thể tinh chỉnh các ước tính của mình về quy trình dài hạn và được sử dụng trong các tính toán giới hạn kiểm soát của các phương thức này với các công thức cập nhật được đưa ra ở trên nếu bạn muốn.μμσ2

Về một biểu đồ như EWMA, quên đi các quan sát cũ và tăng thêm trọng lượng cho các biểu đồ mới, nếu bạn nghĩ rằng dữ liệu của bạn là ổn định (có nghĩa là các tham số của phân phối tạo không thay đổi) thì không cần phải quên các quan sát cũ theo cấp số nhân. Bạn có thể thiết lập các yếu tố quên cho phù hợp. Tuy nhiên, nếu bạn nghĩ rằng đó là sự không cố định, bạn sẽ cần phải chọn một giá trị tốt cho yếu tố quên (một lần nữa xem sách giáo khoa để biết cách làm điều này).

Tôi cũng nên đề cập rằng trước khi bạn bắt đầu theo dõi và thêm các quan sát mới trực tuyến, bạn sẽ cần có được ước tính và (các giá trị tham số ban đầu dựa trên tập dữ liệu đào tạo) không bị ảnh hưởng bởi các ngoại lệ. Nếu bạn nghi ngờ có các ngoại lệ trong dữ liệu đào tạo của mình, bạn có thể trả chi phí một lần bằng cách sử dụng một phương pháp mạnh mẽ để ước tính chúng.σ 2 0μ0σ02

Tôi nghĩ rằng một cách tiếp cận dọc theo những dòng này sẽ dẫn đến cập nhật nhanh nhất cho vấn đề của bạn.


1
Sử dụng biểu đồ kiểm soát là một ý tưởng thú vị. Tuy nhiên, dường như có thể khó vượt qua các thách thức được nêu trong các nhận xét cho câu hỏi, tuy nhiên. Trong trường hợp không cố định nếu bạn "quên" các giá trị cũ hơn, có vẻ như các ước tính có thể bị sai lệch cao. Chẳng hạn, các đề xuất của bạn sẽ thực hiện như thế nào trên luồng dữ liệu được cung cấp bởi ? (Điều này giảm rất xt=cos(πt/106)+2t/106
chậm

@Bitwise cho biết mẫu ban đầu có thể không đại diện cho dữ liệu trong tương lai. Không có thông tin về sự khác biệt của phần còn lại của dữ liệu, về cơ bản bạn không thể làm gì được. Tuy nhiên, nếu dữ liệu ban đầu có thông tin về quy trình không cố định (giả sử xu hướng giảm) thì các quan sát mới có thể được cho phép khi tính đến thực tế là chúng tôi hy vọng chúng sẽ thấp hơn. Tuy nhiên, một số thông tin về sự không cố định là cần thiết. Bạn đề xuất một loại bệnh lý không cố định. Một số phương pháp, ví dụ EWMA là tối ưu cho một quy trình cụ thể nhưng nhìn chung là khá tốt. Quá trình của bạn sẽ đòi hỏi một công việc tùy chỉnh hơn.
Deathkill14

(Tôi phát hiện ra một nhà toán học trong bạn, bởi vì đó là một động thái rất toán học để loại bỏ là "bệnh lý" một cái gì đó bạn không thể xử lý :-). Nhưng tôi xin khác với tiên lượng của bạn: các phương pháp như được đề xuất bởi @Innuo thực sự có thể bảo vệ chống lại các "bệnh lý" đó và mọi thứ khác mà thế giới thực có thể ném vào bạn, đặc biệt là khi ngẫu nhiên được đưa vào lấy mẫu.
whuber

Trên thực tế, tôi đồng ý rằng người ta không nên loại bỏ một vấn đề mà người ta phải đối mặt. Bạn có thể vui lòng liên kết tôi với các phương pháp mà @Innuo đã thảo luận (tôi không thể tìm thấy chúng từ bài đăng này - chúng có trong các liên kết bạn cung cấp ở trên và tôi đã bỏ lỡ chúng không?). Cảm ơn bạn.
Deathkill14

@Innuo đã đăng một nhận xét ngắn gọn tại stats.stackexchange.com/questions/56494/ gợi ý một mẫu ngẫu nhiên thống nhất của tất cả dữ liệu được quan sát trước đó có thể được duy trì trong thời gian . Mặc dù không rõ ràng chính xác cách thức thực hiện, nhưng việc kết hợp nó với một công cụ ước tính mạnh mẽ về giá trị trung bình sẽ tạo thành một giải pháp phổ quát, áp dụng cho bất kỳ luồng dữ liệu nào. O(1)
whuber
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.