Bootstrap trung bình Python

Một nhà khoa học dữ liệu đang sử dụng dữ liệu trong một mẫu ngẫu nhiên để ước tính một tham số chưa biết. Cô ấy sử dụng mẫu để tính toán giá trị của một thống kê mà cô ấy sẽ sử dụng làm ước tính của mình

Khi cô ấy đã tính được giá trị quan sát được trong thống kê của mình, cô ấy có thể chỉ cần trình bày nó như ước tính của mình và tiếp tục con đường vui vẻ của mình. Nhưng cô ấy là một nhà khoa học dữ liệu. Cô ấy biết rằng mẫu ngẫu nhiên của cô ấy chỉ là một trong vô số mẫu ngẫu nhiên có thể xảy ra, và do đó ước tính của cô ấy chỉ là một trong vô số ước tính hợp lý

Những ước tính đó có thể thay đổi bao nhiêu? . Nhưng cô ấy không có đủ nguồn lực để quay trở lại dân số và lấy một mẫu khác

Có vẻ như nhà khoa học dữ liệu đang bị mắc kẹt

May mắn thay, một ý tưởng tuyệt vời được gọi là bootstrap có thể giúp cô ấy. Vì không thể tạo ra các mẫu mới từ dân số, bootstrap tạo ra các mẫu ngẫu nhiên mới bằng phương pháp gọi là lấy mẫu lại. các mẫu mới được lấy ngẫu nhiên từ mẫu ban đầu

Trong phần này, chúng ta sẽ xem cách thức và lý do bootstrap hoạt động. Trong phần còn lại của chương này, chúng ta sẽ sử dụng bootstrap để suy luận

13. 2. 1. Bồi thường cho nhân viên tại Thành phố San Francisco#

SF OpenData là một trang web nơi Thành phố và Quận San Francisco cung cấp công khai một số dữ liệu của họ. Một trong các bộ dữ liệu chứa dữ liệu lương thưởng cho nhân viên của Thành phố. Những người này bao gồm các chuyên gia y tế tại các bệnh viện do Thành phố điều hành, cảnh sát, nhân viên cứu hỏa, công nhân vận tải, các quan chức dân cử và tất cả các nhân viên khác của Thành phố

Số liệu đền bù năm dương lịch 2019 tại bảng

sf2019.sort('Total Compensation')
7

sf2019 = Table.read_table(path_data + 'san_francisco_2019.csv')

sf2019.show(3)

Nhóm tổ chức Bộ phận Công việc Gia đình Công việc Tiền lương Làm thêm giờ Quyền lợi Tổng số tiền bồi thường Bảo vệ công cộng Quản chế dành cho người lớn Hệ thống thông tin IS Trainer-Journey91332040059131391 Bảo vệ công cộng Quản chế dành cho người lớnHệ thống thông tinKỹ sư-Trợ lý IS123241049279172520Bảo vệ công cộng Thử việc dành cho người lớnHệ thống thông tinNhà phân tích kinh doanh cấp cao của IS11571504675621624

(44522 hàng bị bỏ qua)

Có một hàng cho mỗi hơn 44.500 nhân viên. Có nhiều cột chứa thông tin về liên kết các phòng ban của Thành phố và chi tiết về các phần khác nhau trong gói thù lao của nhân viên. Đây là hàng tương ứng với London Breed, Thị trưởng San Francisco năm 2019

sf2019.where('Job', 'Mayor')

Nhóm tổ chức Bộ phận Công việc Gia đình Công việc Lương Làm thêm giờ Phúc lợi Tổng tiền lương Quản trị chung & Tài chính Thị trưởng Hành chính & Quản lý (Không chính thức)Thị trưởng342974098012440987

Chúng ta sẽ nghiên cứu cột cuối cùng,

sf2019.sort('Total Compensation')
8. Đó là tiền lương của nhân viên cộng với khoản đóng góp của Thành phố cho các kế hoạch hưu trí và phúc lợi của họ

