Python đường xu hướng đa thức

Ví dụ bạn đang nghiên cứu mối quan hệ giữa sản xuất và tổng chi phí, sau nhiều lần thử nghiệm, bạn đã có được một số dữ liệu. Do đó, vấn đề hiện nay là vẽ được đồ thị phù hợp nhất cho dữ liệu và tìm ra phương trình của nó. Trên thực tế và hướng dẫn của Học Excel Online, chúng ta có thể thêm đồ thị và công thức trong Excel một cách dễ dàng

  1. Excel 2013 hoặc các phiên bản sau đó

Giả sử bạn đã ghi lại dữ liệu thử nghiệm như hình, để vẽ đồ thị phù hợp và tìm ra phương trình (công thức) cho một loạt dữ liệu thử nghiệm trong Excel 2013, bạn có thể làm như sau

Python đường xu hướng đa thức

1. Select data table test. Trong trường hợp này, là dãy A1. B19

2. Chọn Chèn phân tán (X, Y) hoặc Biểu đồ bong bóng > Phân tán trên tab Chèn. Như hình dưới đây

Python đường xu hướng đa thức

Xem thêm. Hướng dẫn vẽ biểu đồ trong Excel 2010, 2013, 2016

3. Chọn đồ thị tán xạ, rồi nhấp vào Thêm thành phần biểu đồ > Đường xu hướng > Tùy chọn đường xu hướng khác trong tab Thiết kế

Python đường xu hướng đa thức

Python đường xu hướng đa thức

Python đường xu hướng đa thức

4. Trong bảng Định dạng Đường xu hướng, chọn Đa thức, và điều chỉnh con số Thứ tự của phần Tùy chọn Đường xu hướng, sau đó chọn Phương trình hiển thị trên Biểu đồ. Như hình dưới đây

  1. Python đường xu hướng đa thức

Và sau đó bạn sẽ vẽ được đường thị đồ phù hợp cũng như tính được phương trình như đồ thị tán xạ trong hình trên

2. Excel 2007 và 2010

Có một vài điều khác biệt trong phiên bản Excel 2007/2010 với 2013

1. Chọn bảng dữ liệu thử nghiệm, sau đó chọn Scatter > Scatter trong tab Insert

Python đường xu hướng đa thức

Python đường xu hướng đa thức

2. Chọn loại đồ thị tán xạ, nhấp vào Đường xu hướng > Tùy chọn đường xu hướng khác trong tab Bố cục. Như hình trên

3. Trong hộp thoại Định dạng Đường xu hướng, đánh dấu chọn Đa thức, số Thứ tự dựa vào dữ liệu thử nghiệm của bạn, và đánh dấu tùy chọn Phương trình hiển thị trên biểu đồ. Like after

Bạn có thấy bài viết hữu ích không? . Vui lòng chia sẻ phản hồi có giá trị của bạn và giúp tôi đối xử với bạn bằng nội dung tốt hơn trong tương lai
Lưu ý rằng bạn cũng có thể sử dụng các đối số màu sắc, độ rộng đường và kiểu đường để sửa đổi hình thức của đường xu hướng.
#add custom trendline to plot
plt.plot(x, p(x), color="purple", linewidth=3, linestyle="--")

Python đường xu hướng đa thức

ví dụ 2. Tạo đường xu hướng đa thức trong Matplotlib

Để tạo một đường xu hướng đa thức, chỉ cần thay đổi giá trị trong np. hàm polyfit()

Ví dụ: chúng ta có thể sử dụng giá trị 2 để tạo đường xu hướng bậc hai

import numpy as np
import matplotlib.pyplot as plt

#define data
x = np.array([8, 13, 14, 15, 15, 20, 25, 30, 38, 40])
y = np.array([5, 4, 18, 14, 20, 24, 28, 33, 30, 37])

#create scatterplot
plt.scatter(x, y)

#calculate equation for quadratic trendline
z = np.polyfit(x, y, 2)
p = np.poly1d(z)

#add trendline to plot
plt.plot(x, p(x))

Python đường xu hướng đa thức

Lưu ý rằng đường xu hướng bây giờ cong thay vì thẳng

Đường xu hướng đa thức này đặc biệt hữu ích khi dữ liệu của bạn thể hiện một mẫu phi tuyến tính và một đường thẳng không thực hiện tốt việc nắm bắt xu hướng trong dữ liệu

