最終更新日:
▼前篇はこちら
データサイエンティストとして長いキャリアを有する同氏は機械学習プロジェクトを以下のような6つのフェーズに分け、それぞれのフェーズにおいて取り組むべき課題とその課題に対するアドバイスを説きます。
- 問題の定義:機械学習によって解決すべき問題を定義する。問題の定義とともに、問題解決に成功したと見なせる指標も定義することが重要。
- データ:時間が経過すると性能が劣化する恐れのあるモデルに対しては、リアルタイムの訓練を検討する。訓練データとテストデータのあいだに著しい特徴の相違がないかどうかも確認すべき。
- 評価:データセットを訓練用とテスト用に分割する。「良い結果」とは何かも定義する。モデルがバイアスを生み出さないように訓練と評価を計画する。
- 特徴量:機械学習モデルの精度を最大化するために特徴量をチューニングする。重複する特徴量がある場合は削除する。
- モデリング:モデルの出力結果が解釈可能であるべきかどうか確認する。モデルのアーキテクチャを設計し、ハイパーパラメータをチューニングする。
- 実験:できるだけ早くプロトタイプを試作して製品環境に実装して、フィードバックを得る。フィードバックを得るには、A/Bテストの実施がおすすめ。
以上のように解説したうえで、同氏は機械学習プロジェクトにおけるどんな決定に対しても批判的であるべきとも述べています。というのも、一見簡単そうな決定がプロジェクトの成否に深く関わることがあるからです。
同氏が本記事で伝えようとしていることは、数学と統計学の知識あるいは機械学習技法を実装するコーディングスキルのような純粋に技術的スキルの習得からは得られない機械学習プロジェクトを成功に導く実践的な知恵と言えるでしょう。
以下の後編にあたる記事本文では、「特徴量」「モデリング」「実験」フェーズの課題とアドバイスを述べてから、機械学習プロジェクトに取り組む際の心構えを説きます。
なお、以下の記事本文はRahul Agarwal氏に直接コンタクトをとり、翻訳許可を頂いたうえで翻訳したものです。
機械学習プロジェクトについて考えるためのフィールドガイド
4.特徴量
よい特徴量は、あらゆる機械学習モデルの背骨となるものである。そして、しばしば開発者がもっとも多くの時間を費やす箇所でもある。特徴量こそモデルのパフォーマンスを最大化するためにチューニングできる箇所であることをわたしは見てきた。
よい特徴量の生成は、しばしばドメイン知識、クリエイティビティ、そして多大な時間を必要とする。
加えて、特徴量を生成する試みはモデルごとに異なっているかも知れない。例えば、ニューラルネットワークとXGboostでは特徴量の生成は非常に異なっている。
様々な機械学習モデルにおける特徴量の生成を理解することは、それ自体非常に大きなトピックである。わたしは以下のような記事で特徴量の生成について書いた。ぜひ一読してほしい。
多くの特徴量を生成したら、次にやりたいであろうことは重複する特徴量を削除することだ。そうした特徴量の削除には、以下の記事に書いたようにいくつかの方法がある。
・・・
5.モデリング
(※訳註)棒で描かれた女性は「なぜこのデータポイントを42と予測したの?」とAIに質問しているのだが、AIは気まずく沈黙している。
われわれがもっとも注意を払う傾向にあるパートに来た。それにしても、なぜモデリングに大きな注意が払われるのか。その理由は、モデリング部分こそプロジェクトの最後にわれわれが製品として提供するものだからだ。そして、この部分のためにこそデータの獲得とクリーニング、機能の作成とその他の仕事を実行するのに必要な時間を費やしてきたのだ。
それではモデルを作るにあたり、考えるべきこととは何か。
あなたが自問しなければならない最初の質問は、あなたのモデルは解釈可能である必要があるのか、ということである。
モデルが解釈可能であることが求められるビジネスにおけるユースケースはたくさんある。そうしたひとつとして、何らかの属性が関係するモデルを使いたい時がある。例えば収益における(テレビ、ラジオ、新聞等の)様々な広告媒体ごとの効果を明らかにする、というものがある。このケースにおいては、各広告媒体からの反応を理解することは必要不可欠となる。
(モデルの解釈可能性は求められてなくて)もしモデルの精度やその他の指標を最大化する必要があるならば、ニューラルネットワークやXGBoostのようなブラックボックスモデルを依然として選ぼうとするだろう。
モデルの選択以外にも、留意すべきことは他にもある。
- モデルアーキテクチャ:ニューラルネットワーク層はいくつにするか、GBDT(※註1)における木の数をいくつにするか、あるいは線形モデルのために機能との相互作用性を作る必要があるのか。
- ハイパーパラメータはどのようにチューニングするのか?:この作業については自動化を試してみるべきである。市場にはこの作業を実行するツールが数多く存在している。わたしはhyperopt(※註2)を使う傾向がある。
・・・
6.実験
ついにモデルを作った。
それはベースラインのモデルあるいは現行のそれより良いパフォーマンスを示している。それでは、さらに何をすべきか。
われわれにはふたつの選択肢がある。
- モデルを改善し続ける無限ループに突入する。
- 製品設定の環境でモデルをテストとして、うまく行かないことについてさらに観察し、継続的インテグレーションを用いてモデルの改善を続ける。
わたしは後者のアプローチのファンである。Andrew Ng氏はCourseraのディープラーニング専門講座における「機械学習プロジェクトを構成する」と名付けられた素晴らしい第3講座において、以下のように述べている。
完全なシステムを設計し構築しようと試みることからスタートしてはならない。その代わりに、ベーシックシステムを素早く構築し訓練しよう ― こうしたベーシックシステムは数日以内に作れるだろう。たとえそれが構築可能な「ベストな」システムとは程遠いものであっても、どのように機能するかを調査できるという点で価値がある:ベーシックシステムを調べれば、時間をかけるべきもっとも有望な指針をわからせるカギを見つけられるだろう。
ベーシックモデルの構築とともにわたしが強調したいことは継続的インテグレーションである。もし開発した現行モデルが過去のそれよりよく動作するならば、過去のモデルを稼働させ続けてさらに利益を得るよりも現行モデルを製品に実装すべきではないだろうか。
開発したモデルが過去のそれより優れているという想定の妥当性をテストするためには、A/Bテストを実施することができる。このテストにおいては(テストグループに属する)何人かのユーザは開発したモデルを使う一方で、ほかの何人かのユーザは過去のモデルを使ってそれぞれのモデルの予測精度を調べるのだ。
開発したモデルに関する最初のオンライン実験に要する時間はいつも最小限にすべきである。こうした実験はモデルが持っている価値を集めるだけではなく、それが動作できたことに伴うリアルタイムのフィードバックから得られる欠点を理解させてもくれる。
・・・
結論
機械学習において単純なことなどない。そして何事も当然視すべきではない。
機械学習のパイプラインを構築している最中には、あなたが下したどんな決定に対しても批判的であり続けるべきである。
一見簡単そうな決定が機械学習プロジェクトの成否を分ける違いをもたらすこともあるのだ。
それゆえ、賢く、そしてたくさん考えるのだ。
・・・
この投稿記事は機械学習のエコシステムに関して深まってきているわたしの理解の一部であり、Facebookの技術チームが公開している素晴らしいビデオシリーズにインスパイアされたものでもある。
もしあなたが機械学習プロジェクトの構成方法とベストプラクティスについてさらに学びたければ、Courseraのディープラーニング専門講座にある「機械学習プロジェクトを構成する」と名付けられたAndrew Ng氏の素晴らしい第3講座をぜひおすすめしたい。この講座をぜひチェックしよう。
・・・
記事を読んでくれてありがとう。わたしは将来的にはより機械学習の初心者向けの記事を執筆するつもりです。そうした記事について知らせてもらいたい時はわたしのMediumをフォローするか、わたしのブログを定期購読してください。わたしはいつでも記事のフィードバックと建設的批判を歓迎しており、Twitterアカウント@mlwhizからコンタクトできます。
原文
『Six Important Steps to Build a Machine Learning System』
著者
Rahul Agarwal
翻訳
吉本幸記(フリーライター、JDLA Deep Learning for GENERAL 2019 #1取得)
編集
おざけん