Các gói tài chính trong một năm dương lịch đôi khi có thể khó hiểu vì chúng phụ thuộc vào ngày thuê, liệu nhân viên có thay đổi công việc trong Thành phố hay không, v.v. Ví dụ: các giá trị thấp nhất trong cột

sf2019.sort('Total Compensation')
8 trông hơi lạ

sf2019.sort('Total Compensation')

Organization GroupDepartmentJob FamilyJobSalaryOvertimeBenefitsTotal CompensationPublic ProtectionAdult ProbationProbation & ParoleDeputy Probation Officer0000Public ProtectionFire DepartmentClerical, Secretarial & StenoSenior Clerk Typist0000Public ProtectionJuvenile CourtCorrection & DetentionCounselor, Juvenile Hall PERS0000Public ProtectionPoliceClerical, Secretarial & StenoClerk Typist0000Public ProtectionSheriffCorrection & DetentionDeputy Sheriff0000Public Works, Transportation & CommerceAirport CommissionSub-Professional EngineeringStdntDsgn Train2/Arch/Eng

(44515 hàng bị bỏ qua)

Để giải thích rõ ràng, chúng tôi sẽ tập trung chú ý vào những người có công việc bán thời gian tương đương hoặc hơn trong cả năm. Với mức lương tối thiểu khoảng 15 đô la mỗi giờ và 20 giờ mỗi tuần trong 52 tuần, đó là mức lương trên 15.000 đô la

sf2019 = sf2019.where('Salary', are.above(15000))

________số 8

37103

13. 2. 2. Số lượng và tham số#

Hãy để bảng chỉ hơn 37.000 hàng này là dân số của chúng tôi. Dưới đây là biểu đồ tổng số tiền bồi thường cho nhân viên trong bảng này

sf2019 = Table.read_table(path_data + 'san_francisco_2019.csv')
0

Bootstrap trung bình Python

Trong khi hầu hết các giá trị dưới 300.000 đô la, một số ít cao hơn một chút. Ví dụ, tổng thù lao của Giám đốc đầu tư là hơn 700.000 đô la. Đó là lý do tại sao trục ngang kéo dài khá xa về bên phải của các thanh hiển thị

sf2019 = Table.read_table(path_data + 'san_francisco_2019.csv')
1

Nhóm tổ chức Bộ phận Công việc Gia đình Công việc Tiền lương Làm thêm giờ Phúc lợi Tổng tiền lương Quản trị chung & Tài chínhDịch vụ Hưu tríHành chính & Quản lý (Không chính thức)Giám đốc đầu tư5776330146398724031Quản trị chung & Tài chínhDịch vụ hưu tríGiám đốc điều hành chưa được chỉ định4830720134879617951

(37101 hàng bị bỏ qua)

Giả sử tham số mà chúng ta quan tâm là trung bình của tổng số tiền bồi thường

Vì chúng ta có điều xa xỉ là có tất cả dữ liệu từ dân số, chúng ta có thể chỉ cần tính tham số

sf2019 = Table.read_table(path_data + 'san_francisco_2019.csv')
2

sf2019.show(3)
0

Tổng số tiền bồi thường trung bình của tất cả nhân viên là 135.747 đô la

Từ góc độ thực tế, không có lý do gì để chúng ta lấy mẫu để ước tính tham số này vì chúng ta chỉ biết giá trị của nó. Nhưng trong phần này, chúng tôi sẽ giả vờ như chúng tôi không biết giá trị và xem chúng tôi có thể ước tính nó tốt như thế nào dựa trên một mẫu ngẫu nhiên

Trong các phần sau, chúng ta sẽ đi sâu vào thực tế và làm việc trong các tình huống chưa biết tham số. Hiện tại, chúng ta đều biết

13. 2. 3. Mẫu ngẫu nhiên và ước tính#

Chúng ta hãy lấy một mẫu gồm 500 nhân viên một cách ngẫu nhiên mà không cần thay thế và lấy tổng thu nhập trung bình của các nhân viên được lấy làm ước tính của chúng ta về tham số

sf2019.show(3)
1

