Lời mở đầu

Chào những bạn, từ bây giờ tuy không lỏng lẻo lắm, mà lại mình vẫn test dịch với viết một bài về Time Series data (dữ liệu theo thời gian). Bài viết này dựa trên ý hiểu của bản thân mình khi đọc bài bác gốc, gồm gì không đúng sót mong các bạn bỏ qua.

Bạn đang xem: Phân tích dữ liệu chuỗi thời gian bằng Python (Time Series Data Analytics with Python)

Định nghĩa

Time series data là gì ? Để trả lời thắc mắc này, tôi sẽ đưa ra 3 tình huống:

Bạn làm thống trị ở một nhà hàng pizza, chúng ta thấy mỗi lắp thêm 7 giá deals tăng lên một chút, bạn có nhu cầu biết việc bán ra của mình bao gồm theo một quy luật quan trọng đặc biệt nào không.Công ty của chúng ta bán một thành phầm và bạn được giao trách nhiệm dự đoán lượng mua, dự đoán số nguyên liệu cần cho thành phầm này.Bạn là người bảo trì hệ thống tài liệu tập trung. Bạn có nhu cầu phát hiện ra hồ hết vấn đề xảy ra trong quy trình của hệ thống như việc áp dụng CPU bất thông thường dẫn đến sever sập. Bởi vì vậy bạn phải theo dõi giá chỉ trị sử dụng CPU theo thời gian.

Như các bạn thấy trong những ví dụ trên, tôi đã với đang thao tác làm việc với dữ liệu theo thời gian, từ solo hàng cho tới dự đoán của sản phẩm, ... Thể hiện rõ nhất ở đó là biểu đồ hội chứng khoán.

Trong xóm hội hiện đại, khi số lượng thông tin càng ngày càng tăng, bài toán phân tích dữ liệu time series trở nên cực kì quan trọng, nhưng cho dù có không ít thuật toán hay mô hình trí tuệ nhân tạo sinh ra, việc dự đoán tương lai vẫn thất bại vì chưng sự thiếu bình ổn trong chuỗi thời gian.

Một vài thuật ngữ trong khoảng time Series

Trend: xu hướng của dữ liệu (tăng hoặc giảm). Điều này rất có thể phát hiện thông qua độ dốc của dữ liệu trên biểu đồ.

Seasonality: dữ liệu bị ảnh hưởng theo thước đo thời hạn như: giờ, tuần, tháng, năm, ... Trong trường hợp, này dữ liệu có chu kỳ lặp đi lặp lại theo thước đo thời gian kể bên trên với một gia tốc cố định.

Cyclicity: một chu kỳ xảy ra khi tài liệu tăng với giảm không áp theo một tần suất cố định. Dễ thấy nhất ở đó là trong nghành nghề dịch vụ kinh tế.

Residuals: dữ liệu time series tất cả thể tạo thành 2 loại: quý hiếm dự báo tại thời gian t và phần thặng dư tại thời khắc t

Value of series at time t = Predicted value at time t + Residual at time t

Một số ví dụ:

Chuỗi theo xu hướng tăng:

*

Chuỗi theo chu kỳ với tần suất cố định:

*

Chuỗi theo chu kỳ với tần suất không nỗ lực định:

*

Chuỗi chả theo thể một số loại gì:

*

Một chuỗi cũng hoàn toàn có thể là tổ hợp của rất nhiều loại kể trên.

Tính ổn định của chuỗi

Đơn giản hiểu là một trong những chuỗi lặp đi lặp lại theo một chu kỳ, quý hiếm không tăng theo thời gian. Dự kiến chuỗi có tính ổn định rất dễ do có các đặc tính như: mean, variance, autocorrelation, ...

Biến đổi về chuỗi ổn định

Đại phần nhiều trường hợp chúng ta bắt gặp các chuỗi bất ổn định, vì vậy nên phải loại bỏ những yếu tố gây bất ổn định.

