Python dự đoán mô hình arima như thế nào?

ARIMA là một mô hình thống kê được sử dụng để phân tích chuỗi thời gian. Mô hình ARIMA tổng quát hóa mô hình ARMA được sử dụng cho chuỗi thời gian tĩnh. Mô hình ARIMA có thể được sử dụng cho chuỗi thời gian không cố định, nhưng trước tiên bạn phải phân biệt nó. Bài viết này sẽ thảo luận về các thuật ngữ hoạt động và thiết yếu liên quan đến mô hình ARIMA. Ngoài ra, chúng tôi sẽ triển khai mô hình ARIMA trên bộ dữ liệu chuỗi thời gian không cố định

Bạn cũng có thể xem Nhà tiên tri của Facebook, một thuật toán tiên đoán theo chuỗi thời gian

Best Machine Learning Books for Beginners and Experts

Sách học máy tốt nhất cho người mới bắt đầu và chuyên gia

Khi Machine Learning ngày càng trở nên phổ biến, cả người mới bắt đầu và chuyên gia đều cần cập nhật những tiến bộ mới nhất. Đối với người mới bắt đầu, hãy xem những cuốn sách Machine Learning tốt nhất có thể giúp hiểu rõ những điều cơ bản. Đối với các chuyên gia, đọc những cuốn sách này có thể giúp bắt kịp với bối cảnh luôn thay đổi. Trong cả hai trường hợp, một số lý do chính để xem những cuốn sách này có thể hữu ích

Đầu tiên, chúng cung cấp một cái nhìn tổng quan toàn diện về chủ đề này, chủ yếu là về các thuật toán Machine Learning. Thứ hai, họ cung cấp những hiểu biết sâu sắc từ các chuyên gia hàng đầu trong lĩnh vực này. Và thứ ba, họ đưa ra lời khuyên cụ thể về cách áp dụng các khái niệm Machine Learning trong các tình huống thực tế. Khi Machine Learning tiếp tục phát triển, chắc chắn rằng những cuốn sách này sẽ tiếp tục là tài nguyên thiết yếu cho bất kỳ ai có kiến ​​thức trước đó muốn đi trước xu hướng

Hiểu các thuật ngữ được sử dụng trong mô hình ARIMA

ARIMA là viết tắt của Trung bình di chuyển tích hợp AutoRegressive. Nó được sử dụng để dự đoán các giá trị chuỗi thời gian trong tương lai dựa trên các giá trị chuỗi thời gian trong quá khứ. Mô hình ARIMA có thể mô hình chuỗi thời gian tĩnh và chuỗi thời gian không tĩnh. Nó là sự tổng quát hóa của mô hình ARMA và mô hình AR. Mô hình ARMA dự báo các giá trị chuỗi thời gian trong tương lai dựa trên các giá trị thuật ngữ lỗi trước đó và trong quá khứ. Mô hình ARIMA có thể dự đoán các giá trị trong tương lai của một chuỗi thời gian dựa trên các giá trị cuối cùng của chuỗi thời gian, các giá trị trong quá khứ của các thuật ngữ lỗi và các giá trị trong quá khứ của chuỗi thời gian khác biệt

Các mô hình ARIMA thường được ký hiệu là ARIMA

# checking for null values
df.isnull().sum()
5, trong đó
# checking for null values
df.isnull().sum()
6 là thứ tự của mô hình tự hồi quy (AR),
# checking for null values
df.isnull().sum()
7 là mức độ khác biệt và
# checking for null values
df.isnull().sum()
8 là thứ tự của mô hình đường trung bình động (MA). Mô hình ARIMA sử dụng sự khác biệt để chuyển đổi chuỗi thời gian không cố định thành chuỗi thời gian cố định và sau đó dự đoán các giá trị trong tương lai từ dữ liệu lịch sử. Mô hình sử dụng các tương quan “tự động” và trung bình động đối với các lỗi còn lại trong dữ liệu để dự báo các giá trị trong tương lai