Lấy dữ liệu trên Github nếu bạn chưa có. Bạn cũng cần quay lại để lấy BacktestSA từ đây nếu chưa có, cùng với lớp DataManager

Trong chiến lược này, chúng tôi sẽ tạo ra một xu hướng thời gian đa thức cuộn, xu hướng này sẽ đưa ra dự đoán về giá cho khoảng thời gian nắm giữ được xác định trước của chúng tôi. Mô hình OLS như sau với \(t \) là thành phần thời gian

\(y = X\beta + \epsilon\)

Trong đó \(y\)  là vectơ quan sát, trong trường hợp của chúng tôi là giá của Bitcoin/Ethereum. \(\beta \)  là một vectơ hệ số. Ma trận \(X\) có dạng như bên dưới

\(X = \begin{bmatrix} 1 & t_{1} & t_{1}^2 \\ 1 & t_{2} & t_{2}^2 \\ \vdots & \vdots &\vdots \\ 1

Giảm thiểu tổng bình phương lỗi để giải quyết cho \(\beta\)

\(\beta = \underset{\beta}{\arg\min}. y - X\beta. _{2}^{2}\)

Khai triển hàm trên và lấy đạo hàm bậc nhất, w. r. t \(\beta\) , đặt thành 0 và sắp xếp lại một chút sẽ cho chúng ta phương trình bình thường.  

\(\beta = (X^TX)^{-1}X^{T}y\)

Người ta có thể lập luận rằng sau đây là một cách trực quan hơn để xem xét các phương trình trên. Hãy lấy một ví dụ chỉ với 5 quan sát, sau đó đặt một số số vào các công thức trên.  

\(\begin{bmatrix} y_{1}\\ y_{2}\\y_{3}\\y_{4}\\y_{5} \end{bmatrix} = \beta_{0} \begin{bmatrix

Vì vậy, ở trên, chúng ta có 3 hệ số \(\beta\), hãy xem một ví dụ bằng số trong đó các số được chọn cho mục đích minh họa. Vectơ ở bên trái của dấu đẳng thức là giá của Bitcoin tính bằng USD, vectơ 1 dành cho giao điểm chặn, vectơ 1-5 là thành phần thời gian tuyến tính và vectơ được nhân với \(\beta_{2} . Vì vậy, tất cả những gì chúng ta cần làm là giải tìm \(\beta_{0}, \beta_{1}\ và\ \beta_{2}\)

\(\begin{bmatrix} 10000\\ 10200\\10900\\11900\\13400 \end{bmatrix} = \beta_{0} \begin{bmatrix} 1 \\ 1\\1\\1\\1 \

Trong Python

import numpy as np
import matplotlib.pyplot as plt
np.set_printoptions(precision=3,suppress=True)

y = np.array([10000,10200,10900,11900,13400]).reshape(-1,1)

t = np.arange(len(y))
X = np.c_[np.ones_like(y), t, t**2]

print(y)
print(X)
____3____4

Giải vectơ beta bằng phương trình bình thường. \(\beta = (X^TX)^{-1}X^{T}y\)

betas = np.linalg.inv(X.T@X)@X.T@y
Out:
array([[9994.29],
       [  21.43],
       [ 207.14]])

\(\beta_{0} = 9994. 29 , \ \beta_{1} = 21. 43,\ \beta_{2} = 207. 14\)

Sau đó, chúng ta có thể sử dụng các hệ số từ trên để đưa ra dự đoán mới như sau

\(\hat{y} =X\beta \)

\(\epsilon = y - \hat{y}\)

Hãy tạo hai mảng, một cho các dự đoán trong mẫu và một cho các dự đoán ngoại suy.  


insample = X@betas
t_new = np.arange(9).reshape(-1,1)
X_test = np.c_[np.ones_like(t_new), t_new, t_new**2]

out_sample = X_test@betas

plt.plot(t_new, out_sample,label='Extrapolated Path',linestyle=':',linewidth=3,color='black')
plt.plot(insample ,label='Insample Fit',linewidth=3,color='red')
plt.plot(y, marker='o',linestyle="None",label='True Values',color='blue')
plt.xlabel('Periods')
plt.ylabel('Price in $')
plt.legend(loc='best')

Python đường xu hướng đa thức

Về cơ bản, chúng ta sẽ chọn từ đường đứt nét màu đen, để có được dự đoán cho tương lai. Vì chơi với các đa thức có thể dẫn đến các giá trị cực đoan/không thực tế, nên có lẽ tốt nhất là chọn khoảng thời gian xem trước càng nhỏ càng tốt.  

Để cố gắng dự đoán chuyển động phi tuyến tính trong tương lai tiền điện tử, chúng tôi sẽ chỉ chọn những dự đoán cực đoan nhất để cố gắng dự đoán và kiếm lợi nhuận từ. Đây là nơi diễn ra một chút rình mò dữ liệu

Python đường xu hướng đa thức

Đường cong màu đỏ, trông rất giống phân phối Laplace, hiển thị phân phối thay đổi dự đoán so với thay đổi nhận ra (màu xanh lam). Tôi đã quyết định thử dự đoán các mặt sấp, tôi đã xác định giới hạn khá phi khoa học là -+ 3% (Đối với khung thời gian hàng giờ). Vì vậy, trong điều kiện vào lệnh dưới ngưỡng long và short là 3%. Chúng tôi muốn có thể vượt qua ngưỡng dưới dạng đối số khi chúng tôi thử các khung thời gian khác nhau.  

DÀI

1. if \(\frac{predicted}{close}-1 \geq \text Threshold \ \text long\)

NGẮN

-1. if \(\frac{predicted}{close}-1 \leq \text Threshold \ \text short\)

Cho đến thời điểm này, chúng tôi đã sử dụng các rào cản đối xứng cho các mục tiêu/điểm dừng (tại đây nếu bạn chưa xem phần về các rào cản). Trong phần này, chúng tôi cũng sẽ thêm khả năng thay đổi điều này. Ví dụ. trong thời gian dài, chúng ta có thể có giá mục tiêu là 4% và mức dừng là 2%, v.v.  

Một mẫu nhỏ của các kết quả được hiển thị trong video

Tôi quyết định sử dụng cửa sổ xem lại cố định 24 giờ cho tất cả các khung thời gian hiển thị trong video. Do đó đối với dữ liệu hàng giờ. nhìn lại = 24, 30 phút. nhìn lại = 48, v.v.  

Có vẻ như chúng tôi đã nhận được một số kết quả thú vị trên các khung thời gian 5 phút, 15 phút, 30 phút và 60 phút. Để tiết kiệm dung lượng, tôi chỉ bao gồm các kết quả từ khung thời gian 60 phút cho cả Ethereum và Bitcoin. Xem video để biết thêm chi tiết

Bitcoin

Ngay cả 2 % Rào cản đối với Điểm dừng và Mục tiêu. 245 giao dịch

Ngưỡng Dài & Ngắn là -+3%

Python đường xu hướng đa thức

rào cản không đồng đều. Mục tiêu dài = 3%, Dừng dài = 2% , Mục tiêu ngắn = 4% , Dừng ngắn = 2. 5%

(Các con số trên được chọn để chỉ ra rằng có thể áp dụng các rào cản không đồng đều)

Python đường xu hướng đa thức

Có vẻ như chúng ta đã làm tệ hơn khi áp dụng các rào cản không đồng đều cho các mục tiêu và điểm dừng. Có một số cách thú vị mà bạn có thể xác định những rào cản này. Ví dụ, trong Những tiến bộ trong học máy tài chính của Marcos Lopez De Prado, ông đặt các rào cản như một chức năng của sự biến động luân phiên.  

Ethereum

Ngay cả 2 % Rào cản đối với Điểm dừng và Mục tiêu. 332 giao dịch

Ngưỡng Long & Short là -+3% (Có lẽ nên đặt cao hơn vì Eth dễ bay hơi hơn)

Python đường xu hướng đa thức

rào cản không đồng đều. Mục tiêu dài = 3%, Dừng dài = 2% , Mục tiêu ngắn = 4% , Dừng ngắn = 2. 5%

Python đường xu hướng đa thức

Mặc dù chúng tôi đưa ra một số giả định khá phi thực tế, cùng với việc bỏ qua chi phí giao dịch, nhưng chiến lược này có vẻ khá thú vị.