機械学習とは何か?
機械学習とは何か? 一言で言うと「今までと少し違うコンピューターの使い方」です。
どこが違うのでしょう?
今までのコンピューターの使い方(演繹的)
これまではやりたいことの手順をプログラムに書いてコンピューターに実行させるのが主流でした。
手順をプログラムに書く例
三角形の面積を計算したい場合、下記の手順(ロジック)をプログラムに書けば完成
- 面積 = 底辺 x 高さ ÷ 2
このプログラム、底辺と高さを入力すれば常に正しい答えを出してくれます。
でも世の中には手順をプログラムで書くのが難しいケースが多くあります。例えば下記2つのケース
- カードの履歴データから不正使用データを見つけたい
- たくさんくるメールの中から迷惑メールを判別して削除したい
カード不正、迷惑メールとも色んな手口があり、新たな手口も出てくるのでそれを全部調べてプログラムに入れるのは無理です。どうすればいいでしょう?
コンピューターにやらせたいことがあるのだが手順が説明できない (=手順をプログラムに書くのが難しい) 、そんなケースで使われるのが機械学習です。
機械学習のアプローチ方法
従来の方法では難しかった下記2つ、機械学習のアプローチをとるとどうなるでしょう?
- カードの履歴データから不正使用データを見つけたい
- たくさんくるメールの中から迷惑メールを判別して削除したい
カード不正利用、迷惑メールとも個々の手口すべてを網羅した検出ロジックを作るのは難しいけど、過去のデータ(カード履歴データや過去のメール履歴)を元に「こういう取引データの場合は不正使用の可能性が高い」とか「こういうメールは迷惑メールの可能性が高い」とか傾向を見つけてそれで不正取引、迷惑メールを判別しよう、というのが機械学習のアプローチです。
学習
カードの方を例にとると、まず過去の履歴データに不正使用、正常取引の情報(これをラベルと呼ぶことにします)を追加したものを用意します。これを『学習データ』と言います。
コンピューターにこのデータをインプットして、履歴データの情報(取引日時、場所、品目、個数、金額、etc...)から不正使用を判別できる方法が無いかを調べます。この方法にはいろんな種類があります、履歴データの各フィールドに重み付けをして不正利用と高い相関関係を持つ重み付けを発見する方法はその代表的なものです。
この学習データを使って最適な重み付けを決定していく過程を『学習』と呼んでいます。
テスト
学習の最に気をつけなければならないのは『オーバーフィッティング』です。これは学習データに特化した形で重み付けを決めてしまったため一般性がなくなってしまって、他のデータでは正しく分類ができなくなる状態を指します。オーバーフィッティングを避けるために学習した重み付けを使って別のデータを分類して、正しく分類できるかを確認します。この過程を『テスト』と呼んでいます。
本番
学習、テストを完了した重み付けを本番環境で使います。本番環境でもデータを使って『学習』していくことでさらに最適化された重み付けにして、分類の精度を上げていくことができます。
データを使ってコンピューターが『学習』し最適な重み付け(パラメーター)を決定していく、このようなアプローチを機械学習と呼びます。
機械学習の特徴
(1) 汎用的である
従来型のアプローチではプログラムにロジックが全てつまっていました、なので用途毎に特化したプログラムを作成する必要がありました。
機械学習の場合、何をインプットデータとして使うかはその道の専門家(カード犯罪専門家やメールセキュリティー専門家)が行います、これを『特徴抽出』といいます。一旦特徴抽出が行われたら機械学習専門家はそのデータが何かをあまり意識することなく学習や推定方法を考えることに集中できます。このような仕組みになっているので機械学習のロジックは汎用的に使うことができる部分が多いです。
従来型のアプローチではプログラムが重要な資産でした、プログラムに知見や技術がつまっていたからです。
一方機械学習ではプログラム自体は汎用的なものでそれだけでは価値を生みません、データを使ってプログラムに学習させて初めて価値を生みます。機械学習アプローチでは質のいい学習データが重要な資産になるのです。
(3) おおよそ正しい
従来型のアプローチでは インプットに対して必ず正解を返していました。
おおよそ正しい、というといいかげんそうですがどのくらいの精度で正しいかは統計的アプローチで説明することができます。
今回例として紹介したのは機械学習の中で『教師有り学習』というものです。この他に教師無し学習、強化学習などいろいろな学習タイプがありますが、どれもロジックをプログラムするのではなくデータを元に学習するという部分は同じです。