話題の記事

DataRobotで機械学習をしてみた

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、小澤です。

AI(人工知能)ブームですね。 そんな現代のAIの中核ともいうべき技術である機械学習を誰もが使えるようにする「機械学習の民主化」を実現するためのツールとして注目されているDataRobotを使ってみた、というのが今回の内容となります。

目次

機械学習・DataRobotとは?

DataRobotとは、機械学習を自動化してくれるプラットフォームです。 機械学習といえば、「これまで人間が頑張ってやってたことを機械が自動的にやってくれる」という風に考えている方も多いかもしれません。 機械学習を使ったシステムを導入するプロセスと合わせて、DataRobotを使うとどこが自動化されるのかを解説していきます。

機械学習を組み込んだシステムの作り方は必ずしもこれだけではありませんが、だいたい似たような感じになるかと思います。 また、図の中には様々な要素を入れ込んでいるので、「同じように四角で囲って文字書いてあるけど概念の粒度ちがわね?」と思われる方もいるかもしれません。 実際には、データやモデルのバージョン管理や指標の確認を行うための仕組みなどこのほかにも必要になる要素はありますが、割愛しています。

図中の全てを詳細に解説することはここでは行いませんが、ざっくりと見て行きましょう。 より詳しく知りたい方は参考[1][2][3]などを参照してください。

ビジネス課題

まずスタート地点としては、左上の「ビジネス課題を明確に定義する」部分になります。 ここで決めておくこととして

  • 実現したいことは何か
  • どんな定量的指標によって実現できているかを確認するか

といった要素が挙げられます。ビジネス"課題"と記載していますが、必ずしも困っていることである必要はなくビジネス展開上の次のステップとして実現したいこと、という風に考えることもできます。 これを元にして、具体的にどのような施策を行うべきかを掘り下げて行きます。

データの収集・確認・前処理

目的となるビジネス課題が明確になって、それを実現するための手段として機械学習を使ったシステムの構築が適切だとなった場合は、学習に利用できるデータを収集する必要があります。

データの収集という言葉を使うと、「うちにはすでに大量のデータが溜まってる」と思う方もいるかもしれません。 しかし、このプロセスでは以下のような項目を確認しておく必要があります。

  • データはすぐに利用可能な仕組みで提供されているか
  • データには今回のシステムで利用できそうなものが十分に含まれているか
  • データは機械学習で利用可能な形式に成形されているか
  • 現状溜まっているデータの量はどれくらいあるか
  • 今後どれくらいのペースでデータが溜まっていくのか
  • 機械学習を行うのに十分な量のデータを集めることが可能か

状況次第で他にも様々な項目が挙げられますが、最低限常に必要となる項目となります。 これらの仕組みが整っていないと、結局データをかき集めたり、前処理をしたりといった部分から始めることになります。

また、データの確認では仕組みが整っているかや活用できそうなデータであるかといった要素の他に、 データの分布など、性質を確認するプロセスも含まれます。 ここがおろそかになると、「なんの成果も得られませんでした」といった状態や「すでにわかっている性質しか出てこなかった」といった状況が発生します。

機械学習における「学習」

さて、ここまでかなり飛ばし飛ばしの内容となってしまいましたが、おそらくここからがみなさんが想像する(そして一番やりたい)機械学習のプロセスにようやく移って行きます。 このプロセスでは

  • 特徴抽出
  • モデル作成

の2つを行います。

特徴抽出は機械学習の経験がある人以外には少々イメージしづらい部分かもしれません。 ざっくりした解説としては、データを機械学習で利用するために数値化する方法と考えていただけるといいです。

  • 数値を特定の範囲に収まるように変換する
  • 男女を0と1に割り当てる
  • 曜日を月曜か否かを表す変数、火曜か否かを表す変数、...に分解する
  • 自由記入欄のテキストを単語に分割して各単語の出現回数を特徴にする
  • 欠損値の値を予測して割り当てる

