Hướng dẫn poisson regression count data python - dữ liệu đếm hồi quy poisson python

Và một hướng dẫn về hồi quy Poisson bằng cách sử dụng & nbsp; python


Trong phần này, chúng tôi sẽ đề cập đến các chủ đề sau:

  1. Các tính năng của dữ liệu dựa trên số lượng: Bộ dữ liệu đếm là một số dữ liệu phổ biến nhất trên thế giới. Chúng tôi sẽ xem xét những gì làm cho dữ liệu dựa trên đếm khác nhau.Count data sets are some of the most commonly occurring data in the world. We’ll look at what makes count based data different.
  2. Các mô hình hồi quy để số lượng dự báo: Chúng tôi sẽ xem xét mô hình hồi quy Poisson một cách chi tiết. Mô hình hồi quy nhị thức âm (NB) là một mô hình thường được sử dụng khác cho dữ liệu dựa trên đếm. Tôi sẽ bao gồm điều đó trong một phần sau.We’ll look at Poisson regression model in detail. The Negative Binomial (NB) regression model is another commonly used model for count based data. I’ll cover that in a later section.
  3. Hướng dẫn Python về hồi quy Poisson: Tôi sẽ đưa bạn qua một hướng dẫn từng bước về cách tạo mô hình hồi quy Poisson trong Python bằng cách sử dụng lớp GLM của StatSmodels và cách đào tạo nó trên bộ dữ liệu thế giới thực. I will take you through a step-by-step tutorial on how to create a Poisson regression model in Python using the GLM class of statsmodels, and how to train it on a real world data set.

Dữ liệu dựa trên đếm & NBSP; dữ liệu là gì?

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

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

Một bộ dữ liệu của số lượng có các đặc điểm sau:

  • Toàn bộ dữ liệu: Dữ liệu bao gồm các số nguyên không âm: [0 Tiết ∞] Các kỹ thuật hồi quy như hồi quy bình phương tối thiểu thông thường có thể không phù hợp để mô hình hóa dữ liệu như OLSR hoạt động tốt nhất trên các số thực như -656.0, -0.00000345, 13786.1 vân vân.The data consists of non-negative integers: [0… ∞] Regression techniques such as Ordinary Least Squares Regression may not be appropriate for modeling such data as OLSR works best on real numbers such as -656.0, -0.00000345, 13786.1 etc.
  • Phân phối sai 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 số khá sai lệch. Xem ví dụ trên biểu đồ trên.The data may contain a large number of data points for just a few values, thereby making the frequency distribution quite skewed. See for example above histogram.
  • Sở thích: 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ỡ tia gamma, do đó làm cho dữ liệu thưa thớt.The data may reflect the occurrence of a rare event such as a gamma ray burst, thereby making the data sparse.
  • Tỷ lệ xuất hiện: Để 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.For the sake of creating a model, it can be assumed that there is a certain rate of occurrence of events λ that drives the generation of such data. The event rate may drift over time.

Một bộ dữ liệu trong thế giới thực của & nbsp; tính

Bảng dưới đây chứa số lượng người đi xe đạp đi qua nhiều cây cầu NYC khác nhau. Các 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.

Dưới đây là một âm mưu được giải trình tự thời gian của người đi xe đạp được tính trên cây cầu Brooklyn:


Mô hình hồi quy cho & NBSP; Đế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 các mô hình hồi quy cho số lượng. Các khả năng khác được đặt hàng logit, đặt hàng các mô hình bình phương tối thiểu và phi tuyến.Poisson regression model and the Negative Binomial regression model are two popular techniques for developing regression models for counts. Other possibilities are Ordered Logit, Ordered Probit and Nonlinear Least Squares models.

Chiến lược hồi quy

Nó thực hành tốt để bắt đầu với mô hình hồi quy Poisson và sử dụng nó như là điều khiển trực tuyến cho các mô hình phức tạp hơn hoặc ít bị ràng buộc hơn. Trong cuốn sách Phân tích hồi quy dữ liệu đếm, Cameron và Trivingi nói như sau:

Một thực hành âm thanh là ước tính cả các mô hình Poisson và NBSP;

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


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

