Bivariate phân phối Poisson trăn

Dữ liệu dựa trên số lượng chứa các sự kiện xảy ra ở một tốc độ nhất định. Tỷ lệ xảy ra có thể thay đổi theo thời gian hoặc từ lần quan sát này sang lần quan sát tiếp theo. Dưới đây là một số ví dụ về dữ liệu dựa trên số lượng

Nguồn dữ liệu. Wikipedia. các ngoại hành tinh có thể ở được [Hình ảnh của Tác giả]

  • Số lượng phương tiện qua giao lộ mỗi giờ,
  • Số người đến văn phòng bác sĩ mỗi tháng,
  • Số hành tinh giống trái đất được phát hiện mỗi tháng

Một tập dữ liệu đếm có các đặc điểm sau

  • Dữ liệu số nguyên. Dữ liệu gồm các số nguyên không âm. [0… ∞] Các kỹ thuật hồi quy như Hồi quy bình phương nhỏ nhất thông thường có thể không phù hợp để mô hình hóa dữ liệu đó vì OLSR hoạt động tốt nhất trên các số thực như -656. 0, -0. 00000345, 13786. 1 vv
  • Phân phối lệch. Dữ liệu có thể chứa một số lượng lớn các điểm dữ liệu chỉ cho một vài giá trị, do đó làm cho phân phối tần suất khá sai lệch. Xem ví dụ trên biểu đồ
  • thưa thớt. Dữ liệu có thể phản ánh sự xuất hiện của một sự kiện hiếm gặp như vụ nổ tia gamma, do đó làm cho dữ liệu thưa thớt
  • Tỷ lệ xảy ra. Để tạo ra một mô hình, có thể giả định rằng có một tỷ lệ xuất hiện nhất định của các sự kiện λ thúc đẩy việc tạo dữ liệu đó. Tỷ lệ sự kiện có thể trôi theo thời gian

Một bộ dữ liệu trong thế giới thực về số lượng

Bảng sau đây chứa số lượng người đi xe đạp đi qua các cây cầu khác nhau của NYC. Số lượng được đo hàng ngày từ ngày 01 tháng 4 năm 2017 đến ngày 31 tháng 10 năm 2017

Nguồn. Đếm xe đạp cho các cây cầu sông Đông [Nguồn dữ liệu. NYC OpenData] [Hình ảnh của Tác giả]

Đây là một cốt truyện theo trình tự thời gian của người đi xe đạp đếm trên cầu Brooklyn

Hình nền.

Các mô hình hồi quy cho số đếm

Mô hình hồi quy Poisson và mô hình hồi quy Nhị thức âm là hai kỹ thuật phổ biến để phát triển mô hình hồi quy cho số lượng. Các khả năng khác là các mô hình Ordered Logit, Ordered Probit và Nonlinear Least Squares

Chiến lược hồi quy

Bạn nên bắt đầu với mô hình hồi quy Poisson và sử dụng nó làm “điều khiển” cho các mô hình phức tạp hơn hoặc ít ràng buộc hơn. Trong cuốn sách Phân tích hồi quy của dữ liệu đếm, Cameron và Trivedi nói như sau

“Một phương pháp hay là ước tính cả mô hình nhị thức Poisson và âm. ”

Trong phần này, chúng ta sẽ sử dụng mô hình hồi quy Poisson để hồi quy số lượng người đi xe đạp quan sát được trên cầu Brooklyn và trong phần tiếp theo, chúng ta sẽ huấn luyện mô hình Nhị thức âm trên cùng một tập dữ liệu

Giới thiệu mô hình Poisson

Phân phối Poisson có Hàm khối lượng xác suất sau

Xác suất nhìn thấy k sự kiện trong thời gian t, với λ sự kiện xảy ra trong mỗi đơn vị thời gian [Ảnh của Tác giả]

