前提・実現したいこと
訓練用データとして、4,3,2,1日前の株価を用い、SVMで当日の株価を予測するコードです。
4日分の変化率から、変化率+(価格上昇)なら1、-(価格下落)なら0という正解値を使っています。
これを、当日ではなく1日後、2日後などn日後の予測を実現させたいです。
該当のソースコード
Python
1from sklearn import svm 2from sklearn.model_selection import train_test_split 3 4with open("BTC1D_20200101_20211031.txt", "r") as f: 5 btc_file_data = f.read() # ファイルの読み込み 6btc_file_data = btc_file_data.split() # 改行で分割しリストに格納 7btc_data = [] 8for btc_string in btc_file_data: 9 btc_data.append(float(btc_string)) # 小数に変換した上でリストに格納 10 11# データの確認 12print("BTC価格", btc_data) 13n_price = len(btc_data) 14print("BTC価格データの数", n_price) 15 16# BTC価格の変化率 17ratio_data = [] 18for i in range(1, n_price): 19 ratio_data.append(float(btc_data[i] - btc_data[i-1]) / float(btc_data[i-1])) 20print("BTC価格の変化率", ratio_data) 21n_ratio = len(ratio_data) 22print("BTC価格の変化率データの数", n_ratio) 23 24# 前日までの4連続の変化率のデータ 25successive_data = [] 26answers = [] # 正解値 価格上昇: 1 価格低下: 0 27for i in range(4, n_ratio): 28 successive_data.append([ratio_data[i-4], ratio_data[i-3], ratio_data[i-2], ratio_data[i-1]]) 29 if ratio_data[i] > 0: 30 answers.append(1) 31 else: 32 answers.append(0) 33print("4日連続の変化率", successive_data) 34print("正解", answers) 35 36x_train, x_test, t_train, t_test = train_test_split(successive_data, answers, shuffle=False) # シャッフルしない 37 38clf = svm.SVC() # サポートベクターマシーン 39clf.fit(x_train, t_train) # 訓練 40 41y_test = clf.predict(x_test) # テスト用データで予測 42 43# 末尾の10個を比較 44print ("正解:", t_test[-10:]) 45print ("予測:", y_test[-10:]) 46 47# 正解率の計算 48correct = 0.0 49wrong = 0.0 50for i in range(len(t_test)): 51 if y_test[i] == t_test[i]: 52 correct += 1.0 53 else: 54 wrong += 1.0 55print ("正解率:", str(correct / (correct+wrong) * 100), "%")
試したこと
n-1日前までデータを使い、訓練済みのモデルを使って予測したらどうか、とのことですが、その方法をご教授いただけると幸いです。
拙い質問で大変申し訳ございませんが、何卒よろしくお願い申し上げます。
補足情報(FW/ツールのバージョンなど)
Google Corroboratory
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。