Phân phối Poisson có hàm khối xác suất sau đây.Probability Mass Function.

Hướng dẫn poisson regression count data python - dữ liệu đếm hồi quy poisson python
Xác suất nhìn thấy các sự kiện k trong thời gian t, đưa ra các sự kiện xảy ra trên mỗi đơn vị thời gian (hình ảnh bởi & nbsp; tác giả)k events in time t, given λ events occurring per unit time (Image by Author)

Giá trị dự kiến ​​(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 λevents trong bất kỳ khoảng thời gian đơn vị nào như 1 giờ, 1 ngày, v.v. Đối với bất kỳ khoảng thời gian nào, người ta sẽ mong đợi sẽ thấy các sự kiện.λ. Thus in the absence of other information, one should expect to see λevents in any unit time interval such as 1 hour, 1 day, etc. For any interval t, one would expect to see λt events.


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

Nếu tỷ lệ sự kiện không đổi, người ta có thể sử dụng mô hình trung bình được 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ị dự đoán của số lượng cho giá trị không đổi này.λis constant, one can simply use a modified Mean Model for predicting future counts of events.In this case, one would set all predicted values of counts to this constant value λ.

Hình dưới đây minh họa kịch bản hằng số:λ scenario:

Hướng dẫn poisson regression count data python - dữ liệu đếm hồi quy poisson python
Số lượng thực tế và dự đoán cho một mô hình tốc độ không đổi (hình ảnh bởi & nbsp; tác giả)

Mã python sau đây đã được sử dụng để tạo các chấm màu xanh (số lượng thực tế trong các bước thời gian qua) 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:λ=5. The orange dots (predictions) are all set to the same value 5:

Tệp này chứa văn bản unicode hai chiều có thể được giải thích hoặc biên dịch khác với những gì xuất hiện dưới đây. Để xem xét, hãy mở tệp trong một trình soạn thảo cho thấy các ký tự Unicode ẩn. Tìm hiểu thêm về các ký tự unicode hai chiều

Hậu thế random
Nhập khẩu math
_lambda=5 = 5
_num_total_arrivals=150 = 150
_num_arrivals=0 = 0
_arrival_time=0 = 0
_num_arrivals_in_unit_time = [] = []
_time_tick=1 = 1
in ('Random_N, inter_arrival_time, event_arrival_time'))('RANDOM_N,INTER_ARRIVAL_TIME,EVENT_ARRIVAL_TIME')
foriinrange (_num_total_arrivals): i in range(_num_total_arrivals):
#Get Giá trị xác suất tiếp theo từ đồng nhất (0,1)
p = ngẫu nhiên.random () = random.random()
#Plug nó vào nghịch đảo của cdf của số mũ (_lamnbda)
_inter_arrival_time = HP = math.log(1.0 p)/_lambda
#Add thời gian liên quân vào tổng chạy
_arrival_time=_arrival_time+_inter_arrival_time = _arrival_time + _inter_arrival_time
#Increment Số lượng đến trên mỗi đơn vị thời gian
_num_arrivals=_num_arrivals+1 = _num_arrivals + 1
if_arrival_time> _time_tick: _arrival_time > _time_tick:
_num_arrivals_in_unit_time.append (_num_arrivals).append(_num_arrivals)
_num_arrivals=0 = 0
_time_tick=_time_tick+1 = _time_tick + 1
#in tất cả
print (str (p)+','+str (_inter_arrival_time)+','+str (_arrival_time)))(str(p)+','+str(_inter_arrival_time)+','+str(_arrival_time))
in ('\ nnumber của các đến trong khoảng thời gian dài đơn vị liên tiếp ===>')('\nNumber of arrivals in successive unit length intervals ===>')
in (_num_arrivals_in_unit_time)(_num_arrivals_in_unit_time)
in ('tỷ lệ đến trung bình cho mẫu:'+str (sum (_num_arrivals_in_unit_time)/len (_num_arrivals_in_unit_time))))('Mean arrival rate for sample:' + str(sum(_num_arrivals_in_unit_time)/len(_num_arrivals_in_unit_time)))

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

