データサイエンティスト採用における技術評価

　私はデータサイエンティストではないのですがが、データサイエンティストと共に働くことは頻繁にありました。それらの経験から、もし私がデータサイエンティストの技術面接を担当するとしたらどのようなことを評価したいかを書いてみることにします。勿論、実際に面接をするのは所謂"Head of Analytics"であったりするので、私がここに書いた観点以外のことから評価されることも多いとは思うのですが、「それでもデータサイエンティストと働いている人はどういうことを期待しているのか？」ということは、面接を突破するうえでは役に立たなくても、将来入社した際に内部の人間にどのようなことを期待されるのかのイメージを作るにあたっては少しは益になるものではないかと思います。
　なお、一般に採用試験は以下の5つ工程からなるかと思いますが、今回は面接と言っても下の「3.技術面接」の話をします。
　･1. 書類審査
　･2. 簡易的な電話面接
　･3. 技術面接
　･4. 一般面接
　･5. 筆記試験

#1. 概要・構成
　まず、面接の目的ですが、一連の質問を通して、<b>①「候補者のデータサイエンスに対する知見とプログラミング能力を評価する」</b>ことと<b>②「データサイエンスに関連する問題に取り組む際の論理的思考プロセスを評価する」</b>ことの2点となります。もし私が面接をするとしたら、確認したいポイントは上記2点に集約されます。これらを踏まえ、1時間程度の面接を行うとすると以下の様に設計するかと思います。

||①-A データサイエンス|①-B プログラミング|② ケーススタディ|
|---|---|---|---|
|時間配分|30%|30%|40%|
|質問数|1問程度|1問程度|1問程度+追加質問|
|質問内容|･A/Bテスト、仮説検証<br>･p値、t検定などの有意性の検定<br>･機械学習アルゴリズム<br>･次元の削減<br>･モデルのチューニングと最適化|･データ構造とデータの前処理（pandas)<br>･Pythonを使った機械学習<br>･データクエリの概念と基本的なSQL<br>･SQLクエリの効率的な書き方|･プレディクティブ・モデリングのフレームワークとベスト・プラクティスへの精通度合い|

#2. 質問内容(データサイエンス/プログラミング)
　もし私が面接の質問案を作らなければならないということになれば、以下の様な内容のものを作成すると思います。どのレベルの質問を選ぶかは、候補者の採用レベルに依存する感じです。

||トピック|レベル|質問|
|---|---|---|---|
|①-A|機械学習|Basic|Feature engineeringとは何か?<br>Feature engineeringをどうモデルや分析に活用するか?|
|①-A|機械学習|Advanced|リッジ回帰がラッソ回帰より有利になるのはどんな時か？|
|①-A|機械学習|Advanced|次元削減手法をいくつか解説してください<br>特定の状況でどの手法を使うかはどのようにして決めるべきか?|
|①-A|機械学習|Intermediate|ベイズの定理とは?<br>機械学習の分野でどのように役立つのか?|
|①-A|機械学習|Intermediate|L1正則化とL2正則化の違いを説明してください|
|①-A|統計|Basic|定性的データ、定量的データそれぞれにおいて有効なdata processing手法にどのようなものがあるか?|
|①-A|統計|Intermediate|left skewed distribution、right skewed distributionとは何か?|
|①-A|統計|Intermediate|中心極限定理(CLT)とは何か?<br>それはどのように応用できるか?|
|①-A|その他|Intermediate|予測モデル開発の各段階（data scoping、data processing、feature engineering、モデルの構築とテスト、モデルのモニタリングなど)におけるベストプラクティスは何だと思いますか?|
|①-A|その他|Intermediate|モデルデザインの定義(目標変数の選択、observation windowの定義など)のために行われるdescriptive analyticsの例をいくつか教えてください。|
|①-B|Python|Basic|リストとタプルとは何か?<br>両者の主な違いは何か？|
|①-B|Python|Basic|複数の数値列のnull値を平均値で置き換えるには?|
|①-B|Python|Basic|NumPyとSciPyの違いは何か?|
|①-B|Python|Advanced|Pythonのジェネレータとイテレータについて説明して下さい|
|①-B|Python|Advanced|パイソンのコンパイルとリンク処理はどのように行われるのか?|
|①-B|Python|Advanced|Pythonが終了するたびに、なぜ全てのべてのメモリが割り当て解除されないのか?|
|①-B|Python|Advanced|Pythonでの継承について例を挙げて説明してください|
|①-B|Python|Intermediate|ネガティブ・インデックスとは何か?<br>何のために使われるのか?|
|①-B|Python|Intermediate|Pythonのラムダ関数について説明して下さい|
|①-B|Python|Intermediate|データフレームに欠損値があるかどうかを確認するには?|
|①-B|SQL|Basic|主キーとユニークキーの違いは何か?|
|①-B|SQL|Basic|DDL、DML、DCL、TCLの違いは何か?|
|①-B|SQL|Basic|外部キー制約を使うことの意味は何か?|
|①-B|SQL|Basic|SQLのパターンマッチングとは何か?|
|①-B|SQL|Basic|SQLのNVL関数とNVL2関数の違いは何か?|
|①-B|SQL|Basic|「BETWEEN」と「IN」の条件演算子の主な違いは何か?|
|①-B|SQL|Advanced|HAVING句とWHERE句の違いを説明して下さい|
|①-B|SQL|Advanced|OLTPとOLAPの違いは何か?|
|①-B|SQL|Intermediate|ビューとは何か? 例を挙げて説明してください。|
|①-B|SQL|Intermediate|UNION、MINUS、INTERSECTコマンドとは何か?|
#3. 質問内容(ケーススタディ)
　ここでは実際に模擬的なケースを作成し、候補者の方にこのケースではどのように振舞うかを質問して論理的な思考プロセスを探っていきます。
　具体的には、ケース事例を説明した後以下の様なことを聞いていくかと思います。

* 今回のケースにおいてはどのようなユースケースが思い浮かびますか?
* 今回のケースにおける課題を解決するために、ユースケースのロードマップを作成するには、どのようなアプローチが必要でしょうか? ユースケースを1つ例に挙げ、そのようなユースケースを構築し、価値を獲得するためのエンドツーエンドのアプローチを説明して下さい。
* あなたの分析のアプローチ（上記で説明したもの）に対するサポートをどのようにしてステークホルダーから得ますか?
* それらを一度構築した後、全体でデータとアナリティクスの採用をどのように拡大しますか？

　もし時間があれば以下の様な問いも聞いていきたいと思いますね。

* クレジットカードの購入情報のデータセットが与えられており、それぞれのレコードには不正なものと安全なもののラベルが貼られています。あなたが不正検出アルゴリズムを構築するように求められた場合どのようにしますか?
* ある地域の大手銀行は、SNSへの投稿やオンラインでの消費習慣などのデータに基づいて、信用スコアを作成し、融資判断をしようとしています。あなたは、どのようにして信用スコアを計算しますか?
* 第三者のデータプロバイダーから顧客に関する有用なデータ提供の申し出がありました。それらのデータが価値あるものか否か、どのように価値を評価し、経営陣にどのように報告しますか?
* ウェブサイトにおける顧客の行動履歴データをもとに、デジタル顧客行動の理解を深めるためにどのような分析を行えますか?

　もし私がデータサイエンティストを面接するとしたらどのようなことを尋ねるのかをザっと考えて書いてみました。勿論、実際に面接を行う質問リストを作成してくれと指示されればもっと時間をかけて精緻に作ることになるでしょうが、大まかには以上のような形になるかと思います。