Dự đoán giá cổ phiếu bằng arima python

Chúng ta đã thấy các bước liên quan trong bài đăng trước về Phân tích chuỗi thời gian. Nếu bạn chưa đọc nó, tôi rất khuyến khích bạn làm như vậy

————————————————————————————————————————————-

Tải xuống tài nguyên miễn phí. Bạn có thể thích làm việc thông qua phiên bản cập nhật của mã [tải xuống Sổ làm việc ARIMA] được sử dụng trong bài đăng này

————————————————————————————————————————————-

Dự báo là bước tiếp theo mà bạn muốn dự đoán các giá trị trong tương lai mà chuỗi sẽ thực hiện

Nhưng tại sao phải dự báo?

Bởi vì, dự báo một chuỗi thời gian [như nhu cầu và doanh số bán hàng] thường có giá trị thương mại to lớn

Trong hầu hết các công ty sản xuất, nó thúc đẩy các hoạt động lập kế hoạch kinh doanh, thu mua và sản xuất cơ bản. Bất kỳ lỗi nào trong dự báo sẽ giảm xuống trong toàn bộ chuỗi cung ứng hoặc bất kỳ bối cảnh kinh doanh nào cho vấn đề đó. Vì vậy, điều quan trọng là phải dự báo chính xác để tiết kiệm chi phí và là yếu tố quyết định để thành công

Không chỉ trong sản xuất, các kỹ thuật và khái niệm đằng sau dự báo chuỗi thời gian có thể áp dụng trong mọi doanh nghiệp

Bây giờ dự báo một chuỗi thời gian có thể được chia thành hai loại

Nếu bạn chỉ sử dụng các giá trị trước đó của chuỗi thời gian để dự đoán các giá trị trong tương lai của nó, thì đó được gọi là Dự báo chuỗi thời gian đơn biến

Nhận khóa học Python hoàn chỉnh miễn phí

Đối mặt với tình huống tương tự như những người khác?

Xây dựng sự nghiệp khoa học dữ liệu của bạn với bằng cấp được ngành công nhận trên toàn cầu. Có được tư duy, sự tự tin và các kỹ năng khiến Nhà khoa học dữ liệu trở nên có giá trị

Nhận khóa học Python miễn phí

Nhận khóa học Python hoàn chỉnh miễn phí

Xây dựng sự nghiệp khoa học dữ liệu của bạn với bằng cấp được ngành công nhận trên toàn cầu. Có được tư duy, sự tự tin và các kỹ năng khiến Nhà khoa học dữ liệu trở nên có giá trị

Nhận khóa học Python miễn phí

Và nếu bạn sử dụng các yếu tố dự đoán khác với chuỗi [a. k. một biến ngoại sinh] để dự báo nó được gọi là Dự báo chuỗi thời gian đa biến

