Help us understand the problem. What is going on with this article?

社内勉強会用 Let's 不労所得

More than 1 year has passed since last update.

社内勉強会用 Let's 不労所得

by jumbOrNot
1 / 21

不労所得とは?

それを得るために労働する必要がない所得のこと。 労働の対価として得る賃金・報酬以外による所得を指し、働かずとも得られる収入または収入源という意味で用いられることが多い。


ほしい。


手段

弊社は副業が許されている・・・やるしかない。
でもどうやるか??

  • 資産運用
  • 仮想通貨
  • アフィリエイト
  • エンジニアリング

せっかくなので勉強しながらやる

金になるものを作ろう。どうせなら流行りの技術など学びたい・・・
ということでとりあえず勉強した。


でやってみた。

Deep LearningでBitcoinの価格予測をやってみる
今日はこの記事の説明と追加+補足


Q. ディープラーニングとは?

A. ニューラルネットワークと呼ばれる入出力を持った回路を組み合わせ、レイヤーと呼ばれる構造に分ける。このレイヤー内のニューラルネットワークに値を渡して出力を得る。

例) 猫認識
image.png

参考


Q. 機械学習との違いは?

A. 何を識別子にするかを人が指定するのが機械学習、指定しないのが深層学習(ディープラーニング)

技術領域
image.png

違いの図
image.png

参考


これだけ知っていればとりあえず大丈夫。


image.png


雰囲気でやってみた

・作ったもの
3年分のbitcoinの日次の終値から価格を予測するモデル(メソッド)を作る。
8割のデータからこのモデルを作り、残りの2割を使って予測、実測値と比較する。
予測から「翌日値上がりするか」を判定、値上がりすると見越して購入、翌日に下がっていれば売る。売上の合計を計算。
1ヶ月運用。


結果

image.png

12万くらいの利益が出そう。ちなみに絶賛BTCは値下がり中・・・

予測結果

できすぎている・・・バグありそう。

image.png


コード説明

利用した環境

  • virtualenv
  • python3
  • pip

pythonデバッグで便利なやつ

  • bpython

補完や色付けをした状態でインタラクティブに実行できる。

image.png

  • ipdb

便利デバッガ。これも色付けと補完が効く。


コード説明1

こちらのコードをご覧ください。
実際のコード


実行部

if __name__ == "__main__":

    prediction = Prediction()
    prediction.execute()

--------------------------------------
    def execute(self):
        trainX, trainY, testX, testY = self.setup()
        self.execute_predict(trainX, trainY, testX, testY)
        self.plot_graph()
        self.calc_result()



初期化

初期値の設定。この辺はまぁそれ。

    def __init__(self):
        # 必要なデータ
        self.csv_path = './csv/bitcoin_log.csv'
        self.pre_dataset = None
        self.dataset = None
        self.normalize_val = None

        # 計算結果とモデル
        self.model = None
        self.train_predict = None
        self.test_predict = None

        # データセットのパラメータ設定
        self.steps_of_history = 3
        self.steps_in_future = 1

        # 結果
        self.result = None

セットアップ

    def setup(self):
        self.load_dataset()
        X, Y = self.create_dataset()

        # Build neural network
        net = tflearn.input_data(shape=[None, self.steps_of_history, 1])

        net = tflearn.gru(net, n_units=6)
        net = tflearn.fully_connected(net, 1, activation='linear')
        net = tflearn.regression(net, optimizer='adam', learning_rate=0.01,
                loss='mean_square')

        # Define model
        self.model = tflearn.DNN(net, tensorboard_verbose=1)

        pos = round(len(X) * (1 - 0.2))
        # 8割を訓練データ
        trainX, trainY = X[:pos], Y[:pos]
        # 2割をテストデータにする
        testX, testY   = X[pos:], Y[pos:]

予測

    def execute_predict(self, trainX, trainY, testX, testY):
        # Start training (apply gradient descent algorithm)
        # 正規化した訓練、テストデータをそれぞれ入れてfittingする
        self.model.fit(trainX, trainY, validation_set=0.1, show_metric=True, batch_size=32, n_epoch=150, run_id='btc')

        # predict
        # 訓練データに基づく再予測
        self.train_predict = self.model.predict(trainX) * self.normalize_val
        # テストデータに基づく実予測
        self.test_predict = self.model.predict(testX) * self.normalize_val
        print('Accuracy: {0:.3f}'.format(self.model.evaluate(testX, testY)[0]))

 Q. 結局最初の勉強は必要だったのか?

A. いらん気がする・・・

線形代数の知識などは実装時には意識しなかった。パズルを組み合わせるように実装できる。
それよりもデータに対する最適なモデルの種類やその評価方法を知ることが重要。


今後の展望

  • 複数のモデル、評価方法でシミュレート
  • パフォーマンスの一番いいモデルで実際に取引
  • ETH/BTCなど社会要因の少ない通過などでやってみる
  • 実際の取引用のbotの実装
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away