雑記帳

日常を綴っていきます

近況

Oculus Goを買った。VRに興味はあったけどそこまでゲームしたいわけではなかったので廉価でそこそこ楽しめるVR機器が欲しいとおもってたので買った。

メンタルがガバガバなので割と頻繁に気が滅入るが暖かくなってきたのでそうでもなくなってきた。大学の方が割と暇なのでバイト週3で行けたり土日出かけられたりと人生の夏休みみたいな感じになってる。留年しなければいいけど。

あと周りが就職の話とかするようになってつらい。自分は院行くつもりなので就職の事あんま考えてない。たまにタダ飯目的で技術系の就活イベント行ったりしてるし夏休み暇になりそうなので某恵比寿メガベンチャーのサマーインターンとか行くがやっぱり就職となるとなんとも言えない。社会人になってもバイトでやってるようなのと同じような事やるんだろうなみたいな漠然とした感覚である。転職を繰り返すタイプの社会人になりたくないのでまあ大手のITとか外資行ければみたいなとこはある。

Twitterはゴミ

現代の大学生の8割くらいはツイッターをやっているだろうが、はっきり言おう。ツイッターはゴミである。ツイッターをやっている人は多くの人がこう思った事があるのではないだろうか。

ツイッターやってる時間を他の時間に充てればよかった...」

と。

まさにその通りである。ツイッターなんかやってる時間あったら他のことやった方がよい。

また、ツイッターをやっていると常に他人に関する情報が目に入るので精神が休まらないので心に疲労が溜まる。おそらくこのことに気づいてない人は多いのでは?

これは私に限った話なのかもしれないが、ツイッターをやっていると、常に「ツイッター映え」というものを考えてしまう。要するに、ツイッター映えするコンテンツを上げることで承認欲求を満たそうという欲望に基づくものだ。承認欲求駆動な人生は虚しい。もっと自分のやりたいことをやるべきである。ツイッターをやっていると、ツイッター経由で生まれた承認欲求をツイッターで発散するという負のサイクルが出来上がってしまうのでゴミ。

現に、ツイッターの利用を最小限にとどめる事で生活の質が向上したと思う。よってツイッターはゴミ。

ツイッターとかいうの早く滅んだほうがいいと思う。ツイッターは良くも悪くも間違いなく正解を変えたサービスには違いない。かつての私だってツイッターを通して得たものもたくさんある。しかし失うものがあまりにも大きい。最もツイッターを通して失った大きなものは豊かな心だったり心の余裕だったりそういった所だと思う。常にツイッターというマルウェアが稼働している事によって自身のメモリを圧迫している状態だった。また、常に脳の片隅でツイッターがリソースを専有している。そして人から「時間」という望んでも決して帰ってこないものを奪い去っていく。時間が奪い去られたことで人間は心の余裕を失い、精神を困憊させる。また、他人の思考、思想なんてものがダイレクトに自身に流れ込んでくる、流れ込んできた思想はじわじわと精神を蝕む。完全にXSSじゃんこれ。多くの人間はXSS脆弱性を持っている。これを社会のマルウェアと言わずしてなんと言える??

春休み

2月はサークルの合宿とかでスキーとか温泉とか行ってた。あとは大体バイトしてた。モンハンとPS4買った。(あんまりやってないけど)

 

3月は愛媛行ったり帰省したり飲みに行ったり一日インターン行ったり結構充実してた。愛媛は18切符で観光していたけどエモい駅とかいっぱいあってよかった(語彙力)。2月に失ってた技術へのモチベが戻ってきた。最近は論文を読み漁ったり読み漁らなかったりしてる。当分自然言語処理とか教科学習の論文を読んでいきたいと思います。(理解するほどの頭がついてないけど)

 

成績とかも帰ってきた。可もなく不可もなくって感じの成績であったが正直もう成績どうでもいい。弊大学は試験前に一夜漬けで勉強していれば単位もそこそこの成績も来るのでとても楽。去年秋は週休4日だったし今年の春も週休3日だし大学生活ヌルいのでバイトの進捗を出したい。

 

