Logo Zephyrnet

Dự đoán giá tiền điện tử bằng mô hình hồi quy

Ngày:

 

Tính đến tháng 2022 năm 2, thị trường tiền điện tử đạt hơn 1 nghìn tỷ đô la [3] nhưng vẫn cực kỳ biến động, trước đó đã đạt 2021 nghìn tỷ đô la vào tháng 18 năm 19. Sự biến động tương tự cũng được thấy trong các loại tiền điện tử riêng lẻ, chỉ trong tháng qua Etherium và Bitcoin đã có giảm lần lượt hơn 18,000% và 2022%. Số lượng tiền tệ mới xuất hiện trên thị trường cũng ngày càng tăng, với hơn 2 loại tiền điện tử tồn tại tính đến tháng XNUMX năm XNUMX [XNUMX]. 

Sự biến động này là nguyên nhân khiến việc dự đoán tiền điện tử dài hạn trở nên khó khăn hơn. Trong bài viết này, chúng ta sẽ tìm hiểu cách bắt đầu dự đoán tiền điện tử bằng mô hình hồi quy tuyến tính. Chúng ta sẽ xem xét các dự đoán trong một số khoảng thời gian trong khi sử dụng các tính năng mô hình khác nhau, như giá mở cửa, giá cao, giá thấp và khối lượng. Các loại tiền điện tử được xem xét trong bài viết này bao gồm Bitcoin và Etherium có uy tín hơn cũng như những loại vẫn còn ở giai đoạn khá sớm là Polkadot và Stellar.

Trong bài viết này, chúng tôi sẽ sử dụng hồi quy tuyến tính bội. Các mô hình hồi quy được sử dụng để xác định mối quan hệ giữa các biến bằng cách khớp một đường xuyên qua dữ liệu. Hồi quy tuyến tính đơn giản là mô hình được sử dụng để dự đoán một biến phụ thuộc (ví dụ: giá đóng cửa của tiền điện tử) bằng cách sử dụng một biến độc lập (chẳng hạn như giá mở cửa), trong khi hồi quy tuyến tính bội có tính đến một số biến độc lập. 

Dữ liệu chúng tôi sẽ sử dụng đến từ CoinCodex [3] và cung cấp thông tin về giá mở cửa, giá cao, giá thấp và giá đóng cửa hàng ngày cũng như khối lượng và vốn hóa thị trường. Nhiều sự kết hợp khác nhau của các tính năng đã được thử nghiệm để tạo ra các mô hình với các dự đoán cũng được thực hiện theo khoảng thời gian hàng ngày và hàng tuần. Gói python sklearn được sử dụng để huấn luyện các mô hình và giá trị R2 được sử dụng làm thước đo độ chính xác của mô hình, với 1 biểu thị một mô hình hoàn hảo. 

Dữ liệu được sử dụng và các mô hình được tạo ra đã được tải lên một Dự án lớp và có thể được tải xuống để sử dụng và điều tra thêm. Tất cả các kết quả và đồ thị tương ứng cũng có thể được tìm thấy trong Dự án lớp. Trong bài viết này, chúng ta sẽ thảo luận về các phần mã được sử dụng để triển khai các mô hình. Bạn có thể truy cập mã đầy đủ trong phần này sổ tay cộng tác

Để khởi tạo dự án và truy cập dữ liệu cũng như mô hình, bạn có thể chạy:

lớp nhập khẩu
lớp.đăng nhập()
layer.init("dự đoánCryptoPrices")

Dữ liệu đã được tải lên dự án Layer cho từng bộ dữ liệu trong số 4 bộ dữ liệu tiền điện tử (Bitcoing, Ethereum, Polkadot và Stellar) bằng cách xác định các hàm được sử dụng để đọc dữ liệu và chú thích chúng bằng bộ trang trí tập dữ liệu và tài nguyên. 

@dataset("bitcoin")
@resources(path="./data")
chắc chắn getBitcoinData():
    trả về pd.read_csv("data/bitcoin.csv")

layer.run([getBitcoinData])

Bạn có thể chạy các lệnh sau để truy cập bộ dữ liệu và lưu chúng vào khung dữ liệu gấu trúc

layer.get_dataset("bitcoin").to_pandas()
layer.get_dataset("ethereum").to_pandas()
layer.get_dataset("polkadot").to_pandas()
layer.get_dataset("stellar").to_pandas()

Dự đoán hàng ngày

Bộ mô hình hồi quy bội đầu tiên được xây dựng để dự đoán giá theo từng khoảng thời gian hàng ngày. Giá đóng cửa được dự đoán đầu tiên bằng cách sử dụng giá mở cửa, giá thấp và giá cao vào ngày hôm đó. Giá hàng ngày trong suốt 1 năm được sử dụng với tỷ lệ phân chia thử nghiệm tàu ​​là 75%-25%. Hàm dưới đây được sử dụng để huấn luyện mô hình cho một tập dữ liệu nhất định.

