7月頃から、人工知能(AI)の勉強を開始したのですが、かなり面白いです。
でも、勉強だけで終わらせると「成功哲学を学びまくるけど行動しない人」と同じ残念でもったいない感じがするので、仮想通貨の価格を人工知能(機械学習)によって学習させ、未来の価格を予測するという試みを行うことにしました。
「将来、何百万円にまで値上がりする」的な、ワクワクするような価格予測ではなく、自身の勉強のために行った数時間先を予測するというものですので、ご了承くださいませm(_ _)m
そもそも、人工知能(AI)とはどんなものなのでしょうか?
最近は、機械学習やディープラーニングなどの言葉を耳にする機会が増えましたが、それらはどのようなものなのでしょうか?
まずは、それらの用語について簡単に解説していきたいと思います。
人工知能や機械学習について
人工知能と言えばディープラーニング、と言われるほど有名になったディープラーニングは、人工知能(AI)という大枠の中の「機械学習」というカテゴリーの「教師あり学習」という分野に位置します。
「AIが人類を超えた」ということで話題となった囲碁の人工知能ソフトAlphaGo は、機械学習の中の「強化学習」による成果です。
今回の仮想通貨の未来の価格予測では、ディープラーニングも強化学習も使いません。上の網かけで示す「重回帰分析」という手法を用います。
人工知能の活躍するシーンは、取り扱うデータや対象によって様々で、適切な手法を選ぶところからスタートすることになります。
仮想通貨の未来の価格を予測する
「過去のチャートを与えてあげれば、未来の価格を予測してくれる」という単純なものではありません。
今回は、仮想通貨の過去の価格とそれによって作られるチャートや各種指標を学習させることにします。
どのようなデータを使うのかというと、ゴールデンクロスとデッドクロスが起こった時の情報と、その少し未来の価格(増減)の関係です。これらを学習させ、未来の価格予測を行ってみたいと思います。
チャート上にゴールデンクロスが現れると価格が上昇し、デッドクロスが現れると下落すると言われているため、未来の価格を予測するための手掛かりになる情報と言えるのですが、
今回は、価格チャートに現れる上のような一般的な移動平均線同士のクロスではなく、MACDとシグナルのクロス情報を用います。
MACDとシグナルのクロス情報を用いる理由は、一般的な移動平均線同士のクロスに比べて発生頻度が高い(サンプルデータが多い)ことと、出現するタイミングが早いためです。価格の上昇や下落の予兆は、少しでも早く知るべきなので、MACDに着目しました。
MACDとシグナルのクロス状況を数値化する必要があり、単純にゴールデンクロス=”01″、デッドクロス=”10″のような数値化をすることもできますが、少し工夫することにします。
クロスの交わる角度は、緩やかな場合より角度が付いている方が価格の変化も大きいと予想できるため、MACDとシグナルがクロスした時の角度を用いることにします。
そして、他にも価格の動きに関連するとされる以下の指標を学習データとして用意します。
●乖離率
移動平均線(緑のライン)と実際の価格との開き具合です。価格は移動平均線の位置に引き寄せられる傾向にあります。
●MACDの高さ
より高い山での売りサイン、より深い谷での買いサインほど有効と言われています。MACDとシグナルが交差した位置(高さ)を数値化し、機械学習の入力データとします。
●RSI
RSIは、低いと「売られ過ぎ=上昇サイン」、高いと「買われ過ぎ=下落サイン」などと言われているため、こちらのデータも用います。
最後に、ゴールデンクロスやデッドクロスが現れてから数時間後の価格(増加率)も入力データとして機械学習に使用します。
具体的には、MACDがクロスしてから、1時間後、2時間後、4時間後、6時間後の価格を用いたいと思います。短期のチャートを使用しており、クロス間の周期も短いため、12時間後や24時間後の予測は困難と判断し、6時間後までとしました。
これで、機械学習に用いる入力データが揃いました。まとめると、次の通りです。
●クロスの角度(m_angle)
●乖離率(devi_rate)
●MACDの高さ(m_height)
●RSI(r_height)
●数時間後の価格の増加率(h1、h2、h4、h6)
機械学習(重回帰分析)
今回用いる機械学習の手法 重回帰分析とは、複数の説明変数 x1,x2,⋯,xk によって目的変数 y の変動をどの程度説明できるかを分析する手法です。
これだけ見せられても、意味不明ですよね。
説明変数と目的変数の組み合わせをたくさん学習させて(入力してあげて)、下のような式の最適な係数を割り出すイメージです。
係数1〜係数4が分かれば、数式にデータを当てはめるだけで、未来の価格を算出できるというわけですね。
●用意しておいたデータを読み込む
使用するデータは、ビットコインの過去半年分の価格情報です。MACDがクロスした時のデータを抽出し、入力データとして取り込みました。
Pythonというプログラミング言語と、Jupiter Notebook というツールを用いて進めていきます。
●外れ値の除去を行う
例外的なデータが混在している可能性があるため、3σ(シグマ)法という手法で、外れ値除去という処理を行います。
σ(シグマ)という考え方は、チャートの指標の一つボリンジャーバンドでも使われていますので、興味のある方はボリンジャーバンドを調べてみて下さい。
●データの相関関係を確認する
それぞれのデータに関係性があるかどうかを示す相関を確認すると、説明変数と目的変数の間には、ほとんど相関がないことが分かりました。
説明変数と目的変数に相関が無いと、今回やりたい価格予測はうまくいきません。残念ながら失敗です。
・・失敗なのですが、せっかくここまでやったので、目的を変更します。
当初の目的:MACDがクロスした後の数時間後の価格を予測する。
↓↓↓↓↓↓↓↓↓↓↓↓
目的(1):MACDがクロスしてから1時間経過した後の1時間先の価格を予測する。
目的(2):MACDがクロスしてから2時間経過した後の2時間先の価格を予測する。
目的(3):MACDがクロスしてから4時間経過した後の2時間先の価格を予測する。
目的(1)
まず、MACDがクロスしてから1時間経過した後の1時間先の価格を予測します。
目的(1)、(2)、(3)は全く同じ手法で行えるため、目的(1)で簡単な解説を行い、目的(2)と(3)は結果だけ載せたいと思います。
●データの切り出し
まず、今回の重回帰分析に必要なデータの切り出しを行います。説明変数Xと目的変数yに分けるだけです。
●モデルの構築と検証
今回のような機械学習を行うためには、プログラミングのスキルが必要と思う方もいるかもしれませんが、実はそのようなスキルはほとんど不要でとても簡単。
機械学習ライブラリの scikit-learn を用いると、次の4行を書くだけで、機械学習と学習後の検証を行うことができます。
最後に出てきた「0.435…」という数字は、予測の精度のようなもので、「0.5以上だと、何とか予測できるかな」というギリギリのラインと言われています。ですので、0.435という結果は、それほど精度が高い訳ではなくイマイチということになります。
●決定係数の確認と価格予測の数式化
上で計算した決定係数を出力し、あとは係数を式に当てはめるだけで、価格予測の式の完成です。
●価格予測のシミュレーション
完成した価格予測の数式を使って、未来の価格を予測してみます。未来と言っても、MACDがクロスして2時間後の価格ですが。
下の表の5行分のデータ(No.323〜327)を使って2時間後の価格を計算し、出力しています。
続いて、上の5つの結果を検証するために、サーバのデータベース内に蓄えてある実際の価格を抽出します。
予測値と実測値を比較すると・・。
精度の低いモデル(計算式)で、予測する未来も1時間先という直近ではありますが、かなり正確に価格を予測できたと言えるのではないでしょうか。
目的(2)
●価格予測のイメージ
MACDがクロスしてから2時間経過した後の2時間先の価格を予測します。
モデル構築と決定係数
予測の精度を示すScoreを算出します。
目的(3)
●価格予測のイメージ
MACDがクロスしてから4時間経過した後の2時間先の価格を予測します。
●モデル構築と決定係数
予測の精度を示すScoreを算出します。
3つの目的とそれぞれのScoreについて
3つの目的について、予測の精度を示すScoreを並べると、次のようになります。
●目的(1):0.4352
●目的(2):0.5431
●目的(3):0.7259
特に目的(3)では、高い精度で未来の価格を予測できることが分かります。このくらい精度が高いと、実用化できるレベルとされています。
考察
MACDでゴールデンクロスやデッドクロスが発生した直後の価格予測には失敗しましたが、MACDにクロスが出現してから1時間経過した後の価格については、2時間後などの近未来に関して、うまく予測できることが分かりました。
また、MACDのクロス発生後にしばらく様子を見ることで、価格予測の精度を高めることができるということも分かりました。
また、MACDのクロス発生後にしばらく様子を見ることで、価格予測の精度を高めることができるということも分かりました。
●目的(1)のScore:0.4352
●目的(2)のScore:0.5431
●目的(3)のScore:0.7259
しかしながら、MACDのクロス発生後にしばらく様子を見るとなると、“早い段階でクロスが出現する”というMACDのメリットを活かすことができない上に、1時間後の近未来の予測となると、トレードで実用できるレベルとは程遠いと言えます。
今回用いたデータは、CoinMarketCapのビットコイン相場ですが、バイナンスなど単体取引所のデータを使用していれば、説明変数と目的変数の相関関係はもう少し現れていたかもしれません(今後やってみたいです)。
まとめ
「MACDとRSIの指標だけで、価格予測を出来るのでは!?」と淡い期待を抱いていましたが、仮想通貨の価格予測はそんなに甘くないことを痛感させられる結果となりました。
現在、仮想通貨スマホアプリ World Traderの「Mr.Champのつぶやき」で仮想通貨トレードを学習し、実践しています。Champさんの価格予測では、複数のローソク足チャートや各種指標に加え、仮想通貨の取引高やファンダメンタルなどを参考にする場合があり、これらのこのことからも、価格予測ではチャート(価格)だけではなく様々なデータの分析が必要と分かります。
●つぶやきの一部
Mr.Champのつぶやきでは、上のイメージのような、まるで預言者とも言えるつぶやきが投稿されることもしばしばあります。スマホアプリWorld Traderをインストール後、30日間無料でつぶやきを聞くことができるため、テクニカル指標や仮想通貨トレードを学びたい方は、この機会にぜひ利用されてみてはいかがでしょうか。
つぶやきを聞く(World Traderで30日間無料お試し)
仮想通貨を保有しているだけで利益が生まれる時代は終わったのかもしれません。ガチホすることで最終的に儲けることのできる通貨がある一方で、振るい落とされる者も多いことでしょう。ICOが美味しかったというのも過去の話になりつつあります。
今後は、トレードで仮想通貨を増やしてくのが主流になり、これからますますAIトレードが人気を集めることになると考えています。
最近の仮想通貨市場は全体的に低迷していていますが、それでもなお、暗号通貨・フィンテックの未来は明るいです。そして、人工知能の未来も、まぶしいほどに明るいですね。
今回のビットコインの価格予測の機械学習をきっかけに、これからも人工知能の勉強を続けていき、面白そうなアイデアが浮かんだら、また人工知能の記事を書きたいと思います。
私の趣味に付き合ってくださり、最後まで読んでくださいまして、ありがとうございました!
機械学習の知識もさることながら図やグラフが綺麗にまとめられていてとても読みやすい記事でした!
やっぱり生易しいものではないのですね…これからも改良がんばってください👍
お褒めの言葉、嬉しいです。
そして、長文読んでくださりありがとうございます。
また、色々と試行錯誤してみたいと思います!
とても興味深い記事でした。
わざわざ読んで下さってありがとうございます。
yoshikoさんのvote説明記事、とても興味深く読ませて頂きました。
VOTEですよ.. (これはWITNESSとして日本のSTEEMITコミュニティへのちょっとだけの貢献です。)