FXを機械学習!〜重回帰分析〜

こんにちは!

 

前回はFXデータの単回帰分析を行いました。

今回は重回帰分析を行なっていきたいと思います。

 

単回帰分析と違うところは、説明変数が複数あるところです

 

単回帰分析では、

目的変数 円/ドル

説明変数 先月の円/ドル

としましたが、

 

今回の重回帰分析では、

目的変数 円/ドル

説明変数 円/ドル、円/ユーロ

としました。

 

CSVから読み込んだデータがこちら

f:id:ois-blog:20191202104218p:plain

CSVデータ

これを3次元グラフに表すと、

f:id:ois-blog:20191202104313p:plain

3次元散布図

わりと直線状に分布しているのがわかりますね。

 

ここで重回帰分析を行なっていきます。

単回帰分析では直線で予測グラフが表されましたが、重回帰分析では平面(または超平面)で予測グラフが表されます。

 

今回は説明変数2つでの重回帰分析なので、

y=w_0+w_1x_1+w_2x_2

という式で表されます。

x1は先月の円/ドル、x2は先月の円/ユーロです。

w0,w1,w2は学習された重みです。

 

学習の結果、

w_0=3.70254341

w_1=0.98374897

w_2=-0.01556721

となりました。

 

グラフ化すると、

f:id:ois-blog:20191202105317p:plain

予測グラフ

アングルの問題で平面に見えづらいですが、きれいにデータにそったグラフが描かれているのがわかります(オレンジが平面)。

 

また、予測精度であるMSEは

MSE=7.524662088736376

となり、単回帰分析の時より精度が上がっているのがわかります。

 

FXを機械学習!〜単回帰分析〜

こんにちは!

今日からFXのデータを使って色々なアルゴリズムを試してみた結果を記事にしていきたいと思います。

 

初回は線形回帰の基礎の基礎、単回帰分析です。

回帰分析というのはざっくりいうと数値を予測するアルゴリズムです。

その中で最もシンプルなのが単回帰分析です。

 

予測したい数値データのことを目的変数と言います。

予測のために使うデータ説明変数と言います。

 

単回帰分析は目的変数1つ、説明変数1つの簡単な線形回帰分析です。

 

今回は

目的変数→円/ドル

説明変数→先月の円/ドル

として単回帰分析してみました。

 

まずはpandasでcsvを読み込みます。

f:id:ois-blog:20191127111559p:plain

FXデータ

 

1月前のデータを準備します。

f:id:ois-blog:20191127111659p:plain

データ加工後

 

この時点で散布図を書くと下のようにほぼ直線状にデータが並んでいますね。

これは単回帰分析でもそこそこの成果が期待できそうです。

※単回帰分析は直線の予測グラフです

f:id:ois-blog:20191127111847p:plain

先月データと当月データの散布図

 

そして単回帰分析を実行してみました。

予測のグラフは

 

y=w_0+w_1x

 

で表されます。w0やw1は重みと言って、この重みをデータから学習します

単回帰分析を実行したところ、

 

w_0=2.6093959201067203

w_1=0.975487319458586

 

となりました。

 

予測グラフを図示してみましょう。

f:id:ois-blog:20191127113102p:plain

予測グラフ

オレンジの直線が単回帰分析でもとめた予測グラフです。

データによくフィットしていますね。

 

ちなみに線形回帰の精度には平均二乗誤差(MSE)がよく使われます。

今回のMSEは、

f:id:ois-blog:20191127113310p:plain

MSE

この数値でした。

悪くはない結果だと思います。

 

以上、単回帰分析でした!

 

機械学習自動化ツール 〜回帰編〜

前回の記事で機械学習自動化ツール〜分類編〜を扱いました。

そこで今回は〜回帰編〜です。

 

回帰というのは簡単に言ってしまえば数値の予測です(分類はカテゴリの予測でした)。

 

では今回の自動化ツールを使って回帰による予測をしていましょう。

