teratail Report vol.4

2017/11/20

超高速!in-Databaseの機械学習とは

超高速!in-Databaseの機械学習とは

こんにちは。teratail Report編集部です。

“teratail Report”は、エンジニア一人一人の中に隠れている「貴重な情報」を、日本中のエンジニアに届けていくメディアです。技術の最前線を走るエンジニアたちの「考え方・捉え方・経験や思想」には、オンライン上には出てこない「貴重な情報」がたくさん隠れています。teratail Reportは、実際にエンジニアに接し、その根幹を明らかにしていきます。

第4弾となる今回は「機械学習」にフォーカス。機械学習は、IoT、ビックデータと並んでバズワードとしてたびたび取り上げられるようになりましたが、「データは蓄積しているが活用方法がわからない」「実践に耐えうるパフォーマンスが出ない」など、実際に導入して活用するまでにはさまざまな障壁があるように思います。

そこでteratail Report編集部は、10/26(木)渋谷ヒカリエで開催された技術イベント「ヒカ☆ラボ」(イベント詳細はこちら)に潜入。

日本オラクル社のスペシャリストの講演から、機械学習の基本、データの活用方法、実際にデータベースにアクセスしての分析方法の実践まで、最新の機械学習ノウハウを徹底取材!現場ですぐに導入できるナレッジたっぷりのイベントの全容を、余すところなくレポートしていきます!

- 大盛況となった会場の様子。機械学習という分野の盛り上がりを感じさせる。 -
- 大盛況となった会場の様子。機械学習という分野の盛り上がりを感じさせる。 -

超高速な機械学習をOracle Databaseで実現する方法

一般的に、機械学習は専用のツールやサービスを用い、データベースとは別のところでモデルを生成および適用します。そのため、これまでデータの拡散リスクや導入コストなどさまざまな課題がありました。今回は「in-Databaseの機械学習」というテーマで、データベース上のデータと同じ場所で機械学習する手法を使って、より簡単でより効果的な機械学習を紹介していきます。

なお、ディープラーニングについては本記事では言及しません。多層のニューラルネットワークをサポートするOracle R Advanced Analytics for HadoopというSpark上で動作するフレームワークについては公式サイトをご参照ください。

山中 遼太 氏

やまなか りょうた山中 遼太

日本オラクル Big Data & Analytics ソリューション部 エンジニア

オラクルのコンサルティング部門にてデータベースのエンジニアとして従事した後、退職してバイオインフォマティクスとゲノム科学の学位を取得。その後、日本オラクルに復帰し、現職にて機械学習やグラフ分析の製品担当として、ビッグデータ活用ソリューションの提案をリードしている。

  • Twitterアカウント
  • GitHubアカウント
  • Facebookアカウント

機械学習のこれまでと技術トレンド

機械学習というのはどういうものか、おさらいから始めてみましょう。

まず初めに人間の学習について考えてみると、一定のデータが貯まってくると、ある程度行動の予測を立てることができます。

例えばコンビニの店員をしていると、「若い女性はお菓子をよく買う」とか、「中年の男性は雑誌をよく買う」といったデータが貯まってきます。すると経験則から「新商品のお菓子は若い女性に売れそうだ」という「予測」を立てることができるようになります。

この予測を導く部分が「分類モデル」といえますが、人間の学習の場合、経験や記憶といった曖昧な分析も多く含むことになります。

機械学習においては、過去の購買データなどの「教師データ」を与え、データに対して「機械学習アルゴリズム」を実行すると「分類モデル」が関数のかたちで生成され、新規顧客に対する「予測」ができるようになります。

この「アルゴリズム」と「モデル」が機械学習の重要な要素です。アルゴリズムには重回帰、決定木、SVM(Support Vector Machine)などさまざまなものあり、対象や予測データなどに合わせて適した方法を用います。

機械学習の歴史は古く、1950〜60年ごろから決定木などのアルゴリズムは存在していました。わかりやすく扱いやすいアルゴリズムで未だ多く使われていますが、2000年代から流行している機械学習の文脈では、SVMやニューラルネットワークなどの新しいアルゴリズムが使われることが増えています。

