Cập nhật lần cuối vào ngày 10 tháng 12 năm 2020
Các mô hình dự báo chuỗi thời gian có thể đưa ra dự đoán vừa cung cấp khoảng thời gian dự đoán cho những dự đoán đó.
Các khoảng dự đoán cung cấp một kỳ vọng trên và thấp hơn cho quan sát thực sự. Chúng có thể hữu ích để đánh giá phạm vi kết quả thực tế có thể để dự đoán và để hiểu rõ hơn về kỹ năng của mô hình
Trong hướng dẫn này, bạn sẽ khám phá cách tính toán và giải thích các khoảng thời gian dự đoán cho dự báo chuỗi thời gian với Python.
Cụ thể, bạn sẽ học:
- Làm thế nào để đưa ra dự báo với mô hình ARIMA và thu thập thông tin chẩn đoán dự báo.
- Làm thế nào để tính toán và báo cáo một khoảng dự đoán cho một dự báo.
- Làm thế nào để diễn giải một khoảng dự đoán cho một dự báo và định cấu hình các khoảng khác nhau.
Khởi động dự án của bạn với dự báo chuỗi thời gian cuốn sách mới của tôi với Python, bao gồm các hướng dẫn từng bước và các tệp mã nguồn Python cho tất cả các ví dụ. with my new book Time Series Forecasting With Python, including step-by-step tutorials and the Python source code files for all examples.
Hãy để lặn trong.
- Cập nhật APR/2019: Cập nhật liên kết đến tập dữ liệu.: Updated the link to dataset.
- Cập nhật tháng 6/2019: Thay đổi từ các khoảng thời gian dự đoán thành khoảng thời gian dự đoán.: Changed from prediction intervals to prediction intervals.
- Cập nhật tháng 8/2019: Tải dữ liệu được cập nhật để sử dụng API mới.: Updated data loading to use new API.
- Cập nhật Dec/2020: Mô hình hóa cập nhật cho các thay đổi đối với API.: Updated modeling for changes to the API.
Hiểu chuỗi thời gian dự báo độ không đảm bảo bằng cách sử dụng các khoảng dự đoán với Pythonphoto của Bernard Spragg. New Zealand, một số quyền được bảo lưu.
Photo by Bernard Spragg. NZ, some rights reserved.
Dự báo Arima
Việc triển khai ARIMA trong Thư viện Python StatSmodels có thể được sử dụng để phù hợp với mô hình ARIMA.
Nó trả về một đối tượng arimaresults. Đối tượng này cung cấp hàm get_forecast [] & nbsp; có thể được sử dụng để đưa ra dự đoán về các bước thời gian trong tương lai và mặc định để dự đoán giá trị ở bước tiếp theo sau khi kết thúc dữ liệu đào tạo.
Giả sử chúng tôi dự đoán chỉ bước tiếp theo, hàm get_forecast [] trả về một đối tượng dự đoán với thông tin hữu ích như:
- dự đoán_mean. Giá trị dự báo trong các đơn vị của chuỗi thời gian đào tạo.. The forecasted value in the units of the training time series.
- Mean_se. Lỗi tiêu chuẩn cho mô hình.. The standard error for the model.
- Conf_int. Khoảng dự đoán cho dự báo cho một mức alpha nhất định.. The prediction interval for the forecast for a given alpha level.
Trong hướng dẫn này, chúng tôi sẽ hiểu rõ hơn về khoảng thời gian dự đoán được cung cấp với dự báo Arima.
Trước khi chúng tôi đi sâu vào, trước tiên hãy nhìn vào bộ dữ liệu ca sinh nữ hàng ngày mà chúng tôi sẽ sử dụng làm bối cảnh cho hướng dẫn này.
Ngừng học chuỗi thời gian dự báo cách chậm!
Lấy khóa học email 7 ngày miễn phí của tôi và khám phá cách bắt đầu [với mã mẫu].
Nhấp để đăng ký và cũng nhận được phiên bản Ebook PDF miễn phí của khóa học.
Bộ dữ liệu ca sinh nữ hàng ngày
Bộ dữ liệu này mô tả số lượng ca sinh nữ hàng ngày ở California vào năm 1959.
Các đơn vị là một đếm và có 365 quan sát. Nguồn của bộ dữ liệu được ghi có vào Newton [1988].
- Tải xuống bộ dữ liệu.
Tải xuống bộ dữ liệu và lưu nó trong thư mục làm việc hiện tại của bạn với tên tệp hàng ngày-total-female-births.csv.
Ví dụ dưới đây tải và đồ thị tập dữ liệu.
Từ Pandas Nhập READ_CSVpandas import read_csv từ pyplot nhập khẩu matplotlibmatplotlib import pyplot series=read_csv['daily-total-female-births.csv',header=0,index_col=0]=read_csv['daily-total-female-births.csv',header=0,index_col=0] series.plot[].plot[] pyplot.show[].show[] |
Chạy ví dụ tải tập dữ liệu và đồ thị dưới dạng biểu đồ dòng.
Bộ dữ liệu ca sinh nữ hàng ngày
Bộ dữ liệu này mô tả số lượng ca sinh nữ hàng ngày ở California vào năm 1959.
Các đơn vị là một đếm và có 365 quan sát. Nguồn của bộ dữ liệu được ghi có vào Newton [1988].
Tải xuống bộ dữ liệu.
Tải xuống bộ dữ liệu và lưu nó trong thư mục làm việc hiện tại của bạn với tên tệp hàng ngày-total-female-births.csv.
Ví dụ dưới đây tải và đồ thị tập dữ liệu.
Từ Pandas Nhập READ_CSV
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | từ pyplot nhập khẩu matplotlib Từ Pandas Nhập READ_CSVpandas import read_csv từ pyplot nhập khẩu matplotlibstatsmodels.tsa.arima.model import ARIMA Chạy ví dụ tải tập dữ liệu và đồ thị dưới dạng biểu đồ dòng. series=read_csv['daily-total-female-births.csv',header=0,index_col=0,parse_dates=True,squeeze=True]= read_csv['daily-total-female-births.csv',header=0,index_col=0,parse_dates=True,squeeze=True] Dự báo khoảng dự đoán X=series.values =series.values X=X.astype['float32']=X.astype['float32'] size=len[X]-1=len[X]-1 train,test=X[0:size],X[size:],test =X[0:size],X[size:] Trong phần này, chúng tôi sẽ đào tạo một mô hình Arima, sử dụng nó để đưa ra dự đoán và kiểm tra khoảng thời gian dự đoán. model=ARIMA[train,order=[5,1,1]]=ARIMA[train, order=[5,1,1]] model_fit=model.fit[]=model.fit[] Đầu tiên, chúng tôi sẽ chia bộ dữ liệu đào tạo thành một bộ dữ liệu đào tạo và kiểm tra. Hầu như tất cả các quan sát sẽ được sử dụng để đào tạo và chúng tôi sẽ giữ lại quan sát duy nhất cuối cùng như một bộ dữ liệu thử nghiệm mà chúng tôi sẽ đưa ra dự đoán. result=model_fit.get_forecast[]=model_fit.get_forecast[] Một mô hình Arima [5,1,1] được đào tạo. Đây không phải là mô hình tối ưu cho vấn đề này, chỉ là một mô hình tốt cho mục đích trình diễn. Mô hình được đào tạo sau đó được sử dụng để đưa ra dự đoán bằng cách gọi hàm get_forecast []. Kết quả dự báo sau đó được in.['Expected: %.3f'%result.predicted_mean] Ví dụ hoàn chỉnh được liệt kê dưới đây.['Forecast: %.3f'%test[0]] # Tóm tắt khoảng tin cậy về dự báo Arima['Standard Error: %.3f' %result.se_mean] ci=result.conf_int[0.05]=result.conf_int[0.05] từ statsmodels.tsa.arima.model nhập khẩu arima['95%% Interval: %.3f to %.3f'% [ci[0,0],ci[0,1]]] |
# Tải tập dữ liệu
Dự kiến: 45.149 Dự báo: 50.000 Lỗi tiêu chuẩn: 7.009 Khoảng 95%: 31.413 đến 58.886 |
Diễn giải khoảng thời gian dự đoán
Hàm get_forecast [] cho phép khoảng thời gian dự đoán được chỉ định.
Đối số alpha trên hàm conf_int [] trên dự đoán chỉ định mức dự đoán.
Alpha là 0,05 có nghĩa là mô hình ARIMA sẽ ước tính các giá trị trên và thấp hơn xung quanh dự báo trong đó chỉ có 5% cơ hội rằng giá trị thực sẽ không nằm trong phạm vi đó.
Nói cách khác, khoảng thời gian dự đoán 95% cho thấy rằng có khả năng cao rằng quan sát thực sự sẽ nằm trong phạm vi.
Trong ví dụ trên, dự báo là 45,149. Khoảng dự đoán 95% cho thấy rằng quan sát thực sự có khả năng nằm trong phạm vi của các giá trị trong khoảng từ 31.413 đến 58.886.
Quan sát thực sự là 50,0 và nằm trong phạm vi này.
Chúng ta có thể thắt chặt phạm vi của các giá trị có khả năng theo một vài cách:
- Chúng ta có thể yêu cầu một phạm vi hẹp hơn nhưng làm tăng khả năng thống kê của một quan sát thực sự nằm ngoài phạm vi.
- Chúng ta có thể phát triển một mô hình có sức mạnh dự đoán nhiều hơn và lần lượt đưa ra dự đoán chính xác hơn.
Hơn nữa, khoảng thời gian dự đoán cũng bị giới hạn bởi các giả định được thực hiện bởi mô hình, chẳng hạn như phân phối các lỗi được thực hiện bởi mô hình phù hợp với phân phối Gaussian với giá trị trung bình bằng 0 [ví dụ: nhiễu trắng].
Mở rộng ví dụ trên, chúng tôi có thể báo cáo dự báo của mình với một vài khoảng thời gian dự đoán thường được sử dụng là 80%, 90%, 95%và 99%.
Ví dụ hoàn chỉnh được liệt kê dưới đây.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # Tóm tắt nhiều khoảng tin cậy trên dự báo Arima Từ Pandas Nhập READ_CSVpandas import read_csv từ statsmodels.tsa.arima.model nhập khẩu arimastatsmodels.tsa.arima.model import ARIMA # tải dữ liệu series=read_csv['daily-total-female-births.csv',header=0,index_col=0,parse_dates=True,squeeze=True]= read_csv['daily-total-female-births.csv',header=0,index_col=0,parse_dates=True,squeeze=True] # chia dữ liệu thành các tập hợp và kiểm tra tập hợp X=series.values =series.values X=X.astype['float32']=X.astype['float32'] size=len[X]-1=len[X]-1 train,test=X[0:size],X[size:],test =X[0:size],X[size:] # phù hợp với một mô hình arima model=ARIMA[train,order=[5,1,1]]=ARIMA[train, order=[5,1,1]] model_fit=model.fit[]=model.fit[] result=model_fit.get_forecast[]=model_fit.get_forecast[] forecast=result.predicted_mean =result.predicted_mean # Tóm tắt khoảng tin cậy intervals=[0.2,0.1,0.05,0.01]=[0.2,0.1,0.05,0.01] forainintervals:ain intervals: ci=result.conf_int[alpha=a]=result.conf_int[alpha=a] In ['%.['%.1f%% Confidence Interval: %.3f between %.3f and %.3f'% [[1-a]*100,forecast,ci[0,0],ci[0,1]]] |
Chạy ví dụ in các dự báo và khoảng dự đoán cho mỗi giá trị alpha.
Chúng ta có thể thấy rằng chúng ta có được giá trị dự báo tương tự mỗi lần và một khoảng thời gian mở rộng khi mong muốn của chúng ta về khoảng thời gian an toàn hơn tăng lên. Chúng ta có thể thấy rằng 80% nắm bắt giá trị thực tế của chúng ta chỉ tốt trong trường hợp cụ thể này.
Khoảng tin cậy 80,0% Khoảng tin cậy 90,0%: 45,149 giữa 33.621 đến 56.677 Khoảng tin cậy 95,0%: 45,149 giữa 31.413 đến 58.886 Khoảng tin cậy 99,0%: 45,149 trong khoảng từ 27.096 đến 63,202 |
Bản tóm tắt
Trong hướng dẫn này, bạn đã phát hiện ra cách tính và giải thích khoảng thời gian dự đoán cho dự báo chuỗi thời gian với Python.
Cụ thể, bạn đã học được:
- Làm thế nào để báo cáo dự báo thống kê chẩn đoán khi đưa ra dự báo điểm.
- Làm thế nào để tính toán và báo cáo một khoảng dự đoán cho một dự báo.
- Cách diễn giải và định cấu hình khoảng dự đoán cho dự báo chuỗi thời gian.
Bạn có bất kỳ câu hỏi nào về các khoảng dự đoán dự báo, hoặc về hướng dẫn này? Đặt câu hỏi của bạn trong các ý kiến dưới đây và tôi sẽ cố gắng hết sức để trả lời.
Ask your questions in the comments below and I will do my best to answer.
Bạn muốn phát triển dự báo chuỗi thời gian với Python?
Phát triển dự báo của riêng bạn trong vài phút
... Chỉ với một vài dòng mã Python
Khám phá cách trong ebook mới của tôi: Giới thiệu về dự báo chuỗi thời gian với Python
Introduction to Time Series Forecasting With Python
Nó bao gồm các hướng dẫn tự học và các dự án đầu cuối về các chủ đề như: tải dữ liệu, trực quan hóa, mô hình hóa, điều chỉnh thuật toán và nhiều hơn nữa ...self-study tutorials and end-to-end projects on topics like: Loading data, visualization, modeling, algorithm tuning, and much more...
Cuối cùng mang lại dự báo chuỗi thời gian cho các dự án của riêng bạn
Your Own Projects
Bỏ qua các học giả. Chỉ là kết quả.
Xem những gì bên trong