f:id:ois-blog:20191120090217p:plain

学習データ

前回と同様の学習データです。

全ての項目のデータが揃っています。

 

f:id:ois-blog:20191120090430p:plain

予測用データ

こちらが予測用のデータ。身長のデータだけありません。

ここから

 

性別、体重、年齢 → 身長

 

の予測を行なっていきます。

 

この2つのデータを機械学習自動化ツールにインプットしてみましょう。

 

結果がこちら。

f:id:ois-blog:20191120090849p:plain

身長の予測結果

 

なんとも言えない結果ですね。当たっているような当たっていないような。

ちなみに「男」に1.0と入っているデータは男で、「女」に1.0と入っているデータは女です。この辺はUIを改善した方が良さそうですね。

 

特徴量の影響度合いは、

f:id:ois-blog:20191120091622p:plain

特徴量の影響度合

意外なことに年齢が大きく影響していました(個人的には体重の影響が大きいのと持ってました)。

 

正解率は、

f:id:ois-blog:20191120091754p:plain

正解率

ほぼ6割のなので悪くはないですが、分類の時よりは劣ってますね。

 

最後に各アルゴリズムの比較結果です。

f:id:ois-blog:20191120092008p:plain

アルゴリスム比較結果

今回はサポートベクターマシンはふるわなかったようですね。

線形回帰に正則化項をを使いしたリッジ回帰が一番でした。

ラッソ回帰正則化項を入れるという点では同じなのですがかなり引き離されています。

 

回帰に関してはまだ改善の余地があるかな、という状態です。

オリジナルのアルゴリズムを入れることなども検討していきたいと思います。

機械学習自動化ツール 〜分類編〜

初めまして。

オリエンタル情報システム、データサイエンティストの”たけまる”です。

今日から機械学習データ分析まわりの記事をかいていきますので、たまにみていただけると嬉しいです。

 

ということで早速機械学習の話題。

最近データサイエンティストの不足にともない、機械学習自動化ツールが流行っています。ということで当社でもプロトタイプを作ってみました。

 

対応しているのは教師あり学習で、

分類 → カテゴリの予測

回帰 → 数値の予測

 

とりあえずsklearnにあるアルゴリズムだけで対応してます。

 

では実際に分類の予測をしていきましょう(次回は回帰の予定)。

f:id:ois-blog:20191115092212p:plain

学習データのCSV

上のような学習データCSVで用意しました。

このデータを学習させて、

 

身長、体重、年齢 → 性別

 

の予測をしていきたいと思います。

 

予測用のデータはこちら。

f:id:ois-blog:20191115092622p:plain

予測用データのCSV

性別のところが抜けているのがわかります。

その他のデータも学習データとは違う値になっています。

 

この2つのCSVをインプットして予測させてみましょう。

 

結果がこちら。

f:id:ois-blog:20191115093008p:plain

性別の予測結果

かなり妥当な結果が得られていると思います。

 

それぞれの特徴量がどれだけ影響しているかもわかります。

f:id:ois-blog:20191115093253p:plain

特徴量の影響度合

そして正解率です。

f:id:ois-blog:20191115093405p:plain

正解率

かなり高い数値が出ています。

 

最後に各アルゴリズムの比較結果です(上の結果はベストなアルゴリズムの結果)

f:id:ois-blog:20191115093628p:plain

アルゴリズム比較結果

圧倒的にサポートベクターマシン(SVM)でした。

 

データによって適切なアルゴリズムは違います。

さらにいうとアルゴリズムを設定した上でハイパーパラメータのチューニングも行うことで高い精度が得られます。

それらは普通データサイエンティストがデータの形状から判断したり試してみたりするのですが、そのフローを自動化したのがこのツールです。

汎用性が高い分、オリジナルでアルゴリズムを組むよりは精度は劣るかもしれませんが、データをインプットするだけで予測できるので、手頃に機械学習ができるという大きな強みがあります。