Bây giờ, hãy để chúng tôi hiểu các thuật ngữ thường được sử dụng với mô hình ARIMA

Mô hình tự hồi quy (AR) dự đoán hành vi trong tương lai dựa trên hành vi trong quá khứ. Nó được sử dụng để dự báo khi có một số mối tương quan giữa các giá trị trong một chuỗi thời gian và các giá trị đi trước và thành công

Hoặc chúng ta cũng có thể nói rằng mô hình tự hồi quy là mô hình mà

# checking for null values
df.isnull().sum()
9 chỉ phụ thuộc vào độ trễ của nó.
# checking for null values
df.isnull().sum()
9 là một chức năng của 'độ trễ của Yt. ’ Độ trễ là khoảng thời gian trôi qua cố định trong chuỗi thời gian. Mô hình AR sử dụng phương trình đơn giản sau để huấn luyện mô hình

implementation-of-arima-updated-equation

Ở đây

# importing the module
import matplotlib.pyplot as plt
# setting the size
plt.figure(figsize=(15,8))
# plotting the graph
plt.plot(df.Date, df.Total)
plt.show()
1 là độ trễ1 của chuỗi thời gian,
# importing the module
import matplotlib.pyplot as plt
# setting the size
plt.figure(figsize=(15,8))
# plotting the graph
plt.plot(df.Date, df.Total)
plt.show()
2 là hệ số độ trễ và
# importing the module
import matplotlib.pyplot as plt
# setting the size
plt.figure(figsize=(15,8))
# plotting the graph
plt.plot(df.Date, df.Total)
plt.show()
3 là giao điểm chặn

Mô hình đường trung bình động (MA) là gì?

Trong phân tích chuỗi thời gian, mô hình trung bình động (MA), còn được gọi là quy trình trung bình động, là một phương pháp phổ biến để lập mô hình chuỗi thời gian đơn biến. Thuật ngữ "chuỗi thời gian đơn biến" dùng để chỉ các quan sát đơn lẻ (vô hướng) được ghi lại liên tục theo các khoảng thời gian bằng nhau

Nói cách khác, chúng ta có thể nói rằng một mô hình MA là một mô hình mà

# checking for null values
df.isnull().sum()
9 chỉ phụ thuộc vào các lỗi dự báo bị trễ. Nó sử dụng phương trình sau để đào tạo mô hình

implementation-of-arima-model-MA-model

Ở đây, các thuật ngữ lỗi là lỗi của các mô hình tự hồi quy của độ trễ tương ứng

Phương trình toán học của mô hình ARIMA

Mô hình ARIMA là nơi bạn nên tạo chuỗi thời gian ít nhất một lần để làm cho nó đứng yên

Chuỗi thời gian dừng là chuỗi có thuộc tính không phụ thuộc vào thời điểm mà chuỗi được quan sát. Do đó, chuỗi thời gian có xu hướng hoặc có tính thời vụ không cố định — xu hướng và tính thời vụ sẽ ảnh hưởng đến giá trị của chuỗi thời gian tại các thời điểm khác nhau

Tính dừng và sự khác biệt. Dự báo – OTexts

Chúng tôi phát triển phương trình của mô hình ARIMA bằng cách kết hợp các phương trình AR và MA

implementation-of-arima-arima-equation

Nói cách khác, giá trị tiên đoán của mô hình ARIMA được cho bởi

Y-pred = Hằng số + Tổ hợp tuyến tính của độ trễ của Y(tối đa p) + tổ hợp tuyến tính của lỗi dự báo bị trễ (tối đa q)