De-trending (thủ tiêu xu hướng): như tên gọi, sa thải các quanh vùng mang yếu tố xu thế trong chuỗi. Việc loại bỏ có rất nhiều cách, dựa vào vào thực chất của dữ liệu: index giỏi non-index.Differencing: seasonal hoặc cyclical có thể được một số loại bỏ bằng cách lấy cực hiếm quan gần kề tại thời khắc t trừ giá trị quan sát tại thời khắc t-1.Logging: nôm na là khi xu thế không dựa vào chỉ số túi tiền (trong trường hợp chưa hẳn chuỗi chi phí tệ) , logging sẽ vươn lên là chuỗi thành một chuỗi tuyến đường tính (log(exp(x)).Pratice code

Kiểm tra tính ổn định của chuỗi

Visualize

Cách đơn giản và dễ dàng nhất là quan tiếp giáp chuỗi bằng mắt thường. Nếu như khách hàng là dân code ngôn ngữ python-er như mình hoàn toàn có thể dùng tủ sách matplotlib nhằm vẽ tài liệu thành biểu đồ.

Ở trên đây tôi dùng dữ liệu xuất nhập vào Úc-Nhật.

csv_path = "/home/pham.minh.hoang/Pictures/monthly-australian-imports-from-.csv"data_imports = pd.read_csv(csv_path)<:-1:>data = data_imports.drop(<"Month">, 1)data.values.reshape(-1,1)plt.plot(data)plt.title("Australian imports")plt.show()data_detrend = (data - data.rolling(window=12).mean()) / data.rolling(window=12).std()data_season = data_detrend - data_detrend.shift(12)fig, ax = plt.subplots(3,figsize=(12, 9))ax<0>.plot(data.index, data, label="raw data")ax<0>.plot(data.rolling(window=12).mean(), label="rolling mean");ax<0>.plot(data.rolling(window=12).std(), label="rolling std (x10)");ax<0>.legend()ax<1>.plot(data.index, data_detrend, label="de-trended data")ax<1>.plot(data_detrend.rolling(window=12).mean(), label="rolling mean");ax<1>.plot(data_detrend.rolling(window=12).std(), label="rolling std (x10)");ax<1>.legend()ax<2>.plot(data.index, data_season, label="12 lag differenced de-trended data")ax<2>.plot(data_season.rolling(window=12).mean(), label="rolling mean");ax<2>.plot(data_season.rolling(window=12).std(), label="rolling std (x10)");ax<2>.legend()plt.tight_layout()fig.autofmt_xdate()

*

*

Adfuller

Cách 2, dùng adfuller thử nghiệm để kiểm tra tính định hình của chuỗi. Bạn cần tải về thư viện statsmodels

pip install statsmodelsfrom statsmodels.tsa.stattools import adfullerprint(" > Is the data stationary ?")dftest = adfuller(data, autolag="AIC")print("Test statistic = :.3f".format(dftest<0>))print("P-value = :.3f".format(dftest<1>))print("Critical values :")for k, v in dftest<4>.items(): print(" : - The data is stationary with % confidence".format(k, v, "not" if vdftest<0> else "", 100-int(k<:-1>))) print(" > Is the de-trended data stationary ?")dftest = adfuller(data_detrend.dropna(), autolag="AIC")print("Test statistic = :.3f".format(dftest<0>))print("P-value = :.3f".format(dftest<1>))print("Critical values :")for k, v in dftest<4>.items(): print(" : - The data is stationary with % confidence".format(k, v, "not" if vdftest<0> else "", 100-int(k<:-1>))) print(" > Is the 12-lag differenced de-trended data stationary ?")dftest = adfuller(data_season.dropna(), autolag="AIC")print("Test statistic = :.3f".format(dftest<0>))print("P-value = :.3f".format(dftest<1>))print("Critical values :")for k, v in dftest<4>.items(): print(" : - The data is stationary with % confidence".format(k, v, "not" if vdftest<0> else "", 100-int(k<:-1>))) > Is the data stationary ?
Test statistic = 0.811P-value = 0.992Critical values :1%: -3.450632157720528 - The data is not stationary with 99% confidence5%: -2.870474482366864 - The data is not stationary with 95% confidence10%: -2.5715301325443787 - The data is not stationary with 90% confidence > Is the de-trended data stationary ?
Test statistic = -5.530P-value = 0.000Critical values :1%: -3.4521175397304784 - The data is stationary with 99% confidence5%: -2.8711265007266666 - The data is stationary with 95% confidence10%: -2.571877823851692 - The data is stationary with 90% confidence

KPSS

Cách 3, sử dụng KPSS test với trả thuyết rằng chuỗi có xu hướng ổn định. Nói cách khác, p-value thải trừ giả thuyết này, chuỗi không tồn tại xu hướng ổn định và ngược lại.

from statsmodels.tsa.stattools import kpssprint(" > Is the data stationary ?")statistic, p_value, n_lags, critical_values = kpss(data)print("Test statistic = :.3f".format(statistic))print("P-value = :.3f".format(p_value))print("num lags: ".format(n_lags))print("Critical values :")for k, v in critical_values.items(): print(f" k : v")print(f"Result: The series is "not " if p_value 0.05 else ""stationary") > Is the data stationary ?
Test statistic = 1.902P-value = 0.010num lags: 17Critical values : 10% : 0.347 5% : 0.463 2.5% : 0.574 1% : 0.739Result: The series is not stationary/python3.7/site-packages/statsmodels/tsa/stattools.py:1907: Interpolation
Warning:The test statistic is outside of the range of p-values available in thelook-up table. The actual p-value is smaller than the p-value returned.warn_msg.format(direction="smaller"), Interpolation
Warning

ACF và PACF

Autocorrelation (ACF) plot là thứ thị mô tả sự tương quan giữa chuỗi cùng độ trễ của bao gồm nó.

Partial autocorrelation (PACF) plot là thứ thị thể hiện con số tương quan thân chuỗi cùng độ trễ, xung quanh mối đối sánh với độ trễ thấp.

Lý tưởng độc nhất là không có tương quan nào thân chuỗi cùng độ trễ. Có nghĩa là chuỗi luôn cập nhật chính xác cùng kịp thời.

from statsmodels.graphics.tsaplots import plot_acf, plot_pacffig, ax = plt.subplots(2, figsize=(12,6))ax<0> = plot_acf(data_detrend.dropna(), ax=ax<0>, lags=20)ax<1> = plot_pacf(data_detrend.dropna(), ax=ax<1>, lags=20)

*
Các cột vượt vượt vùng xanh biểu đạt mối đối sánh với độ trễ 1, 2, 3, 4

Exponential Smoothing

Phương pháp có tác dụng mịn này tương xứng với dữ liệu không theo xu phía hoặc không tuân theo chu kỳ.

Các phương thức làm mịn dữ liệu có phương thức cơ bản là tính trung bình cùng của thừa khứ. Cùng với những phương pháp nâng cao thì hoàn toàn có thể thêm tính chu kỳ luân hồi và tính xu hướng.

Để dễ nắm bắt hơn, tôi sẽ lý giải bằng bí quyết toán học tập với y là chuỗi, phường là tác dụng dự đoán, l là giá chỉ trị p đã được smooth, s là giá chỉ trị chu kỳ luân hồi và b là quý giá xu hướng.

Simple Exponential Smoothing

Thuật toán này cần sử dụng khi không nhiều dữ liệu, không có xu hướng cùng chu kỳ. Công thức tại chỗ này là:

pt=ltp_t = l_tpt​=lt​

lt=α∗yt+(1−α)∗lt−1l_t = alpha * y_t + (1-alpha) * l_t-1lt​=α∗yt​+(1−α)∗lt−1​

Ở điểm ban đầu, lấy hiệu quả dự đoán ban sơ làm quý hiếm khởi tạo nên của l. Giá trị smooth ở thời gian t = cực hiếm smooth ở thời điểm t-1 nhân cùng với 1-αalphaα (thông số có tác dụng mịn) cùng với αalphaα nhân với mức giá trị quan ngay cạnh ở thời điểm t-1.

from statsmodels.tsa.holtwinters import Simple
Exp
Smoothing, Holttrain = data.iloc<:-10>test = data.iloc<-10:>model = Simple
Exp
Smoothing(np.asarray(train))fit1 = model.fit()pred1 = fit1.forecast(10)fit2 = model.fit(smoothing_level=.2)pred2 = fit2.forecast(10)fit3 = model.fit(smoothing_level=.5)pred3 = fit3.forecast(10)fig, ax = plt.subplots(figsize=(12, 6))ax.plot(train.index<150:>, train.values<150:>)ax.plot(test.index, test.values, color="gray")for p, f, c in zip((pred1, pred2, pred3),(fit1, fit2, fit3),("#ff7823","#3c763d","c")): ax.plot(train.index<150:>, f.fittedvalues<150:>, color=c) ax.plot(test.index, p, label="alpha="+str(f.params<"smoothing_level">)<:3>, color=c)plt.title("Simple Exponential Smoothing") plt.legend();

*

Holt’s Linear Smoothing

Phương pháp làm cho mịn này phù hợp với tài liệu theo xu hướng, không tuân theo chu kỳ

(1)Forecastpt+h∣t=lt+bt(1) Forecast p_t = l_t + b_t(1)Forecastpt+h∣t​=lt​+bt​

(2)lt=α∗yt+(1−α)∗lt−1(α=smoothinglevel)(2) l_t = alpha * y_t + (1-alpha) * l_t-1 (alpha = smoothing level)(2)lt​=α∗yt​+(1−α)∗lt−1​(α=smoothinglevel)

(3)bt=β∗(lt−lt−1)+(1−β)∗bt−1(β=smoothingslope)(3) b_t = eta * (l_t - l_t-1) + (1-eta) * b_t-1 (eta = smoothing slope)(3)bt​=β∗(lt​−lt−1​)+(1−β)∗bt−1​(β=smoothingslope)

from statsmodels.tsa.holtwinters import Simple
Exp
Smoothing, Holttrain = data.iloc<:-10>test = data.iloc<-10:>model = Holt(np.asarray(train))fit1 = model.fit(smoothing_level=.3, smoothing_trend=.05)pred1 = fit1.forecast(10)fit2 = model.fit(optimized=True)pred2 = fit2.forecast(10)fit3 = model.fit(smoothing_level=.3, smoothing_trend=.2)pred3 = fit3.forecast(10)fig, ax = plt.subplots(figsize=(12, 6))ax.plot(train.index<150:>, train.values<150:>)ax.plot(test.index, test.values, color="gray")for p, f, c in zip((pred1, pred2, pred3),(fit1, fit2, fit3),("#ff7823","#3c763d","c")): ax.plot(train.index<150:>, f.fittedvalues<150:>, color=c) ax.plot(test.index, p, label="alpha="+str(f.params<"smoothing_level">)<:4>+", beta="+str(f.params<"smoothing_trend">)<:4>, color=c)plt.title("Holt"s Exponential Smoothing")plt.legend();

*

Dễ thấy làm việc đây, Holt"s Linear đến ra hiệu quả tốt hơn một chút ít so cùng với SES. Dẫu vậy không thực tế do xu thế tính bằng cách thức này là hằng số không đổi sau này (tăng cho vô hạn và giảm đến vô hạn). Bởi vì vậy bạn ta nghĩ ra một giải pháp là thêm một thông số để xu hướng hội tụ trong tương lai.

from statsmodels.tsa.holtwinters import Exponential
Smoothingimport numpy as npmodel = Exponential
Smoothing(data), trend="mul", seasonal=None)model2 = Exponential
Smoothing(data), trend="mul", seasonal=None, damped=True)model._index = pd.to_datetime(train.index)fit1 = model.fit()fit2 = model2.fit()pred1 = fit1.forecast(9)pred2 = fit2.forecast(10)fig, ax = plt.subplots(2, figsize=(12, 12))ax<0>.plot(train.index<250:>, train.values<250:>)ax<0>.plot(test.index, test.values, color="gray", label="truth")ax<1>.plot(train.index<300:>, train.values<300:>)ax<1>.plot(test.index, test.values, color="gray", label="truth")for p, f, c in zip((pred1, pred2),(fit1, fit2),("#ff7823","#3c763d")): ax<0>.plot(train.index<250:>, f.fittedvalues<250:>, color=c) ax<1>.plot(train.index<300:>, f.fittedvalues<300:>, color=c) ax<0>.plot(test.index, p, label="alpha="+str(f.params<"smoothing_level">)<:4>+", beta="+str(f.params<"smoothing_trend">)<:4>+ ", damping="+str(True if f.params<"damping_trend">>0 else False), color=c) ax<1>.plot(test.index, p, label="alpha="+str(f.params<"smoothing_level">)<:4>+", beta="+str(f.params<"smoothing_trend">)<:4>+ ", damping="+str(True if f.params<"damping_trend">>0 else False), color=c)ax<0>.set_title("Damped Exponential Smoothing");ax<1>.set_title("Damped Exponential Smoothing - zoomed");plt.legend();

