全6169文字

 コンサルティングファームで働く現役データサイエンティストの視点から、ビジネスに使える最新のアルゴリズムを選んで紹介する本特集。今回は「教師あり学習」で有用なアルゴリズムを2種類、「因果推論」のアルゴリズムを1種類紹介しよう。

■本連載で取り上げるアルゴリズム10選
分類アルゴリズム取り上げる回
教師なし学習k-means第1回
教師なし学習主成分分析第1回
教師なし学習潜在クラス分析第1回
教師あり学習LightGBM今回
教師あり学習ベイズモデリング今回
因果推論Causal Forest今回
時系列分析Prophet第3回
時系列分析ベイズ構造時系列モデル第3回
時系列分析Temporal Fusion Transformer第3回
最適化計算混合整数最適化第4回
本特集 第1回の記事: 深層学習だけではない、業務の現場で「使える」AIアルゴリズムとは

教師あり学習

 「教師あり学習」は分析の対象としたい変数(目的変数)の値に影響を与えている要素(変数)を推計する分析手法だ。第1回で紹介した「教師なし学習」は目的変数を決めずに分析する手法だったので、その点が大きく異なる。

 特にビジネスシーンでよく使うのが「表(テーブル)形式のデータに対する教師あり学習」だ。例えば表形式になった顧客の購買履歴データにおいて、「顧客の貯蓄額」のような数値データや「男性・女性」のようなカテゴリーデータなどの説明変数Xから、売上高や購買の有無といった目的変数yを予測するアルゴリズムである。

表形式データに対する機械学習のイメージ
表形式データに対する機械学習のイメージ
(出所:野村総合研究所)
[画像のクリックで拡大表示]

 「新規顧客の購入確率や単価を予測する」などビジネス上の様々な課題が、こうした表形式のデータに対する教師あり学習の形に落とし込めるだろう。

 ビジネスシーンで使い勝手の良い教師あり学習のお薦めアルゴリズムは2つある。「LightGBM(Gradient Boosting Machine)」と「ベイズモデリング」だ。

LightGBM

ポイント評価
簡便性★★★
汎用性★★★
データ取得性★★★
可読性★★★

 LightGBMは表形式のデータに対する教師あり学習を効率的に解けるアルゴリズムで、汎用性は非常に高い。米Microsoft(マイクロソフト)が2016年にソフトウエアを公開し、2017年に論文で詳細を発表したアルゴリズムだが、2022年現在でもその汎用性は衰えていない。もちろん表形式データの問題を解く他のアルゴリズムもあるが、実務上はLightGBMが扱えればそれで十分とさえいえる。

 LightGBMは一般に使われるようになって数年が経過しているが、現在でも「Kaggleなどのデータ分析競技においてはまずLightGBMを試す」というくらい、高精度で信頼性の高いアルゴリズムだ。そのまま最終的な分析モデルの一部になることも多い。

 LightGBMは「決定木(ディシジョンツリー)」と呼ばれるデータ分析手法を発展させた、「勾配ブースティング」という手法に分類されるフレームワークだ。

 決定木は目的変数に影響を及ぼす条件を抽出するアルゴリズムである。例えばある商品を購入する人の特徴として「男性」「年齢が40歳以上」「貯蓄額が1000万円以上」といった具合に、目的変数に影響を及ぼしやすい順に条件(従属変数)が選定される。分析結果が樹木の枝葉が広がるように表現されるため「決定木」と呼ばれる。

 今日では決定木を発展させ、より精度が高く安定した結果が得られる様々な手法が開発されている。データをランダムにサンプリングしながら決定木分析を複数のグループで行い、グループ間の平均などをとる「ランダムフォレスト」が代表例だ。そしてもう1つの代表例が「勾配ブースティング」である。

 「勾配ブースティング」は決定木を複数回実行しながら精度を高めていく手法の1つだ。1回目の「決定木」の誤差に対して2回目の「決定木」を行い、さらにその誤差に対して「決定木」を行うなど、学習を繰り返すことで精度を高めていく。勾配ブースティングを用いたアルゴリズムとしてはいくつかの方法(XGBoost、Catboost、LightGBMなど)があり、LightGBMではデータ処理が非常に高速(Light)である点が大きな特徴だ。

 LightGBMは他のアルゴリズムと比べ計算負荷が軽いため、大きなデータでも高速に学習できる。試行錯誤が必要なデータ分析において、これは強みとなる。なおLightGBMに使えるPython用のライブラリーはマイクロソフトが無償で提供している。

 アルゴリズムを適用する際には、事前に設定する項目のチューニングが必要となる。主要な項目は学習する決定木の深さや葉の数、機械学習としての学習率などだ。これらを設定すれば自動的に学習できる。実際に使ってみるとデフォルトの設定ではあまり良い結果にならないことも多い。特にデータ量が多くない場合には注意を払いたい。