Chuỗi thời gian dừng là chuỗi có các thuộc tính không phụ thuộc vào thời điểm mà chuỗi được quan sát. Như vậy, chuỗi thời gian có xu hướng hoặc tính thời vụ là không cố định vì xu hướng và tính thời vụ sẽ ảnh hưởng đến giá trị của chuỗi thời gian tại các thời điểm khác nhau. Mặt khác, một chuỗi tiếng ồn trắng là tĩnh, vì chúng ta quan sát nó không quan trọng. Nó sẽ trông giống nhau tại bất kỳ thời điểm nào. Một cách đơn giản để biết chuỗi thời gian dừng là giá trị trung bình và phương sai của chuỗi thời gian dừng không đổi theo thời gian

Mô hình ARIMA hoạt động tốt trên chuỗi thời gian cố định. Vì vậy, nếu chúng ta có một chuỗi thời gian không cố định, chúng ta phải chuyển đổi nó thành văn phòng phẩm để huấn luyện mô hình ARIMA. Có nhiều cách khác nhau để biến chuỗi thời gian không dừng thành chuỗi thời gian dừng. Hai cái phổ biến nhất là Khác biệt và Biến đổi. Chúng tôi sẽ sử dụng cả hai phương pháp để chuyển đổi chuỗi thời gian không dừng thành chuỗi thời gian dừng trong các phần tiếp theo

Các bước xây dựng mô hình ARIMA

Chúng ta sẽ sử dụng các bước sau để xây dựng mô hình ARIMA

  • Khám phá tập dữ liệu
  • Kiểm tra xem tập dữ liệu có cố định không
  • Áp dụng các phương pháp phân biệt hoặc chuyển đổi để làm cho chuỗi thời gian dừng
  • Tìm các giá trị liên quan cho
    # checking for null values
    df.isnull().sum()
    6,
    # checking for null values
    df.isnull().sum()
    7 và
    # checking for null values
    df.isnull().sum()
    8
  • Đào tạo người mẫu
  • Đánh giá mô hình và đưa ra dự đoán

Triển khai mô hình ARIMA bằng Python

Bây giờ chúng tôi sẽ triển khai mô hình ARIMA trên tập dữ liệu về doanh số bán hàng của Catfish. Bạn có thể truy cập tập dữ liệu từ liên kết này

Trước khi triển khai mô hình ARIMA, hãy đảm bảo rằng bạn đã cài đặt các mô-đun Python sau

Bạn có thể sử dụng lệnh

# importing the module
import matplotlib.pyplot as plt
# setting the size
plt.figure(figsize=(15,8))
# plotting the graph
plt.plot(df.Date, df.Total)
plt.show()
8 để cài đặt các mô-đun cần thiết

%pip install pandas
%pip install numpy
%pip install matplotlib

Sau khi cài đặt hoàn tất, chúng ta có thể chuyển sang phần thực hiện

Nhập và khám phá tập dữ liệu

Chúng tôi sẽ sử dụng mô-đun của gấu trúc để nhập tập dữ liệu và khám phá các tính năng của nó

# importing the required module
import pandas as pd
# importing the dataset
df = pd.read_csv("catfish.csv")
# printing
df.head()

đầu ra

implementation-of-arima-catfish-dataset

Như bạn có thể thấy, có hai cột, một cột biểu thị dữ liệu và cột tiếp theo là tổng doanh số bán cá da trơn

Bây giờ chúng ta hãy xem liệu có bất kỳ giá trị null nào trong tập dữ liệu của chúng ta không

# checking for null values
df.isnull().sum()

đầu ra

implementation-of-arima-null-values

Điều này cho thấy rằng không có giá trị null nào trong tập dữ liệu của chúng tôi

Bây giờ chúng ta sẽ trực quan hóa tập dữ liệu để xem xu hướng chung của tập dữ liệu chuỗi thời gian

# importing the module
import matplotlib.pyplot as plt
# setting the size
plt.figure(figsize=(15,8))
# plotting the graph
plt.plot(df.Date, df.Total)
plt.show()

đầu ra

implementation-of-arima-catfish-visualization

Bây giờ chúng ta hãy chuyển sang triển khai mô hình ARIMA

Như chúng ta biết rằng các mô hình ARIMA lấy ba giá trị tham số