*

Còn phương thức Holt-Winter’s Seasonal smoothing giành cho chuỗi theo chu kỳ nhưng tôi đã đề cập lần sau.

Kết luận

Ở đây tôi sẽ không còn viết về ARIMA, các chúng ta có thể tham khảo blog của anh ý Khánh trường hợp muốn làm rõ hơn. Tổng thể và toàn diện cả bài xích tôi giới thiệu sơ qua khái niệm về chuỗi thời gian và một số phương thức làm mịn dữ liệu. Nhưng vì lười bắt buộc tôi chỉ viết mang đến đây thôi, hẹn các bạn phần sau

*

Tham khảo

1. Reviews về chuỗi thời gian

Dự báo chuỗi thời hạn là một lớp tế bào hình đặc biệt trong thống kê, kinh tế tài chính lượng và machine learning. Sở dĩ bọn họ gọi lớp mô hình này là chuỗi thời gian (time series) là vì mô hình được áp dụng trên những chuỗi đặc thù có nguyên tố thời gian. Một quy mô chuỗi thời gian thường dự báo dựa trên giả định rằng những qui giải pháp trong vượt khứ sẽ tái diễn ở tương lai. Do đó xây dựng mô hình chuỗi thời gian là bọn họ đang quy mô hóa quan hệ trong thừa khứ thân biến hòa bình (biến đầu vào) với biến phụ thuộc vào (biến mục tiêu). Dựa vào mối quan hệ nam nữ này để tham dự đoán giá bán trị trong tương lai của thay đổi phụ thuộc.

