この記事は2年前の以下の記事のアップデートです。
前回はとりあえずデータサイエンティストというかデータ分析職一般としてのスキル要件として、「みどりぼん程度の統計学の知識」「はじパタ程度の機械学習の知識」「RかPythonでコードが組める」「SQLが書ける」という4点を挙げたのでした。
で、2年経ったらいよいよ統計分析メインのデータサイエンティスト(本物:及びその他の統計分析職)vs. 機械学習システム実装メインの機械学習エンジニアというキャリアの分岐が如実になってきた上に、各方面で技術革新・普及が進んで来たので、上記の過去記事のスキル要件のままでは対応できない状況になってきたように見受けられます。
そこで、今回の記事では「データサイエンティスト」*1「機械学習エンジニア」のそれぞれについて、現段階で僕が個人的に考える「最低限のスキル要件」をさっくり書いてみようかと思います。最初にそれらを書き出しておくと、以下のような感じです。ただし僕は機械学習エンジニアには該当しないので、あくまでもかつて前職や前々職で機械学習エンジニア採用担当だった時に想定していた要件や、同僚友人知人で機械学習エンジニアの業務を担当している人のスキルセットを見た範囲での要件を書いてあります。
データサイエンティスト
- 東京大学出版会の統計学シリーズ3巻分に該当する統計学の知識
- みどりぼん及びアヒル本に該当するベイジアン統計モデリングの知識と確率的プログラミングのスキル
- はじパタに該当する機械学習の知識
- R / Pythonでコードが書ける
- SQL文法を含むデータベース操作の技術
- クラウドの知識
機械学習エンジニア
なお、ここで挙げた個々のテキストについては基本的には今年のオススメ書籍リストの中級者向け15冊の中に含まれているので、そちらをご参照ください。
ということで、それぞれの要件を何故選んだのか?という理由について以下うだうだと書いていこうかと思います。なお、しつこいようですがここで挙げている要件は僕の個人的な意見であり、いかなる企業・組織・団体などの意見も一切代表していませんので悪しからず。
共通スキル:DBとクラウド
これは理由は簡単です。今やデータサイエンティストや機械学習エンジニアといったデータ活用専門家を採用できるような、データ活用体制の整った現場・企業であれば手持ちのデータセットを何かしらのDBに格納しているのはもはや常識に近い状況であり*2、分析用のデータを取ってくるにはDB操作に習熟している必要があるからです。その意味では以前このブログで紹介したような以下の書籍は大いに参考になるのかなと。
もう一つはクラウドです。世の中GCP, AWS, Azureなどなどの大手クラウドの利用が浸透し、今や日本のメガバンクすら基幹システムをクラウドに移行するという話題が出てくるほどの有様です。一方、データ活用カルチャーが広まってきた昨今では、データ分析業務においてもローカル環境では扱い切れないほどの大容量データセットをさばく機会がどんどん増えつつあります。そういう状況下では、分析業務自体をクラウド上で完結させることで大容量に対応するというのが自然な流れだと思います。DBも今やオンプレではなくクラウドで持つ現場が多くなっていますし、その点でもクラウドを使いこなせるスキルがあることは重要になっているはずです。
また、見逃せない観点としてGPUを初めとした機械学習(そしてDeep Learning)に特化したマイクロプロセッサの発達があります。こちらについても、自前でプロセッサを調達して自作マシンを製作するという方向性に対して、それらの高速プロセッサを内蔵したクラウドインスタンスを(特別料金で)利用するという方向性もあり、特に近年は必要とされる計算パワーが急増していることからすぐ陳腐化する自作マシンよりもニーズに合わせた機能拡張が期待できるクラウドを利用する流れが強まっているように見受けられます。なお、ある程度genericな機械学習エンジンであれば各クラウドサービスが提供するpre-trained modelのAPIを使う手もあります。
そういうことを考えると、実は以下に説明するデータサイエンティスト・機械学習エンジニアそれぞれの固有のスキルセットが占める割合よりも、DBやクラウドのスキルが占める割合の方が大きくなりつつあるのではないか?ということも言えるかもしれません。
データサイエンティストはある程度オールラウンダーであるべき
- 東京大学出版会の統計学シリーズ3巻分に該当する統計学の知識
- みどりぼん及びアヒル本に該当するベイジアン統計モデリングの知識と確率的プログラミングのスキル
- はじパタに該当する機械学習の知識
- R / Pythonでコードが書ける
では、データサイエンティストに固有のスキル要件はどうあるべきなんでしょうか? 2年前とは異なり、「データサイエンティスト」という肩書きで任される仕事の内訳はより統計分析のウェイトが高く、より機械学習のウェイトは低くなっているように思います。
一方、統計分析と言った場合のカバー範囲がだいぶ広くなってきているというのが個人的な見立てです。ちょっと前までは個々の現場でやっているA/Bテストはたまたpre/postテスト(もしくはさらにそこから踏み込んでdifference in differencesテストとか)の統計的妥当性を仮説検定で片付けていれば良かったという印象です。ところが、最近は多変量モデリングをやるのが当たり前になってきており、しかも統計分析を依頼してくるようなビジネス部門が抱えるデータセットに時系列・パネルデータが多いこともあり、動的線形モデルのような時系列に特化した分析が出来ることが大事な要件になっているように見受けられます。
ということで、その辺を包括的にカバーする書籍群として「東大出版会統計学シリーズ3巻」「みどりぼん」「アヒル本」の3種を挙げておきました。動的線形モデルまでカバーするとなるとこの3種だけでは足りないかもしれませんが、上記の今年3月の書籍リストの中級者向けから適宜選んでいただければよろしいかなと。
なのですが、いかに統計分析がメインと言っても「データ分析関連の仕事なら大体何でもやります」という顔をしていると、ほぼ間違いなく機械学習周りの仕事も舞い込んできます(笑)。そういう場合にちょっとしたプロトタイプやPOC (proof of concept)も作れないようでは困ってしまうので、最低限実務で回る程度の機械学習の知識を持っておくべきだということで「はじパタ」をそのカバー範囲に対応する書籍として挙げておきます。とりあえずはじパタぐらいの知識があれば、後はscikit-learnかRのCRAN Task View: Machine Learning系パッケージのいずれかを使えば何とかなるはずです。
そして言うまでもなく、それらを実践したかったら最低でもR / Pythonでコードが書けるべきです。なお統計分析ほぼ一本で行くならRが出来た方が良いと思います(これまで各種トレーニングコースをやってきた経験上)。
機械学習エンジニアは伝統的な手法もDeep Learningも扱えてなおかつ実装できるべき
- 講談社MLPシリーズの中で業務に関連する主要な巻がカバーする機械学習の手法と実装
- 黄色い本(PRML)及びカステラ本(ESL)に該当する一般的な機械学習の知識
- Deep Learningの実装経験及びその知識、そして代表的なフレームワークの知識(TensorFlow, Keras, MXnet, PyTorch, Chainer, Theano...)
- Pythonに加えて実行速度の速い言語(C++, Javaなど)でコードが書ける
機械学習エンジニアはさらに新しい職種であり、しかも昨今の人工知能ブームの中でハードルが日進月歩で高まっているという部分もあるように見受けられます。少なくともscikit-learnでPOCを組めるなんていうのはスキル要件以前の問題であり、きちんと現実の本番環境の様々な制約や要件のもとで動く機械学習システムが作れなければいけないという雰囲気を感じます。
その意味で言うと、下の方に回されてしまっていますが多くの機械学習ライブラリ・フレームワークと連携可能なPythonが書けるというのは当たり前であり、その上で必要とあらば例えばC++やJavaなどの実行速度の速い言語で機械学習のアルゴリズム本体も周辺のデータ処理周りもバリバリ書けるようでないと、本番環境のシステムに機械学習をどんどん入れていこうとするとつらいのではないかという印象です。
もちろん、コーディング力だけでなく機械学習そのものについての確かな知識も必要とされるはずです。ただ、一口に実務で機械学習をやると言ってもそのカバー範囲は多岐に渡ります。ある現場では典型的な分類問題だけをやっている一方で、別の現場ではゴリゴリ自然言語処理をしていたり、また別の現場ではひたすら不良品(異常)検知に力を入れていたり、また異なるある現場ではとにかくユーザーがupした画像の認識ばかりをやっていたり、全く違う別の現場では音声言語処理をやっていたり。。。というように機械学習で扱う対象もてんでバラバラであることを考えると、全て網羅的に会得するのはかなり難しいのではないかと思われます。その点を念頭に置いて、「講談社MLPシリーズの中で業務に関連する主要な巻」がカバーする範囲の特定の知識があること、を要件として置いてみました。
ただし、それらのいかなる応用領域も基本的には機械学習のコアとなる知識から枝分かれしているように解釈できなくもありません。そこで、コアとなる知識のレベルとして「黄色い本」「カステラ本」がカバーする一般的な機械学習の知識があること、というのを要件として挙げておきました。古典中の古典の黄色い本はベイズベイズしていますが「機械学習の教養」として知るべき話題は全てカバーしていますし、カステラ本は行列分解やxgboostと言った最近の話題もカバーしている上に擬似コードを多く収めていて実装の練習にもなります。とりあえず、簡単なPOCで良ければサクッとランダムフォレストかxgboostでスクラッチからでもライブラリ使用でも組めます!というぐらいの腕はあって欲しいと思っています。
そして、猫も杓子もDeep Learningに走るこのご時世ゆえ、完全に単なる教養としてDeep Learningの基礎を理解した上である程度その実装ができること、というのを要件として入れておきました。「これどう見てもスクラッチで組むのと大差なくね」とすら思われたTheanoぐらいしかなかった最初期に比べれば、現在ではTensorFlow (+ Keras), MXnet, PyTorch, ChainerなどなどとDeep Learning実装を容易にする(どころか一定レベルのモデリング手法に関する研究も可能にする)フレームワークが世に多く流布しており、それらのフレームワークに拠ったDeep Learning開発コミュニティの活動も極めて盛んです。その業界の流れにしっかりついていけて、尚且つ実装も出来るべきだというのが僕の意見です。
現実にはそもそもどちらの人材のニーズも限定的
ということでデータ活用人材の双璧についてそのスキル要件をだらだらと語ってみたわけですが、実はちょうど1年ぐらい前の記事でも書いたようにそれらの人材のニーズは少なくとも日本国内では非常に限定的です。上の記事にもあるように「首都圏で合わせて500人ぐらい」というのが大雑把な規模感で、多分500人より多いことはないでしょう。これは嫌味を言っているわけでも何でもなくて、データ分析業界内を見渡していて他の人たちの去就や他の現場のデータ活用体制の変遷を観察しながら、肌感覚でザッと数えた感覚値です。故にかなりいい加減な推論ではありますが、一方でブーム黎明期から業界に身を置き続けている身としてはそんなに外してはいないと思っています。
「首都圏で500人程度」で頭打ちになってしまう理由としては、やはりなかなかデータ活用カルチャーが日本では広まらないという背景があると思います。基本的にどこの企業・現場とも流行り物に形だけ飛びつくのは上手いんですが、中身を伴ったものとしてきちんと着手して一定の成果を残し定着させているところは、ちょっと前までは本当に両手両足の指で数えた方が早いくらいしかありませんでした。
とは言え、個人的な印象としてはクラウドの普及がその流れを変えつつあるかもしれない、と見ています。昔はビッグデータや機械学習のための割とデカいオンプレのマシン*3を用意し、統計学や機械学習に通じているのみならずそれらのメンテも同時に出来るようなスーパーマンがいないとなかなか実務の本番環境に投入するのは難しかったのですが、今はとりあえずデータを取ってきて貯めるだけでも比較的容易にクラウドで出来ますし、計算負荷の分だけ課金できる余裕があるならどんなに重くて巨大なモデリング(統計学・機械学習問わず)の計算もクラウド上で容易に回せます。少なくともハードウェアの制約という点については、ハードルが下がり続けているわけです。
あとは、どれだけ若い人たちが新たに参入してくれるか?かが最重要なキーポイントになるのではないかと。何だかんだで、データ活用系の諸ブームの黎明期を支えた人々は段々アラフォーもしくはそれ以上の年齢に差し掛かり、観察している範囲ではだんだん現場から離れてマネジメントなどに移る人が出ているようです。そうなると手を動かす部門から人が減っていくわけで、そこにいかに若い人たちに入ってきてもらい、フレッシュなアイデアとスキルを持ち込んでもらえるかが大事なのではないかと思います。
なのですが、最近時々耳にする話で「今時の機械学習を学ぶ若者たちはDeep Learningだけが機械学習と思っていてそれ以外の機械学習に疎い」という本当か嘘か分からない噂がありまして。。。そういうことになって欲しくないという願いも込めて、「教養としての黄色い本&カステラ本」を前述のようにオススメする次第です。
雑感など
とりあえず今回は日本国内の話しかしませんでしたが、KDnuggetsやらLinkedInやらを見ていると日本国外ではもっと多種多様なデータ活用人材が求められているようです。日本国内でも想像がつく範囲だと「データセキュリティエンジニア」*4なんかもありますが、面白いのは「データ品質エンジニア」*5とかですかね。海の向こうはデータ活用産業の規模が大きい分、業務も細分化して様々な職種があるようです。
今のところ日本国内では統計分析メインのデータサイエンティストと機械学習メインの機械学習エンジニアの2職種が大半ですが、いずれもっとデータ活用カルチャーが広まってその業務も細分化して大きなエコシステムに育っていくことを期待したいと思います。もっとも(例えば)US並みになるのに何年何十年かかるか分かりませんが。。。
追記
機械学習エンジニアの友人にこの記事の感想を聞いたところ、以下のようなリプをもらいました。
データサイエンティスト向けの東大出版の統計学シリーズは、3巻全部はちょっときついかなと。
2巻は必要だけど、3巻目は必要に応じてぐらいででいいんじゃないかという感じでした。
アヒル本はもう必須スキルになりつつあるんですね。。。あれはいい本でした。
「Chainer使ってたけどscikit-learnって簡単でびっくりした」っていうこっちがびっくりする人がいて、とにかくなんでもかんでもDeep Learningすればいいだろって人が結構いるので、猫も杓子もというよりかは、逆転している人がいる感じです。
現場の機械学習エンジニアは、様々なビッグデータのミドルウェアの知識と、機械学習にかけるまで大規模データからメモリに乗るレベルに整形して正規化して持っていくスキルと、大量のデータを扱うスキル(数十G〜数TB)、アプリやプラットフォームに載せるためのコーディングスキルがけっこう大事ですね。
東大出版統計学シリーズの3巻目は、ファイナンス・社会科学系データが対象なので場合によっては知識としては使わない人もいるというのはその通りかなぁと*6。機械学習に関してはやはり本番環境に載せる作業特有の様々なスキルが大事なんだなと思いました。ご参考までに。