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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python

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

Q&A

解決済

1回答

570閲覧

Pythonの線形回帰での予測値の算出方法

es_1938

総合スコア8

Python

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

0グッド

2クリップ

投稿2018/05/03 03:37

Pythonの線形回帰モデルで、為替レート(米ドル/円)の予測をしようとしています。
関連する株価指標などをもとに、予測値を算出するモデルを作成しました。

ソースコードは以下の通りです。

from sklearn.linear_model import LinearRegression feature_cols = ["USDJPY_High", "USDJPY_Low", "US_10year_government_bond_yield", "TOPIX_Close", "Nikkei225_Close", "USDollarIndex_Price"] X = fx2[feature_cols] Y = fx2.USDJPY_Close lr = LinearRegression() from sklearn.cross_validation import train_test_split X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.4, random_state=3) lr.fit(X_train, Y_train) Y_pred = lr.predict(X_test)

元のデータセットは、4/5/2018のレートが最新です。

イメージ説明

ここから20日間分の予測値を算出し、グラフ化したいのですが、
どのようなコードを書けば良いのかわかりません。
ご存知の方がいらっしゃれば教えていただけないでしょうか。

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

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

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

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

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

tachikoma

2018/05/03 03:43

このアプローチで20日間の予測って、未知の未来のレート(feature_col)を使って、未知の未来のレート(USDJPY_Close)を予測する、というのをやろうとしてるんですか?
es_1938

2018/05/03 05:28

4/10/2015から4/5/2018まで3年分のデータを使って、4/6/2018から20日分のレートを予測値として算出したいと思っています。そのうえで、実際のレートとどのくらい乖離しているか検証するつもりです。
guest

回答1

0

ベストアンサー

今の予測モデルは
・USDJPY_High
・USDJPY_Low
・US_10year_government_bond_yield
・TOPIX_Close
・Nikkei225_Close
・USDollarIndex_Price
を使って為替レートを予測するものなので、4/6/2018から20日分のこれらのデータをインプットに予測することになります。したがって、tachikomaさんのいうようにこれらのデータがない未来において為替レートを予測することは、モデルそのものを変えない限り不可能です。

具体的にいうと、時系列分析と呼ばれる方法論をもとにした予測モデルに取り組む必要があります。pythonだとstatsmodelに時系列分析に必要な関数が実装されているので、それらを使うといいかと思います。あるいは、Facebookが開発・公開したfbprephetも結構使い勝手がいいのでお勧めです。少し凝ったモデルにしたいのであれば、tensorflowをつかってRNNを実装するのもいいかと思います。

投稿2018/05/03 06:41

R.Shigemori

総合スコア3376

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

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

es_1938

2018/05/03 06:47

ご回答ありがとうございます。 >pythonだとstatsmodelに時系列分析に必要な関数が実装されているので、それらを使うといいかと思います。 こちら、具体的にどのようなコードを書けばいいかを示す参考資料があれば教えていただけないでしょうか。Pythonや機械学習についてはまだ初心者なので、できるだけ簡単にできる方法で進めたいと思います。よろしくお願いします。
R.Shigemori

2018/05/03 07:21

質問から時系列モデルと線形回帰モデルの相違がわかっていないように思えるので、まず時系列モデルの考え方とモデルの種類(ARMA・ARIMA・SARIMAX)を理解するところから始めないとコードにできないと思います。とりあえず、何でもいいので時系列分析入門と書いてある書籍を入手してベースとなる知識を蓄積することをお勧めします。最近、ぱらぱら見ていて良書と思ったのは「時系列分析と状態空間モデルの基礎」です。ただし、コードがRなのでstatsmodelの公式ドキュメントを見ながらpythonに置き換えるという作業が必須になります。pythonネイティブのものは書籍・Web記事ともに少ないこともありお勧めは思い浮かびません。
es_1938

2018/05/03 15:08

ありがとうございます。いろいろ調べて以下の通り途中までコードを書いてみたのですが、どう続けていいか分からず、、アドバイスいただけると幸いです。SARIMAXを使えば予測値の算出もできそう、というところまでは分かったのですが、具体的にどうすればいいでしょうか。 ーー import statsmodels.api as sm import statsmodels.formula.api as smf feature_cols = ["USDJPY_High", "USDJPY_Low", "US_10year_government_bond_yield", "TOPIX_Close", "Nikkei225_Close", "USDollarIndex_Price"] X = fx2[feature_cols] Y = fx2.USDJPY_Close from sklearn.cross_validation import train_test_split X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.4, random_state=3) model = sm.OLS(X_train, Y_train) results = model.fit()
R.Shigemori

2018/05/03 17:32

OLSは回帰モデルなので、前のコードと同じことをしていることになるので未来予測は不可能です。 SARIMAXを使うのであれば、自己相関の有無・移動平均値との相関の有無・差分階差の要否・季節周期性の有無・外因性の有無を分析してSARIMAXのパラメーターとして設定した学習をさせる必要があります。 とりあえず、外因性(今回でいうと日経平均などの説明変数としていたもの)のことは忘れて過去の為替レートの推移からある時点の為替レートを予測するモデルの構築から手がけたほうがいいと思います。
es_1938

2018/05/04 00:24

ご回答ありがとうございます。以下、トライしてみようと思います。 >とりあえず、外因性(今回でいうと日経平均などの説明変数としていたもの)のことは忘れて過去の為替レートの推移からある時点の為替レートを予測するモデルの構築から手がけたほうがいいと思います。 何度もすみません、OLSではできないとなると何を使えばいいのでしょうか。
R.Shigemori

2018/05/04 01:54

statsmodel.tsa.SARIMAX()を使う感じかと思います。
es_1938

2018/05/04 23:08

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問