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
- 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
Đâ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
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
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
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 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
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
Đ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 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ó
Đặ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
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
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
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
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
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
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ã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
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
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
- 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
- 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.
- 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
- 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
- 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
- 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
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
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
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
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
Đâ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]]