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

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

ただいまの
回答率

90.34%

  • Python

    9124questions

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

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

解決済

回答 1

投稿

  • 評価
  • クリップ 2
  • VIEW 402

esaeki

score 1

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のレートが最新です。

![イメージ説明](d9bb05a03ebd44ef919e7409b0048516.png)

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • tachikoma

    2018/05/03 12:43

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

    キャンセル

  • esaeki

    2018/05/03 14:28

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

    キャンセル

回答 1

checkベストアンサー

+3

今の予測モデルは
・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 15:47

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

    キャンセル

  • 2018/05/03 16:21

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

    キャンセル

  • 2018/05/04 00: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()

    キャンセル

  • 2018/05/04 02:32

    OLSは回帰モデルなので、前のコードと同じことをしていることになるので未来予測は不可能です。

    SARIMAXを使うのであれば、自己相関の有無・移動平均値との相関の有無・差分階差の要否・季節周期性の有無・外因性の有無を分析してSARIMAXのパラメーターとして設定した学習をさせる必要があります。

    とりあえず、外因性(今回でいうと日経平均などの説明変数としていたもの)のことは忘れて過去の為替レートの推移からある時点の為替レートを予測するモデルの構築から手がけたほうがいいと思います。

    キャンセル

  • 2018/05/04 09:24

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

    何度もすみません、OLSではできないとなると何を使えばいいのでしょうか。

    キャンセル

  • 2018/05/04 10:54

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

    キャンセル

  • 2018/05/05 08:08

    ありがとうございます。

    キャンセル

同じタグがついた質問を見る

  • Python

    9124questions

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