Bootstrap trung bình Python

sf2019.show(3)
2

sf2019.show(3)
3

Cỡ mẫu lớn. Theo quy luật trung bình, phân phối của mẫu giống với phân phối của dân số. Do đó, trung vị mẫu tương đối giống với trung vị dân số, mặc dù tất nhiên là không hoàn toàn giống nhau

Vì vậy, bây giờ chúng tôi có một ước tính của tham số. Nhưng nếu mẫu xuất hiện khác đi, ước tính sẽ có giá trị khác. Chúng tôi muốn có thể định lượng số lượng ước tính có thể khác nhau giữa các mẫu. Phép đo độ biến thiên đó sẽ giúp chúng tôi đo lường mức độ chính xác mà chúng tôi có thể ước tính tham số

Để xem ước tính sẽ khác nhau như thế nào nếu mẫu được đưa ra khác nhau, chúng ta chỉ cần lấy một mẫu khác từ dân số. Nhưng đó sẽ là gian lận. Chúng tôi đang cố gắng bắt chước cuộc sống thực, trong đó chúng tôi sẽ không có sẵn tất cả dữ liệu dân số

Bằng cách nào đó, chúng tôi phải lấy một mẫu ngẫu nhiên khác mà không lấy mẫu lại từ dân số

13. 2. 4. Bootstrap. Lấy mẫu lại từ Mẫu#

Những gì chúng tôi có là một mẫu ngẫu nhiên lớn từ dân số. Như chúng ta đã biết, một mẫu ngẫu nhiên lớn có khả năng giống với tổng thể mà nó được lấy ra. Quan sát này cho phép các nhà khoa học dữ liệu tự nâng mình lên bằng chiến lược của chính họ. quy trình lấy mẫu có thể được nhân rộng bằng cách lấy mẫu từ mẫu

Dưới đây là các bước của phương pháp bootstrap để tạo một mẫu ngẫu nhiên khác giống với dân số

  • Đối xử với mẫu ban đầu như thể nó là dân số

  • Rút ra từ mẫu, ngẫu nhiên có thay thế, cùng số lần với cỡ mẫu ban đầu

Điều quan trọng là lấy mẫu lại cùng số lần với cỡ mẫu ban đầu. Lý do là độ biến thiên của một ước tính phụ thuộc vào kích thước của mẫu. Vì mẫu ban đầu của chúng tôi bao gồm 500 nhân viên, trung bình mẫu của chúng tôi dựa trên 500 giá trị. Để xem mẫu có thể khác nhau như thế nào, chúng ta phải so sánh nó với giá trị trung bình của các mẫu khác có kích thước 500

Nếu chúng tôi rút ngẫu nhiên 500 lần mà không thay thế từ mẫu cỡ 500 của chúng tôi, chúng tôi sẽ nhận lại cùng một mẫu. Bằng cách vẽ có thay thế, chúng tôi tạo khả năng cho các mẫu mới khác với mẫu ban đầu, bởi vì một số nhân viên có thể được vẽ nhiều lần và những người khác thì không.

13. 2. 5. Tại sao Bootstrap hoạt động#

Tại sao đây là một ý tưởng tốt? . Vì vậy, sự phân phối của tất cả các mẫu lại cũng có khả năng giống với dân số

Bootstrap trung bình Python

13. 2. 6. Số trung vị được lấy mẫu lại

Nhớ lại rằng phương thức

sf2019 = sf2019.where('Salary', are.above(15000))
0 lấy các hàng từ một bảng có thay thế theo mặc định và khi nó được sử dụng mà không chỉ định kích thước mẫu, theo mặc định, kích thước mẫu bằng với số lượng hàng của bảng. Điều đó hoàn hảo cho bootstrap. Đây là một mẫu mới được rút ra từ mẫu ban đầu và trung bình mẫu tương ứng

sf2019.show(3)
4

sf2019.show(3)
5

Bootstrap trung bình Python

sf2019.show(3)
6

sf2019.show(3)
7

Giá trị này là một ước tính của dân số trung bình

