ARIMA là một Kỹ thuật dự báo và sử dụng các giá trị trong quá khứ của một chuỗi để dự báo các giá trị sắp tới. Trực giác cơ bản về thuật toán có thể được phát triển bằng cách xem qua bài đăng trên blog được đề cập bên dưới mà tôi đã viết trong Phần 1 của quá trình khám phá ARIMA của mình
Hiểu dự báo ARIMA
Khi nói đến dự báo, ARIMA thường là thuật toán được lựa chọn đầu tiên. Chúng ta hãy cố gắng hiểu ngắn gọn những gì…
etqadkhan23. Trung bình. com
Bộ truyện tôi đang sử dụng có thể được tải xuống từ đây. https. //lái xe. Google. com/file/d/1W8K92lQ00Zt6J7qJnLKH4yp7MddIVBsR/view?usp=sharing
Điều đầu tiên là kiểm tra tính dừng trong dữ liệu. Tính ổn định sẽ được kiểm tra bằng Augmented Dicky Fuller Test. Giả thuyết vô hiệu cho thử nghiệm này là Chuỗi thời gian không cố định. Vì vậy, nếu giá trị p nhỏ hơn 0. 05, chúng ta sẽ bác bỏ giả thuyết không và tin rằng chuỗi này là tĩnh
Hãy bắt đầu bằng cách nhập các mô-đun thư viện
import pandas as pd
from statsmodels.tsa.stattools import adfuller
import matplotlib.pyplot as plt
Đọc csv và sau đó vẽ đồ thị để xem xu hướng trông như thế nào
df = pd.read_csv[r'''shampoo_dataset.csv''']plt.plot[df.Month, df.Sales]
plt.xticks[rotation=90]
Hãy xem kết quả tại Thử nghiệm ADF để hiểu về hoạt động của tính Văn phòng phẩm
result = adfuller[df.Sales.dropna[]]
print['ADF Statistic: %f' % result[0]]
print['p-value: %f' % result[1]]
Bây giờ vì giá trị cao Đáng kể, chúng tôi sẽ chênh lệch chuỗi để đạt được Statonarity
Tìm thứ tự khác biệt
Chúng ta sẽ vẽ đồ thị Autocorrelation để hiểu xu hướng. Nếu biểu đồ ACF hiển thị các giá trị dương đối với một số độ trễ đáng kể, thì điều đó có nghĩa là chuỗi cần có sự khác biệt hơn nữa. Mặt khác, nếu nó chuyển thành giá trị âm từ chính độ trễ đầu tiên, chúng ta có thể đã chênh lệch quá mức. Vì vậy, chúng ta hãy vẽ đồ thị ACF cho chuỗi khác biệt. ACF là mối tương quan giữa bước thời gian hiện tại và quan sát với các bước thời gian trước đó
from statsmodels.graphics.tsaplots import plot_acf, plot_pacffig, axes = plt.subplots[3, 2, sharex=True]
axes[0, 0].plot[df.Sales]; axes[0, 0].set_title['Original Series']
plot_acf[df.Sales, ax=axes[0, 1]]# 1st Differencing
axes[1, 0].plot[df.Sales.diff[]]; axes[1, 0].set_title['1st Order Differencing']
plot_acf[df.Sales.diff[].dropna[], ax=axes[1, 1]]# 2nd Differencing
axes[2, 0].plot[df.Sales.diff[].diff[]]; axes[2, 0].set_title['2nd Order Differencing']
plot_acf[df.Sales.diff[].diff[].dropna[], ax=axes[2, 1]]plt.show[]
Chúng ta có thể thấy rằng sự khác biệt của bậc 1 đang giúp chúng ta làm cho chuỗi dừng, vì vậy hãy chọn d = 1
Tìm thuật ngữ AR
Chúng ta sẽ xem xét các Lô tự tương quan một phần để hiểu các thuật ngữ AR. Mối tương quan giữa hai bước thời gian trong một chuỗi sao cho chúng tương quan với các bước thời gian khác. Ví dụ: thời tiết hôm nay phụ thuộc vào ngày hôm qua và thời tiết ngày hôm qua phụ thuộc vào ngày hôm sau. Vì vậy, PACF của ngày hôm qua sẽ là mối tương quan giữa ngày hôm nay và ngày hôm qua sau khi loại bỏ ảnh hưởng của ngày hôm kia
fig, axes = plt.subplots[1, 2, sharex=True]
axes[0].plot[df.Sales.diff[]]; axes[0].set_title['1st Differencing']
axes[1].set[ylim=[0,5]]
plot_pacf[df.Sales.diff[].dropna[], ax=axes[1]]plt.show[]
Như chúng ta thấy, độ trễ nằm dưới giới hạn đáng kể ngay lập tức vào độ trễ, vì vậy chúng ta hãy tiếp tục và đặt p = 1 để đơn giản
Tìm thuật ngữ MA
Chúng tôi sẽ xem xét lại các thuật ngữ ACF để tìm thuật ngữ MA. Giá trị của thuật ngữ MA cho biết giá trị nào cần thiết để loại bỏ bất kỳ sự tự tương quan nào trong chuỗi
fig, axes = plt.subplots[1, 2, sharex=True]
axes[0].plot[df.Sales.diff[]]; axes[0].set_title['1st Differencing']
axes[1].set[ylim=[0,1.2]]
plot_acf[df.Sales.diff[].dropna[], ax=axes[1]]
plt.show[]
Thứ tự trễ 1 vượt quá giới hạn đáng kể, nhưng đối với thứ tự trễ 2 thì không sao. Chúng ta hãy chọn thuật ngữ MA và đặt q = 2
Tòa nhà mô hình
Hãy để chúng tôi xây dựng mô hình và phân tích xem các giá trị đã chuyển thành mô hình tốt như thế nào
from statsmodels.tsa.arima_model import ARIMA
# ARIMA order [p,d,q]
model = ARIMA[df.Sales, order=[1,1,2]]
model_fit = model.fit[disp=0]
print[model_fit.summary[]]
Mô hình có thể được cải tiến hơn nữa và có thể thực hiện nhiều điều chỉnh trên mô hình, tuy nhiên, một điểm cần lưu ý là kích thước nhỏ của sê-ri và do đó hạn chế kết quả chính xác
Hãy để chúng tôi dự báo và cũng tìm kiếm độ chính xác,
model_fit.plot_predict[dynamic=False]
plt.show[]
Kết quả không khả quan, nhưng thật tốt khi biết được cách ARIMA hoạt động. Hãy cùng kiểm tra số liệu chính xác nhanh để xem mô hình có thể dự đoán các giá trị trong tương lai tốt như thế nào
________số 8MAPE là 17. 99, điều đó có nghĩa là độ chính xác của mô hình là 82. 11%
Tôi hy vọng hướng dẫn này cung cấp một chút ý tưởng về cách sử dụng ARIMA. Chúng ta có thể thực hiện theo cách của mình trong thuật toán bằng cách sử dụng mã có tại đây. Tôi sẽ chọn một bộ dữ liệu tốt hơn vào lần tới. Cảm ơn đã đọc, đánh giá cao