Xác suất tích lũy là gì

Chương 3: Hàm phân bố lũy tích

quangchien
10 năm trước

Trở về Mục lục cuốn sách

Nghịch lý về số sinh viên trong lớp

Trong nhiều trường đại học Hoa Kỳ, tỉ lệ sinh viên so với giảng viên đều vào khoảng 10:1. Nhưng sinh viên thường ngạc nhiên khi biết rằng lớp học của họ trung bình đều hơn 10 sinh viên. Có hai lý do giải thích sự khác biệt này:

  • Sinh viên nói chung đều học 45 lớp mỗi kỳ, trong khi giáo sư thường chỉ dạy 1 hoặc 2 lớp.
  • Số sinh viên may mắn được học lớp vắng thì ít, còn sinh viên phải học lớp lớn thì [a hèm!] có rất nhiều.

Điều thứ nhất thì rất dễ thấy [nó đã được nhắc đến ít nhất một lần]; điều thứ hai thì tinh vi hơn. Vì vậy ta hãy xét một ví dụ. Chẳng hạn một trường có 65 lớp học trong một kì, với phân bố số học viên mỗi lớp như sau:

số SV số lớp 5- 9 8 10-14 8 15-19 14 20-24 4 25-29 6 30-34 12 35-39 8 40-44 3 45-49 2

Nếu bạn hỏi hiệu trưởng về số sinh viên trung bình trong một lớp, ông ta sẽ dựng một đường PMF, tính trung bình, và báo rằng số sinh viên trung bình trong mỗi lớp bằng 24.

Nhưng nếu bạn điều tra một nhóm sinh viên, hỏi xem có bao nhiêu sinh viên trong lớp họ, rồi tính trung bình, bạn sẽ nghĩ rằng số sinh viên trung bình sẽ cao hơn.

Hãy dựng đường PMF từ những số liệu trên rồi tính trung bình theo cách nhìn nhận của hiệu trưởng. Vì số liệu đã được chia vào các ngăn, bạn có thể dùng một điểm giữa cho mỗi ngăn.

Bây giờ hãy tính phân bố của số sinh viên từng lớp theo cách nhìn nhận của sinh viên rồi tính trị trung bình.

Giả sử rằng bạn muốn tìm phân bố của số sinh viên từng lớp của một trường, nhưng không thể có số liệu chính xác từ hiệu trưởng. Một cách khác là chọn một mẫu sinh viên ngẫu nhiên rồi hỏi họ về số sinh viên từng lớp mà họ theo học. Sau đó bạn có thể tính PMF từ số liệu thu được qua trả lời của họ.

Kết quả sẽ thiên lệch vì những lớp học lớn sẽ được phản ánh lặp lại trong mẫu, nhưng bạn vẫn có thể ước tính được phân bố thực sự của số sinh viên mỗi lớp bằng cách áp dụng một phép chuyển đổi thích hợp đối với dạng phân bố đã quan sát thấy.

Hãy viết một hàm có tên UnbiasPmf để nhận vào PMF của các giá trị quan sát được và trả lại một đối tượng Pmf mới để ước tính phân bố của số sinh viên mỗi lớp.

Bạn có thể tải về một lời giải cho bài này từ //thinkstats.com/class_size.py.

Trong đa số các cuộc thi chạy, mọi người đều xuất phát cùng lúc. Nếu bạn chạy nhanh, thường bạn sẽ vượt được nhiều người ngay đầu cuộc đua, nhưng rồi sau một vài dặm đường, mọi người xung quanh bạn sẽ chạy với cùng tốc độ.

Khi lần đầu tiên tham gia cuộc chạy tiếp sức đường dài [209 dặm], tôi nhận thấy một hiện tượng lạ: khi mình vượt một đối thủ khác, tôi thường nhanh hơn rất nhiều, và khi một đối thủ khác vượt tôi, người ta cũng thương nhanh hơn tôi rất nhiều.

Ban đầu tôi cứ nghĩ rằng phân bố tốc độ có lẽ sẽ chứa hai số đông; nghĩa là có nhiều người chạy chậm và nhiều người chạy nhanh, còn ít người chạy cùng tốc độ với tôi.

Nhưng sau đó tôi nhận thấy rằng đã bị thiên lệch trong việc lựa chọn. Cuộc đua khác thường ở hai điểm: nó xuât phát không đều, các đội xuất phát vào các thời điểm khác nhau; ngoài ra nhiều đội gồm những người có sức chạy không đều nhau.

Kết quả là, các vận động viên sẽ tản ra trong cuộc đua với ít mối tương quan giữa tốc độ và vị trí. Khi tôi bắt đầu phiên chạy, những người chạy gần tôi đều [khá giống] một mẫu ngẫu nhiên của tổng thể các vận động viên trong cuộc đua.

Vậy thì sự thiên lệch này từ đâu mà có? Trong khi tôi chạy thi, cơ may vượt một đối thủ khác, hoặc bị vượt, đều tỉ lệ với hiệu số tốc độ giữa hai người. Để thấy được tại sao, bạn hãy hình dung về hai giới hạn như sau. Nếu có ai đó chạy nhanh bằng tôi thì chúng tôi không vượt được nhau. Nếu ai đó nhanh đến mức có thể chạy hết chặng đường đua trong khi tôi vẫn đang chạy thì chắc chắn họ vượt được tôi.

Hãy viết một hàm tên là BiasPmf để nhận vào một Pmf biểu thị cho phân bố thực sự của tốc độ người chạy, và một tốc độ của một người quan sát đang chạy, rồi trả về một Pmf mới biểu thị cho phân bố tốc độ tương đối của những người chạy so với người quan sát.

