HOME/ AINOW編集部 /ほぼすべての機械学習プロジェクトのためのタスクチートシート
2020.08.27

ほぼすべての機械学習プロジェクトのためのタスクチートシート

著者のHarshit Tyagi氏は、インドでデータサイエンスに関するインストラクターをしています。同氏がMediumに投稿した記事『ほぼすべての機械学習プロジェクトのためのタスクチートシート』では、機械学習モデルを構築するにあたって必要なタスクがリストアップされています。
学習データの取得やAIモデルの訓練といった固有なタスクを含む機械学習モデルの構築には、様々なタスクを実行する必要があります。こうしたタスクを、同氏は以下のような8つにステップに分けてチェックリスト化しました(具体的なチェック項目については、本記事本文を参照)。
  1. 問題の定義と開発アプローチの検討
  2. データソースの特定とデータの取得
  3. 学習データの特徴に関する分析
  4. 学習データの変換やクリーニング
  5. ベースラインモデルの開発とベストモデルの探索
  6. ファインチューニングとアンサンブル学習の検討
  7. 開発資料の文書化とプレゼン資料の作成
  8. 機械学習モデルの実装と監視体制の整備

機械学習モデル開発において効率化がますます求められる日本のAI業界において、Tyagi氏が作成したような汎用的なチェックリストの整備と活用は有意義な取り組みと言えるでしょう。

なお、以下の記事本文はHarshit Tyagi氏に直接コンタクトをとり、翻訳許可を頂いたうえで翻訳したものです。また、翻訳記事の内容は同氏の見解であり、特定の国や地域ならび組織や団体を代表するものではなく、翻訳者およびAINOW編集部の主義主張を表明したものでもありません。

機械学習プロジェクトをはじめから終わりまで構築するためのタスクのチェックリスト

読者諸氏のためにポートフォリオに記載する価値のある様々なプロジェクトの書き方についてまとめているうちに(※訳註1)、誰かから学んだか、あるいは仕事をしながら習得した私の実践的知識について文書化しようと考えた。

今回のブログでは、機械学習プロジェクトをはじめから終わりまで進めていくなかで、私が参考にし続けているタスクのチェックリストをキャプチャしてみた。

なぜチェックリストが必要なのか?

プロジェクトのなかでは(議論、準備、質問、モデル、ファインチューニングなどの)多くの要素を扱う必要があるため、物事を見失いがちになる。

チェックリストはその使用者に次のステップを案内し、すべてのタスクが正常に実行されたかどうかを確認するように後押しする。

時には、出発点を見つけるのに苦労することもあるが、プロジェクトとの関係性を確立し、プロジェクトの進行と相関した洞察を明らかにするために適切な情報源から正しい情報(データ)を引き出すのに、チェックリストは役に立つのだ。。

プロジェクトのすべての部分に対して、チェック作業を行うのがベストプラクティスだ。

アトゥール・ガワンデ(※訳註2)が彼の著作『チェックリスト宣言』の中で以下のように言っている。

私たちが知っていることの量と複雑さは、その恩恵を正しく、安全に、なおかつ確実に届けるには、私たちの個人的な能力を超えてしまっている。

そんなわけで、以下に示す読者諸氏の仕事量を減らしてアウトプットを向上させるアクションアイテムを集めた出来立てかつ簡潔なリストを使って仕事を進めてもらいたい…

(※訳註1)本記事の著者Harshit Tyagi氏は、本記事執筆の前に『効果的なデータサイエンスポートフォリオを作成する方法』を執筆して、データサイエンティスト志望者向けに良質なポートフォリオを作成する方法をレクチャーした。同記事では、データサイエンティスト志望者に以下のような5つのステップを実行することを勧めている。
  1. データサイエンティストの志望職種を決定する
  2. 大卒者である場合は、何らかのプロジェクトに取り組んで実績をアピールする
  3. 取り組んだプロジェクトから得られた専門知識をまとめる
  4. GitHub、LinkedIn、TwitterなどのSNSでビジネスに関する情報発信をする
  5. 以上のステップをふまえて、経歴と実績がひと目でわかる履歴書を作成する
(※訳註2)アトゥール・ガワンデ(Atul Gawande、1965~)はアメリカの外科医、著作家、公衆衛生研究者。医療活動に従事するかたわら、医学と公衆衛生についての記事を雑誌『ザ・ニューヨーカー』等に投稿している。2010年にはTIME誌の「世界で最も影響力のある100人」に選出された。
同氏の著作に『アナタはなぜチェックリストを使わないのか?【ミスを最大限に減らしベストの決断力を持つ!】』がある。

機械学習プロジェクトのチェックリスト