Giá trị kỳ vọng [trung bình] cho phân phối Poisson là λ. Do đó, trong trường hợp không có thông tin khác, người ta sẽ thấy các sự kiện λ trong bất kỳ khoảng thời gian đơn vị nào, chẳng hạn như 1 giờ, 1 ngày, v.v. Đối với bất kỳ khoảng thời gian t nào, người ta sẽ mong đợi thấy các sự kiện λt

Mô hình hồi quy Poisson cho hằng số λ

Nếu tỷ lệ sự kiện λ không đổi, người ta chỉ cần sử dụng Mô hình trung bình đã sửa đổi để dự đoán số lượng sự kiện trong tương lai. Trong trường hợp này, người ta sẽ đặt tất cả các giá trị đếm được dự đoán thành giá trị không đổi này λ

Hình dưới đây minh họa kịch bản λ không đổi

Số lượng thực tế và dự đoán cho một mô hình tỷ lệ không đổi [Hình ảnh của Tác giả]

Mã Python sau đây đã được sử dụng để tạo các chấm màu xanh lam [số lượng thực tế trong các bước thời gian trước] bằng quy trình Poisson với λ=5. Các chấm màu cam [dự đoán] đều được đặt thành cùng một giá trị 5

Tệp này chứa văn bản Unicode hai chiều có thể được diễn giải hoặc biên dịch khác với nội dung hiển thị bên dưới. Để xem lại, hãy mở tệp trong trình chỉnh sửa hiển thị các ký tự Unicode bị ẩn. Tìm hiểu thêm về các ký tự Unicode hai chiều

Hiển thị ký tự ẩn

nhập ngẫu nhiênnhập toán học_lambda = 5_num_total_arrivals = 150_num_arrivals = 0_arrival_time = 0_num_arrivals_in_unit_time = []_time_tick = 1print['RANDOM_N,INTER_ARRIVAL_TIME,EVENT_ARRIVAL_TIME']for i in range[_num_total_arrivals]:#Lấy giá trị xác suất tiếp theo từ Đồng nhất[0,1]p = random.ngẫu nhiên [] #Plug nó vào nghịch đảo của CDF của Exponential[_lamnbda]_inter_arrival_time = math.log [ 1. 0 p ] / . #Add the inter-arrival time to the running sum_arrival_time = _arrival_time + _inter_arrival_time#Increment the number of arrival per unit time_num_arrivals = _num_arrivals + 1if _arrival_time > _time_tick:_num_arrivals_in_unit_time . append [ _num_arrivals ] _num_arrivals . ' = 0_time_tick = _time_tick + 1#print it all outprint[str[p]+','+str[_inter_arrival_time]+','+str[_arrival_time]]print['\nNumber of arrivals in successive unit length intervals ===>']print[_num_arrivals_in_unit_time]print['Mean arrival rate for sample:' + str [ tổng[_num_arrivals_in_unit_time]/len[_num_arrivals_in_unit_time]]]

xem raw được lưu trữ với ❤ ​​bởi GitHub

Một chương trình Python để tạo số lượng sự kiện bằng quy trình Poisson

Một mô hình hồi quy Poisson cho một hằng số λ

Bây giờ chúng ta đến phần thú vị. Hãy để chúng tôi kiểm tra một tình huống phổ biến hơn, một tình huống trong đó λ có thể thay đổi từ quan sát này sang quan sát tiếp theo. Trong trường hợp này, chúng tôi giả định rằng giá trị của λ bị ảnh hưởng bởi một vectơ của các biến giải thích, còn được gọi là biến dự đoán, biến hồi quy hoặc biến hồi quy. Chúng ta sẽ gọi ma trận biến hồi quy này là X

Công việc của mô hình hồi quy là điều chỉnh số lượng y quan sát được với ma trận của các giá trị hồi quy X

Trong tập dữ liệu đếm người đi xe đạp ở NYC, các biến hồi quy là Ngày, Ngày trong tuần, Nhiệt độ cao, Nhiệt độ thấp và Lượng mưa. Chúng tôi cũng có thể giới thiệu các biến hồi quy bổ sung như Tháng và Ngày trong Tháng bắt nguồn từ Ngày và chúng tôi có quyền loại bỏ các biến hồi quy hiện có như Ngày