Một mô hình hồi quy Poisson cho mộtnon-constant λ

Bây giờ chúng ta có được 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 trong đó có thể thay đổi từ quan sát này sang quan sát khác. 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à các yếu tố dự đoán, biến hồi quy hoặc hồi quy. Chúng tôi sẽ gọi đây là ma trận của các biến hồi quy, X.λ can change from one observation to the next. In this case, we assume that the value of λ is influenced by a vector of explanatory variables, also known as predictors, regression variables, or regressors. We’ll call this matrix of regression variables, X.

Công việc của mô hình hồi quy là phù hợp với số lượng quan sát y với ma trận của các giá trị hồi quy x & nbsp ;.y to the matrix of regression values X .

Trong bộ bicyclist NYC, các biến dữ liệu, 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 hồi quy bổ sung như tháng và ngày trong tháng được lấy từ ngày và chúng tôi có quyền tự do bỏ các hồi quy hiện có như ngày.

Sự phù hợp của Y đến X xảy ra bằng cách sửa các giá trị của một vectơ của các hệ số hồi quy.y to X happens by fixing the values of a vector of regression coefficients β.

Trong mô hình hồi quy Poisson, số lượng sự kiện y được giả định là phân phối Poisson, điều đó 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.y are assumed to be Poisson distributed, which means the probability of observing y is a function of the event rate vector λ.

Công việc của mô hình hồi quy Poisson là phù hợp với số lượng quan sát y với ma trận hồi quy X thông qua chức năng liên kết biểu thị vectơ tốc độ λ là hàm của, 1) các hệ số hồi quy β và 2) ma trận hồi quy X.y to the regression matrix X via a link-function that expresses the rate vector λ as a function of, 1) the regression coefficients β and 2) the regression matrix X.

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

Hướng dẫn poisson regression count data python - dữ liệu đếm hồi quy poisson python
Quét từ trái sang phải: Cấu trúc của mô hình hồi quy Poisson (hình ảnh bởi & nbsp; tác giả): The structure of the Poisson regression model (Image by Author)

Điều gì có thể là một hàm liên kết tốt f (.) Kết nối λ với x? Hóa ra các chức năng liên kết theo cấp số nhân sau đây hoạt động rất tốt:f(.) connecting λ with X? It turns out the following exponential link-function works great:

Hướng dẫn poisson regression count data python - dữ liệu đếm hồi quy poisson python
Hàm liên kết theo cấp số nhân của mô hình hồi quy Poisson (hình ảnh bởi & nbsp; tác giả)

Hàm liên kết này giữ λ không âm ngay cả khi các hồi quy X hoặc các hệ số hồi quy β có giá trị âm. Đây là một yêu cầu cho dữ liệu dựa trên đếm.λ non-negative even when the regressors X or the regression coefficients β have negative values. This is a requirement for count based data.

Nói chung, chúng tôi có:

Hướng dẫn poisson regression count data python - dữ liệu đếm hồi quy poisson python
Hàm liên kết theo cấp số nhân của mô hình hồi quy Poisson (hình ảnh bởi & nbsp; tác giả)


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

Nói chung, chúng tôi có:

Một đặc điểm kỹ thuật chính thức của mô hình hồi quy Poissonx_i, the probability of observing the count y_i is Poisson distributed as per the following PMF:

Hướng dẫn poisson regression count data python - dữ liệu đếm hồi quy poisson python
Thông số kỹ thuật đầy đủ của mô hình hồi quy Poisson cho dữ liệu dựa trên đếm được đưa ra như sau:x_i (as per the Poisson PMF formula) (Image by Author)

Đối với quan sát ITH trong tập dữ liệu được biểu thị bằng y_i tương ứng với hàng biến hồi quy x_i, xác suất quan sát số Y_i được phân phối theo PMF sau:

Hướng dẫn poisson regression count data python - dữ liệu đếm hồi quy poisson python
Hàm liên kết theo cấp số nhân của mô hình hồi quy Poisson (hình ảnh bởi & nbsp; tác giả)

