Amazon Forecastによるビットコインの価格予測を自動化してみた


<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Amazonが10年以上取り組んできた時系列データの予測サービス「Amazon Forecast」が正式リリースされたので、実験的にビットコインの価格予測を試して公開してみました！<br><br>一日一回のペースで再学習を行い、一日先の未来のビットコイン価格を予測します。<a href="https://t.co/sCLETlsHaJ">https://t.co/sCLETlsHaJ</a></p>&mdash; 2z / AIメーカー開発者 (@2zn01) <a href="https://twitter.com/2zn01/status/1173460772640346113?ref_src=twsrc%5Etfw">September 16, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


---

こんにちは、2z（Twitter： [@2zn01](https://twitter.com/2zn01) ）です。

趣味でWebサービスの個人開発をしており、以下のサービスを開発・運営しています！

■AIメーカー
https://aimaker.io/

■ツイレポ
https://twirepo.com/



## 今回作ったもの

Amazon.com で10年以上取り組んできた時系列データの予測技術がAWS上で「Amazon Forecast」としてサービス化されたので、これを使ってビットコインの価格予測を自動化し、Web上で見られるようにしました。

以下のURLよりご確認頂けます。

■URL
https://aimaker.io/forecast/


<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Amazonが10年以上取り組んできた時系列データの予測サービス「Amazon Forecast」が正式リリースされたので、実験的にビットコインの価格予測を試して公開してみました！<br><br>一日一回のペースで再学習を行い、一日先の未来のビットコイン価格を予測します。<a href="https://t.co/sCLETlsHaJ">https://t.co/sCLETlsHaJ</a></p>&mdash; 2z / AIメーカー開発者 (@2zn01) <a href="https://twitter.com/2zn01/status/1173460772640346113?ref_src=twsrc%5Etfw">September 16, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


「Amazon Forecast」は、モデルの再構築と検証、アルゴリズムの選定などの一連の流れを自動で行うことができ、正確な時系列予測が行えるとありますので、どこまでの精度が出るのか、興味があり、作ってみました。


---



## 使用技術

### Linux

クラウドのホスティングはAmazon Web Services（AWS）で、EC2でサーバを立てています。
サーバのOSは Amazon Linux2を使っています。

### Apache

webサーバはApacheを使っています。
Nginxもありますが、Apacheは普段から使っており、設定も把握していたため、いつも通りの安定の選択としました。


### MySQL

データベースはMySQLを使用しています。


### PHP

Webサーバ側のプログラムはPHPを使って実装しました。

### Python

ビットコインの価格データをとってきて加工する箇所はPythonで作りました。


### Amazon Forecast


### cron

ビットコインの価格データの取得、Amazon Forecastでのモデルの学習・推論を
cronで一日一回実行するようにしています。



## 文字起こしの仕組み

<img width="945" alt="モジコ-文字起こしの仕組み.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/721d5fdb-202d-c780-b09c-26a8a7a9ccba.png">


### 画像ファイルから文字起こし

* Google Compute Engine（サーバ）
* Google Cloud Storage（ストレージ）
* Google Cloud Vision API（画像認識）

Google Compute Engine上に立ち上げたサーバからアップロードされた画像ファイルをGoogle Cloud Storage（GCS）上へアップした上で、Google Cloud Vision APIにGCS上の画像URIを送信し、文字起こしされた結果を受け取っています。

### 音声ファイルから文字起こし

* Google Compute Engine（サーバ）
* Google Cloud Storage（ストレージ）
* Google Cloud Speech API（Speech-to-Text／音声認識）

Google Compute Engine上に立ち上げたサーバからアップロードされた音声ファイルをGoogle Cloud Storage（GCS）上へアップした上で、Google Cloud Speech APIにGCS上の音声URIを送信し、文字起こしされた結果を受け取っています。

### 動画ファイルから文字起こし

* Google Compute Engine（サーバ）
* Google Cloud Storage（ストレージ）
* Google Cloud Speech API（Speech-to-Text／音声認識）
* ffmpeg（動画→音声の変換）


Google Compute Engine上に立ち上げたサーバからアップロードされた動画ファイルをffmpegを使って音声ファイルへ変換し、Google Cloud Storage（GCS）上へアップした上で、Google Cloud Speech APIにGCS上の音声URIを送信し、文字起こしされた結果を受け取っています。


### YouTubeから文字起こし

* Google Compute Engine（サーバ）
* Google Cloud Storage（ストレージ）
* Google Cloud Speech API（Speech-to-Text／音声認識）
* ffmpeg（動画→音声の変換）


Google Compute Engine上に立ち上げたサーバで指定されたYouTubeの動画をダウンロードしてffmpegを使って音声ファイルへ変換し、Google Cloud Storage（GCS）上へアップした上で、Google Cloud Speech APIにGCS上の音声URIを送信し、文字起こしされた結果を受け取っています。



## 有料課金の導入

文字起こしではAPIの利用費がかかってしまうため、100円分までは無料で使えるようにしましたが、それを超える場合はやむなく有料課金にしました。

有料課金は以下のサービスを利用しています。

* LINE Pay
https://pay.line.me/jp/intro?locale=ja_JP

* Stripe
https://stripe.com/jp


LINE Payでの課金は以下の流れになります。

![img_linepay.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/bf8dbf29-24f5-5fa4-9e3f-4ab9f4b60f4b.jpeg)


「モジコ」のLINE上では以下のような形で出しています。

<img width="375" alt="モジコ-ペイメント.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/800e8d68-ef95-334f-058c-6a40db607f43.png">

なお、Stripeは最低利用金額は日本円で50円からだったため、合計金額が50円に達した場合のみ利用できるようにしました。

LINE BotとLINE Payの課金導線はスムーズなため、LINE Botのマネタイズ化にすごく相性が良いと思います！

---

ちなみに、LINE Payを本番で利用するには、加盟店加入申請が必要です。

* LINE Pay     
https://pay.line.me/jp/intro?locale=ja_JP


LINE Payの加盟店申請の際は、個人事業主の場合は以下の書類を用意します。

＜事業者証明書＞
以下のいずれか
　・国税・地方税の領収書または納税証明書
　・個人事業開業届出書（控）：税務署受付印が押印されたもの
　・確定申告書（控）：直近の税務署受付印が押印されたもの
　・青色申告承認申請書（控）：税務署受付印が押印されたもの
　・個人事業開始申告書（控）：都道府県税事務所や市区町村役場の受付印が押印されたもの

＜本人確認書類＞
以下のいずれか
　・運転免許証：変更事項があれば裏面含みます。
　・健康保険証：表裏必要です。


＜商品・サービス説明資料（任意）＞
必須ではありませんが、審査を円滑に進めるには提出した方が無難です。
僕の場合はサービスの概要資料とあわせて、どのようにLINE Payを導入・利用するかを示した資料を提出しました。

---


僕の場合は個人事業主として申請し、3週間ほどで審査が完了し、利用できるようになりました。


## LINE Bot化で工夫（苦労）したところ、など

### 処理時間が長い場合の対処

文字起こしの処理時間は画像の場合は数秒で終わるため、すぐに応答メッセージ（message/reply）を返すことができました。
しかし、音声や動画の場合は再生時間の1/4程度の時間が文字起こしにかかるため、一旦応答メッセージ（message/reply）で変換待ちである旨を返すようにし、文字起こしの進捗を確認できるようにしました。

<img width="372" alt="モジコ-変換待ち.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/4e069e0e-9f7f-f3a1-79ff-e3059af3f370.png">

そして、文字起こしがすべて完了した後にプッシュメッセージ（message/push）で文字起こし結果を返すようにしました。

なお、プッシュメッセージはフリープランの場合は月に1000通までのため、注意が必要です。

<img width="713" alt="line-messaging-plan.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/19e2d4f2-984d-be6d-29f5-ec1fe4148596.png">

僕はLINE Botの開発とは、いかに応答メッセージ（message/reply）で済ませるかが勝負だと思っています。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">LINE BOT開発とはいかにPushメッセージを使わずにReplyメッセージで済ませるかの闘いである。<br>（フリープランの場合、月に1000件はちょっと少ないよね...）</p>&mdash; 2z / AIメーカー開発者 (@2zn01) <a href="https://twitter.com/2zn01/status/1158060924449591296?ref_src=twsrc%5Etfw">August 4, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

今回もなるべくLINE Botは応答メッセージ（message/reply）で済ませたいところでしたが、ユーザビリティも考えて、苦肉の策でプッシュメッセージ（message/push）を使用しています。


### LINEのファイルアップロード上限

LINEでは明確なファイルサイズの上限が見当たらず、10MBを超えるような大きなファイルサイズだとアップロード中にロード中のまま止まってしまうことがありました。
（なぜかグループで追加した場合はアップロードできるようでしたが、、）

また、動画ファイルは5分以内でなければならず、それを超える場合は動画を5分以内に切り取らざるを得ませんでした。

そのため、苦肉の策として、別途アップロードするためのアップローダー画面を用意することにしました。

<img width="375" alt="モジコ-アップローダー.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/d14896bb-cd20-d552-9fd4-c05eba7b6cef.png">


### LINEでのファイルの取り扱い

LINEからアップロードされたファイルは、画像はjpg、音声はm4a、動画はmp4に変換されるようです。
APIからファイル（コンテンツ）を取得する際にはその点に注意する必要がありました。


## サービス紹介動画の制作

今回はサービス紹介動画を作成しました。
以下のURLより見ることができます。

・文字起こしAIコンシェルジュ「モジコ」
https://www.youtube.com/watch?v=zof9OH9BOxE


この動画は「Canva」というデザイングラフィックツールのWebサービスを活用して作りました。

* Canva    
https://www.canva.com/


「Canva」は基本的に画像を作成するツールですが、Canva Proの有料版だとスライドを作るとそれをイイ感じにアニメーションとして出力することができます。
出力したアニメーションを組み合わせて動画として作成しました。


## 最後に

苦肉の策を講じながらも、何とかサービスをリリースすることができました。
このサービスに少しでも興味をもって頂けましたら、ぜひフォローやいいね、リツイートで応援お願いします！

* Twitter： [@2zn01](https://twitter.com/2zn01)
* Qiita： [@2zn01](https://qiita.com/2zn01)
* note： [@2zn01](https://note.mu/2zn01)


<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Amazonが10年以上取り組んできた時系列データの予測サービス「Amazon Forecast」が正式リリースされたので、実験的にビットコインの価格予測を試して公開してみました！<br><br>一日一回のペースで再学習を行い、一日先の未来のビットコイン価格を予測します。<a href="https://t.co/sCLETlsHaJ">https://t.co/sCLETlsHaJ</a></p>&mdash; 2z / AIメーカー開発者 (@2zn01) <a href="https://twitter.com/2zn01/status/1173460772640346113?ref_src=twsrc%5Etfw">September 16, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>