渋谷駅前で働くデータサイエンティストのブログ

元祖「六本木で働くデータサイエンティスト」です / 道玄坂→銀座→東京→六本木→渋谷駅前

データサイエンティストというかデータ分析職に就くための最低限のスキル要件とは

追記(2017年7月)

こちらのスキル要件ですが、2017年版を新たに書きましたので是非そちらをご覧ください。

「データサイエンティストというかデータ分析職に就くためのスキル要件」という話題が某所であったんですが、僕にとって馴染みのあるTokyoR界隈で実際に企業のデータ分析職で活躍している人たちのスキルを眺めてみるに、


というのが全員の最大公約数=下限ラインかなぁと。そんなわけで、ちょろっと色々与太話を書いてみます。なお僕の周りの半径5mに限った真実かもしれませんので、皆さん自身がどこかのデータサイエンティスト()募集に応募して蹴られたとしても何の保証もいたしかねますので悪しからず。


統計学の知識は「みどりぼん以上」



みんな大好きみどりぼん(緑本)。初歩の初歩の線形モデルから、一般化線形モデル、混合効果モデル、そして階層ベイズMCMCによるパラメータ推定、さらには空間統計モデルという、統計モデリング周り一式をこれ一冊でRコードと共に学べる名著*1です。これ1冊しっかり手を動かして勉強すれば、確実に統計モデリングの最低レベルをマスターできると思います。


実際のビジネスシーンでのアドホック分析はビジネスサイドの人たちの天然なリクエストによって想像以上の難題に発展するケースが多く、意外と階層ベイズをやる羽目になることも多いのです*2。ということでみどりぼん以上の知識とスキルを持っていることが統計モデリングにおける最低限の要件ですよね、ということで。


機械学習の知識は「はじパタ以上」


はじめてのパターン認識

はじめてのパターン認識


これまたみんな大好きはじパタ。本当に基礎からベイズ則・識別関数・kNN・パーセプトロン&NN・SVM・部分空間法・Ward法・K-means・混合正規分布(EM)・アンサンブル学習とランダムフォレストさらには正則化、という感じで教師ありorなし学習の諸手法がバランスよく紹介されていて、その上Rによる出力例もついていて非常に分かりやすいです。


この本の良いところは最低限知っておくべきアルゴリズムの詳細がつかめる程度にはきちんと数式も載っていて、機械学習の鬼門でもあるチューニング周りについて必要な知識も手に入るところかと。実際問題として、ビジネスの現場で機械学習を実装するというとフルスクラッチで書くにせよ、ライブラリ・パッケージを使うにせよ、チューニングが最重要になることが多いので*3その辺の知識を身に付けていることは極めて大事です。


これらのことを鑑みるに、はじパタ以上の知識とスキルを持っていることが機械学習における最低限の要件と考えても良いのではないかと思います。


コーディングスキルは「プロダクトレベルでなくても良いがせめて前処理コードは自分で書けるぐらい」


ぶっちゃけ僕は目下のところ全くシステム業務やってないので偉そうなことはこれっぽっちも言えないんですが*4、いかな他にエンジニアがいようともデータの前処理はどうしても自分でやらなきゃいけません。大抵のデータはアプリサーバのアクションログみたいな形で蓄積されているので、これを片っ端から機械学習や統計モデリングに使えるようなデータテーブルの形に直していくようなバッチ処理は必須と言って良いでしょう。


使う言語は何でも良いと思いますが、普及度とパッケージの充実度と実装のしやすさとロジスティクスの統一と最先端の機械学習手法への対応ぶりを鑑みるに、Pythonが第一選択かなと。その次がR。ただしバッチ処理を書くのには全くお薦めしません。後は王道のJavaを皮切りに、アプリ向けのRuby、そしてC++, C#などなどってところでしょうか。別にGoでもHaskellでも良いとは思いますが。。。


いずれにせよ、本職のエンジニア仕事も請け負わない限りはプロダクトインできるほどの完璧なコーディング力は必ずしも要らないとは思うものの、せめて自分や同僚向けのインターナルな用途のバッチを書ける程度のコーディングスキルは必要ですね。