[Ảnh của Tác giả]

Việc khớp y với X xảy ra bằng cách cố định các giá trị của vectơ hệ số hồi quy β

Trong mô hình Hồi quy Poisson, số lượng sự kiện y được giả định là phân phối Poisson, có nghĩa là xác suất quan sát y là một hàm của vectơ tốc độ sự kiện λ

Công việc của mô hình Hồi quy Poisson là điều chỉnh số đếm y quan sát được với ma trận hồi quy X thông qua hàm liên kết biểu thị vectơ tốc độ λ dưới dạng hàm của, 1] hệ số hồi quy β và 2] ma trận hồi quy X

Hình dưới đây minh họa cấu trúc của mô hình hồi quy Poisson

Quét từ trái sang phải. Cấu trúc của mô hình hồi quy Poisson [Ảnh của Tác giả]

Điều gì có thể là một chức năng liên kết tốt f[. ] nối λ với X?

Hàm liên kết hàm mũ của mô hình hồi quy Poisson [Ảnh của Tác giả]

Hàm liên kết này giữ cho λ không âm ngay cả khi các biến hồi quy X hoặc hệ số hồi quy β có giá trị âm. Đây là một yêu cầu đối với dữ liệu dựa trên số lượng

Nói chung, chúng ta có

Hàm liên kết hàm mũ của mô hình hồi quy Poisson [Ảnh của Tác giả]

Đặc điểm kỹ thuật chính thức của mô hình hồi quy Poisson

Thông số kỹ thuật đầy đủ của mô hình hồi quy Poisson cho dữ liệu dựa trên số lượng được đưa ra như sau

Đối với lần quan sát thứ i trong tập dữ liệu được ký hiệu là y_i tương ứng với hàng biến hồi quy x_i, xác suất quan sát số lượng y_i là phân phối Poisson theo PMF sau

Xác suất quan sát số lượng y_i cho trước x_i [theo công thức Poisson PMF] [Hình ảnh của Tác giả]

Trong đó tốc độ trung bình λ_i cho mẫu thứ i được đưa ra bởi hàm liên kết hàm mũ được hiển thị trước đó. Chúng tôi sao chép nó ở đây

Hàm liên kết hàm mũ của mô hình hồi quy Poisson [Ảnh của Tác giả]

Sau khi mô hình được đào tạo đầy đủ trên tập dữ liệu, các hệ số hồi quy β được biết và mô hình đã sẵn sàng để đưa ra dự đoán. Để dự đoán số lượng sự kiện y_p tương ứng với hàng đầu vào của các biến hồi quy x_p mà người ta đã quan sát, người ta sử dụng công thức này

Phương trình dự đoán cho mô hình hồi quy Poisson [Ảnh của Tác giả]

Tất cả những điều này phụ thuộc vào khả năng huấn luyện mô hình thành công của chúng ta sao cho véc tơ hệ số hồi quy β được biết đến

Hãy xem quá trình đào tạo này diễn ra như thế nào

Đào tạo mô hình hồi quy Poisson

Đào tạo một mô hình hồi quy Poisson liên quan đến việc tìm các giá trị của các hệ số hồi quy β sẽ làm cho vectơ của số lượng y được quan sát có khả năng nhất

Kỹ thuật xác định các hệ số β được gọi là Ước tính khả năng tối đa [MLE]

Hãy làm quen với kỹ thuật của MLE

Hiểu ước tính khả năng tối đa [MLE]

Tôi sẽ minh họa kỹ thuật MLE bằng cách sử dụng bộ dữ liệu đếm người đi xe đạp. Hãy xem một vài hàng đầu tiên của tập dữ liệu này

Số lượng người đi xe đạp hàng ngày trên cầu Brooklyn [Ảnh của Tác giả]