def runNoVolumePrediction(bộ dữ liệu):

    # Xác định tham số
    # test_size: tỷ lệ dữ liệu được phân bổ để thử nghiệm
    # Random_state: đảm bảo mỗi lần phân chia đoàn tàu thử nghiệm giống nhau để đảm bảo khả năng tái tạo

    tham số = {
      "kích thước thử nghiệm": 0.25,
      "trạng thái ngẫu nhiên": 15,
    }

    # Ghi lại các tham số
    # layer.log(tham số)
    # Đang tải tập dữ liệu từ Lớp
    df = layer.get_dataset(dataset).to_pandas()
    df.dropna(inplace=True)

    # Bỏ các cột mà chúng tôi sẽ không sử dụng để dự đoán giá đóng cửa
    dfX = df.drop(["Đóng", "Ngày", "Khối lượng", "Vốn hóa thị trường"], axis=1)

    # Chỉ lấy cột giá đóng cửa
    dfy = df["Đóng"]

    # Chia đoàn tàu thử nghiệm (có cùng trạng thái ngẫu nhiên)
    X_train, X_test, y_train, y_test = train_test_split(dfX, dfy, test_size=parameters["test_size"], Random_state=parameters["random_state"])

    # Lắp mô hình hồi quy tuyến tính bội với dữ liệu huấn luyện
    bộ hồi quy = LinearRegression()
    hồi quy.fit(X_train,y_train)

    # Đưa ra dự đoán bằng dữ liệu thử nghiệm
    dự đoán_y = hồi quy.predict(X_test)

    # .score trả về hệ số xác định R² của dự đoán
    layer.log({"Điểm dự đoán :":regressor.score(X_test,y_test)})

    # Ghi hệ số tương ứng với từng biến
    coeffs = hồi quy.coef_
    layer.log({"Hệ số giá mở cửa":coeffs[0]})
    layer.log({"Coeff giá thấp":coeffs[1]})
    layer.log({"Coeff giá cao":coeffs[2]})

    # Vẽ đồ thị các giá trị dự đoán so với giá trị thực tế
    plt.plot(y_test,predict_y, "*")
    plt.ylabel('Dự đoán giá đóng cửa')
    plt.xlabel('Giá đóng cửa thực tế')
    plt.title("{} dự đoán giá đóng cửa".format(dataset))
    plt.show()

    #Ghi lại cốt truyện
    layer.log({"plot":plt})
    trả về biến hồi quy

Hàm đang chạy với trình trang trí mô hình để lưu mô hình vào dự án Layer như hiển thị bên dưới.

@model(name='bitcoin_prediction')
chắc chắn bitcoin_prediction():
    trả về runNoVolumePrediction("bitcoin")

layer.run([bitcoin_prediction])

Để truy cập tất cả các mô hình được sử dụng trong nhóm dự đoán này, bạn có thể chạy mã bên dưới.

layer.get_model("bitcoin_prediction")
layer.get_model("ethereum_prediction")
layer.get_model("polkadot_prediction")
layer.get_model("stellar_prediction")

Bảng 1 bên dưới tóm tắt số liệu thống kê R2 cho 4 loại tiền điện tử sử dụng mô hình này.
 
 

Thống kê R2 cho 4 loại tiền điện tử sử dụng
Bảng 1: Độ chính xác của dự đoán giá đóng cửa tiền điện tử sử dụng giá mở cửa, giá thấp và giá cao vào ngày đó

 

Các biểu đồ bên dưới hiển thị các giá trị được dự đoán so với giá trị thực của các loại tiền tệ hoạt động tốt nhất và kém nhất là Polkadot và Stellar (Hình 1a và 1b).

 

Stellar dự đoán giá đóng cửa
Hình 1a: Stellar dự đoán giá đóng cửa so với giá đóng cửa thực sự trong ngày bằng cách sử dụng các đặc điểm giá mở cửa, giá thấp và giá cao

 

Polkadot dự đoán giá đóng cửa
Hình 1b: Polkadot dự đoán giá đóng cửa so với giá đóng cửa thực sự trong ngày bằng cách sử dụng các đặc điểm giá mở cửa, giá thấp và giá cao

 

Từ biểu đồ và giá trị R2, chúng ta có thể thấy rằng mô hình hồi quy tuyến tính sử dụng giá mở cửa, giá thấp và cao là rất chính xác cho cả 4 loại tiền tệ, bất kể mức độ trưởng thành của chúng. 

