見出し画像

【2022年版】 仮想通貨MLBOT作成のためにPythonを最速で習得する方法 〜Pythonの基礎からEDA&機械学習モデリングまで〜

こんにちは。rog_peterです。最近オライリーから「Pythonからはじめるアルゴリズムトレード」というPythonでの自動売買についての詳細な解説本が発売され、自動売買の参入障壁がますます下がり、仲間が増えそうで嬉しい一方、現在のエッジが消失してしまうのではないかと戦々恐々している今日このごろです。


今回は、そんな中で「仮想通貨MLBOT作成のためにPythonを最速で習得する方法」についてご紹介したいと思います。要は上の本に至るまでの入門と上の本の例で紹介されているような手法をさらにレベルアップさせるためにはどのようなことを学んでいけばよいのかという点についてフォーカスしたものです。また、「仮想通貨MLBOTのため」というタイトルをつけましたが「MLエンジニア見習いになるための」と言い換えても良い内容を書いてみました。

本題の前に少しだけ私自身のプログラミング歴とPython歴について紹介します。私は大学と大学院は理系の学科・専攻でしたが、どちらも非情報系あったためプログラミングに関しては大学の学部の授業でC言語をほんの少し習っただけでした。知識としては、for文やif文、関数の作り方などの基本だけを知っていた程度です。就活するにあたって当時(今も?)流行していた機械学習の分野へ飛び込んでMLエンジニアになるために、Pythonを就活の3ヶ月くらい前から本格的に勉強を始めました。PythonはC言語に比べてとても理解しやすく、学習のハードルも低いので最初にがっつり勉強するプログラミング言語としては最適な言語の1つではないかと思います。就活ではコーディング面接などが課される企業もありましたが、だいたいのコーディング面接は無事通過して現職の企業からMLエンジニアとして内定をいただくことができました。現職ではデータの加工、モデルの改良、実運用のためのパイプラインの作成やAPI開発をしています。現職についてから今年で3年目なので、プログラミング歴=エンジニア歴2年半(仕事+大学院時代の勉強期間)くらいになります。

さて本題に入りますが、MLボットを作成するにはPythonの基礎を学ぶところから機械学習モデルを独力で作成できるようになるまでいくつかのステップが存在します。ただし個人的に、強いボット作成に関しては機械学習モデルを作成する部分より、その前ステップである探索的データ解析(EDA)を極めて、PDCAサイクルを高速に回すほうが仮想通貨の関連データから”エッジ”を見つける能力を向上させられるという点で重要なのではないかと思います。

本記事では、Pythonは触ったことはないが、for文やif文の意味はわかる、くらいの読者を想定して、Pythonの基礎からEDAや機械学習モデリングまでの各ステップについて実際に役立った書籍おすすめのwebサイトの情報を交えながら具体的に学習していくべき項目などを説明していきます。

ステップ1 Pythonの基礎を習得する

Pythonに限らず、プログラミング言語全般に言えることですが、初学者に対して最も重要なことは、

「手を動かすこと」

具体的には、

「実コードを書いて、実行してみる。エラーが出たら、エラー文をちゃんと読む。意味不明だったらググって、エラーの意味を理解して、解決する。解決したら公式docの該当箇所を読んで理解を深める。このプロセスを数多く繰り返す。」

が、まず最初のステップとして重要です。プログラミングがなかなか上達しない人は圧倒的に手を動かして実行する回数が不足している人が多いかなと思います。もちろん最終的には手を動かすだけでなく、全体の構造、各機能の計算量、メモリ使用量、可動性などを意識してコーディングする必要があるわけですが、プログラミングに触れる機会がこれまでほとんど無かった人はまず最初にたくさんプログラムを動かしてみること、トライ・アンド・エラーを繰り返すことを意識しましょう。

実際にPythonを学ぶ上で第一歩としておすすめなwebサイトと本をご紹介します。

Pythonプログラミング入門 from 東京大学
東京大学が公式に出しているPythonの入門教材でGoogle Colabを使うことでその場ですぐ動かして試すことができるのが特徴です。扱っている範囲は、Pythonの基礎、numpyやpandasの基本的な使い方などではじめの第一歩としては十分な内容になっています。ちなみに私の時代はC言語かFortranの授業しかなく、このような教材はありませんでした笑。いい時代になりましたね。