ほぼすべての機械学習プロジェクトには実行すべき8~10のステップがある。いくつかのステップは,順番に入れ替えて実行することができる。

1.ハイレベルな視点から問題の定義

このステップでは、問題のビジネスロジックを理解し、明確にする。このステップにおいて問うべきことは、以下の通りだ。

  • 問題の性質(教師あり/教師なし、分類/回帰)。
  • 開発できるソリューションの種類。
  • パフォーマンスを測定するためにどのような指標を使用すべきか。
  • 機械学習はこの問題を解決するための正しいアプローチなのだろうか。
  • 問題を解決するためのマニュアル的なアプローチの検討。
  • 問題に固有な前提条件とは何か。

2.データソースの特定とデータの取得

ほとんどの場合、データが手元にあり、そのデータにまつわる質問(問題)を定義して新たに入手するデータをより有効に活用したい場合、このステップは最初のステップの前に実行することができる。

問題の定義にもとづいて、データベース、データリポジトリ、センサーなどのデータソースを特定する必要がある。本番環境に展開されるアプリケーションのために、このステップはシステムに流入するデータを維持するためのデータパイプラインを開発することによって自動化されるべきだ。このステップで必要なタスクは以下。

  • 必要なデータのソースと量をリストアップ。
  • データスペースが問題になるかどうかをチェック。
  • 目的のためにデータを使用することを許可されているかどうかの確認。
  • データを取得し、実行可能な形式に変換。
  • データの種類をチェック(テキスト、カテゴリ、数値、時系列、画像)。
  • 最終的なテストのためにサンプルを取りおく。

3.データの初期探索

このステップでは、結果/予測/目的に影響を与えるすべての特徴量を検討する。膨大なデータを持っている場合は、このステップのためにサンプルを採取しておくと、分析をより管理しやすくなる。
このステップでは、以下のようなことをフォローしよう。

  • データを研究するための簡単で直感的なインターフェースを提供してくれるので、jupyter notebookを使用しよう。
  • 目的変数の特定。
  • 特徴量のタイプを識別(カテゴリ、数値、テキストなど)。
  • 特徴両間の相関関係の分析。
  • 各特徴の目的変数への影響を簡単に解釈できるように、いくつかのデータについてビジュアライゼーションを追加。
  • 以上の探索で発見したことの文書化。

4.データを準備するための探索的データ分析

データ変換、クリーニング、特徴量選択/エンジニアリング、スケーリングに関してその役目を定義することで、前のステップで得られた知見を実行する時が来た。

  • データを変換し、来るべきデータのバッチ処理を自動化するための関数を書く。
  • データをクリーニングするための関数を書く(欠損値の入力と外れ値の処理)。
  • 冗長している特徴のふるい落とし、特徴量のフォーマット変換、その他の数学的変換など、特徴量を選択して設計するための関数の記述。
  • 特徴量のスケーリング – 特徴量の標準化。

5.ベースラインモデルの開発と、他のモデルを探索したうえでのベストモデルの選定

他のすべての複雑な機械学習モデルのベースラインとして機能する、非常に基本的なモデルを作成する。このステップでのチェックリストは以下の通り。

  • ナイーブベイズ、線形回帰、サポートベクターマシンのようなよく使われる機械学習モデルをデフォルトのパラメータを使って訓練する。
  • 各モデルの性能をベースラインおよび他のすべてのモデルと測定し、比較する。
  • 各モデルにk-分割交差検証を使い、この検証における性能指標の平均と標準偏差を計算する。
  • ターゲットに最も影響を与える特徴を研究する。
  • 予測中にモデルから生じるエラーの種類を分析する。
  • 別の方法で特徴量を設計してみる。
  • 上記の手順を数回(試行錯誤)繰り返して、正しいフォーマットで正しい特徴量を使用していることを確認する。
  • 性能指標に基づいてトップモデルをリストアップする。

6.絞り込んだモデルのファインチューニングとアンサンブル学習のチェック

このステップは、最終的なソリューションに近づいているであろう時に重要なタスクのひとつとして必要とされている。このステップには、主として以下のものが含まれる。

  • 交差検証を用いたハイパーパラメータのチューニング
  • ランダムサーチやグリッドサーチなどの自動チューニング手法(※訳註3)を使用して、ベストモデルに最適な構成を見つけ出す。
  • 投票分類器などのアンサンブル学習をテストする(※訳註4)。
  • できるだけ多くのデータでモデルをテストする。
  • ベストモデルを確定したら、最初のうちは脇に置いておいた未使用のテストサンプルを使って、オーバーフィッティングやアンダーフィッティングが生じてないかどうかチェックする。