# checking for null values
df.isnull().sum()
6,
# checking for null values
df.isnull().sum()
8 và
# checking for null values
df.isnull().sum()
7, vì vậy trước khi đào tạo mô hình, chúng ta phải tìm các giá trị cho từng điều khoản này. d ở đây đại diện cho số lượng khác biệt cần thiết để chuỗi thời gian đứng yên. Vì vậy, bây giờ chúng ta hãy áp dụng sự khác biệt thứ nhất để xem liệu dữ liệu chuỗi thời gian có dừng không

# Importing the modules
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
# fixing the size
plt.rcParams.update({'figure.figsize':(9,7), 'figure.dpi':120})

# Original Series
fig, axes = plt.subplots(2, 2, sharex=True)
axes[0, 0].plot(df.Total); axes[0, 0].set_title('Original Series')
plot_acf(df.Total, ax=axes[0, 1])
# 1st Differencing to make stationary time series data
axes[1, 0].plot(df.Total.diff()); axes[1, 0].set_title('1st Order Differencing')
plot_acf(df.Total.diff().dropna(), ax=axes[1, 1])
plt.show()
plt.show()

đầu ra

implementation-of-arima-differencing

Như chúng ta có thể thấy, chuỗi thời gian trở nên gần như đứng yên trong lần vi phân đầu tiên. Vì vậy, chúng tôi sẽ đặt giá trị của

# checking for null values
df.isnull().sum()
7 bằng 1

Tìm thứ tự của mô hình AR

Như chúng ta đã biết, mô hình ARIMA kết hợp giữa mô hình AR và MA. Vì vậy, trước tiên, chúng ta hãy tìm thứ tự của mô hình AR

Chúng tôi sẽ xác định số lượng thuật ngữ AR cần thiết bằng cách kiểm tra biểu đồ Tự tương quan một phần (PACF). Tự tương quan một phần có thể được hình dung là mối tương quan giữa chuỗi và độ trễ của nó sau khi loại trừ các đóng góp từ độ trễ trung gian. Nói cách khác, tự tương quan một phần là mối quan hệ giữa quan sát được tại các điểm hai thời điểm, với điều kiện là chúng tôi coi cả hai quan sát tương quan với các quan sát tại các điểm thời gian khác. Ví dụ: giá cổ phiếu hôm nay có thể tương quan với ngày hôm kia và ngày hôm qua cũng có thể là ngày hôm kia

Bây giờ, hãy vẽ biểu đồ tương quan tự động một phần bằng Python

#importing modules
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
# PACF plot of 1st differenced series
plt.rcParams.update({'figure.figsize':(9,3), 'figure.dpi':120})
# fixing the axis
fig, axes = plt.subplots(1, 2, sharex=True)
# plotting on differen axis
axes[0].plot(df.Total.diff()); axes[0].set_title('1st Differencing')
axes[1].set(ylim=(0,5))
# plotting partial autocorrelation function
plot_pacf(df.Total.diff().dropna(), ax=axes[1])
plt.show()

đầu ra

implementation-of-arima-partial-auto-correlation

Trong biểu đồ tự tương quan một phần, vùng màu xanh nhạt hiển thị giá trị ngưỡng quan trọng và mọi đường thẳng đứng biểu thị giá trị PACF tại mỗi điểm thời gian. Vì vậy, trong cốt truyện, chỉ những đường thẳng đứng vượt quá vùng màu xanh nhạt mới được coi là quan trọng. Chúng ta có thể thấy rằng độ trễ 1 của PACF là đáng kể vì nó nằm trên đường chữ ký. Vì vậy, chúng tôi sẽ đặt giá trị

# checking for null values
df.isnull().sum()
6 bằng 1

Tìm thứ tự của mô hình MA

ACF (hàm tự tương quan) là mối tương quan giữa các quan sát tại thời điểm hiện tại và các quan sát tại các thời điểm trước đó. Giống như cách chúng tôi xem biểu đồ PACF để biết số lượng điều khoản AR, chúng tôi sẽ xem xét biểu đồ ACF để biết số lượng điều khoản MA. Thuật ngữ MA chỉ đơn giản là lỗi của dự báo bị trễ

