そんな一心で仮想通貨の予測をしました。価格予測をする過去価格のみで予測(重回帰分析)過去価格のみで予測(分類・LSTM)ついにTwitterデータも入れるまとめはじめにとにかく話題の仮想通貨。2017年の年末には200万を超えたり、最近だと580億円分の不正流出が起きたりと、その話題が尽きることはありません。今や実用化のフェーズに達したディープラーニング。簡単に言うと、「今まで人間が与えていた特徴を自動で決定する」という仕組みです。ライブラリの充実により、比較的簡単に取り組むことが可能となりました。最近では、AIを使った仮想通貨市場予測などサービス化も実際に行われています。今回はディープラーニングを使って、仮想通貨の予測を行いたいと思います。入力データを考えるまず、単純に過去の価格のみで予測を行うということが考えられます。仮想通貨の価格変動は株価などとは違い、一日で10%以上変動する事が多く、過去の価格のみを入力データとして与えても、精度はそれほど上がらないことが予想されます。過去価格+αのαをどうするか。そこで思いついたのがTwitter。私も仮想通貨の取引は行っているのですが、取引中に思ったのが、Twitterインフルエンサーが「ビットコイン買い増し!!」みたいなツイートをすると、価格が上昇する傾向があるということ。そこで入力データは「過去価格+ツイート」とします。ツイートをどう取り込むかツイートはテキストデータなので、どのように学習データとして取り込むかを考える必要があります。テキストデータをコンピュータに理解させる方法として、例えば以前紹介した、Word2Vecというというものがあります。したら「彼女」から「奥さん」になれるかを『Word2Vec』に聞いてみた単語をベクトル化することで、単語をコンピュータが扱いやすい表現に変換する方法です。することで、同じような文章で使われる「犬」と「猫」は似たベクトルを持つというように、コンピュータに理解させることが可能となります。ツイートは文章なので、例えば「ビットコイン上がりそう」みたいな文章があったとき、キーワードの「ビットコイン」だけでは価格の変動がわかりません。文章ではキーワードの単語とその前後関係も考慮したい。これを解決する方法として、Doc2Vecというものがあります。Doc2VecWord2Vecを応用したもので、単語レベルではなく文章レベルでベクトル化するというものです。感情分析スパムメール判定などがあります。これにより、「ビットコイン○○円で買った」と「ビットコイン買い増し」みたいなのが同じ意味で理解できるようになります。Doc2Vecを使ってみた実際に入力データとして取り込んで価格予測する前に、まず、ツイートのベクトル化がうまくいくかを検証します。結果出力ツイート取得まず、仮想通貨界隈で影響力がありそうなインフルエンサーを数名ピックアップします。その人達のビットコイン、仮想通貨関係のツイートをテキストファイルとして保存します。この時、学習に悪影響を与えそうなノイズのツイートを除く処理も行います。単語に分解Doc2Vecで文章を学習させるには単語に分解する必要があります。この時、日本語の形態素解析ライブラリMecabを使用します。形態素とは意味をもつ持つ最小単位です。次に形態素解析を行った文章を使って、学習を行っていきます。Doc2VecはPythonのライブラリgensimから使用することが可能です。これにより、簡単に実装が行なえます。学習自体はホントあっという間に終わってしまいます。うまく言っているかを検証します。「ビットコイン買い」というポジティブなツイートに似ているツイートを検索します。すると以下のような結果になります。右側の数字が大きいものが、類似度が高いことを意味します。実際に類似度が最も高い文章を見てみます。類似度の高いツイートこのように「ビットコイン買い」と全く同じ意味のツイートが得られました。他のツイートもほぼ同じ意味だったので、学習は上手くいっているということにします。実際に価格予測をするDoc2Vecの学習が大体上手くいったので、実際に仮想通貨の価格予測を行います。仮想通貨といってもたくさんの種類があります。その中でも一番有名なビットコインを対象にしました。過去価格のみで予測(重回帰分析)比較のためにまず、過去の価格のみで予測を行います。以下を参考にしました。仮想通貨取引所のPoloniexからAPI経由でデータ取得し、ディープラーニング(Chainer)で翌日の価格予測をしよう@Qiita仮想通貨の価格を取得するには、取引所のAPIを使う必要があります。今回は、CryptowatchのAPIを使用し、bitflyerのBTC/JPYペアの価格を使用しました。ディープラーニングを使う前に、重回帰分析で価格予測を行います。使う価格データは2017/8〜2018/2のおよそ半年分。使用する価格データトレーニングデータとテストデータに分け、重回帰分析で予測すると以下のような結果になりました。トレーニングデータに対する予測結果トレーニングデータに対する予測結果ピークがずれてしまっています。1サンプル前のデータを反映させているような感じ。機械学習においては、「回帰」と「分類」があります。回帰は主に連続するデータの予測に用いられます。連続した数字を出力します。今回のような価格予測などが例としてあります。分類は予め与えられたクラスを出力とします。犬と猫を区別するとかそんな感じです。重回帰分析はその名の通り、回帰です。回帰問題のまま進めようかと思いましたが、精度はそれほど出ないだろうと予想されるため、分類問題に帰着します。1つ前の価格から、すごい上がる・上がる・下がる・すごい下がるの4分類にします。前日との価格差をヒストグラムで確認します。単純に価格の差分を取ると、人間の大小感覚とずれてしまうため、対数化を行います。オーダーが小さい値となるので、100倍にしてあります。得られたヒストグラムを参考に、閾値は分散を計算した結果から、±5%とします。前日との価格差のヒストグラム以下が±5%の閾値で4分類を行った比率になります。分類比これで分類を行う準備ができました。Memory)というモデルを使用します。再帰型ニューラルネットワーク(RNN)のひとつで、自然言語や動画など、時系列も考慮する場合に用いられます。過学習抑制のため、Dropout層も入れてあります。モデル構造は以下のようになります。過去価格のみで予測するモデル価格データのうち9割をトレーニングデータ、1割をテストデータとしました。評価の際、すごい下がる、下がる、上がる、すごい上がるの4クラス分類の正答率に加え、価格の増減のみ正答率も評価します。価格データはそのまま入力データとして与えると、値が大きすぎるためか、学習が上手く進まないため、0〜1の範囲で正規化を行っています。以下がテストデータに対する評価結果です。67%ついにTwitterデータも入れるいよいよこの時が来ました。ベクトル化したツイートを入力するために2入力のモデルを作成します。モデル構造は以下のような2入力1出力となります。過去価格とツイートで予測するモデルDoc2Vecはベクトル化した際の次元数の指定が出来ます。今回は400次元としました。結果は以下の通りになります。60%入力に価格データを用いた場合と比較し、正答率が低下してしまいました。まとめ入力データにツイートも考慮することで精度が向上するかを検証しました。結果として、正答率が低下してしました。入力データの種類を増やすことで、単純に精度が向上するというわけではないようです。ツイートデータの整形やモデルへの入力方法について少し考える必要がありそうです。仮想通貨の価格は基本的に上昇傾向であって、常に予測結果を「上がる」にしても6割ぐらい出そうです。今後は、モデル構造、他のデータも含めることで精度が向上するかを検証していきたいと思います。AINOW編集部コラムやってみたこの記事が気に入ったらいいねしよう!最新記事をお届けします。週1回、注目のAIニュースやイベント情報を編集部がピックアップしてお届けしています。こちらの規約にご同意のうえチェックしてください。結月ゆかりに機械学習で声質変換するスクリプトを動かそうとしています。中国重視の分野鮮明RECOMMENDこちらの記事も人気です。