データ分析プロジェクトでは、何らかの分析手法を利用することになります。予測モデルを作るなら教師あり学習手法を用いてモデル化していくでしょうし、じっくり探索するような場面ではグラフや統計モデルを使いながらあれこれ試行錯誤するかもしれません。
分析の目的、つまり問題設定によってデータ分析アプローチは大きく変わります。その一方で、同じような問題であったとしても、利用できるデータ分析手法はたくさんあります。
もし、コストと時間を無限に使えるのでしたら、世界中にある分析手法をすべて試して最も問題に適したアプローチを採用すればよいでしょう。しかし、現実にはそれは難しいことですし、分析チームが古今東西のすべての手法に精通するというのも現実的ではないと思います。
そこで、すべての分析手法を試す時間がないときに「線形手法と非線形手法の両方を試してみる」という戦術をよく使います。これは、回帰のような予測タスクであっても、教師あり学習手法を用いた探索であっても同様です。特に分析の初期フェーズでは問題の難しさを見るうえで便利です。
分類問題の例
例えば、離職予測モデルを作るような場面を想像してみましょう。
シンプルに3か月以内に離職する・しないを予測したいのであれば、問題設定としては「分類問題」になります。一方、そのリスクを常時モニタリングしたいのであれば、予測として取り扱って回帰問題と見立てるか、もしくは、何らかの統計モデルを使ったスコアリングの問題とすることも可能かもしれません。
ここで、もし分類問題として離職予測を実現するなら、教師あり学習手法を使って予測モデルを構築していくことになります。離職の有無を目的変数、予測に必要な様々な情報を説明変数として集めて学習していくわけですね。
さて、このような分類問題を解くとき、どのような手法を用いればよいでしょうか?
問題の重たさや構造をすばやく把握する
予測性能を重視するのであれば機械学習系の手法を使うのがよさそうですが、一口に機械学習といっても様々な手法が存在しています。実問題に対して万能な手法はなく、問題とデータに合わせて以下のような手法群から選ばなくてはなりません。
- ロジスティック回帰
- 罰則付き線形モデル
- 一般化加法モデル
- SVM
- k-NN(近傍法)
- アンサンブルツリー(Random Forest, XGBoost, LightGBM)
- DNN(ディープラーニング)
時間とコストが許されるのであれば、すべての手法を試して最も精度がよい手法を選べばよいでしょう。近年では手ごろに使えるAutoMLもありますので、それを活用してもよいかもしれません。
その一方で、予測モデルの構築においては、予測手法の選択だけでうまくいくわけではありません。特徴量の設計やデータの集計、モデルの階層化など、様々な工夫をして初めて実用になることもよくあります。少なくとも、これまで私が取り組んできたプロジェクトではそうでした。
そのため、何らかの形で問題の重たさや特性にあたりをつけながら、分析手法を効率よく絞り込んでいくことが求められます。その際、線形モデルと非線形モデルを一つずつ試すことで、いろいろな情報を手に入れることができます。
予測における線形手法とは、説明変数と目的変数の関係を直線で記述する手法です。数学的にいうと一次式 y = ax + bで表現できる関係ですね。線形モデルは複雑な関係を記述することはできませんが、解釈性に優れていて計算も速いので今もよく使われます。
一方、複雑な相関関係を利用して精度を上げたい場合には非線形モデルが適しています。精度面でいうと非線形モデルだけでいいのではないかと感じますが、必ずしもそうとは言い切れません。モデルによってはノイズやデータの誤りに弱いものもあるからです。
テーブルデータの予測問題であれば、例えば罰則付き線形モデル(Elastic Netなど)とアンサンブルツリーを試すことで、問題の難しさやノイズとなる変数の多さが見えてきます。
なぜ問題が難しくなるのか?
過去の経験を振り返ってみると、データテーブルの中で説明変数と目的変数を指定して学習アルゴリズムに突っ込めばOK!というタスクにはめったに出会えませんでした。また、DNNよりも簡素な手法の方がトータル的によかった、ということもありました。昔も今も自組織の外にいるクライアントの依頼を受けたプロジェクトが中心ですので、シンプルな問題は持ち込まれなかったのでしょう。(AutoMLで解決できる問題は自組織で解決されるでしょうから)
ところで、なぜこうしたことが起こるかというと、実問題は常に厳しい条件下にあるからです。現場的な感覚から具体的にあげていくと、以下のようなことが難しさを生んでいるように感じます。
- 目的変数と説明変数の関係について、真のメカニズムが不透明である。
- 手元の目的変数と説明変数の関係を記述できるモデルがたくさんある。
- 予測に必要な情報が欠落しているか、十分でない。
- 予測精度を悪化させる情報が混在している。
- 目的変数のラベルの一部が誤っている可能性がある。
- 学習に利用したデータが解きたい問題に対して普遍的でない。
- 予測結果が業務プロセスに直結していない。
- 目的変数と説明変数の構造が変化する可能性がある。
このうち1と2は問題設定自体の難しさ、3~6はデータに関するリスクを示しています。一方、7と8は業務運用の問題で、予測モデルを組み込んだシステム全体の問題にかかわってきます。これらが複雑に絡み合うことで簡単に解けない状況が生まれるのでしょう。
こうした話は教科書にはあまり出てこない話かもしれません。
教師なし学習タスクの場合
それでは教師なし学習タスクの場合はどうでしょうか。
一例として、従業員の能力やスキルを記録したデータの次元削減を考えてみましょう。従業員の能力・スキルの測り方は様々ですが、ここでは何らかの方法によって従業員一人一人の能力・スキルが量的変数で測られているとしましょう。そして、項目数は30もあり、集計したり可視化したりしてみたものの、うまく活用できていない状況だと想定します。
このような状況で期待されることとしては、例えば、
- 能力・スキルの情報と組織パフォーマンスの関係を知りたい。
- 職種や部門別に戦力の特徴や分布を把握して課題を探りたい。
- 人材育成施策と能力・スキルの関係を把握したい。
などの分析ニーズが想定されます。いずれも仮説検証でなく、傾向を探るための探索的な分析になります。
さて、ここで人事担当者の方が感じることの一つが、能力・スキルの項目が多すぎて傾向をつかめない、というものです。また、他の項目との関連を調べるために重回帰をやってみたがよくわからなかったという話にもしばしば出会います。
こうした状況で、まずは初手として、30項目から構成された能力・スキルのデータを何とか要約してみることを求められたとしましょう。ただし、現時点で有力なアカデミック分野の仮説がないので、データから洞察してほしいという相談です。仮説もなしに分析するのは大変難しいものですが、データ活用の初期段階では割とよくある話です。
そこで、30項目の量的変数を統計的に要約し、人事属性や組織属性と突き合わせることで特徴を把握することにしました。端的にいうと次元削減タスクです。
ノーヒントで次元削減をするのであれば、まず初めに思い浮かぶのが主成分分析(PCA)です。解釈性に優れていますし、重要度順にアウトプットしてくれるので重宝している方も多いのではないでしょうか。
一方、次元削減の手法は主成分分析だけではありません。もしデータが非負(ゼロ以上)であれば非負値行列因子分解(NMF)も使えます。また、独立成分分析(ICA)もあります。
また、非線形手法としてt-SNEやUMAPなどの手法も近年よく使われます。次元削減とは話が違ってきますが、要約手段としてクラスタリングも使えるかもしれません。
こうのように、教師なし学習手法もまた多種多様なので何らかの選択を行わなくてはなりません。予測問題と違ってモデル選択の基準となる「予測精度」がないので、手法の選択にはより一層悩むのではないでしょうか。
このこんがらがった状況を解決する便利なツールは見当たりません。問題設定や目的に合わせて、制約や仮説を想定しながら試行錯誤していくことになります。
このとき、私が実践している工夫は以下のようなものです。
- 解釈性に優れた手法を用いてアウトプットを出し、クライアント(ドメイン知識のある方)とディスカッションを重ねていく。
- 様々な分野の先行事例を参考にして発想を広げる努力をする。
- 手掛かりをつかむために、線形手法(主成分分析など)と非線形手法(UMAPなど)の両方を試す。
なかなか難しい状況ですが、ここでも線形と非線形手法の両方をできる限り試すようにしています。そうすることでクライアントとのディスカッションを深めることができますし、まれに思わぬ発見につながることもあります。
今回は多種多様なデータ分析手法を選択する際の工夫として、線形手法と非線形手法の両方を試すという戦術をご紹介しました。仮説検証のようなカチッとしたタスクではこうした試行錯誤は不要かもしれませんが、予測タスクや探索の場面ではワークすることもあります。