(※訳註3)グリッドサーチとは、ハイパーパラメータが取り得るすべての値の組み合わせを実行して、最適なハイパーパラメータの組み合わせを探す方法。ランダムサーチは、ハイパーパラメータが取り得るすべての値からランダムに抽出した値を用いて最適な設定を探す方法。そのほかのファインチューニングの手法として、ベイズ最適化がある。
(※訳註4)アンサンブル学習とは、複数のAIモデルを併用することで精度を向上させる手法。さらにアンサンブル学習の手法のひとつとして、複数のAIモデルの判断を投票に見たてて、もっとも多くの票を集めた判断を採用するVotingがある。

7.コードを文書化し、ソリューションを伝える

コミュニケーションのプロセスは多岐にわたる。AIモデルをめぐるコミュニケーションにおいては、すべての既存および潜在的な利害関係者を念頭に置いておく必要がある。したがって、コミュニケーションにおける主要なステップは下記のものを含んでいる。

  • コードだけでなく、プロジェクト全体におけるアプローチと行程を文書化する。
  • Voilaのようなダッシュボードを作成したり(※訳註5)、一目瞭然なビジュアライゼーションに近いものを使って洞察力に富むプレゼンを行う。
  • どのように特徴量を分析したか、さまざまな変換をテストしたかなどを記録したブログやレポートを書く。学習過程(失敗やうまくいったテクニック)を記録する。
  • 主な成果と(もしあれば)将来の展望で締めくくる。
(※訳註5)Pythonを用いたデータ分析においては、Jupiter Notebookが多用される。Voila(フランス語で英語の”Here you are”「はい、どうぞ」に相当する単語)は、Jupiter NotebookからインタラクティブなWebアプリケーションあるいはダッシュボードを作成するツール

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を使用してサービスを展開することもできる。
  • ライブデータのパフォーマンスを監視する。データを用いてモデルを使用する時だけに監視する人材を配置することもできる。
(※訳註6)REST APIとは、RESTにもとづいて設計されたAPIのこと。RESTとは、Webシステムを外部から利用するためのプログラムの呼び出し規約の種類のひとつ。セッションの状態管理を行わないことを特徴としている。スケーラビリティに優れており、互換性の問題があまり生じないことで知られる。
本記事の文脈では、完成した機械学習モデルをREST APIとして呼び出せるようにしてから、ウェブシステムとして最終テストを行い実装する、という意味で使われている。
(※訳註7)h5ファイル(正式名称は” Hierarchical Data Format”(「HDF」と略記)のバージョン5)とpickleファイルは、どちらもPythonで開発した成果物を保存するファイル形式。データの読み込みと書き出しはpickleのほうが高速だが、h5はRなどのPython以外のプログラミング言語に対応している。
(※訳註8)Flaskとは、Pythonでウェブアプリケーションを開発するためのフレームワーク。標準機能を最小限にしているため「マイクロフレームワーク」とも呼ばれる。こちらからFlask公式サイトにアクセスできる。
(※訳註9)ETLとは「Extract」「Transform」「Load」の頭文字をとった略称で、英単語の意味が示すようにITシステムにおけるデータの抽出・変換・読み込みに関する処理の総称。ETLパイプラインとは、ETL処理を一括して実行できるようにした処理システムを意味する。
(※訳註10)PipenvdockerKubernetesはいずれもソフトウェア実行環境を保存・管理するツール

注記:チェックリストは、プロジェクトの複雑さに応じて適用できる。

・・・

Harshitによるデータサイエンス

このチャンネルでは、データサイエンスの世界全体をカバーするシリーズをいくつか展開していく予定である。視聴者がこのチャンネルを登録すべき理由は以下の通りである。


原文
『Task Cheatsheet for Almost Every Machine Learning Project』

著者
Harshit Tyagi

翻訳
吉本幸記(フリーライター、JDLA Deep Learning for GENERAL 2019 #1取得)

編集
おざけん

無料メールマガジン登録

週1回、注目のAIニュースやイベント情報を
編集部がピックアップしてお届けしています。

こちらの規約にご同意のうえチェックしてください。

規約に同意する

あなたにおすすめの記事

生成AIで“ウラから”イノベーションを|学生起業家が描く、AIを活用した未来

特許技術×AIでFAQを次のステージへ|Helpfeel

GPUの革新からAI時代の主役へ|NVIDIA

あなたにおすすめの記事

生成AIで“ウラから”イノベーションを|学生起業家が描く、AIを活用した未来

特許技術×AIでFAQを次のステージへ|Helpfeel

GPUの革新からAI時代の主役へ|NVIDIA