Bài đăng này tập trung vào một loại phương pháp dự báo cụ thể được gọi là mô hình ARIMA. [*Ghi chú. Nếu bạn đã biết khái niệm ARIMA, hãy chuyển sang phần triển khai dự báo ARIMA trong video hướng dẫn miễn phí [Dự báo bằng ARIMA và  Thử nghiệm và cải thiện kết quả]

ARIMA, viết tắt của 'Trung bình di chuyển tích hợp tự hồi quy', là một thuật toán dự báo dựa trên ý tưởng rằng chỉ riêng thông tin trong các giá trị quá khứ của chuỗi thời gian có thể được sử dụng để dự đoán các giá trị trong tương lai

2. Giới thiệu về Mô hình ARIMA

Vậy mô hình ARIMA chính xác là gì?

ARIMA, viết tắt của 'Trung bình di chuyển tích hợp hồi quy tự động' thực sự là một loại mô hình 'giải thích' một chuỗi thời gian nhất định dựa trên các giá trị trong quá khứ của chính nó, nghĩa là độ trễ của chính nó và lỗi dự báo bị trễ, do đó phương trình có thể được sử dụng . Biết thêm về các thông số của ARIMA và những hạn chế của nó, trong video hướng dẫn miễn phí này

Bất kỳ chuỗi thời gian 'không theo mùa' nào thể hiện các mẫu và không phải là nhiễu trắng ngẫu nhiên đều có thể được lập mô hình bằng các mô hình ARIMA

Một mô hình ARIMA được đặc trưng bởi 3 thuật ngữ. p, d, q

ở đâu,

p là thứ tự của thuật ngữ AR

q là thứ tự của thuật ngữ MA

d là số lượng khác biệt cần thiết để làm cho chuỗi thời gian đứng yên

Nếu một chuỗi thời gian, có các mẫu theo mùa, thì bạn cần thêm các thuật ngữ theo mùa và nó sẽ trở thành SARIMA, viết tắt của 'ARIMA theo mùa'. Thêm về điều đó sau khi chúng tôi hoàn thành ARIMA

Vì vậy, 'thứ tự của thuật ngữ AR' thậm chí có nghĩa là gì?

3. Ý nghĩa của p, d và q trong mô hình ARIMA

Bước đầu tiên để xây dựng mô hình ARIMA là làm cho chuỗi thời gian dừng

Tại sao?

Bởi vì, thuật ngữ 'Tự động hồi quy' trong ARIMA có nghĩa là mô hình hồi quy tuyến tính sử dụng độ trễ của chính nó làm yếu tố dự báo. Các mô hình hồi quy tuyến tính, như bạn biết, hoạt động tốt nhất khi các yếu tố dự đoán không tương quan và độc lập với nhau

Vì vậy, làm thế nào để làm cho một loạt văn phòng phẩm?

Cách tiếp cận phổ biến nhất là phân biệt nó. Nghĩa là, trừ giá trị trước đó từ giá trị hiện tại. Đôi khi, tùy thuộc vào độ phức tạp của chuỗi, có thể cần nhiều hơn một sự khác biệt

Do đó, giá trị của d là số sai phân nhỏ nhất cần thiết để chuỗi đứng yên. Và nếu chuỗi thời gian đã dừng thì d = 0

Tiếp theo, các thuật ngữ 'p' và 'q' là gì?

'p' là thứ tự của thuật ngữ 'Tự động hồi quy' [AR]. Nó đề cập đến số lượng độ trễ của Y được sử dụng làm yếu tố dự đoán. Và 'q' là thứ tự của thuật ngữ 'Trung bình Di chuyển' [MA]. Nó đề cập đến số lỗi dự báo bị trễ sẽ xuất hiện trong Mô hình ARIMA

 

Triển khai trực tiếp trên dự án thực tế. Tìm hiểu cách triển khai ARIMA bằng nhiều chiến lược và nhiều mô hình chuỗi thời gian khác trong Khóa học Dự báo Khách đến Nhà hàng của tôi

 

4. Mô hình AR và MA là gì

Vậy mô hình AR và MA là gì?

Mô hình Tự động hồi quy thuần túy [chỉ AR] là mô hình mà Yt chỉ phụ thuộc vào độ trễ của chính nó. Nghĩa là, Yt là một hàm của 'độ trễ của Yt'.  

trong đó, $Y{t-1}$ là độ trễ1 của chuỗi, $\beta1$ là hệ số độ trễ1 mà mô hình ước tính và $\alpha$ là số hạng chặn, cũng được mô hình ước tính

Video này đề cập đến trực giác và hoạt động của mô hình Hồi quy tự động. Và cách PACF có thể được tận dụng để xây dựng các mô hình AR

Tương tự như vậy, mô hình Đường trung bình động thuần túy [chỉ MA] là mô hình mà Yt chỉ phụ thuộc vào các lỗi dự báo bị trễ

trong đó 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. Các lỗi Et và E[t-1] là các lỗi từ các phương trình sau

[Lỗi. Các hệ số beta trong phương trình thứ hai ở trên là không chính xác. ]

Đó lần lượt là mô hình AR và MA

Vậy phương trình của một mô hình ARIMA trông như thế nào?

Mô hình ARIMA là mô hình trong đó chuỗi thời gian được thay đổi ít nhất một lần để làm cho nó đứng yên và bạn kết hợp các thuật ngữ AR và MA. Vậy phương trình trở thành

Mô hình ARIMA bằng chữ

Dự đoán Yt = Hằng số + Độ trễ kết hợp tuyến tính của Y [tối đa p độ trễ] + Kết hợp tuyến tính của các lỗi dự báo bị trễ [tối đa q độ trễ]

Do đó, mục tiêu là xác định các giá trị của p, d và q. Nhưng bằng cách nào?

Hãy bắt đầu với việc tìm chữ 'd'

5. Cách tìm thứ tự khác biệt [d] trong mô hình ARIMA

Mục đích của việc vi phân nó để làm cho chuỗi thời gian đứng yên

Nhưng bạn cần cẩn thận để không quá chênh lệch chuỗi. Bởi vì, một chuỗi quá khác biệt vẫn có thể dừng, do đó sẽ ảnh hưởng đến các tham số của mô hình

Vậy làm thế nào để xác định đúng thứ tự khác biệt?

Thứ tự đúng của sự khác biệt là sự khác biệt tối thiểu cần thiết để có được một chuỗi gần cố định đi lang thang xung quanh một giá trị trung bình xác định và biểu đồ ACF đạt đến 0 khá nhanh

Nếu tự tương quan dương đối với nhiều độ trễ [10 hoặc nhiều hơn], thì chuỗi cần phân biệt thêm. Mặt khác, nếu bản thân hệ số tự tương quan lag 1 quá âm, thì chuỗi có thể bị sai phân quá mức.

Trong trường hợp, bạn thực sự không thể quyết định giữa hai thứ tự khác biệt, thì hãy chọn thứ tự có độ lệch chuẩn nhỏ nhất trong chuỗi khác biệt

Hãy xem cách thực hiện với một ví dụ

Đầu tiên, tôi sẽ kiểm tra xem chuỗi có đứng yên hay không bằng cách sử dụng phép thử Augmented Dickey Fuller [

from pmdarima.arima.utils import ndiffs
df = pd.read_csv['//raw.githubusercontent.com/selva86/datasets/master/wwwusage.csv', names=['value'], header=0]
y = df.value

## Adf Test
ndiffs[y, test='adf']  # 2

# KPSS test
ndiffs[y, test='kpss']  # 0

# PP test:
ndiffs[y, test='pp']  # 2
0], từ gói mô hình thống kê

Tại sao?

Bởi vì, bạn chỉ cần phân biệt nếu chuỗi không cố định. Mặt khác, không cần sự khác biệt, nghĩa là, d = 0

Giả thuyết không của phép thử ADF là chuỗi thời gian không cố định. Vì vậy, nếu giá trị p của kiểm định nhỏ hơn mức ý nghĩa [0. 05] thì bạn bác bỏ giả thuyết không và suy ra rằng chuỗi thời gian thực sự dừng

Vì vậy, trong trường hợp của chúng ta, nếu Giá trị P > 0. 05 chúng ta tiếp tục với việc tìm thứ tự khác biệt

from statsmodels.tsa.stattools import adfuller
from numpy import log
result = adfuller[df.value.dropna[]]
print['ADF Statistic: %f' % result[0]]
print['p-value: %f' % result[1]]
ADF Statistic: -2.464240
p-value: 0.124419

Vì giá trị P lớn hơn mức ý nghĩa, hãy lấy sự khác biệt của chuỗi và xem biểu đồ tự tương quan trông như thế nào

import numpy as np, pandas as pd
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
import matplotlib.pyplot as plt
plt.rcParams.update[{'figure.figsize':[9,7], 'figure.dpi':120}]

# Import data
df = pd.read_csv['//raw.githubusercontent.com/selva86/datasets/master/wwwusage.csv', names=['value'], header=0]

# Original Series
fig, axes = plt.subplots[3, 2, sharex=True]
axes[0, 0].plot[df.value]; axes[0, 0].set_title['Original Series']
plot_acf[df.value, ax=axes[0, 1]]

# 1st Differencing
axes[1, 0].plot[df.value.diff[]]; axes[1, 0].set_title['1st Order Differencing']
plot_acf[df.value.diff[].dropna[], ax=axes[1, 1]]

# 2nd Differencing
axes[2, 0].plot[df.value.diff[].diff[]]; axes[2, 0].set_title['2nd Order Differencing']
plot_acf[df.value.diff[].diff[].dropna[], ax=axes[2, 1]]

plt.show[]

Thứ tự khác biệt

Đối với chuỗi trên, chuỗi thời gian đạt đến trạng thái dừng với hai bậc khác nhau. Nhưng khi nhìn vào biểu đồ tự tương quan cho sự khác biệt thứ 2, độ trễ đi vào vùng âm xa khá nhanh, điều đó cho thấy, chuỗi có thể đã bị chênh lệch quá mức

Vì vậy, tôi sẽ tạm thời sửa thứ tự chênh lệch thành 1 mặc dù chuỗi không hoàn toàn dừng [độ dừng yếu]

from pmdarima.arima.utils import ndiffs
df = pd.read_csv['//raw.githubusercontent.com/selva86/datasets/master/wwwusage.csv', names=['value'], header=0]
y = df.value

## Adf Test
ndiffs[y, test='adf']  # 2

# KPSS test
ndiffs[y, test='kpss']  # 0

# PP test:
ndiffs[y, test='pp']  # 2
2 0 2

6. Cách tìm thứ tự của thuật ngữ AR [p]

Bước tiếp theo là xác định xem mô hình có cần bất kỳ thuật ngữ AR nào không. Bạn có thể tìm ra 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]

