まえがき
第1章 AIアプリ開発の進め方を知ろう
第2章 Google Colaboratory で環境を構築しよう
第3章 Scikit-learnでモデルを構築しよう
第4章 AdobeXDでアプリのUIを設計しよう
第5章 Nuxt.jsでAIアプリのフロントを作ろう
第6章 PythonでAPIを作成しよう
第7章 AIアプリをデプロイしよう
あとがき
初めまして。新米データサイエンティストの@hidefknです。本書を手にとっていただいたということは、みなさん「AIアプリを作ってみたい!」と思っていますよね?
本屋さんには、Pythonを使った機械学習やDeep Learningの技術書がたくさん並んでいます。おカネがない子もインターネットさえ使うことができれば、無料でデータサイエンスを学べる環境があります。学びたい気持ちさえあれば、誰もが機械学習を使ったモデル構築方法とそのために必要な知識を学ぶことができる時代になっています。
しかし、私がデータサイエンティストとして働くようになり、実務でデータ分析結果をアプリとして開発しクライアントに提供する経験を経て、気づいた課題がひとつあります。それは、「AIアプリを開発するために、どんなデータを集めて、どんな方法で分析し、どのようなステップでAIアプリを開発すればよいのか?」といったAIアプリ開発のプロセスを最初から最後まで解説した書籍が少ないことです。
本書は、AIアプリに組み込むモデルの構築方法からアプリ開発、デプロイまで1冊に凝縮しています。みんながこの本を読んでAIアプリをデプロイできるようになってほしい!そんな想いでこの本を書きました。
この言葉は、私がG'sACADEMY(ジーズアカデミー)というプログラミングスクールに通っていたときに、メンターのえふしんさんが仰っていた言葉です。私はこの言葉をとても気に入っています。技術は目的を実現する手段であり目的ではない。誰かの悩みを解決したり、やりたいことを実現するために存在する。プロダクトに実装する技術はギミックになってはいけないという意味だと理解しています。
本書は『最小の技術で最大のインパクト』を意識して執筆しています。本書に書かれた技術を学ぶだけで(最小の技術)、みんなが世の中にAIアプリをデプロイできる(最大のインパクト)ことが目標です。一番大切なことは、技術に関する知識ではありません。技術を使って世の中の何かをより良く変化させることですからね。ですから、本書ではアプリのデプロイを完遂することに重点を置いて、データ分析、モデル構築、アプリ開発のプロセスを詳細に解説しています。一方で、機械学習やディープラーニングについての詳細な解説は割愛しています。
実装を始める前に、AIアプリ開発の進め方を解説しています。その理由は3つあります。
・使いたい技術ありきで開発してしまい、役に立たないAIを開発してほしくないから
・目的に合ったデータセットがなければ、精度の高いAIは絶対に作れないから
・正しいステップを踏めば、誰もがAIアプリ開発を実現できるから
本書では、みなさんと、「ワインの属性を入力すると、そのワインが美味しい可能性を推定するAIアプリ」を開発します。美味しい可能性は、数値(スコア)で表されます。そのスコアの出力には、ロジスティック回帰と呼ばれる統計数理モデルを使い、機械学習を行います。初めて聞いた専門用語かもしれませんが、後続の章で説明がありますのでご安心ください。さて、ロジスティック回帰を活用したAIアプリ開発をテーマにした理由は次の3つです。
・「YES or NO」といった二値分類の基礎を学べるから
・判別結果を確率で表現できるから(確率ごとにターゲットを複数に分類できる)
・説明変数は意味があるものを使うので、ユーザーにも説明しやすいから
アプリ開発は、Vue.jsアプリケーションを構築するためのフレームワークであるNuxt.jsを採用しています。その理由は、2つあります。
・HTML5やCSS3、JavaScriptの知識があれば、すんなり理解できて学習コストが低いから
・HTML5やCSS3、JavaScriptだけを利用するより、シンプルに・簡単に躍動感溢れるヌルっ!サクっ!としたWebアプリを作ることができるから
データを使うAIアプリを開発するにあたって、操作性にぬるさく感を込めることを大切にしました。なぜなら、データを入力したり、データを表示する操作をユーザーに楽しいと思ってほしいからです。
本書の構成は次のとおりです。
第1章では、前準備も含めたAIアプリ開発の進め方について解説しています。AIアプリ開発の全体像が見えたところで、第2章では、モデル構築のための環境を構築します。
第3章では、ワインのオープンデータを活用して、データ分析からモデリングに挑戦します。第4章では、アプリ開発に入る前にアプリの画面設計をおこないます。第5章において、Nuxt.jsを使ったAIアプリのフロントエンド開発を始め、第6章では、第4章で構築した予測モデルをPythonを使ってAPI化します。これにより、第5章で開発したWebアプリがAIアプリに進化します。最後の第7章では、これまで開発したAIアプリをデプロイします。
・Webアプリ開発はできるが、どうすればAI化できるのかわからないエンジニア
・データ分析はできるが、Webアプリ開発をしたことがないデータサイエンティスト
・ワインのオープンデータを使って、モデルを構築できるようになること
・構築したモデルを使ってAIアプリケーションを開発し、Webに公開すること
有名海外大学のデータサイエンス講義を受講できるCourseraをはじめ、無償で学習できるリソースがふんだんに提供されている今日では、誰もが無料でデータサイエンスという武器を手に入れることができます。だからこそ、私もデータサイエンティストになることができました。一方、新米データサイエンティストの私は、今からどう頑張っても東大の松尾研でDeep Learningを深く学んでいる専門性の高い学生に敵わないことを自覚しています。
また、数学や統計学においても『1週間で◯◯が分かる本』のような手軽に学べる本が増えてきました。しかし、付け焼き刃の知識は、生のビッグデータに屈することが少なくありません。やはり、社会に信頼してもらえる専門性を養うためには、ある程度時間をかけて学ぶ必要があります。
人工知能ブームで賑やかになりつつあるデータサイエンス業界ですが、同時に、生半可な世界ではないなと思うのが私の正直な感想です。
しかし、私は何かを変えるために、実現するために、データサイエンスを学んでいる人たちの味方でありたいです。そこに目的があるのなら、この本で一緒にAIアプリをデプロイしましょう。
それでは、新米データサイエンティストによる渾身の薄い本をお楽しみください。
私はデータ分析や機械学習が好きでデータサイエンティストになったわけではありません。ですから、統計学に明るいわけでもないですし、理系出身でもありません。そんな私がデータサイエンスと出会った理由は、データを分析した結果をデプロイする必要があったからです。
2年前、私は家族や友達同士でおカネを融通しあえるアプリを作りたいと思っていました。そのアプリを開発している中でぶち当たった壁がありました。それは、おカネを融通するに値する人物かどうかを判断する仕組みがないことでした。
今、こうして振り返って考えてみると当たり前なのですが、アプリの中でおカネの貸し借りすることには当然不安を感じますよね。おカネを貸し借りするときは、その人がおカネを返してくれそうか?そもそも、その人はどんな人なのか?そういうことがわからないと、人におカネを送ったりしませんよね。
アプリの中でしか会えない誰かにおカネを貸してもらうためには、どんな信用(あるいは理由、根拠)が必要なのだろうか。あるいはどんな信用があれば、自分がおカネを貸して助ける気になるだろうか。信用に値する人が持つ要素を抽出し、その人が信用に足る人かどうかを判断できる仕組みをつくりたい。そう考えるようになりました。
人はどういう人やものごとにおカネを使うのだろうか?そんなことを客観的に証明できて、アプリに組み込むことができれば、私は作りたかったアプリを作れるのではないか?この課題を技術的に解決できる可能性をデータサイエンスに感じて、私はこの世界に入ったのです。
本書に記載された内容は、情報の提供のみを目的としています。したがって、本書を用いた開発、製作、運用は、必ずご自身の責任と判断によって行ってください。これらの情報による開発、製作、運用の結果について、著者はいかなる責任も負いません。
本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©、®、™マークなどは表示していません。
本書籍は、技術系同人誌即売会「技術書典6」で頒布されたものを底本としています。
本章では、AI開発の進め方を7つのステップで解説します。読み終わった後には、きっとあなたが作りたいAIが明確になるでしょう。
AIは目的ではなく、実現手段です。目的から考えることの大切さは、AIアプリ開発以外においても共通でしょう。データを活用するAIアプリは、一般的なWebアプリよりも最初の目的設定が特に重要です。AIアプリ開発は、アプリに組み込むモデルの構築に必要なデータを集めるところから作業が始まるからです。
「目的があって、その実現手段として機械学習(技術)が存在する」という順序関係を忘れてはいけません。目的がなければ、データ分析もAIアプリ開発も必ず迷子になります。最新技術には夢を感じますし、すぐにでも使ってみたいものです。しかし、その技術が課題を解決するために最適な技術であることをしっかり検討する必要があります。
AIは基本的に開発にも運用にもコストがかかります。機械学習を用いてデータ分析をするためには、大量のデータが必要です。そのために、目的に合ったデータを収集する仕組みと、データを蓄積できる十分なストレージやデータベースを準備します。また、構築したモデルは、初めから良い精度が出ることはまれです。ですから、モデル構築に使用したアルゴリズムは、継続的に改善する必要があります。だからこそ、開発中に手戻りが起こらないように、開発工数を短縮できるように、目的に対して一貫性のある無駄のない設計を行う必要があるのです。
あなたが個人としてAIを作りたいと思っているのであれば、まず作ってみることが一番です。しかし、もしあなたが企業に所属しており、組織の中でAI開発を進めるのであれば、次のようなシートを使って、課題を解決するための手段としてAIが最適であるかどうかを判断してみましょう。
具体的には、次のようなステップで判断します。
1.課題の有無
2.データの有無
3.システム化のニーズ
4.(人間 or 機械による)判断の必要性
5.投資対効果
本書では「目的」と表現していますが、ビジネスでAIを活用する場合は、解決したい「課題」が必要になるでしょう。課題が明確になったら、課題を解決できそうなデータが存在するか確認します。機械学習にはデータが必要不可欠ですからね。
次に、解決したい課題にはシステムによる自動化ニーズがあるかどうかを確認してみましょう。ビジネス活用の場面では、実はユーザーは自動化を求めていないというケースがちらほら見受けられます。ユーザーが求めていないものを開発しても、使ってもらえませんよね。AI開発に活用できそうなデータを調べることと同じくらい、ユーザーがAIを求めているのかどうかを知ることは大切です。
そして、対象となる業務は人間による判断が求められている業務であるかどうか確認してください。求められているのであれば、AI開発を行うことで、人間による判断を機械による判断に置き換えられる可能があります。もし、求められないのであれば、AI開発のかわりに、例えば最近話題の RPA (アール・ピー・エー)と呼ばれるシステムなどの他の手段を検討しましょう。
最後に、投資対効果も意識しましょう。AI開発による効果をできるだけ具体的に考えます。効果がみえない実装は開発のモチベーションも高まりません。また、ユーザーが喜んでくれなければ、AI開発を担う私たち自身も達成感を感じることが難しいでしょう。
Heuricstic Rule (ヒューリスティックルール)とは、必ずしも正しい答えを導けるわけではないが、ある程度のレベルで正解に近い答えを得ることができる規則のことです。完璧な精度ではない代わりに、答えが得られるまでにかかる時間が少ないという利点があります。例えば、決済システムなどお金の授受を司るシステムは「大体、送金できた」なんていうことは絶対に起きてはいけません。機械学習を使ったAIアプリケーションは「大体でもいいから事前に判断してくれると助かる領域」に大きな効果を発揮します。機械学習は一体どんな業務に役立つのか?と疑問に思う方は、ヒューリスティックルールがある領域を探してみてください。
最後に伝えたいことは、データがなくてもAI開発をあきらめないことです。データがない場合は、データ収集からはじめましょう。実は、データがない段階からAI開発プロジェクトを始めたほうが、結果的に速く目的を達成するAI開発ができるケースが多いです。なぜなら、既存のデータを使ってAI開発を行う場合、データクレンジングに多くの時間が必要だからです。
AI開発で必要なのは、何よりもまず目的(目的変数)を予測するために必要なデータセットです。日本の大企業がどれだけビッグデータを持っていても、データ活用がうまく進まないのはいくつかの理由があります。その理由の1つは、蓄積されたデータがその目的のためだけに集められたデータではないため、機械学習やAI開発に活用できないからです。
ただデータがあるだけでは、あなたの作りたいAIアプリを開発することはできません。これは紛れもない事実です。逆に、今はデータがなかったとしても、必要なデータを理解していれば、高品質なデータを効率よく収集でき、迅速にAIを開発することができるのです。
AIを作るためには、1つずつステップを踏んでいく必要があります。AI開発に王道なしです。以下に、AI開発において積み上げるべきステップを図示しました。下から上に、各ステップを順に積み上げていく必要があります。一つでも欠けると、最後のアプリケーション開発には到達できません。
私はデータサイエンティストとして、クライアントがこの山登りのどのステップにいるのか、常に見極めることを大切にしています。
STEP | 作業内容 |
アプリケーション開発 | 構築したモデルをアプリケーションに組み込む |
機械学習・モデリング | 綺麗なデータセットを使ってモデルを構築する |
データ分析 | よいモデルを構築するためにどのようなデータを使うかを見極める分析をおこなう |
学習用データセット作成 | 機械学習が行える状態の形式にデータを整える |
データ収集・蓄積 | モデル構築のために必要なデータを集める・保存する |
目的設定 | 何のために、どのようなモデルを構築するのかを具体的に決める |
以降、各ステップを解説していきます。
目的設定とは、どんなAIを作りたいのか?つまり、何を入力に、どんな出力を得られるモデルを構築するのかを明確にすることです。目的設定では、次の順序で構築したいモデルを具体的にしていきましょう。
1.(ビジネスなどの)目的・ゴール、構築するモデルで実現したいこと
2.(ゴールの達成に必要な手段としての)構築するモデルの要件
本書で開発するAIアプリの目的と要件を次のように整理してみました。目的はモデルを使って実現したいことであり、要件は目的を達成するために求められるモデルの条件と考えると良いでしょう。この目的はあくまでも私が個人的に設定したものですが、目的と要件の違いが少しでも伝わると嬉しいです。
・目的: ワインの美味しさを予測するAIを開発することで、効率よく美味しいワインを仕入れ、売上向上につなげること
・要件: ワインの属性(アルコール度数など)を入力データとして、ワインの美味しさの推定スコアを出力する
一般に、目的からモデルの要件を落とし込む作業は機械学習の知識がなければ難しいでしょう。しかし、データをもとに目的をどうするかを次の4つの選択肢から選んで整理してみると、少しずつモデルの要件ができあがってきます。
・回帰:データを元に目的を説明する
・分類:データを元に目的をAとBに分ける
・推定:データを元に目的に与えている影響が何かを知る
・予測:新しいデータから目的に関する未来の結果を得る
たとえば、「私の理想の恋人と出会う(見極める)こと」が目的だとします。このとき大切なことは「私の理想の恋人をどのように判断したいのか」をひとつに絞ってみることです。
「私の理想の恋人を予測するモデル」「私の理想の恋人を分類するモデル」は似て非なるモデルです。分析のアプローチ方法が異なるからです。
次のような表で目的をモデルに変換してみましょう。なんとなく、実現したい目的が具体的になってきた気がしませんか?
目的 | を | ◯◯ | したい | モデル名 |
理想の恋人 | を | 分類 | したい | 理想の恋人分類モデル |
理想の恋人 | を | 確率予測 | したい | 理想の恋人である確率予測モデル |
理想の恋人の特徴 | を | 説明 | したい | 理想の恋人についての重回帰分析 |
本書では、ワインの美味しさ推定を活用できるようにするために、第3章からワインの属性情報から、それが美味しいワインである可能性を予測する、ワインの美味しさ確率予測モデルを構築します。
仮説とは、一般に最も確からしいと考えられる仮の答えを意味します。データ分析・AI開発では、何らかの現象や法則性を説明する、最も確からしい判断内容・条件について、仮説を立てましょう。ここでは、目的を説明する属性(または変数)を考えることを意味します。一緒に具体例を使いながら、考えてみましょう。
あなたは、恋人探しのためのマッチングサービスを運営をしています。サービスの満足度を高めたいという目的があり、そのためにマッチング率を向上させるAI(理想の恋人予測モデル)を開発予定です。そのAIに組み込むモデルを構築するために必要なデータを考えます。
まず、主観的に、あなたが恋人に求める条件は何でしょうか。2つ以上条件を考えてみてください。外見?収入?性格?いろいろあるでしょう。きっとみなさんは2つ以上の条件を簡単に挙げることができたのではないでしょうか。私は、これが目的に対して仮説を立てる力の根源だと思っています。
次に、これを客観的に想像してみます。例えば、私の恋人に求める条件が「年収1,000万円以上」であった時、同じような条件を設定する人は多数派か、少数派かを想像してみましょう。
影響度は自分の価値観や体験を、みんなはどうなのだろう?と想像して、それを一般化して整理したものだと考えています。この条件を知るために、どのようなデータが必要なのかを図のシートで整理してみましょう。
目的に対して必要なデータは何なのか?を整理できました。いかがでしょうか?あなたが作りたいモデルを作るために、十分なデータは揃っていますか?難しく考えてしまうと、目的に必要なデータが何なのかわからなくなってしまいます。しかし、目的に対して仮説を立てることができたなら、あなたはもう立派なデータサイエンティストです。
特にAI化というのは、今まで人がやっていた判断基準を数値化・分類化することが大きなテーマです。その属人的な業務がいくつの要素で構成されており、それぞれの要素は目的に対してどのくらい影響しているか?という仮説を立て、プロジェクトを進めていきます。
理想の恋人の条件を挙げることができたあなたは、もうすでに仮説設定力というデータサイエンス力の基本を持っています。引き続き、AI開発のステップを理解していきましょう。
目的と仮説が明確になると、目的を実現するためのデータが不足しているかどうかを把握できます。必要なデータが不足している場合は、インターネット上に公開されているデータを活用したり、あるいはデータ収集基盤を構築します。
もちろん、企業の場合は既存データを活用して取り組むケースが多いでしょう。目的や要件に合致するデータが容易に取り出せる場合は、それで良いと思います。そうでない場合は、私は思い切って必要なデータを確実に蓄積できるデータ収集するための仕組みやアプリケーションを作ることをお勧めします。
理由は2つあります。まず、データ収集するタイミングを考えることは、属人的な業務のノウハウがどこに隠れているのかを深く理解することにつながるからです。次に、既存データをAI開発に利用できるように整形する作業は、想像以上に時間がかかり効率が悪いからです。
データの収集方法を考える作業は、データとビジネスの距離感を近付けるとても大切なプロセスです。既存データのテーブル定義書だけを見ていても、実現したい目的や課題に対して、データ分析で解くべき本当の要件を見つけることは難しいです。逆に、データ収集方法を考えずに、ビジネス目的や課題といった抽象的な話題に終始するだけでは、AI開発は何も進みません。
探索的データ解析とは、モデルを構築する前に自分がどのようなデータを扱っているのか、そのデータはどういう状況にあるのかを理解するための作業です。データの規則性・関係性を把握するために、データを数え上げたり、可視化作業を行います。探索的データ解析はモデリングの精度を上げるために、非常に有効な分析プロセスです。
いよいよデータが集まってきたらやるべきことは、分析ではなく集計作業に取り組みましょう。数え上げるだけでわかることもたくさんあるからです。また、列(column)の意味を把握することと、行(index)に格納される値の種類と意味をしっかりと理解しましょう。このように、「◯◯日から◯◯日の間に何がいくつあるのか」といった「数え上げる」という基本を徹底しなければ、有効なAI開発は不可能です。
初学者は、数字に対する肌感覚・データの現状を把握するために、この基本的な集計作業から徹底しましょう。この作業だけでも十分にデータによる意思決定(判断)が可能だからです。
とはいえ、探索的データ解析は、集計をはじめとする基本統計量に加えて、様々な軸での集計、可視化を繰り返すことで、データ全体の姿を分析的・直感的に捉えようとするプロセスですので、もっと深く知りたい方は機械学習コンペのプラットフォームとして有名なKaggle1に登録して、世界中のデータサイエンティストがどのように探索的データ解析を行い、モデル構築まで進めているのかを見てみると良いでしょう。とても勉強になります。
モデリングのもとになるデータセットを作成します。モデルを構築するために必要な列と行だけを抽出した機械学習用のデータテーブルだと理解していただければ十分です。
実務では、1ファイルごとにデータ整形をするだけでなく、中間テーブル2などを多用して作成していきます。中間テーブルは関連テーブルとも呼ばれ、多対多のデータの関係を表すテーブルを意味しています。データベースを設計したことがない人にとっては専門的で難しいと思うので、参考リンクを下部に記載し、詳しい説明は割愛します。
最初のステップで取り組んだ目的設定と仮説が明確であれば、データセットを作ることは簡単です。目的設定の段階で機械学習用データセットの列名(収集したいデータ項目)に目星がついているはずだからです。
私は、ここがデータ分析を最短でデプロイするキーポイントだと考えています。
大企業が保有しているデータを活用してAIを作るときは、どこにどんなデータが存在しているのかを把握するだけで一苦労です。特に、異なる目的で作成されたデータテーブルについては、それらの中間テーブルを作ることすら困難な場合が少なくありません。実務でも、こうした学習用データセット準備のためのデータ抽出、整形などのステップに時間がかかります。ですから、今回のAIアプリ開発では、整形済みの学習用データセットから始められるように、オープンデータを活用してサンプルアプリを開発します。
みなさんがイメージしているデータサイエンスの醍醐味である機械学習を使ったデータ分析を行います。データ分析は、すでに各ステップの自動化も進んでいます。また、参考書籍やインターネット上にもたくさん情報がありますので、本書では手法の数学的背景には触れずに、分析のステップを詳しく説明します。
データから学習済み予測モデルを構築します。こだわればこだわるほど吟味できる部分ですので、試行錯誤ボリューム満点です。モデルの予測精度を向上させることは大切です。予測精度が低ければ、ただの人工無脳ですからね。
しかし、改善はデプロイ後にもできるため、本書ではアルゴリズム選定には時間をかけずに進めます。今回は、予測精度改善の優先順位を少し下げて、次のステップへ進みます。
使用した技術と実現したい目的によって、AIアプリケーションの定義は変わります。本書では予測モデルを組み込んだアプリケーションを、AI化されたAIアプリと定義します。今回は予測モデルをAPI化することによって、既存のアプリケーション内のシステムに組み込みます。本内容は、第4章から第7章にて詳細を説明します。
本書では、最短でここまで走りきることを目標にしています。モデルの予測精度向上は、そのあとに個人的に取り組むように構成しています。そのほうが、AIアプリ開発を途中で諦めたりすることがなくなると考えているからです。
一般に人工知能と呼ばれるものは、人間の目・耳・口の役割を機械化させたシステムを指します。目は画像認識、耳は音声認識、口は自然言語処理といえば聞いたことがあるのではないでしょうか。
それ以外にも、購買履歴データなどの数値データを使って機械学習によって予測モデルを作り、その予測結果からユーザーが意思決定できたり、今まで人がやっていたことをモデルに置き換えることができれば、これもまた立派なAIです。皆さんも本書で開発するサンプルアプリを応用して、魅力的なAIアプリを作ってみてください。