Do là dữ liệu chịu tác động bởi tính chất thời hạn nên chuỗi thời gian thường mở ra những qui luật đặc thù như : nguyên tố chu kỳ, mùa vụ và yếu tố xu hướng. Đây là số đông đặc trưng thường bắt gặp và xuất hiện thêm ở phần đông các chuỗi thời gian.

nguyên tố chu kỳ, mùa vụ là đầy đủ đặc tính lặp lại theo chu kỳ. Ví dụ như nhiệt độ trung bình các tháng trong những năm sẽ chịu ảnh hưởng bởi từng mùa xuân, hạ, thu, đông. Xuất xắc xuất nhập vào của một tổ quốc thường có chu kỳ luân hồi theo những quí.

*

Hình 1: Đồ thị về chuỗi nhiệt độ trung bình theo tháng diễn tả yếu tố mùa vụ.

yếu tố xu hướng (trend) thể hiện đà tăng trưởng hoặc sút của chuỗi vào tương lai. Chẳng hạn như lạm phạt là xu hướng chung của những nền tởm tế, bởi đó giá cả trung bình của giỏ hàng hóa cơ sở hay còn gọi là chỉ số CPI luôn luôn có xu hướng tăng và xu thế tăng này đại diện thay mặt cho sự mất giá bán của đồng tiền.