Nhưng PACF là gì?

Tự tương quan một phần có thể được tưởng tượng 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. Vì vậy, PACF sắp xếp truyền tải mối tương quan thuần túy giữa độ trễ và chuỗi. Bằng cách đó, bạn sẽ biết liệu độ trễ đó có cần thiết trong thuật ngữ AR hay không

Vậy công thức toán học của PACF là gì?

Tự tương quan một phần của độ trễ [k] của một chuỗi là hệ số của độ trễ đó trong phương trình tự hồi quy của Y

Nghĩa là, giả sử, nếu

from pmdarima.arima.utils import ndiffs
df = pd.read_csv['//raw.githubusercontent.com/selva86/datasets/master/wwwusage.csv', names=['value'], header=0]
y = df.value

## Adf Test
ndiffs[y, test='adf']  # 2

# KPSS test
ndiffs[y, test='kpss']  # 0

# PP test:
ndiffs[y, test='pp']  # 2
1 là chuỗi hiện tại và
from pmdarima.arima.utils import ndiffs
df = pd.read_csv['//raw.githubusercontent.com/selva86/datasets/master/wwwusage.csv', names=['value'], header=0]
y = df.value

## Adf Test
ndiffs[y, test='adf']  # 2

# KPSS test
ndiffs[y, test='kpss']  # 0