Tiếp theo, chúng tôi điều tra xem việc thêm âm lượng có cải thiện mô hình hay không. Khối lượng tương ứng với tổng số giao dịch diễn ra trong ngày hôm đó. Điều thú vị là sau khi điều chỉnh các mô hình hồi quy sử dụng giá mở cửa, giá thấp và giá cao cũng như khối lượng, kết quả gần như giống hệt nhau. Bạn có thể truy cập các mô hình bitcoin_prediction_with_volume, ethereum_prediction_with_volume, polkadot_prediction_with_volume và Stellar_prediction_with_volume trong dự án Lớp. Điều tra sâu hơn cho thấy hệ số cho biến khối lượng là 0 trên 4 loại tiền điện tử. Điều này cho thấy khối lượng giao dịch của tiền điện tử không phải là một yếu tố dự báo tốt về giá của nó vào ngày hôm đó.

Dự đoán hàng tuần

Trong mô hình tiếp theo, chúng tôi xem xét việc dự đoán giá cuối tuần bằng cách sử dụng dữ liệu từ giá mở cửa của tuần đó vào Thứ Hai cùng với mức giá thấp và cao trong tuần đó. Đối với mô hình này, dữ liệu trong 5 năm qua đã được sử dụng cho Bitcoin, Ethereum và Stellar. Đối với Polkadot, chỉ mới ra mắt vào năm 2020, tất cả dữ liệu lịch sử đã được sử dụng.
Sau khi tải xuống dữ liệu, giá thấp và giá cao cho mỗi tuần được tính toán và giá mở cửa và đóng cửa trong tuần được ghi lại. Những bộ dữ liệu này cũng có thể được truy cập trên Lớp bằng cách chạy:

layer.get_dataset("bitcoin_5Years").to_pandas()
layer.get_dataset("ethereum_5Years").to_pandas()
layer.get_dataset("polkadot_5Years").to_pandas()
layer.get_dataset("stellar_5Years").to_pandas()

Một lần nữa, tỷ lệ phân chia thử nghiệm đào tạo 75%-25% đã được sử dụng và mô hình hồi quy tuyến tính bội được trang bị bằng cách sử dụng giá mở cửa, giá cao nhất và giá thấp nhất trong tuần. Các mô hình cũng có thể được truy cập trên dự án Layer. Số liệu R2 một lần nữa được sử dụng để so sánh với các kết quả được hiển thị trong Bảng 2 bên dưới.

 

Độ chính xác của dự đoán giá đóng cửa tiền điện tử sử dụng giá mở cửa, giá thấp và giá cao
Bảng 2: Độ chính xác của dự đoán giá đóng cửa tiền điện tử sử dụng giá mở cửa, giá thấp và giá cao

 

Độ chính xác của các mô hình khi dự đoán với dữ liệu trong suốt một tuần kém hơn một chút so với khi dự đoán trong một ngày, tuy nhiên, bản thân độ chính xác vẫn rất cao. Ngay cả mô hình hoạt động kém nhất đối với tiền điện tử Stellar cũng đạt được điểm R2 là 0.985. 

Nhìn chung, các mô hình hồi quy tuyến tính sử dụng giá mở cửa, giá thấp và giá cao làm đặc điểm hoạt động rất tốt trong cả khoảng thời gian hàng ngày và hàng tuần. Phần mở rộng tự nhiên của các mô hình này sẽ là xem xét dự đoán sâu hơn về tương lai, chẳng hạn như sử dụng dữ liệu của tuần này để dự đoán giá vào tuần tới.

 
[1] https://fortune.com/2022/03/02/crypto-market-cap-2-trillion/#:~:text=As%20of%2010%3A15%20a.m.,when%20it%20topped%20%243%20trillion.

[2] https://www.investopedia.com/tech/most-important-cryptocurrencies-other-than-bitcoin/#:~:text=One%20reason%20for%20this%20is,communities%20of%20backers%20and%20investors.

[3] https://coincodex.com/crypto/stellar/histocal-data/

 
 
Eleonora Shantsila là một kỹ sư phần mềm full stack làm việc tại một công ty khởi nghiệp về sự kiện có tên Lounge, trước đây từng làm kỹ sư full stack trong Dịch vụ Tài chính. Eleonora có nền tảng về Toán học (Cử nhân từ Đại học St Andrews) và Khoa học tính toán (MS từ Đại học Harvard) và thích làm việc trên các dự án khoa học dữ liệu trong thời gian rảnh rỗi. Thoải mái để kết nối trên LinkedIn.
 

tại chỗ_img

Tin tức mới nhất

tại chỗ_img

Trò chuyện trực tiếp với chúng tôi (chat)

Chào bạn! Làm thế nào để tôi giúp bạn?