*

Hình 2: Đồ thị về yếu tố xu hướng trong chuỗi thời gian của chuỗi giá.

Các dự đoán chuỗi thời gian có tính vận dụng cao với được sử dụng rất nhiều lĩnh vực như tài bao gồm ngân hàng, chứng khoán, bảo hiểm, thương mại dịch vụ điện tử, marketing, làm chủ chính sách. Bên dưới là một vài ứng dụng của dự đoán chuỗi thời gian:

Dự báo nhu cầu thị trường nhằm lập kết hoạch sản xuất marketing cho hãng. Dự báo lợi suất gia sản tài chính, tỷ giá, giá thành hàng hóa phái sinh để tiến hành trading hiệu quả trong market risk. Dự làm giá chứng khoán, những chuỗi lợi suất hạng mục để cai quản trị hạng mục đầu tư. Dự báo giá bitcoin, giá dầu mỏ, giá bán gas,… dự đoán nhiệt độ, lượng mưa nhằm lập kế hoạch chế tạo nông, lâm, ngư nghiệp. Dự báo tác động ảnh hưởng của các nhân tố vĩ mô như lãi suất, cung tiền, đầu tư trực tiếp nước ngoài, giá thành chính phủ, lạm phát,… tác động lên tăng trưởng GDP để quản lý và điều hành nền kinh tế.