Giả định của chúng tôi là số lượng người đi xe đạp được hiển thị trong ô màu đỏ phát sinh từ quy trình Poisson. Do đó, chúng ta có thể nói rằng xác suất xảy ra của chúng được đưa ra bởi Poisson PMF. Đây là xác suất cho 4 lần xuất hiện đầu tiên

Xác suất quan sát số lượng người đi xe đạp trong một vài lần xuất hiện đầu tiên dựa trên các vectơ hồi quy tương ứng [Hình ảnh của Tác giả]

Tương tự, chúng ta có thể tính xác suất cho tất cả n số được quan sát trong tập huấn luyện

Lưu ý rằng trong các công thức trên, λ_1, λ_2, λ_3,…,λ_n được tính bằng hàm liên kết như sau

Tỷ lệ sự kiện tương ứng với số lượng trong vài ngày đầu tiên [Hình ảnh của Tác giả]

Trong đó x_1, x_2, x_3, x_4 là 4 hàng đầu tiên của ma trận hồi quy

Xác suất xuất hiện của toàn bộ n số đếm y_1, y_2,…,y_n trong tập huấn luyện là xác suất xuất hiện chung của các số đếm riêng lẻ

Các tổng số y có phân phối Poisson, y_1, y_2,…,y_n là các biến ngẫu nhiên độc lập, cho trước tương ứng x_1, x_2,…,x_n. Do đó, xác suất xuất hiện chung của y_1, y_2,…,y_n có thể được biểu thị dưới dạng phép nhân đơn giản của các xác suất riêng lẻ. Đây là cách xác suất chung trông như thế nào đối với toàn bộ tập huấn luyện

Hàm khả năng L[β] được biểu thị dưới dạng hàm khối lượng xác suất chung [Hình ảnh của Tác giả]

Hãy nhớ lại rằng λ_1, λ_2, λ_3,…,λ_n được liên kết với các vectơ hồi quy x_1, x_2,x_3,…,x_n thông qua các hệ số hồi quy β

Giá trị nào của β sẽ làm cho tập hợp các số quan sát y đã cho có khả năng xảy ra nhất? . Nói cách khác, đó là giá trị của β mà tốc độ thay đổi của hàm xác suất chung w. r. t. là 0. Nói cách khác, đó là nghiệm của phương trình thu được từ vi phân phương trình xác suất chung w. r. t. và đặt phương trình vi phân này thành 0

Dễ dàng phân biệt logarit của phương trình xác suất chung hơn so với phương trình ban đầu. Giải pháp cho phương trình đã ghi mang lại cùng một giá trị tối ưu của β

Phương trình logarit này được gọi là hàm log-likelihood. Đối với hồi quy Poisson, hàm log-likelihood được cho bởi phương trình sau

log-likelihood function cho mô hình hồi quy Poisson [Hình ảnh của Tác giả]

Phương trình trên thu được bằng cách lấy logarit tự nhiên của cả hai vế của hàm xác suất chung được hiển thị trước đó, sau khi thay thế λ_i bằng exp[x_i*β]

Như đã đề cập trước đó, chúng tôi vi phân phương trình log-likelihood này w. r. t. và đặt nó thành 0. Hoạt động này cho chúng ta phương trình sau

Poisson MLE cho β là nghiệm của phương trình này [Ảnh của Tác giả]

Giải phương trình này cho các hệ số hồi quy β sẽ mang lại Ước tính khả năng xảy ra tối đa [MLE] cho β

Để giải phương trình trên, người ta sử dụng một phương pháp lặp như Iteratively Reweighted Least Squares [IRLS]. Trong thực tế, người ta không giải phương trình này bằng tay. Thay vào đó, bạn sử dụng phần mềm thống kê chẳng hạn như gói mô hình thống kê Python sẽ thực hiện tất cả các phép tính cho bạn trong khi đào tạo mô hình hồi quy Poisson trên tập dữ liệu của bạn

Tóm tắt các bước thực hiện hồi quy Poisson

