(Image by Pixabay)
この記事は、昨年の同様のスキル要件記事のアップデートです。
正直言って昨年バージョンとの差分は殆どないのですが、一応この1年間の業界の進歩を踏まえて僅かながらアップデートしてありますので、ベースとなっているスキル要件についてさらっと概観した上で、差分となるアップデート部分について簡単にコメントしておこうかと思います。
なお、いつもながらの断り書きですが。言うまでもなく、この記事の内容はあくまでも僕の個人的な意見にして、なおかつ僕自身がこれまでの経験と見聞に基づいて「これまで自分が属してきた組織やチームにおけるデータサイエンティストや機械学習エンジニアはこうだったor今後はこうあって欲しい」という最大公約数的な経験談や願望を書き並べたものに過ぎません。よって何かの組織や団体の意見を代表するものではありませんし、況してやauthorizeされた意見として見られるべきものでもないという点、予めご了承くださいm(_ _)m そしてこれまた毎度のお願いですが、「うちの会社・チームではこのように考えている」というようなご意見(ご異見)をお寄せいただけると有難いです。
基本的な考え方
従前通り、スキル要件とは別に以下のように明示しておきます。
今でも業界内で異論があることは承知していますが、僕個人の考えでは「データサイエンティストはアナリスト」「機械学習エンジニアはエンジニア」だと見ています。言い換えると、それぞれ「アナリストの仕事に統計学や機械学習を持ち込んだもの」「エンジニアの仕事に機械学習を持ち込んだもの」だという理解です。
2020年の現在に至っても僕の観測範囲では依然として、アナリストは「都度情報を分析し結果をレポーティングして意思決定に貢献する」のが仕事で、エンジニアは「システムを開発して何かしらの自動化されたアウトプットを出して事業に貢献する」のが仕事であるように見受けられます。アナリストやエンジニアの仕事を統計分析や機械学習によってさらにブーストさせる。それが、データサイエンティスト及び機械学習エンジニアという仕事であろうと考えています。
ただし、何度も書いていますが2013年にまず「データサイエンティスト」という職種がブームになり、その後の空前の人工知能ブームが2016年に始まって以降「機械学習(人工知能)エンジニア」という職種が人気になったという経緯があるため、前者は広汎に「データ分析」全体を担うことが多い一方で後者はエンジニア領域に特化していることが多いというのが僕の認識です。この点を踏まえた上で、スキル要件について触れてみたいと思います。
ジュニアレベル(駆け出し)のスキル要件
まず「駆け出し」とも言えるジュニアレベルのデータサイエンティスト・機械学習エンジニアのスキル要件を挙げてみます。ここで想定しているのは「新卒でデータ分析職に就こうというキャリア初期の若手」であったり「他のキャリアからデータ分析に関連する勉強をしてきてデータ分析職としてのキャリアに新たにジョブチェンジしようとしている人たち」といった層です。
データサイエンティスト
- 一般的なアナリストとしてのスキル
- 『Rで学ぶ確率統計学』シリーズに該当する統計学の知識
- はじパタに該当する一般的な機械学習の知識
- 一般的なエンジニアとしてのスキル
- システム設計が出来る
- テストや運用が出来る
- システム開発手法に秀でている…etc.
- 「Kaggleで勝つ」本レベルの一般的な機械学習の知識
- Goodfellow本レベルのDeep Learningの知識
- ML designの考え方を身につけていること
二者共通の要件
一応、「これだけの知識があれば2020年現在『一人前』と見做される程度の一般的な統計分析and/or機械学習の業務ができる」レベルのスキル要件を挙げてみました。総論としては、ジュニアレベルのデータサイエンティストや機械学習エンジニアが担う業務というと「アナリストやエンジニアとしてのタスクに高度なデータ活用が加わった」ぐらいのレベル感と思われるので、「既存業務+アドオンとしての高度なデータ分析」という枠組みの範囲内でデータ分析業務をこなすに足るだけのスキルセットを並べてみた次第です。
シニアレベル(熟練職人)のスキル要件
次に、「熟練職人」としてある程度指導的立場に立つことが期待されるシニアレベルのスキル要件です。こちらはジュニアレベルのスキルがあることを大前提とした上で、そこに専門家及び指導者としてのバリューをどれだけ上乗せしていけるかという点を重視しています。
データサイエンティスト
- ジュニアレベルのスキル全て
- ベイジアン統計モデリングの知識と確率的プログラミングのスキル
- ジュニアレベルの機械学習エンジニアの機械学習に関するスキル
- 「Kaggleで勝つ」本レベルの一般的な機械学習の知識
- Goodfellow本レベルのDeep Learningの知識
- ML designの考え方を身につけていること
- 統計的因果推論及びそれに基づく効果検証枠組みの知識と技術*2
- 統計分析をアナリスト業務に用いる上で生じる解釈の問題や意思決定プロセスへの関与の仕方について詳しいこと
- ジュニアレベルのスキル全て
- 講談社MLPシリーズ・黄色い本(PRML)及びカステラ本(ESL)に相当する汎用的な機械学習の知識
- 各種トップカンファレンスやarXivの論文含めてDeep Learning諸系統の最先端の研究開発動向に詳しいこと
- 機械学習を実システムで運用する上で生じる効果検証及びシステム設計の問題や技術的負債及びバイアスについて詳しいこと
二者共通の要件
- 一般的なシニアアナリストorシニアエンジニアとしてのスキル
- AutoML技術の最先端開発動向について十分にキャッチアップしていること
- 専門とするビジネス領域において各種データ分析手法を適用してきた&適用せずにあえて見送った実務経験
「これだけのスキルがあれば、個々のデータ分析の現場で『上級職』として戦うことができ、場合によっては指導的立場に立ってチームを引っ張ることが出来る」レベルのスキルをリストアップしてみたつもりです。このレベルになると「データ分析の特質・特性を活かした新規プロジェクトをゼロから立ち上げる」ことが求められると思うので、それを可能にするスキルセットとなると大体上記のような感じになるはずです。
細かい説明など
TL;DR 以下、個々のスキル要件についての細かい説明を書いていきます。アップデートはそれほど多くなかったつもりですが、意外と長くなってしまいました。。。長文ご容赦くださいm(_ _)m
なお、今年バージョンの推薦書籍リストにおける「初級」及び「中級」の前半の方の書籍群がカバーする範囲が概ね「ジュニア」、「中級」の後半及び「テーマ別」の書籍群がカバーする範囲が概ね「シニア」のスキルを指すものと想定しています。
ジュニアレベル
イメージとしては、データサイエンティストであれば一般的なA/Bテスト・効果検証・回帰モデルなどの統計分析や、ちょっとした機械学習を用いた要因分析を行う感じです。例えばロジスティック回帰でコンバージョンへの寄与要因を探し出すとか、ランダムフォレストなどの非線形分類手法で変数重要度を見るなんてこともあるはずです。
機械学習エンジニアであれば、一般的な機械学習全体の知識があった上で、さらにある程度Deep Learningの理論の概要を知っていて実装もやれた方が、実際に業務で使うかどうかは別として様々な意味で「ためになる」と思われます。個人的には「Kaggleで勝つ」本が良いベンチマークになるのではないかと思っています。Xgboost / LightGBMのような「割と手軽に高精度を出せる手法」の詳細や、なおかつそれらのチューニングや特徴量エンジニアリング及びML design(詳細は後述)についても知っていることは、「一人前」としてやっていく上では重要なことだと考えます。
加えて、二者の共通要件として以前から挙げている「DB基盤技術(SQL含む)」「クラウド」「前処理&特徴量エンジニアリング」に加えて「AutoML技術の知識」を入れています。DB・クラウド・前処理&特徴量エンジニアリングについてはもはや説明を要さないと思いますが、AutoML技術については今後どこの現場でも「省エネで機械学習(人工知能)プロジェクトを回す上での必需品」になることが見込まれます。そのためにも「一通り回してみる」程度でも良いので使い方の知識はあって損はないと思います。
そして、これまた従前通りの主張ですがデータサイエンティストを志すならば「アナリスト」としての経験が、機械学習エンジニアを志すならば「エンジニア」としての経験が、それぞれあった方が良いと思います。即ちアナリストならばBIツールなどダッシュボードに基づくインサイトレポートや定型化されたA/Bテストなどもできるべきでしょう。機械学習エンジニアならば、まずエンジニアとしてシステム開発の仕事ができなければならないわけで、その意味ではきちんと本番環境を構築できるということも当然求められるスキルだと思います。
で、ここからが前回のスキル要件記事とは異なる点で、データサイエンティストに関してはRCT/DIDのような統計的因果推論の初歩を踏まえた効果検証の知識があることを、機械学習エンジニアに関してはML designの考え方を身につけていることを、それぞれ求めています。理由は単純で、最近は受け手のリテラシーが上がってきたせいかある程度きちんと因果推論を踏まえたマーケティング実験の類が求められるケースがアナリスト業務では多く、一方で機械学習システム開発業務でも「モデルの作り方やその実装はできても肝心の精度が上がらない……」みたいな話がチラホラあり、それがML design系の知識の不足に由来することがままあるからです。
この辺の「統計学や機械学習そのものの知識ではないがこれがないとそれらの真価を発揮することができない」という知識を持っていることが、ジュニアレベルといえども一人前のデータサイエンティスト・機械学習エンジニアたる上で必要なポイントだと個人的には思っています。
シニアレベル
こちらはあまり差分がないので、簡単にまとめておきます。
まずデータサイエンティストですが、強調したいのは3点。「ある程度機械学習も扱える」「一定レベル以上の統計的因果推論の知識があること」「統計分析の結果をビジネスに反映させる術を知っている」ことです。1点目はデータサイエンティストが若干データ分析の何でも屋的な立ち位置にあることから、「普段は統計分析をしているが時々自動化が必要な仕事が出てきたら機械学習を使ってシステム化したい」みたいなニーズにも対応できるようにあるため。2点目の「一定レベル以上」とは『効果検証入門』で扱われる以上の統計的因果推論の知識を指します。RCT/DIDは当然のこととして、傾向スコアや場合によっては回帰不連続デザインなども駆使して「可能な限りどんなケースの因果推論も」こなせることを期待したいです。3点目は言うに及ばずで、統計分析した結果をビジネス上の意思決定層に正しく伝えるのは経験者なら分かると思いますが、往々にして至難の業。そのために最適なエビデンスが得られる統計分析アプローチを選んだり、可視化を工夫したり、ストーリーを練る、といった工夫を適切に行えることを求めています。
また「ベイジアンモデリングの素養」ですが、どちらかというとアナリスト業務で頻出の時系列データの分析には状態空間モデルなど明らかにベイズ統計の枠組みの方がやりやすいアプローチを要するものが多いこともあり、シニアレベルのデータサイエンティストならば自在に操れた方が有利だと思っています。
次に機械学習エンジニアですが、特に変更点はありません。強調したいのは2点だけで「最先端の研究開発動向にも通じている」「機械学習の実システム開発&運用のバッドプラクティスを熟知している」ことです。1点目は多分去年より今年の方がさらに深刻で、今や多くのテクノロジー企業どころか普通の事業会社などでもDeep Learning含む機械学習技術の研究開発に血道を上げており、気付いたら競合他社が最先端の機械学習アルゴリズムを実装してビジネス上の成果を挙げていて自社を引き離していた、なんてことも珍しくなくなりつつあります。そんな「最先端」をキャッチアップし続けるためにも、各種トップカンファレンスやarXiv論文などを常時サーベイしたり、あるいは自ら研究を行って論文を出すというのも程度問題ながら重要でしょう。2点目は有名な「機械学習の技術的負債」論文(日本語の要約記事)を踏まえた要件です。この辺は最近ではML Opsとして提唱されている考え方でもあるので、興味のある方はML Ops関係の資料なども読まれると良いかと思います。また、依然として公共の課題に機械学習システムを適用する場合はバイアスというか「公平性」の問題が生じることもあります。これについてはTechChrunch Japanの記事がよくまとまっていると思います。前回も書きましたが、「現実の社会が何かしらの差別を(遺憾ながら)行っているのであればそこから得られたデータに基づいて作られた機械学習システムもまた同じ差別を働く」のだと思っています。なればこそ、シニア機械学習エンジニアともなればバイアスや公平性の問題についても熟知しているべきだと考える次第です。
最後に二者の共通要件として、純粋に「シニア」としてのスキルがあることと「社会実装」の実務経験があることに加えて、ジュニアレベルの時よりもさらに踏み込んで「AutoML技術の最先端開発動向のキャッチアップ」を求めています。スキル面において「シニア」であることは鼎の軽重を問われることがある現実世界の業務の場では重要ですし、「社会実装」の実務経験を持っていることはそれ自体が統計学や機械学習の成果が未だ社会に浸透し切れていない現状では極めて貴重です。そしてAutoML技術についてですが、ジュニアレベルでは「使えれば良い」程度だった一方で、シニアレベルでは「ある程度向こう1年ぐらいの開発動向を見越して動ける」「その展望を織り込んでプロジェクトの立案ができる」「さらにはAutoMLによる省力化を前提として開発リソースを差配できる」ことを求めたいところです。
機械学習プロジェクトを手掛けたことのある方ならご存知かと思いますが、どのような規模のどういうレベルのものにせよ機械学習プロジェクトを回すというのは結構しんどいものです。上記の技術的負債論文でも指摘されているように、ただモデルの精度を上げるだけでも結構手間なのに実際にはその周囲の整備も大変だったりします。その意味ではAutoML技術(特にクラウドで提供されているもの)を活用することは積極的な省力化につながりますし、それはイコールscalabilityの向上にもなります。はい、まさにこれは完全に僕自身のポジショントークですが(笑)、実際に僕の周囲ではAutoML技術の活用による機械学習プロジェクトの拡散的普及が起きていますので、実感としてもやはりAutoML技術の導入は今後の機械学習ビジネスでは必須だろうと見込んでいます。その際に例えば「ベータ版だが新機能を用いればこの〇〇という課題はAutoMLで自動化できる」という見当をつけられれば、大きなアドバンテージになるのではないでしょうか。
プログラミングスキルに関する要件は?
前回の記事でも書きましたが、アウトプットとして何が出来るかを重視する観点から、Rが良いとかPythonを使うべきとかC++は書けた方が良いとかプログラミングがこの程度出来るべきと言った「プログラミング言語要件」は全面的に外しています。その代わり「これくらいのアウトプットが出せるなら必然的に相応にプログラミングは出来るはず」という前提を置いたつもりです。
とは言え、データ分析関連のパッケージが強いわけでもないRubyやPerl一本で頑張るとか、需要があるからと言ってCOBOLに特化するとか、そういうのは流石に辛いかなと。。。その意味ではあくまでも一般的なスキルとして、C++やJavaで例えばLeetCodeの割と上のレベルまで解けるぐらいのプログラミングスキルがあれば良い、みたいなのはあっても良いのかもと思います。僕は全然解けませんが(泣)。
「多々益々弁ず」は避けるべし
この手のスキル要件談義になると、現在でも例えば「データサイエンティストや機械学習エンジニアを名乗るならKDDやらNeurIPSやらトップカンファレンスに毎年論文を載せられるくらいの人材でなければダメだ」「一流のデータサイエンティストなら研究論文も書けてビジネスも回せるべきだ」「機械学習を生業にするのならKaggleのMaster以上でなければならない」などという声が度々挙がるのを見聞きします。勿論、そういう実力の持ち主が理想的だというのには僕も同意します。
しかしながら、そういう議論に欠けているのが「どれくらいのスキルがあれば最低限どれくらいのレベルの仕事が務まるのか」という「最大公約数」の発想です。なるほど、あれもこれもとスキル要件を付け足していけば勿論理想的で優秀な人材像に近付いていきます。でも、やり過ぎればオーバースペックというかoverqualifiedになってしまいます。自社に例えば莫大な数のアプリを抱えるエンターテインメント基盤があり、そこに数十数百ものアプリタイトルがあってこれらに順次機械学習による機能改善を実装していきたいとなったとしましょう。そういう時に、数十人数百人もの「NeurIPSに毎年論文を載せられる」人材を無理してでも採用するのは果たして正しい判断でしょうか?
以前から異口同音に書いていますが、機械学習にせよ統計分析にせよデータ分析プロジェクトは「適材適所」の組み合わせからなるチームプレーであるべきだと僕は考えています。言い方を変えると、1人のシニアレベル人材が「全部」のスキル要件を満たしていなくても良いはず。数人〜数十人で互いにスキルをオーバーラップさせながら「合わせて全部」の要件を満たすようにチームを作っても機能するのではないでしょうか。そういう合理的な発想をせず、ひたすら「多々益々弁ず」という態度で超弩級の人材を沢山探し続けても、どだい無理な話と思われます*3。あまり個々人のスペックに多くを求め過ぎないこと、そしてその時点でのデータ分析チームに必要なバランスの良い人材を探すという考え方が必要だと考えます。
ただ、時々聞く話として一つだけ補足しておくと「何かのスキルに尖ったトップクラス人材を採用するなら1人だけにせず最低でも2人以上採用すること」を提唱しておきます。何故かというと、チームに1人だけ(例えば)「NeurIPSに毎年論文を通せる」猛者がいたとしても、その人以外のチームメンバーが全くそうではない人たちばっかりだったりすると、「相談できる相手がいない」「一緒に議論できる仲間がいない」などの理由で退職して出て行ってしまうことがままあるからです*4。
専門チームである以上は「おしゃべり課題解決コンサルおじさん」ばかり集めてもいけない
前回の記事に引き続き、今回もこの点は強調しておきます。以前の記事でも書いた通りです。
概して、何事であれヒトは易きに流れるもの。大半のビジネス実務の現場では、放っておくと「小難しい統計学や機械学習のような代物を使ってデータをこねくり回すよりも神Excelのようなまだ素人が見ても分かりやすいような方法で分かったつもりにさせてくれるようなデータ分析をしてくれた方がマシ」みたいな声が挙がりがちです*5。
結果として、世間ではデータサイエンティストや機械学習エンジニアにも「技術的スキルよりもむしろビジネススキル」を求めるべきという話になりがちで、どう見ても上記の「ジュニアレベル」のスキルレベルにも達しないような素人に毛が生えたかどうかも怪しくてセールストークだけが上手いメンバーばかりが「データサイエンティストと自称」して低クオリティな仕事ばかりしている、というチームの話は枚挙に遑がありません。
勿論、単に売り上げを立てて儲けたいだけならばそれもアリというか、当人たちの勝手だとは思います。ただ、それならデータサイエンティストとか機械学習エンジニアとか名乗る(名乗らせる)のはやめるべきでしょう。上記の以前の記事にも書いたように、技術的スキルを重視せずビジネススキルしか重視しないのであれば、それは単なる「おしゃべり課題解決コンサルおじさん」でしかないのです。
こう書くと今でも「別におしゃべり課題解決コンサルおじさんでも課題を解決してくれるならいいじゃないか」という声が飛んでくるものなのですが、そうすると困ることが出てきます。代表的なのが「今時はAutoML技術の進歩で付け焼き刃でもそれっぽい機械学習モデルができてしまう」ことによる問題点です。上記のようにML designの枠組みを身につけていないとAutoMLだろうが何だろうがまともな機械学習はできないのですが、それすら踏まえないおしゃべり課題解決コンサルおじさんが全力でleakageや不均衡データを踏んだAutoMLモデルを持ってきて「ほら見てみろ、正解率99.99%もいっただろ!お前ら専門家に偉そうに言われなくても俺たちでもこれくらいのことはできるんだよ!」とドヤ顔して喚くというシチュエーションが、既に実際にあったとかなかったとか。。。
統計分析でも事情は同じです。例えば、おしゃべり課題解決コンサルおじさんが付け焼き刃の重回帰分析で後から後から毎月のように新たな説明変数を付け足して更新していったモデルで「年々精度の高いモデルになって役員会での意思決定に役立ちます!」と会社の役員会の場で喧伝した挙句、実は過去データ(学習データ)への当てはまりだけが良くなっていて汎化性能の低い過学習したモデルになっていると気づかず、ある日を境に突然全く予測が当たらなくなって困った、なんてことになったらどうしますか?*6 統計学や機械学習を誤用したことによる副作用の多くは、いざ実際のビジネス目的で使われてしまった後では笑い話では済まないのです。
何度でも繰り返しますが、「多々益々弁ず」が良くないのと同じように「技術スキルなんて適当で良い」もやはりダメなのです。両者のバランスが重要だということを改めて強調させてください。
最後に
今回はあまりアップデートが多くなかったので、前回「最低でも次回からはデータサイエンティストと機械学習エンジニアとで記事を分けることにします」と書きましたが結局分けませんでした(笑)。ということでお後がよろしいようで。。。