Vai trò của chuỗi thời gian rất quan trọng đặc biệt đối cùng với nền tài chính và hoạt động vui chơi của doanh nghiệp nên trong machine learning cùng thống kê gồm có ngành học nghiên cứu và phân tích chuyên sâu về chuỗi thời hạn như kinh tế lượng, định giá gia tài tài chính.

Khác cùng với các quy mô dự báo thường thì trong machine learning, các mô hình trong dự đoán chuỗi thời gian trong kinh tế lượng có những đặc thù rất riêng. Đòi hỏi phải tuân thủ nghiêm ngặt các điều khiếu nại về chuỗi dừng, nhiễu trắng với tự tương quan. Có không ít lớp quy mô chuỗi thời gian khác nhau và mỗi một lớp mô hình sẽ gồm một tiêu chuẩn chỉnh áp cơ chế thể. Bạn cũng có thể liệt kê một số mô hình phổ biến:

Mô hình ARIMA: dựa trên giả thuyết chuỗi dừng cùng phương không nên sai số không đổi. Mô hình sử dụng đầu vào đó là những biểu hiện quá khứ của chuỗi được dự báo để dự báo nó. Những tín hiệu đó bao gồm: chuỗi từ hồi qui AR (auto regression) cùng chuỗi vừa phải trượt MA (moving average). Phần lớn các chuỗi thời gian sẽ có được xu phía tăng hoặc sút theo thời gian, cho nên yếu tố chuỗi giới hạn thường ko đạt được. Trong trường đúng theo chuỗi không ngừng thì ta sẽ cần chuyển đổi sang chuỗi dừng bởi sai phân. Khi đó tham số đặc thù của quy mô sẽ bao gồm thêm nguyên tố bậc của sai phân d và quy mô được đặc tả bởi 3 tham số ARIMA(p, d, q). Mô hình SARIMA: Về thực chất đây là mô hình ARIMA tuy vậy được điều chỉnh đặc biệt để vận dụng cho đa số chuỗi thời hạn có nguyên tố mùa vụ. Như bọn họ đã biết về thực chất ARIMA đó là mô hình hồi qui đường tính nhưng quan hệ tuyến tính thường xuyên không giải thích tốt chuỗi trong trường hòa hợp chuỗi mở ra yếu tố mùa vụ. Bởi vì thế, bằng phương pháp tìm ra chu kì của qui khí cụ mùa vụ và loại trừ nó khỏi chuỗi ta sẽ dễ ợt hồi qui mô hình theo phương pháp ARIMA. Mô hình ARIMAX: là 1 trong dạng không ngừng mở rộng của model ARIMA. Mô hình cũng dựa trên giải định về mối quan hệ tuyến tính giữa quý hiếm và phương không nên trong quá khứ với giá trị bây giờ và thực hiện phương trình hồi qui đường tính được suy ra từ quan hệ trong quá khứ nhằm dự báo tương lai. Mô hình sẽ gồm thêm một vài ba biến hòa bình khác và cũng khá được xem như một quy mô hồi qui động (hoặc một vài tài liệu giờ việt điện thoại tư vấn là quy mô hồi qui động thái). Về thực chất ARIMAX tương ứng với một quy mô hồi qui đa biến hóa nhưng chiếm điểm mạnh trong dự đoán nhờ xem xét cho yếu tố tự tương quan được biểu diễn trong phần dư của tế bào hình. Nhờ vào đó nâng cao độ chủ yếu xác. Mô hình GARCH: những giả thuyết về chuỗi dừng với phương sai sai số ko đổi mọi không dễ đã có được trong thực tế. Ngược lại phương không đúng sai số biến hóa rất dễ xảy ra đối với các chuỗi tài chính, tài chính bởi thường sẽ có những sự kiện không mong đợi và cú sốc kinh tế không lường trước khiến cho biến đụng phương sai của chuỗi vắt đổi. Vào trường hợp kia nếu áp dụng ARIMA thì hay không mang lại hiệu quả cao mang lại mô hình. Các nhà kinh tế lượng với thống kê học vẫn nghĩ mang lại một lớp mô hình mà có thể dự báo được phương không đúng để kiểm soát và điều hành các thay đổi không mong mỏi đợi. Dựa trên qui hình thức của phương sai, kết quả dự báo chuỗi sẽ tốt hơn đối với trước đó.2. Mô hình ARIMA