Tóm lại, đây là các bước để thực hiện Hồi quy Poisson trên tập dữ liệu dựa trên số lượng

  1. Trước tiên, hãy đảm bảo rằng tập dữ liệu của bạn chứa số lượng. Một cách để nói là nó chỉ chứa các giá trị nguyên không âm biểu thị số lần xuất hiện của một số sự kiện trong một khoảng thời gian nào đó. Trong bộ dữ liệu về số lượng người đi xe đạp, đây là số lượng người đi xe đạp qua cầu Brooklyn mỗi ngày
  2. Tìm hiểu [hoặc đoán] các biến hồi quy sẽ ảnh hưởng đến số lượng quan sát được. Trong bộ dữ liệu đếm người đi xe đạp, các biến hồi quy là Ngày trong tuần, Nhiệt độ tối thiểu, Nhiệt độ tối đa, Lượng mưa, v.v.
  3. Tạo ra một tập dữ liệu đào tạo mà mô hình hồi quy của bạn sẽ đào tạo và một tập dữ liệu thử nghiệm nên để sang một bên. Không đào tạo mô hình trên dữ liệu thử nghiệm
  4. Sử dụng một phần mềm thống kê phù hợp, chẳng hạn như gói mô hình thống kê Python để định cấu hình và khớp mô hình Hồi quy Poisson trên tập dữ liệu huấn luyện
  5. Kiểm tra hiệu suất của mô hình bằng cách chạy nó trên tập dữ liệu thử nghiệm để tạo số lượng dự đoán. So sánh chúng với số lượng thực tế trong tập dữ liệu thử nghiệm
  6. Sử dụng thước đo mức độ phù hợp để xác định mức độ đào tạo của mô hình trên tập dữ liệu đào tạo

Cách đào tạo Mô hình hồi quy Poisson trong Python

Hãy thực hành những gì chúng ta đã học. Gói mô hình thống kê Python có hỗ trợ tuyệt vời để thực hiện hồi quy Poisson

Hãy sử dụng bộ dữ liệu đếm người đi xe đạp trên cầu Brooklyn. Bạn có thể lấy tập dữ liệu từ đây

Mục tiêu của chúng tôi là xây dựng mô hình hồi quy Poisson cho số lượng người đi xe đạp được quan sát y. Chúng tôi sẽ sử dụng mô hình được đào tạo để dự đoán số lượng người đi xe đạp hàng ngày trên cầu Brooklyn mà mô hình không thấy trong quá trình đào tạo

Số lượng người đi xe đạp hàng ngày trên cầu Brooklyn [Ảnh của Tác giả]

Chúng tôi sẽ bắt đầu bằng cách nhập tất cả các gói cần thiết

import pandas as pd
from patsy import dmatrices
import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt

Tạo một DataFrame gấu trúc cho tập dữ liệu đếm

df = pd.read_csv['nyc_bb_bicyclist_counts.csv', header=0, infer_datetime_format=True, parse_dates=[0], index_col=[0]]

Chúng tôi sẽ thêm một vài biến hồi quy dẫn xuất vào ma trận X

ds = df.index.to_series[]
df['MONTH'] = ds.dt.month
df['DAY_OF_WEEK'] = ds.dt.dayofweek
df['DAY'] = ds.dt.day

Chúng tôi sẽ không sử dụng biến Ngày làm biến hồi quy vì nó chứa giá trị ngày tuyệt đối nhưng chúng tôi không cần thực hiện bất kỳ điều gì đặc biệt để loại bỏ Ngày vì nó đã được sử dụng làm chỉ mục của Khung dữ liệu gấu trúc. Vì vậy, nó sẽ không có sẵn cho chúng tôi trong ma trận X

Hãy tạo tập dữ liệu huấn luyện và thử nghiệm

mask = np.random.rand[len[df]] < 0.8
df_train = df[mask]
df_test = df[~mask]
print['Training data set length='+str[len[df_train]]]
print['Testing data set length='+str[len[df_test]]]