暖かくなったおかげで外出出来るようになってきたので気が滅入る事が少なくなってきた。やっぱり引きこもりはダメ。

 

そういえば

前職の話とか新しい職場の話とかしてなかった気がする。エンジニアのバイトしたいなとか思ってる人にとっては参考になるかもしれないしならないかもしれない。

前職は社員10人程度で設立5年くらいの小規模なベンチャーでとあるWebメディアを運営しているところだった。何故そこで働こうと思ったかというとベンチャー企業の内情を知りたかったとかベンチャーで働くエンジニアのライフスタイルに興味があったとかRailsで新規事業立ち上げみたいなのに関わってみたかったとかまあ色々ある。入社が決まったのはちょうど去年の春で大学一年の春休みだった。前職以前にも技術系のバイトに行ってたのだが上司がアレだったり色々あって1カ月くらいでフェードアウトした。そんな矢先に良さそうな仕事を見つけたというのもあってやっと落ち着けるとか思ったものだ。その会社は比較的モダンな開発体制を敷いていて刺激的であった。社員の人達の技術力も高く、学習意欲が大きかったというのもあって自分のモチベーションも刺激された。比較的オープンな環境であり、楽しい職場だったように思う。思い返せば多くの事を学び取れたような気がする。

しかし、入社から半年程度経過してくるとサービスの保守のような仕事が増えた。サービスの保守というと所謂UI/UXの改善みたいなことがメインで、仕事に刺激が見出せなくなった。分からないながらRails書いたりしてた頃と比べるとやはり楽しいとは思えなかった。

そんな時にとある場所から楽しそうな事をやっている職場の話を聞いた。そこはベンチャーではなく古風なイメージがある所謂大企業なのだが、開発部に関しては最新技術を貪欲に取り入れたりとベンチャーのような雰囲気であり、とにかくどんな事でも出来そうな場所であった。その頃、前の会社も総合的判断により辞めたいと感じていたので転機だと思い、今の会社に行こうと思ったのであった。前の会社の人達も、学生のうちは色々な会社で経験を積んだ方がいいと言ってくれ、後押ししてくれたので禍根の念を残す事なく辞められた。

今は機械学習とかを使用したシステムの開発しているが、使い慣れている技術が応用的に利用でき、それに加えて今まであまり触れたことの無い技術に触れることもできる環境であるために(仕事に関しては)充実していると感じている。

社会に出るのってヤバくないですか?

春休みに入ったが基本的に暇なのでバイトばかり行っている。朝10時頃に出社し、夜20時くらいに退勤し、家に帰ってビールを飲みながらモンハンをするような毎日を送っているのだが、ある時ふとこう思った。

「社会に出た後ってずっとこういう生活なのでは?」

もちろん、社会に出た後でも色々なイベントはあると思うが、それでもやはり学生時代と比較すると頻度は少ないだろう。このまま行けば僕は数年後、朝出社し、虚ろな目で仕事をこなし、疲れ果てた体で満員電車に揺られ、誰もいない冷たい自室でストロングゼロを飲みながら消耗していくような人間になっていくかもしれない。こうなってしまうともう生きていく意味を見出すのが難しくなってくる。自分がよく恋愛にはあまり興味がないが結婚はしたいと言っているのはこれを防ぎたいがためだ。結婚し、妻子を持つようになれば、彼彼女の生活を支えるという目標の元に自分を散らす事が出来る。しかし独身だとどうだろう。独身生活を楽しんでいる人も多くいるのは知っているが、自分は孤独とうまく付き合っていく方法を知らないため、彼、彼女らのように幸福を造り出すことが出来ない。酒を飲み、嫌な感情を「虚無」で上書きすることしか出来ない。虚無は幸福と異なり、後にも先にも何も残らない。

