ここでは以前作成したテストデータを使います。テストデータを与えて最小二乗回帰という方法を使用して入力と出力の関係性を予想できるでしょうか??
【最小二乗回帰とは】
そもそも統計的回帰の問題では入力値と出力値の間の関数関係に可能な限り近似する関数を見つけることが目的です。
例えば、今回の入力値と出力値が一次関数の関係性なるべくがあると予想しましょう。
(どう見ても違いますがとりあえずです!)
当然とりあえずで引いている線なので作ったデータセットとは乖離していますよね?この乖離をなるべく小さくした線を最終的に引くことができればうまく予想できたといえそうです!
では乖離を小さくするというのはどいう状況のことなのでしょう?
最小二乗回帰という方法を用いて予想をする場合のフローは以下の通りです。
- とりあえず予想で直線を引いてみます(y=ax + bの形)
- 予想で引いた線とデータセットの差をすべての点で取ります
- 2.でとった値をそれぞれ二乗した上で足し合わせます
- 3.の値がより小さくなるように線を引き直します。
- 2~4を繰り返して3.が最小となる直線(aとbの値)を見つけます
結構シンプルですよね?これ、言うのは簡単ですが実際に計算しようとすると大変なんです。上のフローでも図でも当たり前のように「足した値が最小となるように」なんて言っていますが実際にどのように計算するかなんて検討がつく方はなかなかいないんじゃないでしょうか。
そこをいとも簡単にやってくれるのがPythonなんですね!早速コードで見てましょう!
【コード】
お気づきになりましたでしょうか?なんと15~18行目の計3行を足しただけでコードが完成しました!(1~14行目はデータセット作成のためのコードです)これを実行すると以下のようになります。
引いてある青い直線が今回の最小二乗回帰を用いてプログラムが予想してくれたものになります。コードの細かい部分を見てみましょう。
今回のポイントはnp.polyfit()ですね!15行目を和訳すると「xとyの関係性を一次関数だとして最小二乗回帰してください」となります。「a, b = 」とあるのはy = ax + bのaとbを教えて欲しい、という意味です。
16行目で一次関数の形にしてあげているのがわかると思います。これをテストデータと重ねて描画すると先ほどのグラフのようになるということですね!
さて、この予想ですが皆さんはどのように思われますか?この予想された一次関数で元々のデータセットの特徴を捉えられているといえるでしょうか?
おそらく答えは「ノー」ですよね。
与えられたデータセットが日経225の終値だとして、この手法で翌日の終値を予想できるかというとさすがに厳しそうです。
次回はもう少し精度を上げて予想できるようにしていきます!
コードは下からコピペして使ってくださいね!