(Image by Dirk Wouters from Pixabay)
この記事は毎年恒例のスキル要件記事の2021年版です。昨年版は以下のリンクからご覧ください。
今回は、試験的に「データアーキテクト」についても触れています(詳細は後述)。残り2つの職種については基本的な内容はそれほど大きくは変わっていませんが、先般公開した推薦書籍リスト記事の時と同じ変更点が一つだけあります。それは「機械学習エンジニアのスキル要件」は今回は想定していない(というか例示できない)という点です。これまた詳細は後述しますが、端的に言えば「分野ごとの細分化が過剰に進んでいる」という印象があるためです。
ということで、前回までとは違って「職種ごと」に定義とスキル要件(書けるようであれば)を挙げていくスタイルになっています。なお、言わずもがなですが以下に挙げる3職種の説明は僕個人のこれまでの経験や見聞や伝聞をもとに構成したものであり、何ひとつauthorizeされたものではないという点を予めご了承ください。
データサイエンティスト
2012〜13年に第一次ブームを迎えて以来すっかりお馴染みとなった感がありますが、その定義やスキル要件は未だにデータ分析業界の内外で食い違うことも多く、業界内でも人や組織によって異なる上に、時代の変化とともに移り変わるという側面もあると感じています。
定義
今回からは「定義」の話もした方が良いかなと考え、サブセクションを設けることにしました。その上でまず「データサイエンティスト」の定義について僕個人が考えるところを書き出してみると、以下のような感じになるかと思います。
- データサイエンティストは「アナリスト」の延長
- 統計分析で「意思決定を支援する(場合によっては自ら意思決定する)」のがメイン
- 必要に応じて機械学習で「自動化の推進」も進める
- オールラウンダー的な立ち位置のため、必要に応じてデータ基盤・データ活用体制の構築も担う
依然としてデータサイエンティストと言ったら「アナリスト」の延長上にあるというのが僕の認識ですが、現実には「データ周りの何でも屋」になってしまう側面もある上に、データ分析体制の全体像を把握して適切に指揮も取れるという立ち位置を想定しているため、このような定義になっています。
スキル要件
ジュニアレベル
- 一般的なアナリストとしてのスキル
- 『Rで学ぶ確率統計学』シリーズに該当する統計学の知識
- はじパタに該当する一般的な機械学習の知識
- ジュニアレベルの汎用的なスキル
シニアレベル
- ジュニアレベルのスキル全て
- ベイジアン統計モデリングの知識と確率的プログラミングのスキル
- ジュニアレベルの機械学習エンジニアの機械学習に関するスキル
- 「Kaggleで勝つ」本レベルの一般的な機械学習の知識
- 一般的なNN / Deep Learningの知識
- ML designの考え方を身につけていること
- 統計的因果推論及びそれに基づく実験計画法を含む効果検証の枠組みの知識と技術*2
- 統計分析をアナリスト業務に用いる上で生じる解釈の問題や意思決定プロセスへの関与の仕方について詳しいこと
- シニアレベルの汎用的なスキル
- 一般的なシニアアナリストorシニアエンジニアとしてのスキル
- AutoMLなどデータ分析自動化技術の最先端の開発動向について十分にキャッチアップしていること
- 専門とするビジネス領域においてデータ分析体制の構築や戦略を担ってきた経験
データサイエンティストのスキル要件はそれほど手を加えていません。端的に言えばジュニアレベルは「アナリストに統計学と機械学習の毛がちょっと生えたくらい」で、シニアレベルは「データサイエンティストとしてデータ分析体制全般の構築と指揮を取れる」「技術的な詳細を把握した上で戦略立案ができる」というレベル感を想定しています。
その意味で言うと、やはり「より踏み込んだことができるアナリスト」であるべきだというのが個人的な意見です。即ち、アナリストとして戦略・戦術レベルの意思決定を最適なものにすることがデータサイエンティストのメインの職務であるべきで、そのためのデータ分析(特に統計分析)において概して実務的に最も大きな問題たり得るのが因果推論だと思っています。実際、現実社会におけるデータの多くは様々なバイアスに冒されており、これを適切に補正しなければ真実とは真逆の結論に達してしまうことすらあり得ます。統計的因果推論と実験計画法の知識の習得を求める所以です。
一方で、ある程度は他の機械学習エンジニアやデータアーキテクトの仕事と重なる領域もこなせて欲しいと僕個人は考えています。理由は単純で、ある程度決まったパターンの定型的な統計分析を繰り返すようなケースでは機械学習を導入した方が早いケースもありますし、あるいはデータ分析に使うデータをまとめるために最初のうちは自前でデータ基盤の整備もこなさなければならないことが多いからです。その点でデータサイエンティストは「アナリスト寄りのオールラウンダー」とも言えるのかもしれません。
機械学習エンジニア
2017年版で初めてデータサイエンティストとは異なる固有の職種だと提唱したのですが、それと同時期から実際に機械学習システムの研究開発を専業とする職種については従前のデータサイエンティストとは別に募集されるケースが増えてきたので、個人的には良い着目点であったかなと感じています。
一方で、Kaggle隆盛以降世間では「機械学習エンジニア」が「データサイエンティスト」をオーバーライドしているという印象もあります。これについて皆さんのお好み次第でと言いたいところですが、個人的には「アナリストとエンジニアとは互いに守備範囲が違う」と認識しているので、出来る限り両者は分けて扱ってもらえたら有難いところです。
定義
これも前回の定義をある程度踏襲していて、基本的には「(ソフトウェア)エンジニアの延長」だと見ています。というのは、機械学習の実務への適用というとその大半がアプリやwebサービスなどの「システム」の開発に組み入れられることが多く、必然的にシステム開発を担当するエンジニアとしての業務もこなせることが求められがちだからです。
そしてもう一点、現在の機械学習分野の学術的・技術的進歩は日進月歩を超えて秒進分歩という有様であるが故に、「何に機械学習を使いたいか」という目的に応じてその時々で最適な機械学習モデルやアルゴリズムは日に日に移り変わっていっています。そういう時代においては、arXivなどで最新の論文を常時チェックして最先端の研究開発動向を把握している必要があり、場合によっては自分たちで目的にベストフィットするモデルやアルゴリズムを創り出さなければならないことすらあります。特にシニアレベルであれば、それらの研究活動を担えることも大事な要件だと考えられます。
スキル要件
ジュニアレベル
- 一般的なエンジニアとしてのスキル
- システム設計が出来る
- テストや運用が出来る
- システム開発手法に秀でている…etc.
- 一般的な機械学習の知識
- 一般的なNN / Deep Learningの知識
- ML designの考え方を身につけていること
- ジュニアレベルの汎用的なスキル
シニアレベル
- ジュニアレベルのスキル全て
- 自身が扱うドメイン(画像・音声・自然言語……etc.)に特化したデータ前処理・事前分析の技術
- 自身が扱うドメインに特化したNN / Deep Learning技術
- ML Opsのスキル及びその十分な実務経験
- 各種トップカンファレンスやarXivの論文含めてNN / Deep Learning含む機械学習分野の最先端の研究開発動向に詳しいこと
- 実際に自身で研究開発を遂行する能力(optional)
スキル要件そのものはそれほど大きくは変えていないつもりですが、ジュニアレベルは「エンジニアが機械学習も出来る」ぐらいの雰囲気に留めてある一方で、シニアレベルは「機械学習システム開発プロジェクト全体を指揮できる」ぐらいのレベル感としています。特にML Opsはその最たる例で、それまで機械学習が導入されていなかった現場にゼロから導入する際にはどうしてもML Opsの考え方を踏まえた包括的なアプローチを取る必要があることがままあります。そういうプロジェクトでもしっかり方向性を定めて取り仕切れるような機械学習エンジニアこそ、「シニア」と呼ばれるに相応しいのではないかと思う次第です。
ところでお気付きの方もいるかと思いますが、「一般的な機械学習 / NN / Deep Learningの知識」の「一般的」などのレベル感を表す尺度として以前は特定のテキストの名前を挙げていましたが、今回からは割愛しています。
その理由は今年の推薦書籍リスト記事にも書いた通りで、要は「あまりにも機械学習という分野自体が対象テーマ(テーブルデータ・画像・自然言語・レコメンデーション…etc.)ごとに何もかも細分化し過ぎていて、そもそも一人の汎用的な専門家が全ての対象テーマをカバーし切れるという雰囲気がない」ためです。これを踏まえたのがシニアレベルの技術レベルに関する説明で、要は「自分が担当するドメインに最適な機械学習に通暁しているべき」ということです。
特に最近は自然言語処理向けNNの進歩がめざましく、毎年のようにSOTAを更新するモデルやアルゴリズムが登場している有様ですし、他方で例えばGraph Neural NetworkのようなこれまでNNが扱ってこなかったような構造のデータに対してもNNが適用されるようになり、ドメインごとの機械学習によるアプローチは多彩さと複雑さがどんどん極まっていくばかりです。
よって、「シニアレベルだから〇〇以上のレベルで機械学習が出来る」というようなレベル感の設定は根本的に見直し、あくまでも個々人が担当するドメインに特化した機械学習を実践できる」ことを重視するように今回のスキル要件では書き換えています。
データアーキテクト
実は僕がこれまで所属してきたデータ分析チームの多くで陰に陽に確立されてきた職種なのですが、ここ数年関心が高まってきているように見えるので試験的に今回の記事から入れてみることにしました。ちなみにデータアーキテクト(データ整備人)の定義や立ち位置については旧知のしんゆうさんがだいぶ以前からまとめて下さっているので、そちらもお読みになると良いでしょう。
定義
- データアーキテクトは「DBエンジニア」の延長
- データ利活用業務のために、データ基盤・データ活用体制を構築&整備する
- データ基盤のオーナーシップを持つことが多く、付随する業務として分析向けデータ抽出やダッシュボード構築なども請け負う
僕個人の理解では、元々DBAとかDBエンジニアと呼ばれていた人たちがデータ分析業務を専業とするようになり、データ基盤の構築と整備を行うようになったのが「データアーキテクト」の始まりです。ポイントとしては「必ずしも本番環境のDBを扱っているとは限らない」点で、往々にしてデータ分析目的専用のデータ基盤を整備している*3人が多いようです。
スキル要件
データアーキテクトに関してはジュニア・シニアのレベル差がまだ個人的にはピンと来ていないので、一旦全レベル共通のスキル要件的なものをリストアップしておきます。
全レベル共通
これらは僕自身が過去に一緒に仕事してきたデータアーキテクト(データ整備人)の人たちがどんなことをしていたかを思い出しながら列挙したもので、中にはかつて僕自身が担っていたこともある業務もあるので雰囲気としては何となく分かります。要は「DB多数からなるデータ基盤を束ねて管理し活用するためのスキル」であり、ここを起点としてデータサイエンティストや機械学習エンジニアの仕事が回っていくということを想定したものです。
ただ、概してデータアーキテクトという仕事はもっと素朴なデータ集計・監視業務も含むことが多い印象があり、例えばエグゼクティブが日々の数字をチェックするためのダッシュボード構築のような「手法はシンプルだが影響力としては大きい」仕事を手がけることもままあるように見受けられます。その点では、データサイエンティストや機械学習エンジニアよりもさらに「ビジネス職種」としての適性が求められるのかもしれませんが、現状ではそこまで踏み込んだスキル要件を定義して良いかどうか分からないので、一旦は上記の内容に留めています。
コメントなど
言いたいことは去年のこちらの記事でも大体書いていますが、データサイエンティストにせよ機械学習エンジニアにせよ、はたまたデータアーキテクトにせよ、「『勉強』というインプットだけをして満足するのではなく、『研究開発』でも『課題解決』でもはたまた『Kaggleで上位入賞』でも良いので、何かしらアウトプットして欲しい」と個人的には願う次第です。
去年書いた別の記事でも指摘したように、統計分析も機械学習も未だになかなか社会には浸透し切れていないのが実情です。そういう状況の中では、勉強して「インプット」するばかりで社会のために何も「アウトプット」せずにいれば、いずれは「役立たず」「用無し」のレッテルを貼られてしまいます。2012年に始まったデータサイエンティスト・ブームの9年間の歴史は、そういう過剰な期待と、期待が裏切られたことによる幻滅と反発の繰り返しによって成り立っているのです。
なればこそ、形は何であれ「アウトプット」して欲しいと個人的には思います。研究活動をして論文を発表する、または実際に優れたプロダクトやソリューションを作り出して会社や社会に貢献する、はたまたKaggle以下各種コンペで上位入賞してみせるなどなど、とにかく「アウトプット」を残すことを意識してもらえると有難い限りです。可能なら公開事例化やプレスリリースはたまた公式ブログなどでの事例共有もしてもらえると嬉しいところですが、NDAなどの兼ね合いで難しい現場も多いかと思いますので、そこは「あれば尚良し」ということで。