Bây giờ, hãy vẽ biểu đồ ACF bằng Python cho tập dữ liệu của chúng ta

# setting the size
plt.rcParams.update({'figure.figsize':(9,3), 'figure.dpi':120})
#  fixing the subplots
fig, axes = plt.subplots(1, 2, sharex=True)
axes[0].plot(df.Total.diff()); axes[0].set_title('1st Differencing')
axes[1].set(ylim=(0,1.2))
# plotting the autocorrelation function
plot_acf(df.Total.diff().dropna(), ax=axes[1])
plt.show()

đầu ra

implementation-of-arima-autocorrelation-plot

Chúng tôi có thể thấy rằng một vài độ trễ nằm phía trên dòng chữ ký, nhưng chúng tôi sẽ sửa

# checking for null values
df.isnull().sum()
8 thành 1 một đường thẳng đứng khá quan trọng trong cốt truyện

Xây dựng mô hình ARIMA

Bây giờ chúng tôi có các giá trị cho

# checking for null values
df.isnull().sum()
6,
# checking for null values
df.isnull().sum()
8 và
# checking for null values
df.isnull().sum()
7, chúng tôi có thể đào tạo mô hình ARIMA trên bộ dữ liệu chuỗi thời gian

# importing the ARIMA model
from statsmodels.tsa.arima_model import ARIMA
# 1,1,1 ( arima p d q )
model = ARIMA(df.Total, order=(1,1,1))
# Training arima modeling 
model_fit = model.fit()

Khi quá trình đào tạo hoàn tất, chúng ta có thể vẽ đồ thị giá trị thực và giá trị dự đoán của mô hình bằng phương pháp

# Importing the modules
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
# fixing the size
plt.rcParams.update({'figure.figsize':(9,7), 'figure.dpi':120})

# Original Series
fig, axes = plt.subplots(2, 2, sharex=True)
axes[0, 0].plot(df.Total); axes[0, 0].set_title('Original Series')
plot_acf(df.Total, ax=axes[0, 1])
# 1st Differencing to make stationary time series data
axes[1, 0].plot(df.Total.diff()); axes[1, 0].set_title('1st Order Differencing')
plot_acf(df.Total.diff().dropna(), ax=axes[1, 1])
plt.show()
plt.show()
8

# arima model results
model_fit.plot_predict(dynamic=False)
plt.show()

đầu ra

implementation-of-arima-actual-vs-predicted-values

Đường màu xanh hiển thị giá trị dự đoán và đường màu cam hiển thị giá trị thực tế. Dự đoán dường như theo xu hướng và dường như có một mô hình ARIMA đàng hoàng. Nhưng, không thể nói đây là mô hình ARIMA tốt nhất vì chúng ta chưa dự báo tương lai và so sánh dự báo với hiệu quả thực tế

Trong xác thực chéo ngoài thời gian, chúng tôi di chuyển ngược thời gian và dự đoán trong tương lai. Sau đó, chúng tôi có thể so sánh giá trị dự báo và giá trị thực tế để xem mức độ hiệu quả của các dự đoán. Với mục đích đó, chúng tôi sẽ tạo tập dữ liệu huấn luyện và kiểm tra bằng cách chia chuỗi thời gian thành 2 phần liền kề nhau theo tỷ lệ hợp lý dựa trên tần suất thời gian của chuỗi

Trước tiên, hãy chia tập dữ liệu chuỗi thời gian thành các phần thử nghiệm và đào tạo

# Create Training and Test
train = df.Total[:130]
test = df.Total[130:]

Bây giờ chúng ta có thể sử dụng dữ liệu huấn luyện để huấn luyện và sau đó sử dụng phần thử nghiệm để đánh giá hiệu suất của mô hình ARIMA

