なぜ機械学習なのか

私たちは、多くのデータに囲まれて生活しています。日々の通勤のなかでも、駅の自動改札機を通り、コンビニで買い物をし、スマートフォンでニュースを読む——これらすべての作業のなかでデータが作られていきます。さらに今後はさまざまなモノがインターネットにつながることにより、膨大かつ複雑なデータがこれまで以上に蓄積されるため、より効率的にデータを捌き、分析や判断を行うことが重要となります。

その手段として注目されているのが人工知能（AI）であり、人工知能（AI）を実現する手法のが機械学習やディープラーニングなのです。膨大なデータで溢れる世の中を賢く生きるために、機械学習を理解することの重要性は増していくでしょう。そこで本連載では、プログラミング言語Pythonを用いて実際に手を動かしながら機械学習に触れ、機械学習でどんなことができるのかを紹介していきます。専門性を問わず機械学習の世界に触れて頂けるよう、数式などは極力用いずに、実践的な部分を中心に説明するように心がけます。

機械学習とは

機械学習とは、コンピュータにデータを学習させ、特徴を導き出し、未来への予測・判断などに活用することです。機械学習は、「教師あり学習」、「教師なし学習」、「強化学習」の3つに分類でき、それぞれの学習方法ごとに、複数のアルゴリズムが存在します。まずは、3種類の学習方法の基本的な違いを説明していきます。

教師あり学習

教師あり学習とは、すでに正解のわかっているデータ(教師データ)をコンピュータに学習させた後、未知のデータに対して予測する手法で、大きく分けると「クラス分類」と「回帰」があります。

たとえば、自分がアプリ会社を運営しており、アプリへの課金を増やしたいと思っているとしましょう。クラス分類は、アクセス数や年齢等をもとに課金したかどうかを教師データとして与え、課金行動の特徴を学習させておくことで、課金してくれる顧客とそうでない顧客を分類できます。つまり、学習というのは分類するための境界線を引くことと同義です。さらに回帰は、顧客情報やイベント費用等に応じた顧客の課金額を教師データとして学習させておくことで、新規イベント開催時に顧客の課金額を予測できます。これらの違いは、答えの形であり、クラス分類は離散値(課金顧客か無課金顧客か)、回帰は連続値(課金額)となっています。

教師あり学習は、人間が教師データを用意して学習させるため、ある程度人間の期待する結果に近いものが得られることから、多くの場面で使用されています。一方で、教師データを用意しなくてはならず、データが不十分な場合には適用できません。

教師なし学習

教師なし学習とは、教師データを学習させずに与えられたデータから規則性などの意味のある情報を見つけ出す手法で、代表的なものとして「クラスタリング」があります。クラスタリングは、たとえば、店に来店する顧客の購入頻度や購入金額等をデータとして与え、顧客をいくつかのグループに分類し、顧客の特徴を把握するというものです。その分類の結果、購入頻度は少ないが、1回あたりの購入金額が大きい顧客グループを特定し、メールやチラシなどで来店を促す施策が可能になります。教師データが用意できない場面で非常に効果的で、探索的なデータ解析で多く使用されています。ただ、一方で、正解データがないため、モデルの精度が決められず、そのグループの分類が正しいかの判断ができません。

強化学習

強化学習は、一連の行動に対して報酬などの環境情報をコンピュータに与えて、どのような行動が最も報酬が高くなるかを学習していく手法です。教師あり学習が1つの行動に対して、正解・不正解を与えるのに対して、強化学習では一連の行動に対して報酬を与えるだけであり、コンピュータ自身が1つの行動に対する評価を行います。これはチェスや囲碁などの人工知能として活用されている例が有名で、勝利という報酬を得るために最も効果的な行動を自己学習していきます。

強化学習は、行動が多岐にわたり、行動に対する正解がはっきりしない場合に有効で、勝敗という明確な報酬を与えるだけで、最終的に勝利のための行動を学習させることができます。一方で、行動の数や組み合わせは膨大に存在し学習に時間がかかる点や、人間では理解できない非合理的な行動を選択するケースがある点に注意が必要です。

強化学習のイメージ図

以上のように、それぞれの学習方法には、適材適所が存在し、適切な学習方法を選択することはとても重要です。本連載では、比較的簡単にプログラミング可能な、教師あり学習、教師なし学習を中心に取り上げ、最後に強化学習に少しだけ触れます。

なぜPythonなのか

実際にプログラミングに取り組む前に、なぜPythonなのかに触れておきます。Pythonは非常にシンプルな言語で、少ないコード量で簡単にプログラムが書けるため、可読性が高く、プログラミング初心者でも習得しやすいです。さらに、昨今では機械学習や人工知能プログラムを簡単に利用できる数多くのライブラリが登場し、人気が高まっています。

次回以降は、プログラミング環境の構築を経て機械学習に触れて行きます。機械学習でよく例題として用いられるものとして、花の種類を分類するIrsiデータなどが存在します。こういった例は、機械学習のアルゴリズムのみを理解するのには予測精度も出て適しています。しかし、本連載では、あえてオープンデータを活用し、探索的に機械学習に取り組んでいこうと思います。それは、機械学習のために準備された綺麗なデータではなく、生きているデータを使用した方が、今後の機械学習ライフをよりイメージしやすく次の一歩を踏み出しやすいからです。未知なる課題に対して、コンピュータと共にどうやって解決していくかの姿勢が機械学習に取り組む際に最も重要な要因であると私は思っています。

今回は、機械学習の概要を説明しました。説明だけでは理解できない部分や退屈な部分もあると思いますが、次回からは、Pythonで機械学習を使用するための環境を構築し、実際に手を動かしながらPythonに触れていきます。一緒に、未知なる課題に取り組んでいきましょう。