Hàm liên kết này giữ λ không âm ngay cả khi các hồi quy X hoặc các hệ số hồi quy β có giá trị âm. Đây là một yêu cầu cho dữ liệu dựa trên đếm.β are known, and the model is ready to make predictions. To predict the event count y_p corresponding to an input row of regressors x_p that one has observed, one uses this formula:

Hướng dẫn poisson regression count data python - dữ liệu đếm hồi quy poisson python
Nói chung, chúng tôi có:

Một đặc điểm kỹ thuật chính thức của mô hình hồi quy Poissonβ is known.

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


Đối với quan sát ITH trong tập dữ liệu được biểu thị bằng y_i tương ứng với hàng biến hồi quy x_i, xác suất quan sát số Y_i được phân phối theo PMF sau:β which would make the vector of observed counts y most likely.

Xác suất quan sát đếm y_i đã cho x_i (theo công thức poisson pmf) (hình ảnh by & nbsp; tác giả)β is called Maximum Likelihood Estimation (MLE).

Trong đó tốc độ trung bình λ_I cho mẫu ITH được đưa ra bởi hàm liên kết theo cấp số nhân được hiển thị trước đó. Chúng tôi tái tạo nó ở đây:MLE.

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 đến 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 một hàng hồi quy đầu vào 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 (hình ảnh bởi & nbsp; tác giả)MLE technique using the bicyclist counts data set. Take a look at the first few rows of this data set:

Hướng dẫn poisson regression count data python - dữ liệu đếm hồi quy poisson python
Tất cả những bản lề này về khả năng của chúng tôi để đào tạo mô hình thành công để các hệ số hồi quy vectơ được biết đến.

Hãy cùng nhìn vào cách đào tạo này diễn ra.

Hướng dẫn poisson regression count data python - dữ liệu đếm hồi quy poisson python
Xác suất quan sát số lượng người đi xe đạp cho một vài lần xuất hiện đầu tiên được đưa ra các vectơ hồi quy tương ứng (hình ảnh bởi & nbsp; tác giả)

Chúng tôi có thể tính toán tương tự các xác suất cho tất cả các số N được quan sát trong tập huấn luyện.n counts observed in the training set.

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

Hướng dẫn poisson regression count data python - dữ liệu đếm hồi quy poisson python
Tỷ lệ sự kiện tương ứng với số lượng trong vài ngày đầu tiên (hình ảnh bởi & nbsp; 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_1, x_2, x_3, x_4 are the first 4 rows of the regression matrix.

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

Số lượng y được phân phối Poisson, Y_1, Y_2, Mạnh, Y_N là các biến ngẫu nhiên độc lập, được đưa ra tương ứng x_1, x_2, Hồi, x_n. Do đó, xác suất chung của sự xuất hiện của Y_1, Y_2, Mạnh, 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ẻ. Dưới đây là cách xác suất chung trông như thế nào đối với toàn bộ bộ đào tạo:y are Poisson distributed, y_1, y_2,…,y_n are independent random variables, given correspondingly x_1, x_2,…,x_n. Hence the joint probability of occurrence of y_1, y_2,…,y_n can be expressed as a simple multiplication of the individual probabilities. Here is how the joint probability looks like for the entire training set:

Hướng dẫn poisson regression count data python - dữ liệu đếm hồi quy poisson python
Hàm khả năng L () được biểu thị dưới dạng hàm khối xác suất chung (hình ảnh bởi & nbsp; tác giả)likelihood function L(β) expressed as a joint probability mass function (Image by Author)

Hãy để hồi tưởng 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, Hồi, x_n thông qua các hệ số hồi quy.x_1, x_2,x_3,…,x_n via the regression coefficients β.

Giá trị nào của β sẽ làm cho tập hợp số lượng quan sát được cho nhất định y rất có thể? Đó là giá trị của β mà xác suất chung được hiển thị trong phương trình trên đạt được giá trị tối đa. Nói cách khác, đó là giá trị của β mà tốc độ thay đổi hàm xác suất chung W.R.T. β là 0. Đặt một cách khác, đó là giải pháp của phương trình thu được với phân biệt 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.β will make the given set of observed counts y most likely? It is the value of β for which the joint probability shown in the above equation achieves the maximum value. In other words, it is the value of β for which the rate of change of the joint probability function w.r.t. β is 0. Put another way, it is the solution of the equation obtained from differentiating the joint probability equation w.r.t. β and setting this differential equation to 0.

Nó dễ dàng hơn để phân biệt logarit của phương trình xác suất chung so với phương trình ban đầu. Giải pháp cho phương trình được ghi lại mang lại cùng giá trị tối ưu của.logarithm of the joint probability equation than the original equation. The solution to the logged equation yields the same optimal value of β.

Phương trình logarit này được gọi là hàm khả năng log. Đối với hồi quy Poisson, hàm khả năng đăng nhập được đưa ra bởi phương trình sau:log-likelihood function. For the Poisson regression, the log-likelihood function is given by the following equation:

Hướng dẫn poisson regression count data python - dữ liệu đếm hồi quy poisson python
Hàm log-likeLiha cho mô hình hồi quy Poisson (hình ảnh by & nbsp; 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 cạnh 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*).x_i*β).

