Khoảng tin cậy chuỗi thời gian Python

Khi làm việc với chuỗi thời gian, vẽ biểu đồ kết quả thử nghiệm A/B hoặc thực hiện các loại phân tích khác, điều phổ biến là muốn vẽ biểu đồ đường [thường là giá trị trung bình của dữ liệu của bạn theo thời gian] và khoảng tin cậy để biểu thị độ không đảm bảo trong dữ liệu mẫu

Dưới đây chúng tôi trình bày cách tạo biểu đồ đường với khoảng tin cậy bằng cách sử dụng nhiều thư viện vẽ đồ thị, bao gồm các phiên bản tương tác với Altair và Plotly

Nhập & Thiết lập

Hiển thị mã

import altair as alt
from matplotlib import pyplot as plt
from matplotlib_inline.backend_inline import set_matplotlib_formats
import numpy as np
import pandas as pd
import plotly.graph_objects as go
import seaborn as sns

set_matplotlib_formats['retina']

# Create our new styles dictionary for use in rcParams.
dpi = 144
mpl_styles = {
    'figure.figsize': [6, 4],
    # Up the default resolution for figures.
    'figure.dpi': dpi,
    'savefig.dpi': dpi,
}

sns.set_theme[context='paper']
plt.rcParams.update[mpl_styles]

Dữ liệu

Dưới đây chúng tôi lấy một số dữ liệu chuỗi thời gian từ bộ dữ liệu tích hợp của Seaborn. Chúng tôi giữ hai phiên bản của dữ liệu

  • df = sns.load_dataset['taxis']
    df.head[]
    
    1. Dữ liệu "thô" với nhiều quan sát mỗi ngày
  • df = sns.load_dataset['taxis']
    df.head[]
    
    2. Dữ liệu tổng hợp với một hàng mỗi ngày

df = sns.load_dataset['taxis']
df.head[]

pickupdropoffhành kháchkhoảng cáchgiá vétiptolltotalcolorpaymentpickup_zonedropoff_zonepickup_boroughdropoff_boroughpickup_date02019-03-23 ​​20. 21. 092019-03-23 ​​20. 27. 2411. 607. 02. 150. 012. 95thẻ tín dụng màu vàng Lenox Hill WestIN/Turtle Bay SouthManhattanManhattan2019-03-2312019-03-04 16. 11. 552019-03-04 16. 19. 0010. 795. 00. 000. 09. 30màu vàngcashUpper West Side SouthUpper West Side SouthManhattan2019-03-0422019-03-27 17. 53. 012019-03-27 18. 00. 2511. 377. 52. 360. 014. 16màu vàngthẻ tín dụngAlphabet CityWest VillageManhattanManhattan2019-03-2732019-03-10 01. 23. 592019-03-10 01. 49. 5117. 7027. 06. 150. 036. 95màu vàngthẻ tín dụngHudson SqYorkville WestManhattanManhattan2019-03-1042019-03-30 13. 27. 422019-03-30 13. 37. 1432. 169. 01. 100. 013. 40màu vàngthẻ tín dụngMidtown EastYorkville WestManhattanManhattan2019-03-30

# Convert the pickup time to datetime and create a new column truncated to day.
df['pickup'] = pd.to_datetime[df.pickup]
df['pickup_date'] = pd.to_datetime[df.pickup.dt.date]
# Altair can't handle more than 5k rows so we truncate the data.
df = df.loc[df['pickup_date'] >= '2019-03-01'][:5000]

# We also create a grouped version, with calculated mean and standard deviation.
df_grouped = [
    df[['pickup_date', 'fare']].groupby[['pickup_date']]
    .agg[['mean', 'std', 'count']]
]
df_grouped = df_grouped.droplevel[axis=1, level=0].reset_index[]
# Calculate a confidence interval as well.
df_grouped['ci'] = 1.96 * df_grouped['std'] / np.sqrt[df_grouped['count']]
df_grouped['ci_lower'] = df_grouped['mean'] - df_grouped['ci']
df_grouped['ci_upper'] = df_grouped['mean'] + df_grouped['ci']
df_grouped.head[]

pickup_datemeanstdcountcici_lowerci_upperxlabelci_label02019-03-0111. 2884628. 8771871821. 2897219. 99874112. 578182Khoảng giá vé trung bìnhConf [95%]12019-03-0211. 8301289. 5057701561. 49169910. 33843013. 321827Khoảng giá vé trung bìnhConf [95%]22019-03-0312. 6423089. 7875171301. 68250710. 95980114. 324815Khoảng giá vé trung bìnhConf [95%]32019-03-0413. 99023313. 5387741292. 33636411. 65386816. 326597Khoảng giá vé trung bìnhConf [95%]42019-03-0512. 3039449. 4485481801. 38033610. 92360813. 684281Khoảng giá vé trung bìnhConf [95%]

Matplotlib

Với dữ liệu được tổng hợp trước và khoảng tin cậy đã được xác định trong khung dữ liệu của chúng tôi, việc sử dụng Matplotlib để vẽ sơ đồ này khá đơn giản

fig, ax = plt.subplots[]
x = df_grouped['pickup_date']
ax.plot[x, df_grouped['mean']]
ax.fill_between[
    x, df_grouped['ci_lower'], df_grouped['ci_upper'], color='b', alpha=.15]
ax.set_ylim[ymin=0]
ax.set_title['Avg Taxi Fare by Date']
fig.autofmt_xdate[rotation=45]

sinh ra biển

Seaborn là một trình bao bọc đẹp xung quanh Matplotlib, vì vậy cho phép có một cú pháp rất giống nhau, nhưng nó cũng đi kèm với một số phép thuật nếu bạn chỉ cung cấp cho nó dữ liệu thô