近頃、某大手新聞社の電子版にて、「誰かと一緒に暮らすという時代は過去のものになりつつあるため、孤独と向き合う方法を身に着けよ」といった旨の記事を見た。これからどんどん独身者は増えていき、結婚しないことが当たり前の時代になってくるらしい。しかし、誰しもが孤独とうまく付き合っていく事が出来るとは思えない。このまま人生のパートナーを持たない人間が増えていき、世のデジタル化も相まって、ついには人間は単なる社会の歯車でしかない冷たいロボットになってしまうのではないかと思う。結局、人間は動物である以上、SNSなどではなく、対面で他愛もないコミュニケーションを取り続ける事が必要であるが故に、独身が許容されてしまう社会というのは一刻も早く捨てねばならないと感じる。

社会人になると基本的に人と人との繋がりが薄くなってしまう。こうなると腹を割って話せる人生のパートナーがいないと冷たいロボットになってしまう。もちろんそうならない人もいるだろうが、自分は間違いなくロボットになるだろう。上記のような事を数日考えているとやるせない気持ちになってしまい、結局自分が生まれてきた意味ってなんなんだろうとか考えたり、やりたいことはもう大体やってそれなりに満足している今人生が終わってもいいやといったネガティブな思考に走ってしまう自分が寂しい。もう少し余裕のある考え方が出来る人間になりたいと思う。

昨年度の振り返りとか今年の目標的な

大学生活

まあ順調だった。去年より全体的に楽になった。というか勉強をほとんどしていない。回路の勉強とかするのが苦痛。というより微塵も興味がない電気工学的な分野に時間を割きたくない。必修に電気系の科目据えるの勘弁して。

技術的な何か

Web開発がメインだった。大半Ruby on Rails書いてた気がする。たまにReactやったり。下半期はずっとPython書いてた。機械学習とかそういうのが多かった。サークルでのゲーム制作でUnity書いたりもした。ちなみに前職(サービス開発系イケイケベンチャー)は12月付けで退職した。今年は某大手でビッグデータとか機械学習的なのやるかも。

今年の目標

論文とか読む機会増えて英語力の足りなさを実感したので英語の勉強したい。というかいい加減にTOEICを受けねば....一回も受けていないのは不味い気がする。技術面は業務で使う技術の習得がメインになると思う。あと政治経済的な知識を深めたい。(卒論とかはそっち系の研究したい感があるため) あとはkaggleのコンペにちょくちょく参加したり。Web開発は去年やったから今年はあんまり触らない方向で。(とかいいつつ今はRuby on Railsを書いている。)

近況的な

帰省でパソコンを東京に置き去りにしてきたのもあって、もともと買い替えたいとおもってたラップトップを買い替えた。MacBookPro 15-inch(mid 2017)にした。新年早々ウン十万飛ぶのはなかなか心臓に悪いもんですね。ただ快適さが段違いなのでいい買い物をしたと思う。

ディープラーニングを用いた仮想通貨価格の予測

みなさんこんばんは。

さて、本題に入りますが、昨今の仮想通貨市場は非常にアツいものがありますね。今年に入って、様々な仮想通貨の価値が暴騰してウハウハな人もいるかと思われます。このような状況下にあるため、当然投資家の数も鰻登りなわけでして......その投資家の中には、「全て自動で取引をさせたい」と考えているものぐさな投資家もいるのではないでしょうか。結論から言いますと、そういった人たちは恐らく機械学習を用いて価格変動の予測といった大仰な事はしていません。何故なら、仮想通貨の価格変動はランダムウォークであり、機械学習を用いても価格変動を予測することはかなり難しいからです。本当に価格変動の予測から一攫千金を狙いたいのであればこのような記事の情報など鵜呑みにせず、研究に励んでいただきたいです。

それなのに今回、どうして私がこのような事をやるに至ったかといいますと、単純に機械学習でどの程度価格変動を予測することが出来るかという技術的な面に興味があったからです。決して「なにもしなくてもお金がほしい」なんて野心を抱いていたわけではありません。

それでは、今回は私が組んだ予測プログラムの簡単な解説をしていきたいと思います。

 