# PP test:
ndiffs[y, test='pp']  # 2
2 là độ trễ 1 của
from pmdarima.arima.utils import ndiffs
df = pd.read_csv['//raw.githubusercontent.com/selva86/datasets/master/wwwusage.csv', names=['value'], header=0]
y = df.value

## Adf Test
ndiffs[y, test='adf']  # 2

# KPSS test
ndiffs[y, test='kpss']  # 0

# PP test:
ndiffs[y, test='pp']  # 2
3, thì tự tương quan một phần của độ trễ 3 [
from pmdarima.arima.utils import ndiffs
df = pd.read_csv['//raw.githubusercontent.com/selva86/datasets/master/wwwusage.csv', names=['value'], header=0]
y = df.value

## Adf Test
ndiffs[y, test='adf']  # 2

# KPSS test
ndiffs[y, test='kpss']  # 0

# PP test:
ndiffs[y, test='pp']  # 2
4] là hệ số $\alpha_3$ của
from pmdarima.arima.utils import ndiffs
df = pd.read_csv['//raw.githubusercontent.com/selva86/datasets/master/wwwusage.csv', names=['value'], header=0]
y = df.value

## Adf Test
ndiffs[y, test='adf']  # 2

# KPSS test
ndiffs[y, test='kpss']  # 0

# PP test:
ndiffs[y, test='pp']  # 2
4 trong phương trình trên

Tốt. Bây giờ, làm thế nào để tìm số lượng điều khoản AR?

Bất kỳ sự tự tương quan nào trong một chuỗi cố định đều có thể được khắc phục bằng cách thêm đủ các thuật ngữ AR. Vì vậy, ban đầu chúng tôi lấy thứ tự của thuật ngữ AR bằng với bao nhiêu độ trễ vượt qua giới hạn ý nghĩa trong biểu đồ PACF

from statsmodels.tsa.stattools import adfuller
from numpy import log
result = adfuller[df.value.dropna[]]
print['ADF Statistic: %f' % result[0]]
print['p-value: %f' % result[1]]
1

Thứ tự thời hạn AR

Bạn có thể quan sát thấy rằng độ trễ PACF 1 khá quan trọng vì nằm trên đường ý nghĩa. Độ trễ 2 hóa ra cũng đáng kể, xoay sở một chút để vượt qua giới hạn đáng kể [vùng màu xanh lam]. Nhưng tôi sẽ thận trọng và tạm thời sửa p thành 1

