(Image by Wokandapix from Pixabay)
個人的な観測範囲での話ですが、データサイエンティストという職業は「21世紀で最もセクシーな職業」として刹那的な注目を集めた第一次ブーム、人工知能ブームに煽られて火がついた第二次ブーム、そして「未経験から3ヶ月で人生逆転」ムーブメントと折からのDXブームに煽られる形で沸き起こった第三次ブームを経て、何だかんだで社会に定着してきた感があります。
で、このブログを始めた頃からの連綿と続くテーマになっていますが、いつの時代も話題になるのが「データサイエンティスト(になるに)は何を勉強すべきか」ということ。7年前から恒例にしてきた「スキル要件」記事では、基本的には「どれも必要な知識(学識)」であるという前提で分野・領域・項目を挙げてきました。少なくとも、最初の3回ぐらいはそういう認識でスキル要件記事を書いていた気がします。
ところが、データサイエンティストブームが始まってから10年が経ち、取り巻く学術・技術的な環境も大きく様変わりしていったことで、自分が見ている範囲では「必ずしも必要だから学ぶわけではない」「そのため最近参入した人だと知らなくて当たり前」という項目が徐々に増えてきたように思います。代表的なのが近年のNN手法の隆盛で、例えば「Transformerなら幾らでも自分で組んで回せるけどSVMが何なのか全く知らない学生が沢山いる」みたいな話を聞くことも増えてきています。ほんの5年前なら聞かなかったような技術トレンドが今は主流どころか既に廃れ始めている、というような話はもはや日常茶飯事です。
ということで、今回の記事ではこの10年に渡るデータサイエンティストという職業の歴史を踏まえつつ、「ビジネス実務家として働くデータサイエンティスト(になるに)は何を勉強すべきか」について改めて考察してみようと思います。なおいつもながらですが、記事中に事実誤認や理解不足などがあればコメントなどの形でご指摘くだされば幸いです。
「何を勉強すべきか」は3つに大別できる
冒頭でも書いた通りですが、ブーム勃興から10年が経ってある程度成熟してきたデータサイエンティスト業界において、その学識・知識についても「全てが業務に必要」とは限らなくなり、徐々に互いに温度差が出てきているように見受けられます。勿論、恒例のスキル要件記事でもここ数年指摘してきたように「データサイエンティスト」「機械学習エンジニア」「データアーキテクト」の3職種の区別が段々強くなってきたという側面もあります。それに加えて各種ライブラリやフレームワーク、さらにはクラウド機械学習の進歩に伴って、「必ずしも全部自分でやらなくても良くなった」ものも増えてきています。
そこで、今回は主に「アナリストの延長」に当たる「データサイエンティスト」即ち現在でも需要の多い「オールラウンダータイプのデータ分析職」に的を絞ることにします。その上で、ここ最近のデータ分析業界の傾向として「どの学術・技術的事項がどんな括りに分けられるか」を観察してみると、概ね以下の3つに分けられそうです。
- 「教養」
- 「必須」
- 「差別化」
以下、この3項目のそれぞれについて具体例を挙げながら、何故このように分類できると考えたか、さらには各項目を学ぶことにどのような意義があるか、について考察してみようと思います。
「教養」に当たる項目
一つ目の「教養」は、端的に言えば「近年の実際の仕事では使う機会が限られたりそもそも使われることがなかったりするが、隣接領域や発展事項を学ぶ上では役に立つので知っておくと良い」項目を指します。これは意外と少なくなくて、実際僕が10年前にデータ分析業界に参入した頃は「皆が学んでいて当然だった」にもかかわらず、ここ2年ぐらいは「そういう項目があることは知っているけど中身は全然知らない・ライブラリを使って実行できるだけ」と言われてしまうものがかなり増えたような気がします。以下にそれに該当すると思われるものを列挙してみます。
帰無仮説有意性検定(NHST)
「統計的仮説検定」といった方が分かりやすいでしょう。t検定、分散分析(ANOVA)、カイ二乗検定といった手法が代表的かと思いますが、基本的に頻度論ベースの手法なのでその解釈が厄介であったり、またp値というか「p < 0.05で有意」でなければ分析自体に意味がないと見做されやすい*1点があり、観測範囲では「とりあえずデータをt.test, chisq.test(Rのbaseの場合)とかttest_ind, chi2_contingency(Pythonのscipy.statsの場合)に突っ込めばいいや」みたいな扱いをされていることが多いように見えます。
実際には実験計画法から学ぶ必要がありますし、そもそも再現性問題という厄介な問題もありますし、検定手法自体も例えば「t検定など代表的な手法は『差がある時だけ意味がある』ものばかりで『差がない』ことを示したら非劣性検定が必要」というように掘れば掘るほど沼みたいな側面があり、とっつきにくいのも事実でしょう。そして、今現在多くのデータサイエンティストたちが手がける仕事の中でストレートにNHST「だけ」でA/Bテストの分析をするということ自体が減ってきている*2ようで、わざわざ意気込んで勉強するほどの話でもない、という雰囲気がありそうです。
NN以前の古典的な機械学習手法
僕がかつて2014年にKDDに参加した頃は、industry trackの発表というと「特徴量エンジニアリングはかくかくしかじか、最後の分類問題はロジスティック回帰・SVM・ランダムフォレストのいずれかで解く」みたいなものが非常に多かった記憶があります。
というくらい、ロジスティック回帰・SVM・ランダムフォレストは以前は極めてポピュラーな機械学習手法だったわけですが、近年は特にKaggleなどで「より労力少なく」「より高精度に」という方向性の追求がなされた結果、ほぼGBDT・NN系諸手法に収斂した感があります。それに伴って上記の古典的な手法たちは段々と学習上の優先度が下がっていき、忘れ去られていっているように感じています。ただ、どの手法も「車輪の再発明」が如く自分の手で原理的なアイデアから数式展開して最適化計画を導出し、実装までやってみると色々な学びがあるものばかりなので、今でも学ぶ意義はあると思っています。
古典的なデータマイニング手法
昔はデータサイエンス関係の技術書というと、結構な割合でアソシエーション分析(association rules)を取り上げていたように思います。あまりにも有名な「おむつとビール」ネタは確かそこから始まったものだったと記憶しています。が、近年刊行された技術書を見ていると取り上げているものはほぼ皆無のように見えます。これは行列分解系の手法などレコメンデーション技術が進歩したことで登場する機会がなくなったという側面が大きいのかなと思います。同じ理由で、グラフ・ネットワーク分析についても専門書で取り上げられることはあっても、データサイエンス系の総合的な技術書には載っていないことが多いようです。
この辺の項目は、もしかするともっと一般的なEDA(発見的データ分析)のテキストなどでは紹介されているのかもしれませんが、いずれにせよ「データサイエンス」の本流からは外れていると見做されるようになってきているのかな、という印象があります。
測度論的確率論やその他の基礎理論体系
ええ、これこそが僕がずっと習得しておくべきだと認識していながら未だに習得できていない「教養」の最たる例ですorz これらの基礎理論体系は、どちらかというと「新規の統計学・機械学習の分析手法」を研究し考案する際には有用なもの*3なので、新規手法の研究開発をしない人にとってはあまり意味がないかもしれません。
とは言え、後述する「必須」項目の中にも出てくるような「最先端の研究論文を読んで最新の分析手法をマスターする」上ではそれらの知識が必要になることも多く*4、やはり「教養」として学んでおいて損はないのではないかと思っています。勿論これは僕自身への戒めですorz
「必須」項目
二つ目の「必須」は、読んで字の如く現在のデータサイエンス実務において必須と思われる技術群です。ある意味ここが時代と共に変遷するが故に、「教養」や「差別化」の内容もまたそれに依存して移り変わると見るのが正しいのでしょう。そして、この項目は同時に現在巷にゴマンと溢れる「初心者向けデータサイエンス教材」たちの内容の最大公約数を取ったものに近い内容ではないかと思われます。即ち、良くも悪くも「今これらを知っていればデータサイエンティストの仕事が出来てお金を稼げる」ということですね。
線形モデル族による回帰と予測
現在でも「初手ロジスティック回帰は一つの選択肢」という話題が出るくらいなので、今もなお線形モデル族の出番は絶えることはないと思っています。機械学習の解釈手法の一つであるLIMEで局所的な線形モデル近似が使われていたのを見れば分かるように、GLMまで含めた線形モデル族は「(回帰による)説明」にも「予測」にも非常に有用です。佐和本で改めて回帰分析の基礎に触れるというのも良いかと。
特に、線形回帰モデルはどちらかというと機械学習寄りの仕事が多く期待される今時のデータサイエンティストにとっては数少ない「統計学方面の手法」であり、例えば多変量解析的なアプローチで多数ある施策のどれが有効だったかを示したいというような課題においては現在でも広く用いられています。t検定やカイ二乗検定が忘れ去られることはあっても、おそらく線形モデル族は今後も多くのデータサイエンティストが学び使い続けるのではないかと思います。
Kaggleで常用されるGBDT・NNなどの機械学習分類器とその適用技法
個人的に、Kaggleが現代の機械学習技術に与えたインパクトの中で一番大きなものは「GBDT・NNのテーブルデータへの適用技法の確立」だと考えています。「教養」のパートでも述べたように、2015年以前は古典的なロジスティック回帰・SVM・ランダムフォレストが「枯れた」分類器だということで好んで使われていたわけです。ところが、Kaggleという「スピード感」と「飽くなき精度向上」が追求され続ける「場」が登場したことで、ともすれば当初「チューニングが難しくて扱いづらい」とされていたGBDTやNNが一躍「コツさえ掴めれば誰でも高精度を叩き出せる標準技法」へと変貌した感があります。
勿論、NNはテーブルデータに限らず画像・テキストデータさらにはその他のドメインのデータにも有用なわけで、「NNの技法に詳しい」こと自体がデータサイエンティストとして働く上では大きなアドバンテージになり得ます。今後もGBDT・NNの技法は長くデータサイエンティストにとっての必須スキルであり続けることでしょう。
それからもう一点。分類器の適用技法には、例えば「適切な交差検証」「正則化」といったメタな部分(以前「MLデザイン」と総称したことがある)も含まれると個人的には考えており、Kaggleはそれらの重要性を広く知らしめる上でも大きく貢献しているように思います。そして、実務の現場で機械学習を手掛けるデータサイエンティストもまた、それらに関する知識を有していることが求められると考えます。
クラスタリング・レコメンデーションなどその他の標準的な機械学習手法
言うまでもなく、機械学習といったら分類器のような教師あり学習に限らないわけで、実務の場面では教師なし学習手法が使われるシチュエーションが数多くあります。クラスタリングなどはその代表例と思われますが、他にもレコメンデーションなどもここに含めても良いかなと思います。イメージとしては教師ラベルを使わずデータそのものの性質を利用する手法群で、K-meansでもPCAでもNMF以下行列分解系の手法でも大体この辺に入るのかなと。
ちなみにこの領域も近年は研究が盛んで色々新規手法の提案があるはずなんですが、僕が把握しているのはせいぜいt-SNEとか時系列に対するDTW (Dynamic Time Warping)ベースのクラスタリングぐらいで、ちょっとキャッチアップ出来ていない感があります。「必須」というからにはお前も勉強しろよ、と言われたらその通りですごめんなさいorz
データ基盤の整備・構築に関する基礎的スキル
これは恒例のスキル要件記事では「データアーキテクト」との重複領域として挙げているもので、平たく言えば「最低でもSQLである程度基礎的な構文は書けて欲しい」とか「Bigqueryの扱い方ぐらいは基礎レベルで良いので知っていた方が良い」*5というぐらいの話ですね。実際にはどこの現場に行っても普通は別にインフラエンジニアがいて彼らがデータ基盤の整備のところまで含めて見ていることが多いと思うので*6、あまり突っ込んだところまで出来る必要はない気もしますが、それでもデータ基盤の整備・構築がどんなものかという知識とそれらを扱うための最低限の基礎的スキルは持ち合わせていた方が無難でしょう。
一般的な開発環境整備に関する基礎的スキル
要は「システム・ソフトウェア開発の際に使う環境の知識」という話です。この辺は時々話題になる「まずGitから覚えるべき」とか「Dockerは必須」みたいな話とも関連してくると思いますが、個人的には「時代によっても現場によっても状況が大きく変わるのでその時々で必要なものをその場で学べばOK」だと思っています。例えば、今現在の僕のチームではGitもDockerも必須ではない上に、Dockerに至っては非推奨ということで業務では全く使いません*7。ただし、当たり前ですがそれぞれの代わりとなる仕組みがあるわけで、それらはどうしても身に付けなければならないわけです。言い方を変えれば「個々の現場ごとに定義される『読み書きそろばん』」ということですね。
そういう意味では、やはり最近だとクラウド環境を使いこなせることが一つのカギになるのでしょう。例えばColaboratoryは僕のチームでも好んで使われていますし、AutoMLツールはクラウドDBと繋いで簡単に使えるものが多いです。とは言えこれもまた「個々の現場ごとに指定されるもの」なので、究極的には様々な現場を渡り歩きながら徐々に知識が増えていくという性質のものなのかもしれません。
「差別化」になり得る項目
最後の「差別化」は、文字通り「まだ世の中にそれらを身につけているデータサイエンティストが少ないので他の人との差別化につながり得る」項目です。既に述べた通り、ここの具体的な内容は確実に時代によっても現場によっても変動するので、この記事で挙げているものが今後もずっと差別化につながるとは保証しかねる点予めご了承ください。
複数のプログラミング言語の習得
いきなり難易度の低い話を持ってきて「お前は何を言っているんだ」と思われそうですが、これは結構重要な話です。特に昨今は巷に溢れる「初心者向けデータサイエンス教材」の影響で「Pythonしかできないデータサイエンティスト」が増えてきているようなので、Python以外の言語も使いこなせるというのは大きなアドバンテージになり得ます。それは勿論RでもSQLでも良いですし、C++やRustといったソフトウェア開発向けの汎用言語でも良いと思います。その辺の言語が書けると、例えばライブラリ開発などでも有用だったりする*8ので割とお薦めです。
ちなみに恒例の推薦書籍リスト記事でも挙げた通りで、RとPythonの両刀遣いになるだけなら最近は良い書籍が色々あります。例えばこちらの『ゼロからはじめるデータサイエンス入門 R・Python一挙両得』は文字通り「全く同じ分析操作をRとPythonの両方で同じように書く」やり方が載っていて、個人的には良い教材だと思います。
最先端の研究論文で提案されているNN手法
これは恒例のスキル要件記事でも挙げている通りで、仮にNNベースの機能が売りのソフトウェアを開発していて競合他社と競争しているならば、常に最新のNN手法を導入してより便利でよりインパクトのある機能開発をしたくなるのが人情というものでしょう。よってarXivに毎日山ほど登録されるNN手法提案論文を読みこなして、それらを素早く実装できるというスキルも重要になってくるはずです。最近だとdiffusion model辺りが注目を集めているんでしょうか?(ここ3年ぐらい全くキャッチアップしなくなった身には浦島太郎状態で全然分からない……)
複雑なベイズ統計手法
恒例のスキル要件記事では一貫してベイズ統計の技法の習得を推奨していますが、理由は極めて単純で「高度に柔軟性のある統計モデリングを行うためには必要不可欠」だからです。一度でもMCMCサンプラーを駆使した階層モデルの威力に触れると、二度と後戻りできないほどの魅力がそこにはあると思っています。個人的にはMMM (Media Mix Modeling)で必ずベイズ統計モデリングを使うことになるため、広告・マーケティング分野のデータサイエンティストは「必修」であるべきとすら考えています。
「複雑な」と言っておきながら『標準ベイズ統計学』を推薦するという矛盾して見えることをやっていますが(笑)、イメージとしてはこちらの書籍で紹介されているようなベイズ統計学の知識があれば十分かなと。要はRStan, PyMC3, TensorFlow Probability, NumPyroを使ってMCMCでベイズモデルの推定が出来れば一旦OKというスタンスです。
統計的因果推論
個人的には『効果検証入門』で取り上げられているレベルで良いので、統計的因果推論の知識を備えていることがデータサイエンティストには望ましいと考えています。が、観測範囲ではここまで身につけている人はデータサイエンティスト業界でもまだそれほど多数派ではないように見えます。比較の問題で言うと製薬や疫学といった医療統計分野のデータサイエンティストは(分野ごとの常識として)統計的因果推論を修めている人が多いように感じています。
しかしながら、それ以外の分野では必要ないかというとそんなことは全くなくて、ちょっとでもサンプル間の異質性*9が混じるようなシチュエーションだと容易にシンプソンのパラドックスが起き得るということは実務系のデータサイエンティストなら誰でも一度は体験したことがあるはずで、そういう時にどのように解決したら良いかの知識があることは重要なはずです。
各分野に固有の体系的知識
最後の最後に物凄く曖昧なテーマを持ってきてしまいましたが、平たく言えば「個々の分野でデータサイエンティストとして存在感を出したかったら各分野のドメイン知識も人並み以上にマスターせよ」という話ですね。海外に目を向けるとMBAも持っているデータサイエンティストというのが珍しくありませんが、個人的にはあれも立派な「ドメイン知識を上乗せした」データサイエンティストなんじゃないかと思っています。
なお僕が最近になって自宅の本箱から発掘してきて読んでみたところ、良かったと思ったのがこちらの一冊。僕が現在身を置く広告・マーケティング業界には歴史的経緯もあって今でも沢山のデータサイエンティストとその志望者がやってきますが、「統計学や機械学習を学んだは良いものの何にどうやって使えば良いのかが分からない」という人が結構多いんですよね。そういう人たちのために「この手法でこの問題を解決できる」というドメイン知識を伝授してくれる、良い指針になるテキストだと思いました。
コメントなど
色々論ってきましたが、基本的には「必須」が業界トレンドに沿った最低限のベースラインであり、「教養」と「差別化」はそのトレンド外にあってあくまでも個々人の努力で積み増して学ぶことが想定される項目なのかなと思いました。言い換えると「トレンド外のところまで自分で掘り下げる」のが「教養」「差別化」項目たちということですね。
例えば、僕個人の認識では統計学分野で「教養」に当たるパートの多くは統計検定1級がカバーする範囲の数理統計学に含まれるのではないかと見ています。東大出版会赤本・青本や竹村現代数理統計辺りはその範囲をカバーするテキストの代表例ですが、最近これらのテキストを推奨する「初心者向けデータサイエンス教材」はあまり見かけない印象があります。勿論、これらのテキストで学べる知識が備わっていても「それだけでは収入は増えない」かもしれませんが、それらの知識を備えていること自体に個人的には大きな意味があると思っています。
それは結局過去にも色々なところで言ってきた通りで「ただデータ分析を回すだけならその回し方だけ知っていれば十分だが、いざトラブルが発生した時に確実にトラブルシューティングをこなすためにはどうしてもその分析手法そのものの本質的な理解が必要になる」からなんですよね。上記の過去記事でも
- 一般的なソフトウェア開発では、原則としてプロダクトはコードを書いた通りに確定的に動く
- 統計分析や機械学習モデルのアウトプットは、原則としてどのようなコードを書きどのように実装しようとも、与えられたデータやモデルの構造や特性はたまたハイパーパラメータに応じて確率的に変動する
と書いた通りで、トラブルシューティングのためにはその「確立的」に変動する部分に対処できる必要があるわけです。それには、分析手法そのものの奥深くにある本質まで踏まえていなければ難しいのです。
今回「教養」「差別化」に振り分けた項目の中には「必須」項目だけでは扱い切れない側面を補うものが含まれていますが、それは往々にしてそういった「本質的な理解」を備えていることが差別化につながり得るということであり、裏を返すと近年急増している俄か仕立てのデータサイエンティストでは手が回り切っていないところでもあるということを意味しています。それがそのまま「大多数の凡庸なデータサイエンティスト」と「ごく少数の成功しているデータサイエンティスト」との差につながっているようにも感じています。
10年前からの最古参世代のデータサイエンティストとしては、これから参入してくる駆け出しの人たちには是非自身のスキルに厚みを持たせるためにも、「必須」だけでなく「教養」「差別化」項目も学んでもらえればと願う次第です。
*1:実際にネイマン - ピアソン流の解釈だとp < 0.05であるかどうかにしか意味がないとされる
*2:A/Bテストツールが自動的にやってしまうという側面もある気がする
*3:VC次元のように「理論的な〇〇の限界」を定めたりするものが多い印象
*4:以前HSIC論文を読んだ時に測度論に基づいて議論を展開しているパートが全然分からなかったという反省がありますorz
*5:自社プロダクトの話ですみません
*6:もっとも今でもその会社で一人目のデータサイエンティストがデータ基盤立ち上げまで含めて全て面倒を見なければならないという話をよく聞きますが
*7:現職の環境については会社公式の論文による解説が公開されているので、興味のある方はそちらをお読みください
*8:ちょっと昔ならCythonが使えるというメリットも良く言われていた
*9:それは即ちバイアスでもある