Thiết lập biểu thức hồi quy trong ký hiệu patsy. Chúng tôi đang nói với patsy rằng BB_COUNT là biến phụ thuộc của chúng tôi và nó phụ thuộc vào các biến hồi quy. NGÀY, NGÀY_OF_TUẦN, THÁNG, CAO_T, THẤP_T và CHÍNH XÁC

expr = """BB_COUNT ~ DAY  + DAY_OF_WEEK + MONTH + HIGH_T + LOW_T + PRECIP"""

Thiết lập ma trận X và y cho tập dữ liệu huấn luyện và kiểm tra. patsy làm điều này thực sự đơn giản

y_train, X_train = dmatrices[expr, df_train, return_type='dataframe']
y_test, X_test = dmatrices[expr, df_test, return_type='dataframe']

Sử dụng lớp GLM của statsmodels, huấn luyện mô hình hồi quy Poisson trên tập dữ liệu huấn luyện

poisson_training_results = sm.GLM[y_train, X_train, family=sm.families.Poisson[]].fit[]

In tóm tắt đào tạo

print[poisson_training_results.summary[]]

Điều này in ra như sau

Tóm tắt đào tạo cho mô hình hồi quy Poisson [Hình ảnh của Tác giả]

Vậy mô hình của chúng ta đã làm tốt như thế nào?

________số 8_______

Đây là một vài hàng đầu tiên của đầu ra

Một vài hàng đầu ra đầu tiên từ poisson_predictions. summary_frame[] [Hình ảnh của Tác giả]

Hãy vẽ sơ đồ số lượng dự đoán so với số lượng thực tế cho dữ liệu thử nghiệm

predicted_counts=predictions_summary_frame['mean']
actual_counts = y_test['BB_COUNT']
fig = plt.figure[]
fig.suptitle['Predicted versus actual bicyclist counts on the Brooklyn bridge']
predicted, = plt.plot[X_test.index, predicted_counts, 'go-', label='Predicted counts']
actual, = plt.plot[X_test.index, actual_counts, 'ro-', label='Actual counts']
plt.legend[handles=[predicted, actual]]
plt.show[]

Đây là đầu ra

Số lượng người đi xe đạp dự đoán so với thực tế trên cầu Brooklyn [Ảnh của Tác giả]

Mô hình dường như ít nhiều theo dõi xu hướng trong số lượng thực tế mặc dù trong nhiều trường hợp, dự đoán của nó khác xa với giá trị thực tế

Hãy vẽ sơ đồ số lượng thực tế so với dự đoán

df = pd.read_csv['nyc_bb_bicyclist_counts.csv', header=0, infer_datetime_format=True, parse_dates=[0], index_col=[0]]
0

Đây là cốt truyện

Biểu đồ phân tán của số lượng Thực tế so với Dự đoán [Hình ảnh của Tác giả]

Đây là mã nguồn hoàn chỉnh để thực hiện hồi quy Poisson bằng Python

Tệp này chứa văn bản Unicode hai chiều có thể được diễn giải hoặc biên dịch khác với nội dung hiển thị bên dưới. Để xem lại, hãy mở tệp trong trình chỉnh sửa hiển thị các ký tự Unicode bị ẩn. Tìm hiểu thêm về các ký tự Unicode hai chiều

Hiển thị ký tự ẩn

nhập gấu trúc dưới dạng pdtừ patsy import dmatricesimport numpy as npimport statsmodels.api as smnhập matplotlib . .pyplot as plt#Create a pandas DataFrame cho tập dữ liệu đếm. df = pd . read_csv [ 'nyc_bb_bicyclist_counts. csv' , tiêu đề=0, infer_datetime_format=True, parse_dates=[0], index_col=[0]]#Add a few derived regression variables.ds = df . chỉ mục . to_series [] df [ . ] = ds.dt . thángdf [ 'DAY_OF_WEEK'] = ds.dt . ngày trong tuầndf [ 'DAY'] = ds.dt . day#Tạo tập dữ liệu huấn luyện và thử nghiệm. mặt nạ = np . ngẫu nhiên . rand [ len [ df . 8]]

Chủ Đề