Bằng cách lấy mẫu lại nhiều lần, chúng ta có thể nhận được nhiều ước tính như vậy và do đó phân phối theo kinh nghiệm của các ước tính

sf2019.show(3)
8

sf2019.show(3)
9

Hãy để chúng tôi thu thập mã này và xác định một hàm

sf2019 = sf2019.where('Salary', are.above(15000))
1 trả về một giá trị trung bình được khởi động của tổng số tiền đền bù, dựa trên việc khởi tạo mẫu ngẫu nhiên ban đầu mà chúng tôi gọi là
sf2019 = sf2019.where('Salary', are.above(15000))
2

sf2019.where('Job', 'Mayor')
0

Chạy ô bên dưới một vài lần để xem trung bình bootstrapped khác nhau như thế nào. Hãy nhớ rằng mỗi người trong số họ là một ước tính của dân số trung bình

sf2019.where('Job', 'Mayor')
1

sf2019.where('Job', 'Mayor')
2

13. 2. 7. Bootstrap Phân phối theo kinh nghiệm của Trung bình mẫu#

Bây giờ chúng ta có thể lặp lại quá trình bootstrap nhiều lần bằng cách chạy vòng lặp

sf2019 = sf2019.where('Salary', are.above(15000))
3 như bình thường. Trong mỗi lần lặp lại, chúng tôi sẽ gọi hàm
sf2019 = sf2019.where('Salary', are.above(15000))
1 để tạo một giá trị của trung bình khởi động dựa trên mẫu ban đầu của chúng tôi
sf2019 = sf2019.where('Salary', are.above(15000))
2. Sau đó, chúng tôi sẽ nối trung bình bootstrapped vào mảng bộ sưu tập ________ 76

Vì chúng tôi đang yêu cầu 5000 lần lặp lại, mã có thể mất một lúc để chạy. Nó có rất nhiều resampling để làm

sf2019.where('Job', 'Mayor')
3

Dưới đây là biểu đồ thực nghiệm của 5000 trung vị khởi động. Chấm xanh là tham số dân số. nó là trung bình của toàn bộ dân số, đó là những gì chúng tôi đang cố gắng ước tính. Trong ví dụ này, chúng tôi tình cờ biết giá trị của nó, nhưng chúng tôi đã không sử dụng nó trong quá trình bootstrap

sf2019.where('Job', 'Mayor')
4

Bootstrap trung bình Python

Điều quan trọng cần nhớ là dấu chấm màu xanh lá cây đã được cố định. nó là 135.747 đô la, dân số trung bình. Biểu đồ theo kinh nghiệm là kết quả của các lần rút thăm ngẫu nhiên và sẽ được đặt ngẫu nhiên so với chấm màu xanh lá cây

Cũng nên nhớ rằng mục đích của tất cả các tính toán này là ước tính trung bình dân số, là dấu chấm màu xanh lá cây. Các ước tính của chúng tôi là tất cả các giá trị trung bình được lấy mẫu ngẫu nhiên có biểu đồ mà bạn thấy ở trên. Chúng tôi muốn tập hợp các ước tính này chứa tham số. Nếu không, thì ước tính bị tắt

13. 2. 8. Các ước tính có nắm bắt được thông số không?#

Tần suất biểu đồ theo kinh nghiệm của các trung vị được lấy mẫu lại nằm chắc chắn trên chấm màu xanh lá cây và không chỉ quét qua chấm bằng đuôi của nó hoặc hoàn toàn không che phủ nó? . Hãy coi điều đó có nghĩa là “95% trung bình của các dải trung vị được lấy mẫu lại có chứa dấu chấm màu xanh lá cây”

Dưới đây là hai đầu của khoảng “95% ở giữa” của các trung vị được lấy mẫu lại

sf2019.where('Job', 'Mayor')
5

sf2019.where('Job', 'Mayor')
6

sf2019.where('Job', 'Mayor')
7

sf2019.where('Job', 'Mayor')
8

