質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1010閲覧

SVMの株価予測で、当日ではなくn日後の予測を行いたいです。

rpeusnecth

総合スコア0

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2021/12/10 06:22

前提・実現したいこと

訓練用データとして、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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

n日後の結果が欲しいとのことですが,n日ずらして当日を正解にすれば元のソースを少し変更するだけで可能では?

学習データ正解備考
4,3,2,1日前の変化量1日前と当日との変化既にある
4,3,2,1日前の変化量1日前とn日後との変化欲しいもの
n+4,n+3,n+2,n+1日前の変化量n+1日前と当日との変化欲しいものをn日スライド

投稿2022/10/11 14:20

ujimushi_sradjp

総合スコア2152

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問