# importing the required module
import pandas as pd
# importing the dataset
df = pd.read_csv("catfish.csv")
# printing
df.head()
0

đầu ra

implementation-of-arima-predictions-and-actual-values

Đường màu xanh lá cây hiển thị giá trị dự đoán trong khi màu cam hiển thị giá trị thực và vùng màu xám biểu thị khoảng tin cậy. Chúng ta có thể thấy từ cốt truyện rằng mô hình đã hoạt động tốt

Bây giờ chúng ta sẽ tìm hiểu các phương pháp biến đổi quan trọng để chuyển chuỗi thời gian không dừng thành chuỗi thời gian dừng. Với mục đích đó, chúng tôi sẽ sử dụng bộ dữ liệu về hành khách đi máy bay. Bạn có thể tải xuống bộ dữ liệu từ liên kết này

Nhập và khám phá chuỗi thời gian

Chúng tôi sẽ nhập tập dữ liệu và in ra một vài hàng bằng mô-đun Pandas

# importing the required module
import pandas as pd
# importing the dataset
df = pd.read_csv("catfish.csv")
# printing
df.head()
1

đầu ra

implementation-of-arima-passenger-dataset

Bước tiếp theo là xem có bất kỳ giá trị null nào không

# checking for null values
df.isnull().sum()

đầu ra

implementation-of-arima-null-values-passenge

Như chúng ta có thể thấy, không có giá trị null. Bây giờ sẽ vẽ tập dữ liệu chuỗi thời gian

# importing the required module
import pandas as pd
# importing the dataset
df = pd.read_csv("catfish.csv")
# printing
df.head()
3

đầu ra

implementation-of-arima-visualization-of-passenger

Như chúng ta có thể thấy, số lượng hành khách nhìn chung đã tăng lên, nhưng có một số biến động

Như chúng ta đã thảo luận, cách dễ nhất để biết liệu một chuỗi thời gian có dừng hay không là kiểm tra xem giá trị trung bình và độ lệch chuẩn của nó có không đổi hay không. Nếu cả hai đều không đổi theo thời gian, chuỗi thời gian là dừng

Vì vậy, chúng ta hãy tìm giá trị trung bình và độ lệch chuẩn và vẽ chúng

# importing the required module
import pandas as pd
# importing the dataset
df = pd.read_csv("catfish.csv")
# printing
df.head()
4

Lưu ý rằng kích thước cửa sổ là 12 biểu thị 12 tháng mang lại giá trị trung bình hàng năm

Bây giờ chúng ta sẽ vẽ giá trị trung bình và độ lệch chuẩn

# importing the required module
import pandas as pd
# importing the dataset
df = pd.read_csv("catfish.csv")
# printing
df.head()
5

đầu ra

implementation-of-arima-plotting-mean-and-std

Lưu ý rằng độ lệch chuẩn gần như không đổi, nhưng giá trị trung bình thì không, cho thấy rằng chuỗi thời gian không dừng

Có nhiều cách để làm cho một chuỗi thời gian không dừng có tính dừng. Ví dụ: sử dụng nhật ký, bình phương, căn bậc hai, khối lập phương, căn bậc ba và nhiều phương thức hữu ích khác. Ở đây chúng ta sẽ thảo luận về một số phương pháp này để biến chuỗi thời gian của chúng ta thành văn phòng phẩm

Chuyển đổi quy mô log

Chuyển đổi nhật ký là một phương pháp chuyển đổi dữ liệu thay thế từng biến x bằng nhật ký (x). Bây giờ chúng ta hãy sử dụng chuyển đổi quy mô log và xem liệu nó có thể chuyển đổi tập dữ liệu của chúng ta thành tập dữ liệu cố định hay không

# importing the required module
import pandas as pd
# importing the dataset
df = pd.read_csv("catfish.csv")
# printing
df.head()
6

đầu ra

implementation-of-arima-log-scale-plot

