学習データの取得やAIモデルの訓練といった固有なタスクを含む機械学習モデルの構築には、様々なタスクを実行する必要があります。こうしたタスクを、同氏は以下のような8つにステップに分けてチェックリスト化しました(具体的なチェック項目については、本記事本文を参照)。
- 問題の定義と開発アプローチの検討
- データソースの特定とデータの取得
- 学習データの特徴に関する分析
- 学習データの変換やクリーニング
- ベースラインモデルの開発とベストモデルの探索
- ファインチューニングとアンサンブル学習の検討
- 開発資料の文書化とプレゼン資料の作成
- 機械学習モデルの実装と監視体制の整備
機械学習モデル開発において効率化がますます求められる日本のAI業界において、Tyagi氏が作成したような汎用的なチェックリストの整備と活用は有意義な取り組みと言えるでしょう。
なお、以下の記事本文はHarshit Tyagi氏に直接コンタクトをとり、翻訳許可を頂いたうえで翻訳したものです。また、翻訳記事の内容は同氏の見解であり、特定の国や地域ならび組織や団体を代表するものではなく、翻訳者およびAINOW編集部の主義主張を表明したものでもありません。
目次
機械学習プロジェクトをはじめから終わりまで構築するためのタスクのチェックリスト
読者諸氏のためにポートフォリオに記載する価値のある様々なプロジェクトの書き方についてまとめているうちに(※訳註1)、誰かから学んだか、あるいは仕事をしながら習得した私の実践的知識について文書化しようと考えた。
今回のブログでは、機械学習プロジェクトをはじめから終わりまで進めていくなかで、私が参考にし続けているタスクのチェックリストをキャプチャしてみた。
なぜチェックリストが必要なのか?
プロジェクトのなかでは(議論、準備、質問、モデル、ファインチューニングなどの)多くの要素を扱う必要があるため、物事を見失いがちになる。
チェックリストはその使用者に次のステップを案内し、すべてのタスクが正常に実行されたかどうかを確認するように後押しする。
時には、出発点を見つけるのに苦労することもあるが、プロジェクトとの関係性を確立し、プロジェクトの進行と相関した洞察を明らかにするために適切な情報源から正しい情報(データ)を引き出すのに、チェックリストは役に立つのだ。。
プロジェクトのすべての部分に対して、チェック作業を行うのがベストプラクティスだ。
アトゥール・ガワンデ(※訳註2)が彼の著作『チェックリスト宣言』の中で以下のように言っている。
私たちが知っていることの量と複雑さは、その恩恵を正しく、安全に、なおかつ確実に届けるには、私たちの個人的な能力を超えてしまっている。
そんなわけで、以下に示す読者諸氏の仕事量を減らしてアウトプットを向上させるアクションアイテムを集めた出来立てかつ簡潔なリストを使って仕事を進めてもらいたい…
- データサイエンティストの志望職種を決定する
- 大卒者である場合は、何らかのプロジェクトに取り組んで実績をアピールする
- 取り組んだプロジェクトから得られた専門知識をまとめる
- GitHub、LinkedIn、TwitterなどのSNSでビジネスに関する情報発信をする
- 以上のステップをふまえて、経歴と実績がひと目でわかる履歴書を作成する
同氏の著作に『アナタはなぜチェックリストを使わないのか?【ミスを最大限に減らしベストの決断力を持つ!】』がある。
機械学習プロジェクトのチェックリスト
ほぼすべての機械学習プロジェクトには実行すべき8~10のステップがある。いくつかのステップは,順番に入れ替えて実行することができる。
1.ハイレベルな視点から問題の定義
このステップでは、問題のビジネスロジックを理解し、明確にする。このステップにおいて問うべきことは、以下の通りだ。
- 問題の性質(教師あり/教師なし、分類/回帰)。
- 開発できるソリューションの種類。
- パフォーマンスを測定するためにどのような指標を使用すべきか。
- 機械学習はこの問題を解決するための正しいアプローチなのだろうか。
- 問題を解決するためのマニュアル的なアプローチの検討。
- 問題に固有な前提条件とは何か。
2.データソースの特定とデータの取得
ほとんどの場合、データが手元にあり、そのデータにまつわる質問(問題)を定義して新たに入手するデータをより有効に活用したい場合、このステップは最初のステップの前に実行することができる。
問題の定義にもとづいて、データベース、データリポジトリ、センサーなどのデータソースを特定する必要がある。本番環境に展開されるアプリケーションのために、このステップはシステムに流入するデータを維持するためのデータパイプラインを開発することによって自動化されるべきだ。このステップで必要なタスクは以下。
- 必要なデータのソースと量をリストアップ。
- データスペースが問題になるかどうかをチェック。
- 目的のためにデータを使用することを許可されているかどうかの確認。
- データを取得し、実行可能な形式に変換。
- データの種類をチェック(テキスト、カテゴリ、数値、時系列、画像)。
- 最終的なテストのためにサンプルを取りおく。
3.データの初期探索
このステップでは、結果/予測/目的に影響を与えるすべての特徴量を検討する。膨大なデータを持っている場合は、このステップのためにサンプルを採取しておくと、分析をより管理しやすくなる。
このステップでは、以下のようなことをフォローしよう。
- データを研究するための簡単で直感的なインターフェースを提供してくれるので、jupyter notebookを使用しよう。
- 目的変数の特定。
- 特徴量のタイプを識別(カテゴリ、数値、テキストなど)。
- 特徴両間の相関関係の分析。
- 各特徴の目的変数への影響を簡単に解釈できるように、いくつかのデータについてビジュアライゼーションを追加。
- 以上の探索で発見したことの文書化。
4.データを準備するための探索的データ分析
データ変換、クリーニング、特徴量選択/エンジニアリング、スケーリングに関してその役目を定義することで、前のステップで得られた知見を実行する時が来た。
- データを変換し、来るべきデータのバッチ処理を自動化するための関数を書く。
- データをクリーニングするための関数を書く(欠損値の入力と外れ値の処理)。
- 冗長している特徴のふるい落とし、特徴量のフォーマット変換、その他の数学的変換など、特徴量を選択して設計するための関数の記述。
- 特徴量のスケーリング – 特徴量の標準化。
5.ベースラインモデルの開発と、他のモデルを探索したうえでのベストモデルの選定
他のすべての複雑な機械学習モデルのベースラインとして機能する、非常に基本的なモデルを作成する。このステップでのチェックリストは以下の通り。
- ナイーブベイズ、線形回帰、サポートベクターマシンのようなよく使われる機械学習モデルをデフォルトのパラメータを使って訓練する。
- 各モデルの性能をベースラインおよび他のすべてのモデルと測定し、比較する。
- 各モデルにk-分割交差検証を使い、この検証における性能指標の平均と標準偏差を計算する。
- ターゲットに最も影響を与える特徴を研究する。
- 予測中にモデルから生じるエラーの種類を分析する。
- 別の方法で特徴量を設計してみる。
- 上記の手順を数回(試行錯誤)繰り返して、正しいフォーマットで正しい特徴量を使用していることを確認する。
- 性能指標に基づいてトップモデルをリストアップする。
6.絞り込んだモデルのファインチューニングとアンサンブル学習のチェック
このステップは、最終的なソリューションに近づいているであろう時に重要なタスクのひとつとして必要とされている。このステップには、主として以下のものが含まれる。
- 交差検証を用いたハイパーパラメータのチューニング
- ランダムサーチやグリッドサーチなどの自動チューニング手法(※訳註3)を使用して、ベストモデルに最適な構成を見つけ出す。
- 投票分類器などのアンサンブル学習をテストする(※訳註4)。
- できるだけ多くのデータでモデルをテストする。
- ベストモデルを確定したら、最初のうちは脇に置いておいた未使用のテストサンプルを使って、オーバーフィッティングやアンダーフィッティングが生じてないかどうかチェックする。
7.コードを文書化し、ソリューションを伝える
コミュニケーションのプロセスは多岐にわたる。AIモデルをめぐるコミュニケーションにおいては、すべての既存および潜在的な利害関係者を念頭に置いておく必要がある。したがって、コミュニケーションにおける主要なステップは下記のものを含んでいる。
- コードだけでなく、プロジェクト全体におけるアプローチと行程を文書化する。
- Voilaのようなダッシュボードを作成したり(※訳註5)、一目瞭然なビジュアライゼーションに近いものを使って洞察力に富むプレゼンを行う。
- どのように特徴量を分析したか、さまざまな変換をテストしたかなどを記録したブログやレポートを書く。学習過程(失敗やうまくいったテクニック)を記録する。
- 主な成果と(もしあれば)将来の展望で締めくくる。
8.本番環境にモデルを実装して、監視!
プロジェクトがライブデータでテストすべきという実装要件を必要とする場合には、すべてのプラットフォーム(Web、アンドロイド、iOS)で使用されるWebアプリケーションまたはREST API(※訳註6)を作成する必要がある。このステップにおける主なタスク(プロジェクトによって異なるのだが)は以下の通り。
- 最終的に学習したモデルをh5またはpickleファイルに保存する(※訳註7)。
- Webサービスを使用してモデルを提供するのにあたっては、モデルをWebサービスとして開発するためにFlaskを使用することができる(※訳註8)。
- 入力データソースを接続し、ETLパイプラインを設定する(※訳註9)。
- Pipenv、docker/Kubernetesを使った依存関係の管理(スケーリング要件に応じて)(※訳註10)。
- AWS、Azure、またはGoogle Cloud Platformを使用してサービスを展開することもできる。
- ライブデータのパフォーマンスを監視する。データを用いてモデルを使用する時だけに監視する人材を配置することもできる。
本記事の文脈では、完成した機械学習モデルをREST APIとして呼び出せるようにしてから、ウェブシステムとして最終テストを行い実装する、という意味で使われている。
注記:チェックリストは、プロジェクトの複雑さに応じて適用できる。
・・・
Harshitによるデータサイエンス
このチャンネルでは、データサイエンスの世界全体をカバーするシリーズをいくつか展開していく予定である。視聴者がこのチャンネルを登録すべき理由は以下の通りである。
- これらのシリーズは、データサイエンスのためのPythonの基礎のような各トピックとサブトピックについて、必要とされる/要求される質の高いチュートリアルをカバーしている。
- 機械学習やディープラーニングでなぜそのようなことをするのかについて、数学とその派生知識を使って解説している。
- Google、Microsoft、Amazonなどのデータサイエンティストやエンジニア、ビッグデータ駆動型企業のCEOとのポッドキャストも収録。
- これまでに学んだトピックを実装するためのプロジェクトと解説。新しい認定資格、Bootcamp、および Google が運営する TensorFlow開発者認定資格のような認定をクリアするためのリソースについて学習。
原文
『Task Cheatsheet for Almost Every Machine Learning Project』
著者
Harshit Tyagi
翻訳
吉本幸記(フリーライター、JDLA Deep Learning for GENERAL 2019 #1取得)
編集
おざけん