ax = sns.lineplot[data=df, x='pickup_date', y='fare']
# A more verbose but explicit version of the above not relying on defaults:
# ax = sns.lineplot[data=df, x='pickup_date', y='fare', estimator='mean', ci=95,
#                   n_boot=1000]
ax.set_title['Avg Taxi Fare by Date']
ax.set_ylim[0]
ax.figure.autofmt_xdate[rotation=45]

Theo mặc định, nếu có nhiều hơn một quan sát cho mỗi giá trị

df = sns.load_dataset['taxis']
df.head[]
3 duy nhất, Seaborn sẽ lấy giá trị trung bình của những quan sát đó và khởi động khoảng tin cậy 95% bằng cách sử dụng 1000 lần lặp lại. Khá đẹp

Chúng tôi cũng có thể làm điều tương tự với dữ liệu tổng hợp, rất giống với Matplotlib

________số 8

bàn thờ

Altair tương tự như Seaborn ở chỗ nó có một số cách tự động để tạo và hiển thị biểu đồ đường với khoảng tin cậy. Tuy nhiên, lợi ích của Altair là nó tương tác theo mặc định [mặc dù có thể hơi dài dòng]

Trước tiên, chúng tôi tạo biểu đồ bằng dữ liệu thô. Altair cho phép các phương pháp tổng hợp trong thông số kỹ thuật, vì vậy,

df = sns.load_dataset['taxis']
df.head[]
4 cung cấp cho chúng tôi giá vé trung bình cho mỗi ngày. Và đối với khoảng tin cậy,
df = sns.load_dataset['taxis']
df.head[]
5 là điều kỳ diệu mà chúng ta cần

df = sns.load_dataset['taxis']
df.head[]
1

Lưu ý, điều này xuất ra một biểu đồ tương tác nhưng chúng tôi chỉ hiển thị một phiên bản tĩnh ở đây vì dữ liệu cơ bản cho phiên bản này [vì nó sử dụng dữ liệu thô] khá lớn

Chúng ta cũng có thể dễ dàng làm điều này một cách rõ ràng hơn bằng cách sử dụng dữ liệu tổng hợp và

df = sns.load_dataset['taxis']
df.head[]
6. Chúng tôi cũng thêm một chú giải công cụ đẹp để hiển thị tất cả các giá trị khi di chuột qua

df = sns.load_dataset['taxis']
df.head[]
3

Dưới đây là đầu ra được nhúng, với chú giải công cụ

Cuối cùng, chúng tôi đi xa hơn một chút và sử dụng một số logic lựa chọn Altair để hiển thị các giá trị theo quy tắc dọc, với các điểm được đánh dấu, thay vì dựa vào chú giải công cụ. Nó khá dài dòng nhưng cuối cùng trông rất đẹp

df = sns.load_dataset['taxis']
df.head[]
4

Một lần nữa, điều này rất năng động, hãy di chuột qua biểu đồ

âm mưu

Plotly là một thư viện trực quan hóa tương tác khác cung cấp miễn phí cho chúng tôi các chú giải công cụ di chuột thực sự đẹp mắt [cùng với các chức năng khác]

df = sns.load_dataset['taxis']
df.head[]
5

Chơi xung quanh với viz dưới đây;

Một cách khác để làm điều đó là chỉ cần có một yếu tố

df = sns.load_dataset['taxis']
df.head[]
7 cho dải tin cậy. Bạn nối các giá trị cận trên với các giá trị cận dưới bị đảo ngược và sau đó điền vào khu vực bên trong nó. Vấn đề duy nhất với phương pháp này là không thể có được chú giải công cụ hay cho các giới hạn trên/dưới [hoặc ít nhất là không dễ dàng]

df = sns.load_dataset['taxis']
df.head[]
0

Một lần nữa, chỉ cần tiết kiệm băng thông ở đây và nhúng hình ảnh tĩnh ở đây, nhưng đây thực sự là một cốt truyện tương tác

Và đó là cách vẽ biểu đồ đường với khoảng tin cậy bằng bốn thư viện python khác nhau

Khoảng tin cậy trong chuỗi thời gian là gì?

Khoảng thời gian dự đoán được được sử dụng để cung cấp phạm vi mà dự báo có khả năng nằm ở mức độ tin cậy cụ thể . Ví dụ: nếu bạn thực hiện 100 dự báo với độ tin cậy 95%, bạn sẽ có 95 trong số 100 dự báo nằm trong khoảng thời gian dự đoán.

Hàm Python nào sẽ cho khoảng tin cậy 95%?

hàm ppf . Các lập luận cho t. ppf[] là q = phần trăm, df = bậc tự do, scale = std dev, loc = mean. Vì phân phối t đối xứng với khoảng tin cậy 95% nên q sẽ bằng 0. 975.

Arima tính toán khoảng tin cậy như thế nào?

Khoảng thời gian dự đoán đầu tiên rất dễ tính toán. Nếu ^σ là độ lệch chuẩn của phần dư, thì khoảng dự đoán 95% được đưa ra bởi ^yT+1. T ± 1. 96^σ y^T + 1. T ± 1. 96 σ ^ . Kết quả này đúng với tất cả các mô hình ARIMA bất kể tham số và thứ tự của chúng.

Seaborn tính toán khoảng tin cậy như thế nào?

Đó là về Matplotlib; . Về bản chất, đó là một phương pháp lấy mẫu lại nhiều lần từ một mẫu dân số , đưa ra ước tính chính xác về giá trị trung bình thực và độ tin cậy 95%.

Chủ Đề