LoginSignup
11
14

More than 5 years have passed since last update.

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

Posted at
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の実装
11
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
14