Bây giờ chúng ta có các giá trị log(x) của chuỗi thời gian. Vì vậy, để làm cho nó đứng yên, chúng ta có thể tạo một hàm trừ đi giá trị trung bình cuộn và giá trị trung bình của thang đo log (ở trên) để giá trị trung bình thu được sẽ dừng

Chúng tôi sẽ chuyển đổi tập dữ liệu của mình thành một tập dữ liệu mới sẽ phân biệt giữa giá trị trung bình của thang đo cuộn và log

# importing the required module
import pandas as pd
# importing the dataset
df = pd.read_csv("catfish.csv")
# printing
df.head()
7

đầu ra

implementation-of-arima-log-transformed

Trước tiên, hãy tìm giá trị trung bình và độ lệch chuẩn của tập dữ liệu chuỗi thời gian đã chuyển đổi, sau đó vẽ biểu đồ của chúng

# importing the required module
import pandas as pd
# importing the dataset
df = pd.read_csv("catfish.csv")
# printing
df.head()
8

đầu ra

implementation-of-arima-log-transformed-mean

Lưu ý rằng giá trị trung bình và độ lệch chuẩn gần như không đổi, cho thấy rằng dữ liệu chuỗi thời gian được chuyển đổi hiện đang dừng

Chúng tôi sẽ sử dụng phép biến đổi dịch chuyển thời gian để chuyển đổi chuỗi thời gian không cố định thành dữ liệu cố định

Trước tiên chúng ta hãy vẽ dữ liệu biến đổi bằng cách sử dụng phép biến đổi timeshift

# importing the required module
import pandas as pd
# importing the dataset
df = pd.read_csv("catfish.csv")
# printing
df.head()
9

đầu ra

implementation-of-arima-shift-time

Như bạn có thể thấy rằng không có xu hướng bây giờ. Chúng ta cũng hãy vẽ đồ thị giá trị trung bình và độ lệch chuẩn của dữ liệu đã chuyển đổi

# checking for null values
df.isnull().sum()
0

đầu ra

implementation-of-arima-shift-mean-and-std

Như bạn có thể thấy rằng độ lệch chuẩn cán và giá trị trung bình gần như không đổi, điều này cho thấy tập dữ liệu hiện đang dừng

Tương tự, bạn có thể sử dụng bất kỳ phương pháp nào khác để chuyển đổi chuỗi thời gian thành văn phòng phẩm

Xây dựng mô hình ARIMA

Chúng tôi đã sử dụng hai cách khác nhau để chuyển đổi dữ liệu thành tập dữ liệu cố định. Phần này sẽ mô tả chuỗi thời gian biến đổi thang logarit để huấn luyện mô hình ARIMA

Như chúng tôi đã giải thích trước đó, bạn có thể sử dụng các phương pháp ACF và PACF để xác định giá trị tối ưu cho p và q. Trong phần này, chúng tôi sẽ không dành thời gian tìm kiếm các giá trị ACF và PACF tối ưu nữa

# checking for null values
df.isnull().sum()
1

đầu ra

implementation-of-arima-log-scale-model

Như bạn có thể thấy, đường phù hợp nhất với người mẫu là đường màu cam. Nhưng hình ảnh trực quan này là trên dữ liệu đã chuyển đổi, vì vậy chúng ta hãy thay đổi lại dữ liệu về dạng ban đầu

Dự đoán và biến đổi ngược

Bây giờ hãy để chúng tôi đưa ra dự đoán và đảo ngược quá trình chuyển đổi để có được tập dữ liệu gốc

# checking for null values
df.isnull().sum()
2

đầu ra

implementation-of-arima-reverse-transformation

Đây là các giá trị của đường phù hợp nhất của mô hình. Hãy để chúng tôi trực quan hóa tập dữ liệu gốc và những dự đoán này để đánh giá mô hình của chúng tôi

# checking for null values
df.isnull().sum()
3

đầu ra

implementation-of-arima-actual-vs-predicted-values-transfomed