などが挙げられます。 また、どのような特徴抽出が必要になるかはこの後行う学習時の手法によっても異なったります。

ここまで来ていよいよ、機械学習ができる状態になりました。 あとは学習させて完了です!...とはいきません。

学習をする際にも様々な手法が存在します。 さらにそれらのパラメータ設定も行う必要があります。 何を予測したいかによってある程度使える手法は限定されますが、それでも無数の手法の中からもっともいい結果が得られる手法とパラメータの組み合わせを発見する必要があります。

実はこの項目で解説した、2つの項目「特徴抽出」と「学習」を行なってくれるのがDataRobotの機能その1になります。 DataRobotでは、アップロードされたデータに対して、

  • データの性質を確認して必要な特徴に分解する
  • 数多くの手法を並列処理させて高速にもっともいい結果を出す手法を特定する

といったことが行えます。

学習結果の評価

機械学習で行えることは、あくまでも"予測"なので、全てを完璧に言い当てることはできません。 そのため、この予測がどれだけうまくいくのかを確認しておく必要があります。

このプロセスには予測性能や過学習の有無などが含まれます。 予測性能を計るための指標や過学習がどういったものなのかについての詳細は割愛します。 詳細は、機械学習の書籍などを漁ればだいたい書いてありますのでそちらの譲ります。 参考資料の[4][5]のようなWeb上で公開されているスライドもありますので、そちらも参照するといいかと思います。

学習したモデルの評価を行なってくれるのがDataRobotの機能その2となります。

機械学習における「予測」

モデルを作成して評価して、いい結果が得られたとしても利用されなければ意味がありません。 機械学習では、これから入ってくる未知のデータに対して予測を行う仕組みが必要になります。

実際の利用シーンとして、既存システムに新機能として組み込んでユーザが利用する際に予測結果を表示するようなものが考えられます。 オススメ商品のレコメンドなどがわかりやすい例でしょうか。

システムに組み込むといっても、機械学習は専門的な知識も必要になったりするので既存システムにモノリシックに組み込むことが難しい場合も多いです。 そのため、予測システムを独立して作成し、既存システムはAPIを使ってアクセスするなどといった方法が考えられます。 マイクロサービス的な考え方でもありますね。

機械学習の結果を使った予測システムをどのように作るかについては[1]が参考になります。

この予測システムをAPIとして提供する部分もDataRobotの機能その3となっています。 データ分析者はエンジニアではないことも多いため、本番環境で常に動き続けるシステムをしっかり作り込むのが難しいこともあります。 DataRobotを使った機械学習システムでは、この部分も含めて分析者が作り込むことなく利用可能なシステムとして機能してくれることになります。

機械学習プロジェクトの進め方とさらなる改善

最初に出した図でいくつか戻る方向の矢印がある点に気づいた方もいるかもしれません。 これは実際にやってみたけど、思うような成果が得られなかったといった場合にはモデルの変更だけではなく新たにデータを取集したり特徴抽出の方法を変えてみたりといったプロセスも必要になるためです。 場合によっては、ビジネス課題の解決のためにどのようなアプローチをとるのかと行ったテーマ設定自体を見直すことも必要になります。

また、機械学習は"今得られている"データの性質に基づいて未来を予測する仕組みになっています。 そのため、データの性質が変われば、適切な予測ができなくなります。 これには、市場の変化やユーザの行動が変化など様々な要因が含まれます。 そう行った変化に追随するためにはモデルのアップデートも必要になります。 そのため、一回作っておしまいということはなく、モデルを更新する仕組みや予測性能の監視のための仕組みも必要になります。

DataRobotを使ってみる

前置き(?)がかなり長くなってしまいましたが、ここまでで紹介したDataRobotの機能その1, 2, 3を実現する部分を実際に使ってみていきます。

データアップロードと性質の確認

まずは、機能その1をみていきます。 そのためにデータのアップロードが必要です。