Dân số trung bình là 135.747 đô la nằm giữa hai con số này. Khoảng thời gian và trung bình dân số được hiển thị trên biểu đồ bên dưới

sf2019.where('Job', 'Mayor')
9

Bootstrap trung bình Python

Khoảng ước tính “95% ở giữa” đã ghi lại tham số trong ví dụ của chúng tôi. Nhưng đó có phải là một may mắn?

Để xem tần suất khoảng thời gian chứa tham số, chúng ta phải chạy đi chạy lại toàn bộ quy trình. Cụ thể, chúng tôi sẽ sao chép quy trình sau 100 lần

  • Lấy một mẫu ngẫu nhiên ban đầu cỡ 500 từ tổng thể

  • Thực hiện 5000 lần lặp lại quy trình bootstrap và tạo khoảng “95% ở giữa” của các trung vị được lấy mẫu lại

Chúng tôi sẽ kết thúc với 100 khoảng thời gian và đếm xem có bao nhiêu khoảng thời gian chứa trung bình dân số

cảnh báo spoiler. Lý thuyết thống kê của bootstrap nói rằng con số phải vào khoảng 95. Nó có thể ở mức thấp của thập niên 90 hoặc cao của thập niên 90, nhưng chúng tôi không hy vọng nó sẽ xa hơn mức 95 nhiều

Chúng ta sẽ bắt đầu bằng cách viết một hàm

sf2019 = sf2019.where('Salary', are.above(15000))
7 nhận hai đối số. tên của bảng chứa mẫu ngẫu nhiên ban đầu và số lượng mẫu bootstrap cần rút. Nó trả về một mảng các trung vị bootstrapped, một từ mỗi mẫu boostrap

sf2019.sort('Total Compensation')
0

Bây giờ chúng ta sẽ viết một vòng lặp

sf2019 = sf2019.where('Salary', are.above(15000))
3 gọi hàm này 100 lần và thu thập “95% trung bình” của các trung vị được khởi động mỗi lần

Ô bên dưới sẽ mất vài phút để chạy vì nó phải thực hiện 100 lần lặp lại lấy mẫu 500 lần ngẫu nhiên từ bảng và tạo 5000 mẫu khởi động

sf2019.sort('Total Compensation')
1

Đối với mỗi trong số 100 lần lặp lại của toàn bộ quy trình, chúng tôi nhận được một khoảng ước tính của trung vị

sf2019.sort('Total Compensation')
2

TráiPhải125093139379129925140757133955146369129335140847132756145429130167143200125935138491131092142472128509140462131270145998

(90 hàng bị bỏ qua)

Các khoảng thời gian tốt là những khoảng có chứa tham số mà chúng tôi đang cố gắng ước tính. Thông thường, tham số không được biết, nhưng trong phần này, chúng ta tình cờ biết tham số là gì

sf2019.sort('Total Compensation')
3

sf2019.show(3)
0

Có bao nhiêu trong số 100 khoảng chứa trung vị dân số?

sf2019.sort('Total Compensation')
5

sf2019.sort('Total Compensation')
6

Phải mất nhiều phút để xây dựng tất cả các khoảng thời gian, nhưng hãy thử lại nếu bạn đủ kiên nhẫn. Nhiều khả năng, khoảng 95 trong số 100 khoảng thời gian sẽ là khoảng thời gian tốt. chúng sẽ chứa tham số

Thật khó để hiển thị cho bạn tất cả các khoảng trên trục hoành vì chúng có độ trùng lặp lớn – xét cho cùng, tất cả chúng đều đang cố gắng ước tính cùng một tham số. Đồ họa bên dưới hiển thị từng khoảng thời gian trên cùng một trục bằng cách xếp chúng theo chiều dọc. Trục tung chỉ đơn giản là số lượng bản sao mà từ đó khoảng thời gian được tạo ra

Đường màu xanh lá cây là nơi tham số. Nó có một vị trí cố định vì tham số là cố định

Khoảng thời gian tốt bao gồm các tham số. Có khoảng 95 trong số này, thường