Đồ thị trên cho thấy mô hình đã học được xu hướng và đã dự đoán khá tốt

Vì mô hình của chúng tôi đã được đào tạo và học các mẫu. Chúng ta có thể sử dụng hàm

# Importing the modules
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
# fixing the size
plt.rcParams.update({'figure.figsize':(9,7), 'figure.dpi':120})

# Original Series
fig, axes = plt.subplots(2, 2, sharex=True)
axes[0, 0].plot(df.Total); axes[0, 0].set_title('Original Series')
plot_acf(df.Total, ax=axes[0, 1])
# 1st Differencing to make stationary time series data
axes[1, 0].plot(df.Total.diff()); axes[1, 0].set_title('1st Order Differencing')
plot_acf(df.Total.diff().dropna(), ax=axes[1, 1])
plt.show()
plt.show()
8 để đưa ra dự đoán cho tương lai. Chúng tôi biết rằng chúng tôi đã có dữ liệu trong 12 năm qua, vì vậy, dựa trên tập dữ liệu đã cho, hãy dự đoán số lượng hành khách trong 5 năm với khoảng tin cậy 90%

# checking for null values
df.isnull().sum()
4

đầu ra

implementation-of-arima-making-predictions-transformed

Đường màu xanh lam hiển thị các dự đoán, trong khi vùng màu xám biểu thị khoảng tin cậy

Tài liệu học tập bổ sung

Theo quan điểm của chúng tôi, đây là những khóa học trực tuyến thực hành tốt nhất liên quan đến Học máy và Học sâu hiện có trên thị trường

Tóm lược

ARIMA là một lớp mô hình thống kê để phân tích và dự báo dữ liệu chuỗi thời gian. Nó là sự kết hợp của mô hình AR và MA. Trong bài viết này, chúng tôi đã trình bày chi tiết về mô hình ARIMA. Chúng tôi cũng học cách chuyển đổi chuỗi thời gian không cố định thành tĩnh bằng nhiều phương pháp khác nhau

Nếu bạn muốn tìm hiểu sâu hơn, chúng tôi khuyên bạn nên xem một trong những khóa học phổ biến nhất của Udemy – Python cho Phân tích dữ liệu chuỗi thời gian

Làm cách nào để dự đoán với ARIMA Python?

Đã đến lúc xem một ví dụ thực tế. .
Bước 0. Khám phá tập dữ liệu. .
Bước 1. Kiểm tra tính dừng của chuỗi thời gian. .
Bước 2. Xác định tham số mô hình ARIMA p, q. .
Bước 3. Phù hợp với mô hình ARIMA. .
Bước 4. Đưa ra dự đoán chuỗi thời gian. .
Bước 5. Đánh giá dự đoán mô hình

Các mô hình ARIMA được ước tính như thế nào?

Khi R ước tính mô hình ARIMA, nó sử dụng ước tính khả năng tối đa (MLE) . Kỹ thuật này tìm các giá trị của các tham số tối đa hóa xác suất thu được dữ liệu mà chúng tôi đã quan sát được. Đối với các mô hình ARIMA, MLE tương tự như các ước tính bình phương nhỏ nhất có thể thu được bằng cách giảm thiểu T∑t=1ε2t.

Làm cách nào để diễn giải kết quả mô hình ARIMA bằng Python?

Diễn giải các kết quả chính cho ARIMA .
Bước 1. Xác định xem mỗi thuật ngữ trong mô hình có ý nghĩa hay không
Bước 2. Xác định mức độ phù hợp của mô hình với dữ liệu
Bước 3. Xác định xem mô hình của bạn có đáp ứng giả định của phân tích hay không

Mô hình ARIMA trong Python chính xác đến mức nào?

Khoảng 2. 2% MAPE có nghĩa là mô hình khoảng 97. 8% chính xác khi dự đoán 15 lần quan sát tiếp theo . Bây giờ bạn đã biết cách xây dựng mô hình ARIMA theo cách thủ công.