Python for everybody @ Youtube (英語が得意な方
Youtube上にある13時間以上の無料のPythonコースで米国の名門ミシガン大学の先生が教えてくれます。(もともとはcouseraのコースでその無料部分の動画だけがYoutubeにアップロードされています。)英語でOKな方ならこのコースに従って実際に手を動かして学ぶとPythonの基礎が一通り学べると思います。

米国AI開発者がゼロから教えるPython入門講座 @ Udemy
シリコンバレーでPythonを使って機械学習関連のエンジニアをされているかめさんという方がPythonの使い方について詳細にかつかなり体系的に解説してくださっている動画です。とても分かりやすい講座ですが、お値段がちょっとお高めなのがネックですね(笑)(※ちなみに私はかめさんの直接の知り合いでもなければ回し者でもありません。)あまりにも分かりやすいのでぼーっと聞きがちになってしまいますが、手を動かさないと身につかないので手元でコードを動かしながら学習しましょう。

入門 Python 3 第2版
定番中の定番ですが、オライリーから出ている「入門 Python 3 第2版」がPython入門の本としてとてもおすすめです(6年ぶりに改訂されたようです)。ほとんどのPythonエンジニアが一度は読んだ本なのではないでしょうか。Python3.9に対応しており、前の版からかなりアップデートされた内容になっています。上記の動画などで理解できなかったところや流されてしまったところなどは書籍で学習すると良いと思います。もちろん書籍は上記の動画よりも広範囲でかつ詳細な内容を含んでいるので書籍だけで学習できる方はそれで全然良いと思います。


MLボット作成へ向けて具体的にPythonのどの部分を中心に学習すればよいか
まず基本的なデータ構造(リスト、タプル、辞書など)for文if文関数の作り方、クラスの作り方などを基礎を一通り習得したら、標準ライブラリを使いこなせるようにしましょう。特に重要な標準ライブラリは、os, pathlib, sys, glob, shutil, collections, datetime, json あたりで、この辺の使い方を一通りおさえておけば、ボット作成で出てきそうな簡単な内部処理の実装で困ることはないと思います。外部ライブラリでは、数値計算用のnumpy, データフレームを扱えるpandas, グラフ描画用のmatplotlib, 機械学習ライブラリのscikit-learn, HTTPメソッドを行うためのrequestsが特に重要です。

こうしたライブラリの使い方でわからないところがあったら公式docを読むのはもちろん、nkmk.meさんが運営する、https://note.nkmk.me/  で該当箇所を探すのもありだと思います。

例えば、取引所の売買用のAPIを叩くのに必要なrequestsに関しては、Python, Requestsの使い方 を読み、取引所が提供するAPIを叩いてみて、どのような結果が返ってくるか見てみると、簡単なボットを作成するための手がかりとなるはずです。

ボット作成の次のステップとして、何らかのルールに基づくボットを作成してみましょう。その際にとても参考になるのが、「文系でもわかる!BitcoinのBOT自動売買トレードの始め方」というボット作成初心者にとって超有益な無料webサイトです。このwebサイトに従っていくだけでドンチャン・チャネルブレイクアウトに基づく自動売買ボットが作成できるようになります。こちらと並行して冒頭で紹介した「Pythonからはじめるアルゴリズムトレード」という本の中身を手元で動かしていくとさらにボットへの理解が深まり、単純なMLボットが作れるようになります。

以上の内容を習得し、実際に取引所で自動売買を始めれば、もうあなたは立派なボッターです!

ここから下に関してはボット作成という点では必須ではないですが、ワンランク上のボットを作成する上で重要なステップをご紹介していきます。

その前に、ボット作成にはデータ収集などの単純作業が必須ですが、そうした単純作業をいかにしてPythonで実装していくか、という点にフォーカスを当てた「退屈なことはPythonにやらせよう」という本を紹介してステップ1を終えたいと思います。この本はボットに関係なく、Pythonでいろいろやっていきたいという目的の人にはかなり役立つ本だと思います。


ステップ2 アルゴリズムとデータ構造の基礎を学ぶ

Googleをはじめとする外資系の大手IT企業や国内でも勢いのあるIT系スタートアップなどではコーディング面接を課す企業がとても多くなっています。こうしたコーディング面接で頻出のトピックが、コンピュータ・サイエンス(CS)分野の「アルゴリズムとデータ構造」という領域です。情報系の出身の方なら学部の授業で学ぶものなので、こうしたIT企業を受ける際には情報系と非情報系で最も差がつきやすい領域ではないかと思います。憶測ですが、こうした企業で「アルゴリズムとデータ構造」をコーディング面接の定番として出題する理由は、アルゴリズムに超絶詳しい超優秀マンを採用したいというよりはむしろ、1)基本的なアルゴリズムに習熟しており、実務上の実装で大きなミスを犯しづらい人材(計算量、メモリ使用量、コーナーケースなどを正しく把握できる)で、かつ、2)コーディング"面接"を通して、一緒に開発していく同僚として円滑なコミュニケーションができ、考えを論理的に分かりやすく伝えられる人材、を採用したいからかなと思ってます。憶測です。

アルゴリズムとデータ構造に習熟していないとボットの開発ができないのかと言われると必ずしもそうではないですが、ワンランク上のボットを作りたい場合は必要になる場合もあるかもしれません。例えば、下記ツイートのようにDeFiボットを開発する際にはグラフアルゴリズムを使ったりするようなので典型的なアルゴリズムは一通り使えるようになっておいたほう強いボットを作れる可能性が高まると思います。


ではアルゴリズムとデータ構造の具体的な勉強法や実際に使ったwebサービスを紹介していきます。

アルゴリズムとデータ構造で抑えるべきポイントは、
- 計算量の概念
- スタックとキュー

- 線形探索と二分探索
- 幅優先探索と深さ優先探索
- ダイクストラ法
- sliding window
- 動的計画法
- 基本的なデータ構造(リスト、タプル、辞書、セット、デック(deque)、ヒープ)とその各操作(追加、削除、ソート)の計算量
などです。

こうしたポイントを学ぶ上で重要なwebサイトと勉強法をご紹介していきます。


ここから先は

2,037字

¥ 500

この記事が気に入ったらサポートをしてみませんか?