AIとファイナンス

このブログではプログラミング言語Pythonを通じてAIとFinanceの懸け橋となるプログラムの作成を行っていきます! 具体的にはニューラルネットワークを構築して将来の市場の動きを予測することを目標としています。 ブログを進めていく中で、Pythonのコードはもちろん金融で確立された理論やその他のトピックもご紹介します。

【PythonでAI】最小二乗回帰【その1】

ここでは以前作成したテストデータを使います。テストデータを与えて最小二乗回帰という方法を使用して入力と出力の関係性を予想できるでしょうか??

 

【最小二乗回帰とは】

そもそも統計的回帰の問題では入力値と出力値の間の関数関係に可能な限り近似する関数を見つけることが目的です。

例えば、今回の入力値と出力値が一次関数の関係性なるべくがあると予想しましょう。
(どう見ても違いますがとりあえずです!)

f:id:MarcelXX:20210114175222p:plain

0004-1OLSregression

当然とりあえずで引いている線なので作ったデータセットとは乖離していますよね?この乖離をなるべく小さくした線を最終的に引くことができればうまく予想できたといえそうです!
では乖離を小さくするというのはどいう状況のことなのでしょう?

最小二乗回帰という方法を用いて予想をする場合のフローは以下の通りです。

  1. とりあえず予想で直線を引いてみます(y=ax + bの形)
  2. 予想で引いた線とデータセットの差をすべての点で取ります
  3. 2.でとった値をそれぞれ二乗した上で足し合わせます
  4. 3.の値がより小さくなるように線を引き直します。
  5. 2~4を繰り返して3.が最小となる直線(aとbの値)を見つけます

f:id:MarcelXX:20210114180753p:plain

0004-2OLSregression

結構シンプルですよね?これ、言うのは簡単ですが実際に計算しようとすると大変なんです。上のフローでも図でも当たり前のように「足した値が最小となるように」なんて言っていますが実際にどのように計算するかなんて検討がつく方はなかなかいないんじゃないでしょうか。

そこをいとも簡単にやってくれるのがPythonなんですね!早速コードで見てましょう!

 

【コード】

f:id:MarcelXX:20210115042631p:plain

0004-3OLSregression

お気づきになりましたでしょうか?なんと15~18行目の計3行を足しただけでコードが完成しました!(1~14行目はデータセット作成のためのコードです)これを実行すると以下のようになります。

f:id:MarcelXX:20210115042852p:plain

0004-4OLSregression

引いてある青い直線が今回の最小二乗回帰を用いてプログラムが予想してくれたものになります。コードの細かい部分を見てみましょう。

f:id:MarcelXX:20210115043459p:plain

0004-5OLSregression

今回のポイントはnp.polyfit()ですね!15行目を和訳すると「xとyの関係性を一次関数だとして最小二乗回帰してください」となります。「a, b = 」とあるのはy = ax + bのaとbを教えて欲しい、という意味です。

16行目で一次関数の形にしてあげているのがわかると思います。これをテストデータと重ねて描画すると先ほどのグラフのようになるということですね!

 

さて、この予想ですが皆さんはどのように思われますか?この予想された一次関数で元々のデータセットの特徴を捉えられているといえるでしょうか?
おそらく答えは「ノー」ですよね。

与えられたデータセットが日経225の終値だとして、この手法で翌日の終値を予想できるかというとさすがに厳しそうです。

次回はもう少し精度を上げて予想できるようにしていきます!

 

コードは下からコピペして使ってくださいね!

0004_OLSregression