7. Cách tìm bậc của số hạng MA [q]

Giống như cách chúng tôi xem biểu đồ PACF để biết số lượng thuật ngữ AR, bạn có thể xem biểu đồ ACF để biết số lượng thuật ngữ MA. Thuật ngữ MA về mặt kỹ thuật là lỗi của dự báo bị trễ

ACF cho biết cần có bao nhiêu thuật ngữ MA để loại bỏ bất kỳ tự tương quan nào trong chuỗi cố định

Hãy xem đồ thị tự tương quan của chuỗi sai phân

from statsmodels.tsa.stattools import adfuller
from numpy import log
result = adfuller[df.value.dropna[]]
print['ADF Statistic: %f' % result[0]]
print['p-value: %f' % result[1]]
2

Thứ tự của kỳ hạn MA

Một vài độ trễ nằm trên đường ý nghĩa. Vì vậy, hãy tạm thời sửa q thành 2. Khi nghi ngờ, hãy sử dụng mô hình đơn giản hơn để giải thích đầy đủ về Y

8. Cách xử lý nếu chuỗi thời gian chênh lệch thấp hơn hoặc cao hơn một chút

Có thể xảy ra trường hợp sê-ri của bạn hơi khác biệt, việc khác biệt thêm một lần nữa khiến nó hơi bị chênh lệch quá mức

Làm thế nào để xử lý trường hợp này?

Nếu sê-ri của bạn hơi khác biệt, việc thêm một hoặc nhiều thuật ngữ AR bổ sung thường tạo nên sự khác biệt. Tương tự như vậy, nếu nó hơi quá chênh lệch, hãy thử thêm một thuật ngữ MA bổ sung

9. Cách xây dựng Mô hình ARIMA

Bây giờ bạn đã xác định được các giá trị của p, d và q, bạn đã có mọi thứ cần thiết để phù hợp với mô hình ARIMA. Hãy sử dụng triển khai

from pmdarima.arima.utils import ndiffs
df = pd.read_csv['//raw.githubusercontent.com/selva86/datasets/master/wwwusage.csv', names=['value'], header=0]
y = df.value

## Adf Test
ndiffs[y, test='adf']  # 2

# KPSS test
ndiffs[y, test='kpss']  # 0

# PP test:
ndiffs[y, test='pp']  # 2
6 trong gói
from pmdarima.arima.utils import ndiffs
df = pd.read_csv['//raw.githubusercontent.com/selva86/datasets/master/wwwusage.csv', names=['value'], header=0]
y = df.value

## Adf Test
ndiffs[y, test='adf']  # 2

# KPSS test
ndiffs[y, test='kpss']  # 0

# PP test:
ndiffs[y, test='pp']  # 2
7. [** Bạn cũng có thể xem bài học video miễn phí về dự báo lượng khách đến nhà hàng bằng ARIMA, sau đó xem cách kiểm tra và cải thiện mô hình]

from statsmodels.tsa.stattools import adfuller
from numpy import log
result = adfuller[df.value.dropna[]]
print['ADF Statistic: %f' % result[0]]
print['p-value: %f' % result[1]]
5
from statsmodels.tsa.stattools import adfuller
from numpy import log
result = adfuller[df.value.dropna[]]
print['ADF Statistic: %f' % result[0]]
print['p-value: %f' % result[1]]
6

Tóm tắt mô hình tiết lộ rất nhiều thông tin. Bảng ở giữa là bảng hệ số trong đó các giá trị dưới 'coef' là trọng số của các điều khoản tương ứng

Lưu ý ở đây hệ số của thuật ngữ MA2 gần bằng 0 và Giá trị P trong 'P>. z. ' cột rất không đáng kể. Lý tưởng nhất là nhỏ hơn 0. 05 để X tương ứng có ý nghĩa

Vì vậy, hãy xây dựng lại mô hình mà không có thuật ngữ MA2

from statsmodels.tsa.stattools import adfuller
from numpy import log
result = adfuller[df.value.dropna[]]
print['ADF Statistic: %f' % result[0]]
print['p-value: %f' % result[1]]
7____20

Mô hình AIC đã giảm, đó là điều tốt. Giá trị P của các điều khoản AR1 và MA1 đã được cải thiện và rất có ý nghĩa [

Chủ Đề