Như đã đề cập trước đó, chúng tôi phân biệt phương trình khả năng đăng nhập 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:β, and set it to zero. This operation gives us the following equation:

Hướng dẫn poisson regression count data python - dữ liệu đếm hồi quy poisson python
Poisson MLE cho β là giải pháp cho phương trình này (hình ảnh bởi & nbsp; tác giả)β is the solution to this equation (Image by Author)

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 tối đa (MLE) cho.β will yield the Maximum Likelihood Estimate (MLE) for β.

Để giải các phương trình trên, người ta sử dụng một phương pháp lặp như hình vuông tối thiểu (IRLS) được lặp lại. Trong thực tế, người ta không giải quyết phương trình này bằng tay. Thay vào đó, bạn sử dụng phần mềm thống kê như gói Python StatSmodels sẽ thực hiện tất cả các tính toán cho bạn trong khi đào tạo mô hình hồi quy Poisson trên bộ dữ liệu của bạn.statsmodels package which will do all the calculations for you while training the Poisson regression model on your data set.


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 bộ dữ liệu dựa trên đếm:

  1. Đầu tiên, hãy đảm bảo rằng bộ 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ị số nguyên không âm đại diện cho số lần xuất hiện của một số sự kiện trong một số khoảng thời gian. Trong bộ bicyclist, bộ dữ liệu, đó là số lượng người đi xe đạp đi 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 số lượng bicyclist dữ liệu tập hợ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. Khắc ra một tập dữ liệu đào tạo mà mô hình hồi quy của bạn sẽ thực hiện và một tập dữ liệu kiểm tra sẽ để 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 như gói Python StatSmodels để định cấu hình và phù hợp với mô hình hồi quy Poisson trên bộ dữ liệu đào tạo.Python statsmodels package to configure and fit the Poisson Regression model on the training data set.
  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 một biện pháp phù hợp để xác định mức độ mô hình của bạn đã được đào tạo trên bộ dữ liệu đào tạo.

Cách đào tạo mô hình hồi quy Poisson trong & nbsp; Python

Hãy cùng đưa vào thực tế những gì chúng ta đã học được. Gói Python Statsmodels có hỗ trợ tuyệt vời để thực hiện hồi quy Poisson.statsmodels package has excellent support for doing Poisson regression.

Hãy để sử dụng bộ bicycl của Brooklyn Bridge Bicyclist. Bạn có thể chọn bộ dữ liệu từ đây.here.

Mục tiêu của chúng tôi là xây dựng một mô hình hồi quy Poisson cho số lượng xe đạp quan sát được. 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ây cầu Brooklyn mà mô hình chưa từng thấy trong quá trình đào tạo.y. We will use the trained model to predict daily counts of bicyclists on the Brooklyn bridge that the model has not seen during training.