SQLはそもそも書けないとその時点で詰むかも


この地上にDBを持たないデータ分析部門は存在しないと思ってほぼ間違いないので、DBを触れることはデータ分析のプロたり得るための最低条件と言っても良いと思います。というか、DBを触れなければ自分でデータを持ってくることはできないし、HDFSや(例えば)AWS Redshiftみたいなのを使わないと回らないような超大規模データが相手だと前処理もできないということにもなり、マジで詰みますので。


で、DBを触るということは当然クエリが叩けなければならないわけで、クエリを叩くにはSQLの知識が要りますよねということで、SQLが書けるというのがここでの最低限のスキルと言って良いでしょう。もちろんPostgreSQL, MySQL, Hive, 某O, 某Iとか方言はありますが、どうかなー。。。SQL99以上のものが書ければ大丈夫かなと。


ちなみにDBを自分で立てられないor立てるのが面倒という人は、MS AccessでSQL99みたいなクエリを書いて勉強するという方法もあるので参考までに~。


これらは「最低限」のスキル要件


f:id:TJO:20150313163004p:plain


冒頭にも書いたように、あくまでも「これだけ出来ればデータ分析職としてスタートラインに立てますよね」という最低限のラインを意識してますので、基本的にはこれだけでは実務で舞い込んでくるビジネスデータ分析課題をさばくのはつらいと思います。どちらかというと、これらの最低限のスキル要件を土台として、さらに勉強してより高度なスキルを身に付けていけることが重要なんじゃないかなぁという気がしています。


例えばですが、アルゴリズム実装系なら今大流行のDeep Learning (Deep Belief Net -> ConvNet)とか、アドホック分析系ならMC(MC)サンプラーを駆使したベイジアンモデリングとか、効果測定とかであれば傾向スコアなどに基づく因果推論とか、もちろんトピックモデル以下果てしなく裾野の広がる自然言語処理とか、学術的にもゴツくてビジネスの現場でも今後導入が見込まれる分野はたくさんあります。


ちなみにこの「最低限の要件」に対して「レベルが高過ぎる」「低過ぎる」の反応が拮抗していた感じだったので、カットオフラインとしては妥当なんじゃないでしょうか(笑)。


以上に挙げたのは、勉強し続けてそういう「さらなる高み」に登るための足掛かりとしての「最低限のスキル要件」なのだ、と見るべきだというのが僕個人の意見です。


このブログも炎上ラーニング(笑)を通じて、そういう勉強を僕が進めていくためのものなんですよー。ということでお粗末様でした。。。


追記1


上のピラミッドの中身とか順位とかに色々突っ込まれてますが、昔の記事の使い回し&ぶっちゃけ適当なので。。。とは言えノンパラベイズ(トピックモデル)やフルベイズ系が閾値より下とも思えないので、閾値の上か下かだけをご覧いただき、「順番」は気にしないでいただきたく、ということで。ってかどの分野が上か下かとか言い出すと宗教戦争になる悪寒。。。


あーでも、みどりぼんをmustにすると左側のピラミッドはてっぺんが閾値になりかねないような。。。(汗)


追記2



先週のブクマ数首位でした(白目


追記3


データ分析業界のノルウェーの鮭の生態学な優秀な友人がナイスな反応記事を書いてくれました。当たり前過ぎて僕が忘れかけていた大事なことをうまくまとめてくれているので、よろしければ是非お読みください。

*1:現在の版ではWinBUGSのみ対応でStanに対応していないのが珠に瑕ですが。。。

*2:トレンドと季節調整と干渉変数とレジーム転換が同時に入るとかザラ

*3:ありがちなのがSVMのcostとgammaをチューニングしろとか、ランダムフォレストのmtryをいじれとか、後は何と言ってもNN or DNN or CNNのレイヤーパラメータをいじれとか

*4:かつては僕もHiveだらけのバッチとcrontab書いてましたよ、一応当時はエンジニア扱いされてましたから。。。