Để kiểm tra hàm vừa viết, hãy lấy một phân bố các tốc độ trong một cuộc đua bình thường [không phải là tiếp sức]. Tôi đã viết một chương trình có nhiệm vụ đọc vào kết quả cuộc đua James Joyce Ramble 10K ở Dedham MA rồi chuyển đổi tốc độ từng người chạy sang dặm/giờ. Hãy tải về chương trình này từ //thinkstats.com/relay.py. Chạy nó rồi xem PMF các tốc độ.

Bây giờ hãy tính phân bố các tốc độ mà bạn sẽ quan sát thấy nếu bạn chạy trong cuộc thi tiếp sức với tốc độ 7,5 dặm/giờ cùng nhóm người chạy nói trên. Bạn có thể tải về một lời giải từ //thinkstats.com/relay_soln.py

Sự hạn chế của các PMF

PMF sẽ phát huy tác dụng nếu có ít các giá trị. Nhưng khi số các giá trị nhiều lên, xác suất ứng với mỗi giá trị sẽ nhỏ đi và hiệu ứng của nhiễu ngẫu nhiên sẽ tăng lên.

Chẳng hạn, chúng ta có thể quan tâm đến phân bố cân nặng trẻ sơ sinh. Trong số liệu NSFG, biến totalwgt_oz ghi lại các cân nặng trẻ sơ sinh tính theo ounce. Hình dưới đây cho thấy PMF của các giá trị này cho trẻ đầu lòng và các trẻ sinh sau.

PMF của cân nặng trẻ sơ sinh. Hình vẽ cho thấy một hạn chế của các PMF: chúng rất khó so sánh với nhau. [nsfg_birthwgt_pm]

Nói chung, các phân bố này đều trông giống hình quả chuông quen thuộc, với nhiều giá trị gần số trung bình và ít giá trị quá lớn hay quá nhỏ.

Nhưng có những phần của hình vẽ này rất khó diễn giải. Có nhiều đỉnh nhọn và chỗ trũng, và một số khác biệt trông thấy giữa các phân bố. Thật khó nói được những đặc điểm nào trong số này là có ý nghĩa. Đồng thời, cũng khó nhận thấy những đặc điểm tổng thể; chẳng hạn, bạn nghĩ rằng phân bố nào có trị trung bình cao hơn?

Vấn đề này có thể được giảm nhẹ bằng việc chia số liệu vào các ngăn; nghĩa là chia miền giá trị thành những khoảng không trùng nhau và đếm số giá trị rơi vào mỗi ngăn. Việc chia ngăn có thể có ích, nhưng để chọn kích thước ngăn thích hợp sẽ rất mẹo mực. Nếu ngăn đủ lớn để làm trơn các nhiễu động thì nó cũng có thể làm trơn những thông tin có ích.

Một cách khác để tránh vấn đề trên là dùng hàm phân bố lũy tích, hay CDF [cumulative distribution function]. Nhưng trước khi làm được điều này, ta phải nói về số phần trăm.

Số phần trăm

Nếu bạn đã từng làm một bài thi tiêu chuẩn, có thể bạn sẽ được chấm điểm dưới dạng điểm gốc kèm theo một hạng phần trăm. Ở đây, hạng phần trăm là tỉ lệ số người có điểm thấp hơn bạn [hoặc bằng]. Vì vậy, nếu bạn đứng hạng 90 phần trăm, thì bạn đã làm bài tốt bằng hoặc hơn 90% số người đã làm bài thi.

Sau đây là cách để bạn có thể tính hạng phần trăm của một giá trị có tên your_score, so với các giá trị trong dãy scores:

def PercentileRank[scores, your_score]: count = 0 for score in scores: if score = percentile_rank: return score

Kết quả của phép tính này là một số phần trăm. Chẳng hạn, số phần trăm thứ 50 là giá trị ứng với hạng phần trăm 50. Trong phân bố điểm thi, số phần trăm thứ 50 là 77.

Đoạn chương trình thực hiện Percentile như trên không được hiệu quả. Một cách hay hơn là dùng hạng phần trăm để tính chỉ số của số phần trăm tương ứng. Hãy viết một phiên bản Percentile có dùng thuật toán này.

Bạn có thể tải về một lời giải từ //thinkstats.com/score_example.py.

Tùy chọn: Nếu bạn chỉ muốn tính một số phần trăm, thì cách sắp xếp các điểm thi sẽ không hiệu quả. Một cách làm hay hơn là thuật toán lựa chọn, mà bạn có thể đọc từ //wikipedia.org/wiki/Selection_algorithm.

Hãy viết [hoặc tìm] một đoạn chương trình thực hiện thuật toán lựa chọn và dùng nó để viết một phiên bản hiệu quả cho Percentile.

Hàm phân bố lũy tích

Bây giờ khi đã hiểu được số phần trăm, chúng ta sẵn sàng xét đến hàm phân bố lũy tích [cumulative distribution function, CDF]. CDF là một hàm với ánh xạ từ các giá trị đến hạng phần trăm của chúng trong một phân bố.

CDF là một hàm theo x, trong đó x là một giá trị bất kì có thể xuất hiện trong phân bố. Để tính CDF[x] cho một giá trị cụ thể của x, ta cần tính tỉ lệ của các giá trị trong mẫu mà nhỏ hơn [hoặc bằng] x.

Sau đây là một hàm như vậy, nhận vào một mẫu t, và một giá trị, x:

def Cdf[t, x]: count = 0.0 for value in t: if value

Chủ Đề