なお、本記事の情報を元に取引を行い、いかなる損害を被ったとしても筆者は一切責任を負いません。

アルゴリズムについて

 今回は予測にRNNの一種であるLSTM(Long-Short Term Memory)を用いました。LSTMの詳しい理論に関しては、私よりも頭のいい方ががわかりやすい記事を書いてくださっているので割愛します。

qiita.com

モデル構成としては以下のような感じになります。特に工夫している点はありません。

f:id:shikugawa:20171207101609p:plain

ハイパーパラメータの調整に関しては今回はベイズ最適化を使用しています。ハイパーパラメータの最適化に関してはグリッドサーチやベイズ最適化がよく知られているものかと思われますが(私はこの二つしか知りません)、グリッドサーチは候補として挙げられるパラメーターで総当り的に計算していく為に、あまりにも学習に時間がかかってしまいます。ベイズ最適化は特に、「形がわからない関数」の最適解を求める手法の一つなのですが、機械学習においては候補として挙げられるパラメーターの中から、大域的最適解となりうるパラメーターを獲得関数を用いて検出し、モデルのハイパーパラメータに適用するといった計算時間が短縮できる手法になります。詳しい理論については難しくてわかりません。私は数学が苦手なので、数学に自信がある方は色々調べて私に噛み砕いて解説して頂けるとありがたいです。

今回はLSTMを用いた実装しかしていないのですが、Convolution1Dを用いたCNNによる時系列データの予測法とかQRNNという最新のRNNを用いた手法等も存在しているみたいなのでいつか試してみたいです。今はkerasがあるのでこういうのの実装も楽です。

データの加工

当初はデータはCryptowatch APIを用いて収集していたのですが、短期スパンのデータを収集するに当たってはAPI側の制限に引っかかってしまうためにやめました。

Public Market REST API - Cryptowatch

代わりにこちらを用いました。

Bitcoin Historical Data | Kaggle

これめちゃくちゃすごいです。なんと三年前からのCoincheckのBTC/JPYの一分足時系列データです。私の友人が見つけてきてくれたのですが最初見た時ひっくり返りました。

しかし、このデータセットではあまりにもカラムの要素数が少ないです。今回私は取引時間帯と幾つかのテクニカル指標を追加しました。

取引時間帯

為替においては一般に取引が盛んな時間帯、盛んでない時間帯というものがあります。これは仮想通貨においても例外ではないでしょう。そこで、カラムに定義されているタイムスタンプから時間を算出してhourカラムとして定義しました。

テクニカル指標

テクニカル指標とは、為替において過去のデータから算出された様々な指標のことであり、テクニカル分析に使われます。為替に明るくない人でも移動平均線とか名前だけは聞いたことがあるのではないでしょうか。

今回実装したのはボリンジャーバンド一目均衡表(の中で使われる転換線)です。

ボリンジャーバンドとは?

 (過去25日分の移動平均) + n * (過去25日分の標準偏差) で表されます。nには任意の整数が入るのですが、一般にはn=1, 2が使われます。このボリンジャーバンドを突っ切っていると買われすぎ、売られすぎといった指標を判断することが出来ます。これ自体はpandasのrolling関数で楽に実装出来るのでオススメです。

一目均衡表とは?

非常に広く使われているテクニカル指標の一つであり, 基準線, 転換線, 先行スパン, 遅行スパンで構成されます。比較的長いスパンでの取引に適しているらしいです。今回は基準線しか実装していないのですしていないのですが, 後に全部実装していきたいと思います。はい。

結果

正解率は大体68%です。ダメですね。これを実運用したら間違いなく損しますので当ブログで紹介したコードを用いて取引したい人は自己責任でお願いします。破産しても知りません。

イキリグラフ

f:id:shikugawa:20171209000412p:plain

学習効率最悪です。ディープラーニングやめたい。

計算グラフ

f:id:shikugawa:20171209000448p:plain

その他グラフ

f:id:shikugawa:20171209000613p:plain

ソースコード

ブログ記事用