今回の紹介では主に「決定木」のアルゴリズムを例に見ていきます。決定木では、例えば性別・年齢・利用金額などの「顧客データ」と、購買した/していないという「購買データ」を用いて、どの組み合わせのときに購買した/していないという「組み合わせの出現率」から予測を立てることができます。

上図からわかるように、過去の顧客データからモデルを生成するところまでは一定のコストがかかりますが、一度モデルを作ってしまったあとは新規顧客それぞれに適用していくことが可能です。

人間だと記憶・経験の範囲内の予測になる一方で、機械学習の強みは何百万行といった膨大なデータを基に精度の高い予測を高速で立てられることにあります。その学習のために大量のデータが必要になってきます。

- セーリングのオラクル・チームUSAのパーカを着て講演を行う山中氏 -
- セーリングのオラクル・チームUSAのパーカを着て講演を行う山中氏 -

今までとは何が違う?「データベースで機械学習」のメリット

今回のテーマである「データベースで機械学習」はこれまでと何が違い、どんなメリットがあるか見ていきたいと思います。

まず旧来主流であった「データベースで行わない機械学習」では、通常RやPython、SAS、SPSSなどの機械学習ツールを利用するためにデータベースのデータをダウンロードし、分析用サーバなどに載せる「データの移動作業」が必要でした。

それに加えて典型的な統計解析ツールの導入には、分析用のハードウェア、ソフトウェア導入のコストや、顧客データと分析データが離れることによるコミュニケーションコスト、分析前後のデータなどが拡散するというセキュリティリスクといった部分が障壁となります。

そこで、データが存在する場所でそのまま機械学習してしまおうという発想で「in-Databaseの機械学習」が登場し、徐々に一般的になってきました。

データのある場所で分析するため、データ移動やハードウェア・ソフトウェア導入のコストは不要。また、データが一箇所に統合されるため、セキュリティリスクを抑えることが可能になります。

今回ご紹介するOracle Databaseでは、in-Database分析ができるのでデータの移動が不要です。またSQLで学習用データを処理できるので前処理が容易で、効率的に機械学習に移れるようになります。

また、パラレル処理やインメモリ機能、GUIの導入で処理効率が上がり、もちろん、物理サーバでは難しかった拡張もクラウド上なら容易です。

分析のワークフロー、分析後のデータも同じ場所に蓄積していけるので、同様にSQLで取得できるようになります。これまで乖離しがちであった顧客データと分析結果データの相互のフィードバックが容易になります。

それでは実際にサンプルデータを使って、Rでの機械学習とin-Databaseでの機械学習を比較していきましょう!

実践で学ぶin-Database分析

まずはRでやってみる

今回は保険会社の顧客データと仮定して、「新規顧客リストから加入してくれる可能性の高い人を探す」という分析を試してみます

前述した通り、Rを使っての機械学習をするためにまず顧客データのダウンロードが必要になります。通常はCSVにダウンロードし再度アップロードし……といった手順を取りますが、今回はOracle R Enterprise(ORE)を使って手軽に試してみます。

`library(ORE);`でライブラリを読み込むと、オラクルのデータベースに接続できます。ここまでは無料のドライバと同様ですが、`ore.connect()`メソッドを使うと、オラクルのデータベースユーザに接続し、データベース上の表データを参照したり取得したりすることができます。

`ore.ls()`コマンドでデータベース上のデータを確認でき、`ore.pull()`でデータを取得してくれば瞬時にアルゴリズムを実行できるようになります。

試しに1015人分の顧客データに対して決定木のアルゴリズムを実行してみます。`library(rpart)`で決定木のライブラリを読み込み、上記で取得した顧客データに実行してみます。このとき、顧客IDや氏名といった統計に関係ない一意のデータは、学習させても意味がないので除外します。

1000人程度のデータであれば瞬時に実行完了でき、ライブラリを使って可視化も簡単です。ただし少ないデータに対して決定木の階層が深すぎるとあまり意味のない分類になってしまうので、`maxdepth`で4階層に制限しておきます。

まず銀行預金(BANK_FUN)が270ドル以下の人は買う可能性が少ない/270ドル以上の人は買う可能性が高いという分類ができ、その中からさらに分類し……という決定木のツリーができました。この規模の計算であれば実行プロセスの使用メモリもそれほど大きくなく、実行時間もさほどかかりません。

