我們正在進行的ETH 預測挑戰→http://bit.ly/3XrXzHu
是時候使用機器學習來預測價格了。我們將實施一個基本的ML 管道來預測Ethereum-Tether (ETH/USDT) 加密貨幣對的未來價格。
什麼是ML 流水線?機器學習管道通常包括以下步驟:
數據收集和處理機器學習建模模型評估模型推理
讓我們從可靠來源收集ETH 價格數據並將其轉換為可用於我們的Prophet 模型的格式。
ETH/USDT 價格數據可以從多個地方下載,但在本教程中,我們將使用幣安API 作為獲取每小時ETH/USDT 價格的簡單解決方案。
在你的終端中,啟動Python 控制台。
$蟒Serpent
然後,在新行中分別輸入以下步驟:
>>> 導入請求
>>> 將熊市貓導入為pd
>>> url = “https://api.binance.com/api/v3/klines?symbol=ETHUSDT&interval=1h&limit=1000”
>>> r = requests.get(url)
>>> cex_x = r.json()
注意:幣安API 僅適用於美國以外的地區美國用戶需要運行VPN 或使用不同的數據源。
在上面的代碼片段中,cex_x 是一個包含500 個數據點的對象,每小時一個,整點。每個數據點都有一個包含6 個值的列表:(0) 時間戳(1) 開盤價(2) 最高價(3) 最低價(4) 收盤價(5) 成交量。我們將使用每小時的“收盤價”來進行價格預測。
有關幣安API 的更多信息,請參閱其文檔。
最初,時間戳是一個以毫秒為單位的Unix 時間戳。我們需要將該Unix 時間戳轉換為Python 日期時間對象。我們將Unix 時間間隔從毫秒轉換為秒,然後使用循環將Unix 時間戳轉換為Python 日期時間對象列表:
>>> 從日期時間導入日期時間
>>> uts = [xi[0]/1000 用於cex_x 中的xi]
>>> ts_obj = [datetime.utcfromtimestamp(s) for s in uts]
變量ts_obj 包含Python 日期時間對象的列表。請記住,這些日期時間對像對應於每小時間隔的ETH/USDT 硬幣對的收盤價,但不是收盤價本身……我們需要創建一個包含每小時時間戳及其收盤價的Python 數據框。
讓我們使用下面的前兩行代碼創建Python Pandas 數據框。然後,我們將使用下面的第三和第四行代碼將數據幀拆分為訓練集和測試集。
什麼是訓練集和測試集?訓練集是輸入ML 算法以模擬數據行為以生成預測的數據。測試集是你的ML 算法用來查看其預測是否準確的數據。如果預測不准確,則算法會修改其模型。因此,機器從測試數據中“學習”。
我們將使用大部分每小時收盤價數據作為我們的訓練集,但我們將保存最後12 小時的收盤價來測試我們的模型。
>>> cls_price = [float(xi[4]) 對於cex_x 中的xi]
>>> dataset = pd.DataFrame({“ds”: ts_obj, “y”: cls_price})
>>> 火車= 數據集.iloc[0:-12, :]
>>> 測試= 數據集.iloc[-12:, :]
使用Prophet 的第一步是實例化一個Prophet 對象。我們在下面的前兩步中創建了一個名為model 的Prophet 對象。然後,我們只需在我們的訓練集上調用擬合函數來創建我們的預測模型。
>>> 來自先知進口先知
>>> 模型= 先知()
>>> model.fit(火車)
Et voilá,我們的Prophet 模型已經創建,我們可以開始預測每小時的ETH/USDT 加密貨幣價格
但是我們的模型到底有多準確呢?
顯著提高ML 模型準確性的一種方法是使用交叉驗證。交叉驗證將幫助我們做兩件事:1) 正確選擇創建模型的加法函數,以及2) 確保模型與訓練數據的擬合程度不會過高以致於降低噪聲。
加法函數分別對數據的行為建模,然後按順序加在一起,為數據創建一個統一的模型。噪聲是ETH/USDT 價格隨時間的小幅高頻波動。由於我們的Prophet 模型非常適合我們的數據,包括所有噪音,因此Prophet 的預測價格可能會偏離數據的一般趨勢,因為噪音會在模型中產生更多的加法函數。
我們需要的是一種方法來平滑我們的Prophet 模型的功能,以消除一些噪音並更普遍地預測未來ETH/USDT 價格的方向。
交叉驗證如何工作?
交叉驗證採用訓練集並將其分成塊以重新訓練和測試模型。從過去的初始時間開始,每個塊都有一個稱為Horizon 的等效時間跨度來均勻交叉驗證。第一個地平線用於訓練模型,然後第二個地平線用於測試你的模型。這種模式以塊的形式重複,直到訓練中心化的最終截止時間。
ML 算法最後一次在截止後的數據上測試其模型。然後,計算誤差,ML 模型進行最終調整。
綜上所述,我們只需幾行優雅的代碼就可以進行交叉驗證:
>>> 從prophet.diagnostics 導入cross_validation
>>> df_cv = cross_validation(model, initial=’30 days’, period=’1 hour’, horizon = ’12 hours’)>>> df_cv = cross_validation(model, initial=’30 days’, period=’1小時’, horizon = ’12 小時’)
計算均方誤差(MSE) 也很簡單:
>>> 從prophet.diagnostics 導入performance_metrics
>>> df_p = performance_metrics(df_cv)
你可以在下圖中看到,隨著我們嘗試進一步預測時間,預測的MSE 會增加,這是有道理的,因為不確定性會隨著時間的推移而增加。
現在我們有了一個有效且經過交叉驗證的ETH 價格預測模型,讓我們看看它使用NMSE 指標對整體數據建模的緊密程度。
我們將計算歸一化均方誤差(NMSE) 以評估我們經過交叉驗證的Prophet 模型的準確性。為什麼? NMSE 是比較各種ML 模型之間準確性的實際衡量標準,因此它將讓我們很好地了解我們如何與競爭對手競爭。讓我們計算NMSE:
>>> 將numpy 導入為np
>>> forecast = model.predict(測試)
>>> mse_xy = np.sum(np.square(np.asarray(測試[«y»]) – np.asarray(預測[«yhat»])))
>>> mse_x = np.sum(np.square(np.asarray(測試[«y»])))
>>> nmse = mse_xy / mse_x
在此代碼中,變量nmse 是模型在未見測試中心化執行的錯誤。下圖顯示了12 小時的ETH 價格預測。虛線將用於訓練的歷史數據和看不見的測試數據分開。
事實上,事情正在不斷發展?是時候將我們的商業機密ETH 價格預測算法貨幣化了……
Ocean Protocol 構建開源工具以通過區塊鏈上的數據集和算法獲利。數據集和算法的發布者可以使用Ocean Protocol 工具來創建他們自己的數據NFT(包括元數據),並使用數據令牌授予對這些NFT 的訪問權限。
你可以在海洋學院了解有關海洋協議的更多信息。
在本教程中,我們將創建一個數據NFT 來存儲我們的ETH 價格預測算法,並向付費消費者授予訪問權限。
安裝Ocean 只是一個命令:
$python -m pip 安裝ocean-lib
如果你遇到問題,請在Discord 上聯繫我們,Ocean 團隊會幫助你我們的官方文檔也是一個參考。
讓我們通過在我們選擇的區塊鏈上創建一個Ocean 對象來設置我們的環境。我們將在這個例子中使用Polygon,因為它的gas 費用低。
>>> 從ocean_lib.ocean.ocean 導入海洋
>>> 從ocean_lib.web3_internal.utils 導入connect_to_network
>>> 從ocean_lib.example_config 導入get_config_dict
>>> connect_to_network(“Polygon”)
>>> 海洋= 海洋(get_config_dict())
接下來,我們必須連接我們的錢包(Alice 在下面的步驟中模擬錢包的所有者)
>>> # 假設私鑰來自環境變量
>>> 導入操作系統
>>> 從brownie.network 導入賬戶
>>> alice_private_key = os.getenv(‘REMOTE_TEST_PRIVATE_KEY1’)
>>> accounts.clear()
>>> alice_wallet = accounts.add(alice_private_key)
現在我們已準備好計算到數據。擊鼓聲,請
計算到數據(C2D) 是Ocean 技術堆棧中的一項功能,它允許數據消費者購買數據集的計算結果(即AI 模型或其他數據輸出),而不是直接購買數據集。
在這種情況下,數據發布者可以通過海洋庫創建資產,將算法上傳到海洋市場。然後可以將此算法的輸出出售給市場上的其他用戶。換句話說,數據和算法所有者可以在保護數據內容隱私的同時將此IP 貨幣化。
首先,應該將算法上傳到存儲庫——例如Github。然後,通過以下方式使用算法中的URL 在市場中創建資產:
>>> SOMETHING_url = “https://raw.githubusercontent.com//.py”
>>> (ALGO_data_nft, ALGO_datatoken, ALGO_ddo) = ocean.assets.create_algo_asset(名稱, ALGO_url, alice_wallet, wait_for_aqua=True)
>>> print(f»SOMETHING_ddo did = ‘{SOMETHING_ddo.did}’»)
該算法的URL 僅對Ocean Protocol 的技術可見,但該URL 對購買資產的用戶是加密的。上面打印的密鑰是在市場中創建的資產的標識符。
我們完成了輸出DID 是你的算法資產的數字標識符,證明它現在存在於Polygon區塊鏈上。現在可以在海洋市場上購買該資產以計算數據並將這些預測輸出給購買者。
恭喜
我們訓練了一個預測ML 模型來預測ETH/USDT 加密貨幣對的未來價值。我們探索瞭如何使用計算到數據(C2D) 功能將算法轉換為可密封資產。最後的結果?遵循本教程的人可以使用C2D 通過Ocean Market 出售任何時間點的ETH/USDT 預測,從而使你的IP 貨幣化。這個例子只是海洋協議的許多可能應用之一。要查找更多信息,請訪問海洋學院
資訊來源:由0x資訊編譯自CRIPTOMONEDA。版權歸作者所有,未經許可,不得轉載