最終更新日:
データサイエンティストとして長いキャリアを有する同氏は機械学習プロジェクトを以下のような6つのフェーズに分け、それぞれのフェーズにおいて取り組むべき課題とその課題に対するアドバイスを説きます。
- 問題の定義:機械学習によって解決すべき問題を定義する。問題の定義とともに、問題解決に成功したと見なせる指標も定義することが重要。
- データ:時間が経過すると性能が劣化する恐れのあるモデルに対しては、リアルタイムの訓練を検討する。訓練データとテストデータのあいだに著しい特徴の相違がないかどうかも確認すべき。
- 評価:データセットを訓練用とテスト用に分割する。「良い結果」とは何かも定義する。モデルがバイアスを生み出さないように訓練と評価を計画する。
- 特徴量:機械学習モデルの精度を最大化するために特徴量をチューニングする。重複する特徴量がある場合は削除する。
- モデリング:モデルの出力結果が解釈可能であるべきかどうか確認する。モデルのアーキテクチャを設計し、ハイパーパラメータをチューニングする。
- 実験:できるだけ早くプロトタイプを試作して製品環境に実装して、フィードバックを得る。フィードバックを得るには、A/Bテストの実施がおすすめ。
以上のように解説したうえで、同氏は機械学習プロジェクトにおけるどんな決定に対しても批判的であるべきとも述べています。というのも、一見簡単そうな決定がプロジェクトの成否に深く関わることがあるからです。
同氏が本記事で伝えようとしていることは、数学と統計学の知識あるいは機械学習技法を実装するコーディングスキルのような純粋に技術的スキルの習得からは得られない機械学習プロジェクトを成功に導く実践的な知恵と言えるでしょう。
以下の前編にあたる記事本文では機械学習プロジェクトにおいて遂行すべきタスクはモデルの構築以外にも数多くあることを指摘してから、「問題の定義」「データ」「評価」フェーズの課題とアドバイスを解説します。
なお、以下の記事本文はRahul Agarwal氏に直接コンタクトをとり、翻訳許可を頂いたうえで翻訳したものです。
機械学習プロジェクトについて考えるためのフィールドガイド
素晴らしい機械学習システムを作ることは、ひとつの芸術である。
素晴らしい機械学習システムを構築している最中には、考慮すべきことがたくさんある。しかし、われわれデータサイエンティストはプロジェクトの特定の箇所にしか注意を向けないということがしばしば起こる。
機械学習システムのモデリングだけに注意を向けるというのがほとんどなのであるが、しかし現実には、機械学習プロジェクトの成否はモデリング以外の数多くの要因に依存している。
機械学習パイプラインはモデルの作成より重要である。
機械学習プロジェクトにおいてはモデルの訓練前、モデルの訓練後、そしてモデルを製品に実装した後に起こることを理解することが不可欠である。
この投稿記事はエンドtoエンドのデータプロジェクトのパイプラインに関係していることを説明するものである。その説明の幾分かは、わたしが自分のキャリアの非常に後になってから学んだことである。
・・・
1.問題の定義
機械学習プロジェクトにおいて、次のことを実行すべきなのは明白である ― それは問題の定義だ。
そして、これこそがプロジェクトの遂行においてもっとも重要となるパートかも知れない。
それでは、どのようにして機械学習の問題を定義するのか?
この問題は数多くの要因に依存している。考慮すべきすべての要素のなかでも、最初に考えるべきなのは機械学習プロジェクトがいかにしてビジネスに利益をもたらすのか理解することだ。
以上の観点はまさにデータサイエンスプロジェクトの聖杯である。もし、あなたのプロジェクトがビジネスを助けないのなら、それは実装されずに終わるだろう。
一旦機械学習プロジェクトを実装するアイデアが浮かび、そのアイデアとビジネスとの適合性を決定したら、プロジェクト成功の指標を定義しなければならない。
それでは、どんな指標が成功したと見なされるのか?
その指標は90%の精度かも知れないし、95%、あるいは99%かも知れない。
わたしは幸いにも70%の予測精度を成功指標としたことがある。というのも、そのプロジェクトにおいてヒトの予測はこの成功指標を超えることが決してなかったので、予測プロセスを自動化するに至ったのだ。
留意すべきなのは成功指標として高尚な目標を設定すべきではない、ということだ。精度が1%上がる度に成功にどんな影響を与えるのか、論理的あるいは感情的観点から考慮すべきなのである。
例えばクリック詐欺を予測するアプリにおいて予測精度が1%向上することは、レビューのセンチメント予測において精度が1%向上するよりもビジネスのボトムライン(※註1)を引き上げる。
すべての予測精度向上が等価なのではない。
・・・
2.データ
あなたの機械学習モデルのためにデータを獲得したり作り出す時に、答えなければならないいくつかの疑問がある。
答えるべきもっとも重要な疑問は、次のようなことである。あなたの機械学習モデルはリアルタイムで動作する必要があるのか?
もしリアルタイムで動作しなければならないケースであるならば、データストレージにHiveあるいはHadoopのようなシステムを使うことができない。なぜならば、そうしたシステムはレイテンシー(処理遅延)をもたらすものなので、オフラインのバッチ処理に適しているからだ。
あなたのモデルはリアルタイムの訓練が必要なのか?
(※訳註)上記グラフは横軸に時間、縦軸に予測精度が設定されている。右肩下がりという特徴は、時間の経過とともに予測精度が低下していることを示している。
もし上図のようにあなたの機械学習モデルのパフォーマンスが時間の経過とともに低下するならば、リアルタイムの訓練を検討しようと思うかも知れない。リアルタイムの訓練はほとんどのクリックを予測するシステムに関して望ましい。というのも、インターネットのトレンドは比較的早く変わってしまうからだ。
モデルのテストデータと訓練データのあいだで矛盾はないか?
以上の疑問は、次のように簡単に言うことができる。機械学習モデル製品が扱うデータは、そのデータとは特徴分布が異なる訓練データに由来していないか?
以上について事例を挙げて説明すると、次のようになる。クリックを予測する問題についてリアルタイムに訓練する時、ユーザに広告を見せてすぐにはクリックしなかったという状況があったとする。この状況はクリックする予測が外れたサンプルケースなのか?典型的なユーザは広告を見てから10分後にクリックするかも知れない。しかし、あなたはすでに広告を見てすぐにクリックするというケースに関するデータを作り、そのデータを使ってモデルを訓練してしまっている。
あなたのモデルのためにデータを準備するに際しては、非常に多くのことを考慮しなければならない。モデルのそれぞれの処理段階で成功を収めるためには、疑問について答えを出して処理の隅々まで考慮しなければならない。
・・・
3.評価
われわれはどのようにして自分たちのモデルのパフォーマンスを評価するのだろうか。
モデルの評価に関するゴールドスタンダードとは、データを訓練用とテスト用に分割して検証することだ(※註2)。
データをサンプリングすることによって訓練データとテストデータを分けたデータセットを作ることにおいてしばしば起こるのが、次のような暗黙の想定を忘れてしまうことだ。その想定とは訓練データとテストデータが相互に独立しながら、同一の特徴分布を持っていることなどまれである、ということだ。
以上のことを簡単な用語で言えば、それぞれのデータポイントが相互に独立しながら同じ特徴分布に由来しているという想定は、全くの間違いではないものも完全に正しいわけでもない。
以上のことをインターネット企業に関して言えば、2007年からサンプリングしたデータポイントは2019年に由来するそれとは非常に異なっている。このふたつのデータは同じ特徴分布に由来していない。というのも、インターネットに関するデータの特徴を決める要因は数多くあるのだが、その要因のうち通信スピードが主要なものであるからだ。
もしイヌとネコを識別する問題に関わっているならば、ランダムに画像データをサンプリングしても十分良い結果が得られる。しかし、機械学習モデルのほとんどにおけるタスクは未来を予測することだ。
あなたのデータを訓練用とテスト用に分割することを考えた時、データをランダムにサンプリングするよりは時間的変数を使ってそうするだろう。例えばクリックを予測する問題では過去のデータのうち先月までのデータを訓練用にして、先月のそれを検証用にすることができる(※註3)。
データの特徴が一様ではないデータセットを用いて評価する場合に有効な方法が、k-分割交差検証である。この評価方法ではテストデータの分割を複数回繰り返して訓練と評価を繰り返すことで、データセットの偏りに起因する予測精度の乖離を緩和する。ホールドアウト検証とk-分割交差検証の違いを図解すると、以下のようになる。
翔泳社『深層学習教科書 ディープラーニングG検定(ジェネラリスト)公式テキスト』第4章 4-2.手法の評価 1.データの扱いより画像を引用
あなたが次に考えなければならないことは、ベースラインとなるモデルだ。
時系列データを扱うモデルの評価指標として、RMSE(※註4)を使うことについて考えてみよう。われわれはテストセットを用いてモデルを評価し、RMSEとして4.8を得たとする。
4.8というのは良いRMSEなのか?良いということをどうやって知るのか?良いと判断するには、ベースラインとなるRMSEが必要となる。それは、評価したいモデルと同一のタスクを実行している現在使っているモデルから得ることができる。あるいはサンプルとなるモデルを使っても得られる。時系列モデルの場合は、上回るべきベースラインは昨日の予測精度になる。例えば、昨日の何らかの数値に関する予測精度となる。
自然言語処理を使った分類モデルのためには、わたしは(Bag of wordsを算出する)Countvectorizerから得られたロジスティック回帰モデルの(分類精度、F1スコア、loglossのような)評価指標値をベースラインとして設定している(※註5)。
- 各データの実績値に対する予測値の誤差を計算し二乗する。
- 二乗した誤差を合計する。
- 二乗誤差の合計値をデータ件数で割って二乗誤差の平均値を算出する。
- 二乗誤差の平均値の平方根を算出する。
類似の誤差測定手法に平均絶対誤差(MAE:Mean Absolute Error)があり、この手法では誤差を二乗しないで誤差平均の平方根を算出する。RMSEは算出過程で誤差を二乗するので、MAEより誤差を大きく評価できる。
F1スコアとは予測精度を評価する指標で、単にF値と呼ばれることが多い。F値は予測値と実際の値の関係をまとめた混合行列から計算することができる。
LogossとはLogarithmic Lossの略称で、分類モデルの性能を測る指標。0~1の確率値をとる。分類が完全に正しい場合は0となり、分類をすべて間違うと1となる。
また、あなたのモデルが不要なバイアスを生まないように複数のグループを対象として評価を分割する方法についても考えなければならない。
昨年、秘密裏に開発していた採用AIツールが女性に対する偏見を示していたというAmazonに関するニュース(※註6)があった。機械学習モデルをこうした矛盾から救うためには、複数のグループに関してモデルを評価する必要がある。もしかしたら女性に関係した訓練データが男性のそれより少ないために、女性に関する予測精度が男性のそれより不正確かも知れないのだ。
あるいはある製品が購入されるか、もしくは見向きもされないかを予測するモデルが特定の製品カテゴリーでは十分に機能するが、ほかの製品カテゴリーではそうならないということもあり得る。
以上のような評価にまつわる諸問題について前もって留意したうえで、特定の評価アプローチでうまく行かない時に注意深く考えれば、良い機械学習モデルを設計する助けとなるのだ。
こうした傾向が生じたことに関して、同記事はふたつの原因を指摘している。ひとつめはAmazonが採用したい人材は理工系の人材なのだが、女性の学生は人文科学を専攻している割合が高いので女性を選ぶ確率が下がってしまったと考えられる。ふたつめはコンピュータサイエンス学科を卒業している女性が少ないために、やはり女性を選ぶ確率が下がったと推測される。
Amazonの採用AIは、「優れたエンジニアになるかも知れない女性」を見落としてしまうという重大な欠陥がある。この欠陥は、AIの学習が失敗したというよりは「エンジニアには男性が多い」という社会的な偏りをAIが増幅してしまった事例と言える。
・・・
▼後半はこちら
原文
『Six Important Steps to Build a Machine Learning System』
著者
Rahul Agarwal
翻訳
吉本幸記(フリーライター、JDLA Deep Learning for GENERAL 2019 #1取得)
編集
おざけん