そこで今度は100万行ほどのデータで実行してみます。本来は不要ですが、ここでは`ore.create()`という簡単にテーブルを指定してデータを入れることができるコマンドを紹介しています。Oracle DatabaseではRを使う場合でも簡単にデータベース上のデータを出し入れすることが可能です。

再度100万行ほどのデータに対してアルゴリズムを実行すると、今度は5分以上かかってしまう結果となります。Rはシングルスレッドで実行されるため、データ量が増えただけ実行時間も増えてしまいます。

- 実際のデータを使用したライブコーディングに沸く会場 -
- 実際のデータを使用したライブコーディングに沸く会場 -

in-Database分析を実践

今度はin-Database分析を試していきましょう。Oracle DatabaseにはPL/SQL(Oracle Database向けのSQL拡張言語)に大きな処理をするためのファンクションが用意されており、`DBMS_DATA_MINING`ファンクションではアプリオリアルゴリズム(ASSOCIATION)、クラスタリングや特徴抽出、分類(CLASSIFICATION)、回帰(REGRESSION)など代表的な機械学習の手法をサポートしています。

Oracle Databaseの11以降ではGUIをサポートしており、データベースにあまり詳しくないような営業職などの方も利用しやすくなっています。

SQL Developerというデータベース管理者用ツール上の「Data Miner」という機能はGUIのみで利用でき、ここから新規にワークフローを作成、実行します。

パラレル処理、インメモリなどのオプションも調整でき、高速にアルゴリズムを実行することが可能になります。データの前処理から機械学習によるモデルの生成と適用を含むワークフローはデータベースに格納されるので、ジョブ実行をスケジュールすることもできます。

実際の手順ではGUIでデータベースからデータを選択し、アルゴリズムを選択し、予測するターゲット(今回は買うか買わないか)を選択することでアルゴリズムを実行することができます。

分類アルゴリズムでは2値分類、多値分類の予測が、回帰アルゴリズムの場合は連続値が取得でき、パラレルで実行するので処理も高速です。

生成されたモデルはそのまま新規顧客データに適用でき、この予測結果を表に書き出すことができます。

一度表に出力してしまえば、SQLで参照できるようになるので予測結果を表示させたり確度順に表示させたりするようなアプリケーションの構築も容易です。

- アルゴリズムを使って「保険を購入する可能性」を判定 -
- アルゴリズムを使って「保険を購入する可能性」を判定 -

まとめ

in-Databaseでの機械学習のアルゴリズムはさまざまありますが、今回は主に決定木を利用した機械学習の手法を紹介しました。

最近注目を浴びている異常検出のアルゴリズムは、特にデータ量が少ないときなどにはOne Class SCMで効果的に実行することができます。相関ルールでは商品や顧客などデータが膨大になるほど組み合わせが増えていくので、分散処理をするときにin-Databaseの効果が色濃く出てきます。

一度in-Databaseで機械学習のシステムを構築しておくと、生成したモデルを利用して予測結果をシステムに組み込んだり、それを元にしたフィードバックを戻すことでさらに分析精度が向上したりというようにPDCAのサイクルがまわるようになります。

- 講演後の懇親会でも質問が絶えない -
- 講演後の懇親会でも質問が絶えない -

公式情報をキャッチアップ

最新情報を発信しているアカウントをフォローして、機械学習のトレンドをキャッチアップしましょう!

資料について

当日の発表資料は下記でご覧になれます。機械学習の基本やインデータベース機械学習のメリット、実践方法などがわかりやすく説明されているので是非ご覧ください。

おわりに

機械学習、ビッグデータなど蓄積されたデータの活用がトレンドですが、導入へのコストやリスクを鑑みて敬遠しがちではないでしょうか。今回紹介されたように、Oracle Databaseをフルに活用することで、エンジニア職、営業職、ひいては企業にとってもかなり低いハードルで、既存のナレッジを用いて最新の機械学習を導入することができそうだと感じました。

- 懇親会参加者を交えた集合写真 -
- 懇親会参加者を交えた集合写真 -

それでは、また次回の”teratail Report”をお楽しみに!