Hiện tại cả R với python đều tư vấn xây dựng các mô hình chuỗi thời gian ARIMA, SARIMA, ARIMAX, GARCH,…. Bên trên R chúng ta có thể sử dụng các packages như forecast cùng lmtest để xuất bản các mô hình này khá dễ dàng. Đối với thống kê và các mô hình chuỗi thời hạn R đã support giỏi hơn python. Một vì sao đó là những nhà thống kê và kinh tế lượng ưu thích sử dụng R hơn. Giải đáp xây dựng quy mô ARIMA bên trên R các bạn cũng có thể xem trên ARIMA turtorial với GARCH time series model.

Bài lúc này tôi vẫn hướng dẫn các bạn sử dụng python để phát hành các mã sản phẩm ARIMA. Tuy nhiên trước tiên họ cần tìm hiểu kim chỉ nan của quy mô trước khi đi vào phần thực hành thực tế ở mục 3 với 4.

2.1. Triết lý mô hình ARIMA

Lý thuyết:Chúng ta biết rằng hầu hết các chuỗi thời gian đều có sự đối sánh tương quan giữa quý hiếm trong quá khứ cho giá trị hiện tại. Nút độ đối sánh tương quan càng béo khi chuỗi càng gần thời khắc hiện tại. Bởi vì thể quy mô ARIMA vẫn tìm biện pháp đưa vào các biến trễ nhằm mục đích tạo ra một quy mô dự báo fitting xuất sắc hơn quý giá của chuỗi.

ARIMA mã sản phẩm là viết tắt của các từ Autoregressive Intergrated Moving Average. Mô hình sẽ trình diễn phương trình hồi qui tuyến tính đa đổi mới (multiple linear regression) của các biến đầu vào (còn call là biến phụ thuộc trong thống kê) là 2 yếu tố chính:

Auto regression: Kí hiệu là AR. Đây là nhân tố tự hồi qui bao hàm tợp hợp các độ trễ của biến hóa hiện tại. Độ trễ bậc $p$ chính là giá trị thụt lùi quá khứ $p$ bước thời hạn của chuỗi. Độ trễ lâu năm hoặc ngắn trong quy trình AR phụ thuộc vào vào tham số trễ $p$. Nuốm thể, quy trình $ extAR(p)$ của chuỗi $x_t$ được màn biểu diễn như bên dưới:< extAR(p) = phi_0+phi_1x_t-1 + phi_2x_t-2 + dots + phi_p x_t-p> Moving average: Qúa trình vừa phải trượt được gọi là vượt trình di chuyển hoặc biến hóa giá trị trung bình của chuổi theo thời gian. Bởi chuỗi của họ được giả định là dừng buộc phải quá trình thay đổi trung bình hình như là một chuỗi nhiễu trắng. Qúa trình moving average vẫn tìm mối liên hệ về mặt tuyến đường tính giữa các phần tử ngẫu nhiên $epsilon_t$ (stochastic term). Chuỗi này phải là một chuỗi nhiễu trắng thỏa mãn nhu cầu các tính chất:<eginequationleft{ eginarrayl l extE(epsilon_t) & = 0 & (1) \ sigma(epsilon_t) & = alpha & (2)\ ho(epsilon_t, epsilon_t-s) & = 0, forall s di chuyển trễ - backshift operator $B$ như sau:

< extMA(q) = mu+(1+ heta_1 B + dots + heta_q B^q)epsilon_t>

Như vậy độc giả đã tưởng tượng ra moving average là gì rồi chứ? Về mặt phát minh thì đó đó là quá trình hồi qui đường tính của giá trị lúc này theo các giá trị bây giờ và vượt khứ của không nên số nhiễu white (white noise error term) thay mặt cho những yếu tố shock ngẫu nhiên, hầu hết sự thay đổi không tính trước và giải thích bởi mô hình.

Intergrated: Là quy trình đồng tích phù hợp hoặc đem sai phân. Yêu ước chung của các thuật toán trong khoảng thời gian series là chuỗi phải đảm bảo tính dừng. Hầu như các chuỗi phần đông tăng hoặc giảm theo thời gian. Vì vậy yếu tố đối sánh giữa bọn chúng chưa chắc hẳn rằng thực sự mà là vì chúng cùng tương quan theo thời gian. Khi đổi khác sang chuỗi dừng, những nhân tố ảnh hưởng thời gian được loại bỏ và chuỗi đang dễ dự báo hơn. Để chế tác thành chuỗi dừng, một phương thức đơn giản nhất là bọn họ sẽ đem sai phân. Một số trong những chuỗi tài chính còn qui trở qua logarit hoặc lợi suất. Bậc của không nên phân để tạo nên thành chuỗi dừng nói một cách khác là bậc của quá trình đồng tích đúng theo (order of intergration). Qúa trình không nên phân bậc $d$ của chuỗi được thực hiện như sau:

Sai phân bậc 1:( extI(1) = Delta(x_t) = x_t - x_t-1)

Sai phân bậc d:( extI(d) = Delta^d(x_t) = underbraceDelta(Delta(dots Delta(x_t)))_ extd times)

Thông thường xuyên chuỗi sẽ dừng sau quy trình đồng tích đúng theo $ extI(0)$ hoặc $ extI(1)$. Cực kỳ ít chuỗi chúng ta phải lấy tới không đúng phân bậc 2. Một số trường hợp bọn họ sẽ cần biến đổi logarit hoặc căn bậc 2 để chế tác thành chuỗi dừng.Phương trình hồi qui ARIMA(p, d, q) hoàn toàn có thể được trình diễn dưới dạng:

Trong đó $Delta x_t$ là quý hiếm sai phân bậc $d$ và $epsilon_t$ là những chuỗi nhiễu trắng.

Như vậy về tổng quát thì ARIMA là tế bào hình kết hợp của 2 quá trình tự hồi qui cùng trung bình trượt. Tài liệu trong quá khứ sẽ tiến hành sử dụng để dự báo dữ liệu trong tương lai. Trước khi huấn luyện mô hình, yêu cầu chuyển hóa chuỗi sang trọng chuỗi dừng bằng phương pháp lấy không đúng phân bậc 1 hoặc logarit. Trong khi mô hình cũng cần tuân hành điều kiện ngặt về sai số không tồn tại hiện tượng tự đối sánh tương quan và phần dư là nhiễu trắng. Đó là lý thuyết của kinh tế tài chính lượng. Còn theo phe phái machine learning thì tôi chỉ cần quan tâm đến làm sao để lựa lựa chọn 1 mô hình bao gồm sai số dự đoán là nhỏ tuổi nhất. Tiếp theo họ sẽ thực hiện package vnquant, một package được tôi viết nhằm hỗ trợ cộng đồng khai thác dữ liệu chứng khoán thuận tiện hơn.

3. Ứng dụng vnquant trong tích lũy dữ liệu.

3.1. Tích lũy dữ liệu

Hiện tại package vnquant đã cho phép họ thu thập được phần nhiều mã kinh doanh chứng khoán trên thị phần chứng khoán Việt Nam, ở phiên phiên bản R (package VNDS) còn tích lũy được báo cáo tài chủ yếu và dòng tài chính của doanh nghiệp. Ngoài ra vnquant còn cung ứng vẽ biểu vật dụng nến theo thời gian và phối kết hợp giữa giá chỉ và khối lượng giao dịch. Đây là một trong package cơ mà mình nghĩ là rất có lợi đối với chúng ta làm trong nghành quant trên Việt Nam. Để thiết lập package này bạn làm như trả lời trong phần read me nhé.

Xem thêm: Bộ đề thi chuyên toán vào lớp 10 môn toán chuyên hưng yên, bộ đề thi vào lớp 10 chuyên toán năm học 2021

Bây giờ chúng ta sẽ cùng lấy tài liệu chỉ số VNINDEX 30 thông qua package vnquant nào.