Nếu một khoảng thời gian không bao gồm tham số, thì đó là một sự ngu ngốc. Những người ngu ngốc là những người mà bạn có thể nhìn thấy "ánh sáng ban ngày" xung quanh đường màu xanh lá cây. Có rất ít trong số chúng - thường là khoảng 5 trên 100 - nhưng chúng vẫn xảy ra

Bất kỳ phương pháp nào dựa trên lấy mẫu đều có khả năng bị tắt. Cái hay của các phương pháp dựa trên lấy mẫu ngẫu nhiên là chúng ta có thể định lượng tần suất chúng có thể bị tắt

Bootstrap trung bình Python

Để tóm tắt những gì mô phỏng cho thấy, giả sử bạn đang ước tính trung bình dân số theo quy trình sau

  • Lấy một mẫu ngẫu nhiên lớn từ dân số

  • Bootstrap mẫu ngẫu nhiên của bạn và nhận ước tính từ mẫu ngẫu nhiên mới

  • Lặp lại bước bootstrap ở trên hàng nghìn lần và nhận được hàng nghìn ước tính

  • Chọn khoảng "95% ở giữa" của tất cả các ước tính

Điều đó cung cấp cho bạn một khoảng ước tính. Nếu 99 người khác lặp lại toàn bộ quy trình, mỗi lần bắt đầu với một mẫu ngẫu nhiên mới, thì bạn sẽ có 100 khoảng thời gian như vậy. Khoảng 95 trong số 100 khoảng này sẽ chứa tham số dân số

Nói cách khác, quá trình ước tính này nắm bắt tham số khoảng 95% thời gian

Bạn có thể thay thế 95% bằng một giá trị khác, miễn là không phải 100. Giả sử bạn thay 95% bằng 80% và giữ cỡ mẫu cố định là 500. Sau đó, khoảng thời gian ước tính của bạn sẽ ngắn hơn khoảng thời gian chúng tôi mô phỏng ở đây, bởi vì “80% ở giữa” là phạm vi nhỏ hơn “95% ở giữa”. Nếu bạn tiếp tục lặp lại quy trình này, chỉ khoảng 80% khoảng thời gian của bạn sẽ chứa tham số

Bạn có thể bootstrap một trung bình?

Khi chúng tôi tìm thấy mẫu bootstrap, chúng tôi có thể tạo khoảng tin cậy. Ví dụ: đối với khoảng tin cậy 90%, chúng tôi sẽ tìm phần trăm thứ 5 và phần trăm thứ 95 của mẫu bootstrap. Bạn có thể tạo mẫu bootstrap để tìm phân phối lấy mẫu gần đúng của bất kỳ thống kê nào, không chỉ trung bình .

Tôi có thể sử dụng Python với bootstrap không?

Khi lập trình bằng Python, thông thường bạn sẽ sử dụng một khung web, một khung rất phổ biến là Django. May mắn thay, có một dự án sử dụng Bootstrap trong Django . Đây là trên Pypi. org nên việc cài đặt là công việc thường xuyên. Nhiều khả năng bạn đang chạy một môi trường ảo, hãy kích hoạt nó và cài đặt bằng pip.

Khoảng tin cậy bootstrapping là gì?

'Bootstrapping' mô tả một quy trình nhằm ước tính giá trị của một thống kê sẽ thay đổi như thế nào khi nó được tính toán từ các mẫu ngẫu nhiên của một tập hợp vô hạn . Để đạt được điều này, một quần thể mô hình được xây dựng từ mẫu quan sát của bạn và được lấy mẫu lại để bắt chước cách thu được những quan sát đó.

Sự khác biệt giữa xác thực chéo và bootstrapping là gì?

Tóm lại, Xác thực chéo chia tập dữ liệu có sẵn để tạo nhiều tập dữ liệu và phương pháp Bootstrapping sử dụng tập dữ liệu gốc để tạo nhiều tập dữ liệu sau khi lấy mẫu lại bằng thay thế. Bootstrapping nó không mạnh bằng Xác thực chéo khi nó được sử dụng để xác thực mô hình