右上のメニューにあるフォルダアイコンを選択して表示されるメニューから「新しいプロジェクトを作成」を選択します。

以下のような画面が表示されるので、データをアップロードします。 実際にデータが保存されている場所に合わせて利用する項目を選択します。

今回はローカルにあるファイルをドラッグ&ドロップでアップロードしてみました。 ファイルをアップロードすると右側に進捗が表示されます。

この段階で、データの性質を確認するための探索的データ解析までが行われているようです。 このプロセスが完了すると、データ中の予測対象となる変数を指定するフォームが表示されます。

ここによく対象となる変数名を直接入力してもいいのですが、画面下部にあるデータ内容を確認するためのリンクを選択すると以下のように データに含まれる変数の一覧が表示されます。

画像にあるように変数名を選択するとそのデータの分布などが確認できます。 また、この一覧から目的変数を選択することも可能です。

目的変数を設定すると、モデリング開始できる状態になります。

この状態で真ん中にある「開始」ボタンを押せば、学習を行なってモデルを作成する処理が開始されます。 その下にある「モデリングモード」で設定を以下の3つから選べるようです。

  • オートパイロット
  • クイック
  • 手動

デフォルトは、オートパイロットとなっていて、どのようなモデルを作成するかを自動で決めてくれます。 オートパイロットの工程を一部省くことによって、素早くモデリングを完了するモードのようです。 手動を選択した場合は、どの手法を使って学習を行うかを全て手動で設定するモードのようです。

学習の実行と評価値の確認

「開始」ボタンを押して学習をはじめてみます。

学習をはじめる、といってもこのプロセスで利用者側がやることは特にありません。 右側に進捗状況が表示されます。 最初にデータの分割や特徴抽出などの処理が行われているのが確認できます。

その後、ワーカーの数に合わせて順次各手法での学習が実行されていきます。 画像ではワーカー数が2となっているので、2つの処理が並列で行われ、それ以降はキューに入っている状態になっています。 ワーカー数を増やせば並列で実行する数がふえてくれるようです。

学習が終わると、各モデルの性能が確認できます。 上部のメニューから「モデル」を選択すると以下のような画面に切り替わります。

各モデルは、現在選択されている評価指標においていい結果を出した順に並べられているようです。 評価指標は、別なものを選択することも可能です。

実現したいことに合わせた指標で結果を確認するようにしましょう。 この結果をみて十分な性能が出ているか、あるいはデータや特徴を増やすなどで精度を向上させる必要があるかを判断します。 DataRobotを使うと、様々な手法で学習処理を行なっているので、データは今のままでも手法の変更によって精度向上が計れそうかといった点への考慮が省けることでしょう。

また、特定のモデルを選択することでそのモデルに関する説明などの確認可能です。

未知のデータに対する予測

学習を行なって、モデルの作成ができたので、最後にこのモデルを使って予測を行う部分をみてみましょう。 Web UI上から予測を行うには、モデルを選択した状態で、「予測」を押します。

以下のような画面が表示されるので、予測対象のデータをアップロードします。

アップロードしたデータに対して「予測を計算」したのち、完了するとダウンロードという項目が表示されるので予測結果をダウンロードできます。 ダウンロードしたデータには以下のように予測値の情報が含まれています。

おわりに

今回は、DataRobotを使って、データアップロード, 学習, 予測の一連の流れをやってみました。

まずは、「やってみた」ということでもっとも基本的な部分となるであろう一連の流れを試してみましたが、DataRobotにはまだまだ他にも様々な機能があるようです。 今後それらも紹介していければと思いますが、気になって待てないよ!という方は、公式ページ[6]なども参照してみてください。

参考

  1. 仕事ではじめる機械学習
  2. 戦略的データサイエンス入門
  3. データ解析の実務プロセス入門
  4. いまさら聞けない機械学習の評価指標
  5. 機械学習によるデータ分析まわりのお話
  6. DataRobot