Hướng dẫn poisson regression count data python - dữ liệu đếm hồi quy poisson python
Số lượng người đi xe đạp hàng ngày trên cầu Brooklyn (hình ảnh bởi & nbsp; 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 khung dữ liệu gấu trúc cho bộ 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.X matrix.

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 hồi quy vì nó chứa giá trị ngày tuyệt đối nhưng chúng tôi không cần phải làm bất cứ điều gì đặc biệt để bỏ ngày vì nó đã được tiêu thụ dưới dạng chỉ số của Pandas DataFrame. Vì vậy, nó sẽ không có sẵn cho chúng tôi trong ma trận X.X matrix.

Hãy để tạo ra các bộ dữ liệu đào tạo 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: day, day_of_week, tháng, high_t, low_t và kết tủa.

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

Thiết lập ma trận X và Y cho các bộ dữ liệu đào tạo và thử nghiệm. Patsy làm cho điều này thực sự đơn giản.X and y matrices for the training and testing data sets. patsy makes this really simple.

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 StatSmodels GLM, hãy đào tạo mô hình hồi quy Poisson trên bộ dữ liệu đào tạo.

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:

Hướng dẫn poisson regression count data python - dữ liệu đếm hồi quy poisson python
Tóm tắt đào tạo cho mô hình hồi quy Poisson (hình ảnh bởi & nbsp; tác giả)

Vậy mô hình của chúng ta đã làm tốt như thế nào? Hãy cùng đưa ra một số dự đoán trên tập dữ liệu thử nghiệm.predictions on the test data set.

poisson_predictions = poisson_training_results.get_prediction(X_test)
#summary_frame() returns a pandas DataFrame
predictions_summary_frame = poisson_predictions.summary_frame()
print(predictions_summary_frame)

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

Hướng dẫn poisson regression count data python - dữ liệu đếm hồi quy poisson python
Một vài hàng đầu ra đầu tiên từ poisson_predictions.summary_frame () (hình ảnh by & nbsp; tác giả)poisson_predictions.summary_frame() (Image by Author)

Hãy để âm mưu 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, đầu ra:

Hướng dẫn poisson regression count data python - dữ liệu đếm hồi quy poisson python
Người dự đoán so với người đi xe đạp thực tế được tính trên cầu Brooklyn (hình ảnh bởi & nbsp; 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ó là cách hết giá trị thực tế.in many cases its predictions are way off the actual value.

Hãy để Lừa cũng vẽ âm mưu 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:

Hướng dẫn poisson regression count data python - dữ liệu đếm hồi quy poisson python
Biểu đồ phân tán của số lượng thực tế so với dự đoán (hình ảnh bởi & nbsp; tác giả)


Dưới đây là mã nguồn đầy đủ để 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 giải thích hoặc biên dịch khác với những gì xuất hiện dưới đây. Để xem xét, hãy mở tệp trong một trình soạn thảo cho thấy các ký tự Unicode ẩn. Tìm hiểu thêm về các ký tự unicode hai chiều

ImpridPandasaspd pandas as pd
Frompatsyimportdmatrices patsy import dmatrices
Nhập khẩu numpy as np
importstatsmodels.apiassm statsmodels.api as sm
importmatplotlib.pyplotasplt matplotlib.pyplot as plt
#Create một gấu trúc DataFrame cho bộ 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]) = pd.read_csv('nyc_bb_bicyclist_counts.csv', header=0, infer_datetime_format=True, parse_dates=[0], index_col=[0])
#Add Một vài biến hồi quy có nguồn gốc.
ds = df.index.to_series () = df.index.to_series()
df ['tháng'] = ds.dt.month['MONTH'] = ds.dt.month
df ['day_of_week'] = ds.dt.dayofweek['DAY_OF_WEEK'] = ds.dt.dayofweek
df ['day'] = ds.dt.day['DAY'] = ds.dt.day
#Tạo các bộ dữ liệu đào tạo và kiểm tra.
Mặt nạ = np.random.rand (len (df)) = np.random.rand(len(df)) < 0.8
df_train = df [mặt nạ] = df[mask]
df_test = df [~ mặt nạ] = df[~mask]
in ('độ dài tập dữ liệu đào tạo ='+str (len (df_train))))('Training data set length='+str(len(df_train)))
In ('Testing Data Set legm ='+str (len (df_test))))('Testing data set length='+str(len(df_test)))
#Setup 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: day, day_of_week, tháng, high_t, low_t và kết tủa.
expr = "" "bb_count ~ day + day_of_week + tháng + high_t + low_t + kết tủa" "" " = """BB_COUNT ~ DAY + DAY_OF_WEEK + MONTH + HIGH_T + LOW_T + PRECIP"""
#Đưa ra ma trận x và y
y_Train, x_train = dmatrices (expr, df_train, return_type = 'dataFrame')), X_train = dmatrices(expr, df_train, return_type='dataframe')
y_test, x_test = dmatrices (expr, df_test, return_type = 'dataFrame')), X_test = dmatrices(expr, df_test, return_type='dataframe')
#Việc sử dụng lớp StatSmodels GLM, hãy đào tạo mô hình hồi quy Poisson trên bộ dữ liệu đào tạo.
poisson_training_results = sm.glm (y_train, x_train, family = sm.families.poisson ()). Fit () = sm.GLM(y_train, X_train, family=sm.families.Poisson()).fit()
#Dấu tóm tắt đào tạo.
in (poisson_training_results.summary ())(poisson_training_results.summary())
#Make một số dự đoán trên tập dữ liệu thử nghiệm.
Poisson_Predictions = Poisson_Training_Results.get_prediction (x_test) = poisson_training_results.get_prediction(X_test)
#.summary_frame () trả về một bản dữ liệu gấu trúc
Dự đoán_summary_frame = Poisson_Predictions.summary_frame () = poisson_predictions.summary_frame()
In (Dự đoán_Summary_Frame)(predictions_summary_frame)
dự đoán_counts = dự đoán_summary_frame ['nghĩa là']=predictions_summary_frame['mean']
thực tế_counts = y_test ['bb_count']] = y_test['BB_COUNT']
#MLOT số lượng dự đoán so với số lượng thực tế cho dữ liệu thử nghiệm.
fig = plt.figure () = plt.figure()
Hình.suptitle ('dự đoán so với người đi xe đạp thực tế được tính trên cây cầu Brooklyn').suptitle('Predicted versus actual bicyclist counts on the Brooklyn bridge')
dự đoán, = plt.plot (x_test.index, dự đoán_counts, 'go-', nhãn = 'số lượng dự đoán'), = plt.plot(X_test.index, predicted_counts, 'go-', label='Predicted counts')
thực tế, = plt.plot (x_test.index, accal_counts, 'ro-', nhãn = 'số lượng thực tế')), = plt.plot(X_test.index, actual_counts, 'ro-', label='Actual counts')
plt.legend (tay cầm = [dự đoán, thực tế]).legend(handles=[predicted, actual])
plt.show ().show()
#Sơ đồ phân tán của số lượng thực tế so với dự đoán
plt.clf ().clf()
fig = plt.figure () = plt.figure()
Hình.suptitle ('dự đoán so với người đi xe đạp thực tế được tính trên cây cầu Brooklyn').suptitle('Scatter plot of Actual versus Predicted counts')
dự đoán, = plt.plot (x_test.index, dự đoán_counts, 'go-', nhãn = 'số lượng dự đoán').scatter(x=predicted_counts, y=actual_counts, marker='.')
thực tế, = plt.plot (x_test.index, accal_counts, 'ro-', nhãn = 'số lượng thực tế')).xlabel('Predicted counts')
plt.legend (tay cầm = [dự đoán, thực tế]).ylabel('Actual counts')
plt.show ().show()

#Sơ đồ phân tán của số lượng thực tế so với dự đoán

plt.clf ()

Recollect rằng cả giá trị dự kiến ​​(nghĩa là trung bình) và phương sai, của phân phối Poisson là. Điều kiện khá nghiêm ngặt này bị vi phạm bởi hầu hết dữ liệu trong thế giới thực.

Một nguồn thất bại chung của mô hình hồi quy Poisson là dữ liệu không thỏa mãn tiêu chí trung bình = phương sai do phân phối Poisson áp đặt.

Phương thức Tóm tắt () trên lớp StatSmodels GLMResults cho thấy một vài số liệu thống kê phù hợp hữu ích để giúp bạn đánh giá xem mô hình hồi quy Poisson của bạn có thể phù hợp với dữ liệu đào tạo thành công hay không. Hãy cùng nhìn vào các giá trị của họ:

Hướng dẫn poisson regression count data python - dữ liệu đếm hồi quy poisson python
Tóm tắt đào tạo cho mô hình hồi quy Poisson (hình ảnh bởi & nbsp; tác giả)

Các giá trị được báo cáo của sự lệch lạc và bình phương Pearson là rất lớn. Một sự phù hợp tốt là hầu như không thể đưa ra các giá trị này. Để đưa ra quyết định định lượng về mức độ phù hợp ở mức độ tin cậy nào đó, giả sử 95% (p = 0,05), chúng tôi tra cứu giá trị trong bảng χ2 cho P = 0,05 và mức độ tự do của phần dư = 163. (DF Phần dư = Không. Quan sát trừ mô hình DF]). Chúng tôi so sánh giá trị chi bình phương này với thống kê quan sát được, trong trường hợp này, sự lệch lạc hoặc giá trị bình phương Pearson Pearson được báo cáo trong GLMResults. Chúng tôi thấy rằng ở phần dư P = 0,05 và DF = 163, giá trị chi bình phương từ một bảng bình phương chi tiêu chuẩn là 193.791, nhỏ hơn nhiều so với thống kê được báo cáo là 23030 và 23300. Do đó theo thử nghiệm này, mô hình hồi quy Poisson , mặc dù thể hiện sự phù hợp trực quan của 'ổn' cho bộ dữ liệu thử nghiệm, đã phù hợp với dữ liệu đào tạo khá kém.


Kết luận và Next & nbsp;

Đối với dữ liệu dựa trên số lượng, một điểm bắt đầu hữu ích là mô hình hồi quy Poisson. Sau đó, người ta có thể so sánh hiệu suất của nó với các mô hình dựa trên số lượng phổ biến khác, chẳng hạn như:

  1. Mô hình hồi quy nhị thức âm không tạo ra giả định phương sai trung bình = về dữ liệu.The Negative Binomial regression model which does not make the mean = variance assumption about the data.
  2. Các mô hình hồi quy Poisson tổng quát cũng hoạt động tốt với các bộ dữ liệu bị phân tán hoặc phân tán quá mức. which also work well with over-dispersed or under-dispersed data sets.
  3. Một mô hình Poisson tăng lên bằng không nếu bạn nghi ngờ rằng dữ liệu của bạn chứa số không có số khôngZero Inflated Poisson model if you suspect that your data contains excess zeros i.e. many more zeroes than what the regular Poisson model can explain

Người mẫu hạnh phúc!


Có liên quan

Làm quen với quy trình Poisson và phân phối xác suất Poisson


Trích dẫn và bản quyền

Bộ dữ liệu

Đếm xe đạp cho cầu sông Đông. Tổng số số lượng xe đạp được thực hiện hàng ngày trên cầu Brooklyn, Cầu Manhattan, Cầu Williamsburg và Cầu Queensboro. Từ NYC mở dữ liệu theo Điều khoản sử dụng. Bộ dữ liệu được quản lý để tải xuống.Curated data set for download.

Sách

Cameron A. C. và Trivingi P. K., Phân tích hồi quy dữ liệu đếm, phiên bản thứ hai, chuyên khảo của Hiệp hội kinh tế lượng số 53, Nhà xuất bản Đại học Cambridge, Cambridge, tháng 5 năm 2013.

Hình ảnh

Tất cả các hình ảnh là ngày Sachin bản quyền theo CC-by-NC-SA, trừ khi một nguồn và bản quyền khác được đề cập bên dưới hình ảnh.


Trước: Giới thiệu về ước tính bình phương tối thiểu 2 giai đoạnIntroduction To 2-Stage Least Squares Estimation

Tiếp theo: Mô hình hồi quy nhị thức âmThe Negative Binomial Regression Model


UP: Bảng nội dungTable of Contents